一IIC總線操作規(guī)范
起始和終止信號 :SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。 數(shù)據(jù)傳送格式: 每一個字節(jié)必須保證是8位長度。數(shù)據(jù)傳送時,先傳送最高位(MSB),每一個被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位)。如果一段時間內(nèi)沒有收到從機的應(yīng)答信號,則自動認(rèn)為從機已正確接收到數(shù)據(jù)。
二.AT24C02芯片定義和功能 該芯片是一個有2K(256*8)存儲單元的EEPROM.1010為固定,A0,A1,A2正好與芯片的1,2,3引角對應(yīng).對通過這三個引腳設(shè)定可編程地址.若這三個引腳都接地,則地址如下圖片:
在IIC總線上讀寫AT24C02要遵循以下規(guī)范
三,程式實例 void init() //初始化
{
SCL=1;
delay();
SDA=1;
delay();
}
void start() //啟動信號
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
void stop() //停止信號
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
void respons() //回應(yīng)信號
{
uchar i=0;
SCL=1;
delay();
while((SDA==1)&&(i<255))i++;
SCL=0; delay();
} void writebyte(uchar date)// 寫一個字節(jié)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
} uchar readbyte() //讀一個字節(jié)
{
uchar i,j,k;
SCL=0;
delay();
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
delay();
if(SDA==1)
j=1;
else
j=0;
k=(k<<1)|j;
SCL=0;
delay();
}
delay();
return k;
}
Void write_add(uchar address,uchar info) //指定地址寫一個字節(jié)數(shù)據(jù)
{
start();
writebyte(0xa0);
respons();
writebyte(address);
respons();
writebyte(info);
respons();
stop();
}
uchar read_add(uchar address) //指定地址讀一個字節(jié)數(shù)據(jù)
{
uchar dd;
start();
writebyte(0xa0);
respons();
writebyte(address);
respons();
start();
writebyte(0xa1);
respons();
dd=readbyte();
stop();
return dd;
}
|