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