|
開場白------本人年過五十二了年邁的父母已經(jīng)離去。孩子也已經(jīng)工作三年也不用我多余操心 。小生意也清淡這下算有時間來搗鼓搗鼓我的業(yè)余愛好,本人愚笨沒有棋牌類的大眾愛好,駕車技術(shù)也不好自然自駕游就沒興趣了。想來想去還是做一個老宅男在家里做一些小電路實驗。這也算滿足自己的好奇心吧。動手動腦遠離老年癡呆癥哈哈哈哈。。。。 由于從小就愛好自然電子垃圾很多于是開始了。。。。。
言歸正傳,想來想去還是從單片機I2c開始吧。找到吃灰的stc12c5608ad ,洞洞板,于是乎搭建最小系統(tǒng),下載軟件就開始I2c 之旅。選stc主要是下載方便,一個usb轉(zhuǎn)串口就可以下載了。
先是看I2c的協(xié)議,開始不太明白,看了幾天有了些理解,時序很重要弄清楚了。對今后的實驗有好處。語言就用c51,編譯器用keil
編了幾段程序試了一下基本按照我的思路運行。注意的事項是,啟動器件,器件地址,讀寫命令。
//***********I2C********* //
#include <STC12C56.H>
int k,i,j,n; //定義全局變量
void yanshi() ; // 延時程序
void qidong(); //啟動程序
void pz(); //器件地址
void songshu(); // 送器件地址
sbit sda=P2^4;
sbit scl=P2^5; void songshu() //送器件地址
{ int b, a=0x80,c=0xa0 ,d=0xff;
scl=0; //這一定要
yanshi() ;
for(b=0;b<8;b++) //要送數(shù)據(jù)長度為8位/
{ if((c<<b)&0x80) //判斷發(fā)送位/
sda=1;
else sda=0;
yanshi( );
P20=0;//送一個數(shù)閃一次
scl=1 ;
yanshi();
scl=0;
P20=1;
}
yanshi();
sda=1;
yanshi();
scl=1;
P20=0;
yanshi();
if(P24==0)
P20=0; //方便觀察應(yīng)答
else P20=1;
}
void pz() //基礎(chǔ)實驗,死辦法一個個的送,在第9個上會收到應(yīng)答
{ scl=0; //1
yanshi();
sda=1;
P20=0;
yanshi();
P20=1;
scl=1;
yanshi();
scl=0; //2
yanshi();
sda=0;
P20=0;
yanshi();
P20=1;
scl=1;
yanshi();
scl=0;
yanshi(); //3
sda=1;
P20=0;
yanshi();
P20=1;
scl=1;
yanshi();
scl=0;
yanshi();
sda=0; //4
P20=0;
yanshi();
P20=1;
scl=1;
yanshi();
scl=0;
yanshi();
sda=0; //5
P20=0;
yanshi();
P20=1;
scl=1;
yanshi();
scl=0;
yanshi();
sda=0; //6
P20=0;
yanshi();
P20=1;
scl=1;
yanshi();
scl=0;
yanshi();
sda=0;
P20=0; //7
yanshi();
P20=1;
scl=1;
yanshi();
scl=0;
yanshi();
sda=1;
P20=0; //8
yanshi();
P20=1;
scl=1;
yanshi();
scl=0;
yanshi();
sda=1;
yanshi();
scl=1;
if(P24==0)
P20=0; //9
else P20=1;
}
void yanshi()//延時程序
{ for(n=1;n<=1000;n++)
{ P21=0;
for(j=1;j<=10;j++)
P21=1;
}
}
void qidong() //啟動程序
{ scl=1;
sda=1;
yanshi() ; // 調(diào)用延時程序
sda=0;
yanshi();
}
void main(void)
{ qidong(); //調(diào)用啟動
songshu();
while(1);
}
程序中用了大量的延時是為了方便調(diào)試,在P20口接了一個發(fā)光管觀察,嘿嘿程序灌進去運行一下看見了。。。。。。明天繼續(xù)學(xué)習(xí)
|
|