標題: IIC總線操作AT24C02芯片詳解 [打印本頁]
作者: dagu 時間: 2014-12-25 23:58
標題: IIC總線操作AT24C02芯片詳解
一IIC總線操作規(guī)范
起始和終止信號 :SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。
數(shù)據(jù)傳送格式: 每一個字節(jié)必須保證是8位長度。數(shù)據(jù)傳送時,先傳送最高位(MSB),每一個被傳送的字節(jié)后面都必須跟隨一位應答位(即一幀共有9位)。如果一段時間內(nèi)沒有收到從機的應答信號,則自動認為從機已正確接收到數(shù)據(jù)。
二.AT24C02芯片定義和功能
該芯片是一個有2K(256*8)存儲單元的EEPROM.1010為固定,A0,A1,A2正好與芯片的1,2,3引角對應.對通過這三個引腳設定可編程地址.若這三個引腳都接地,則地址如下圖片:
在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() //回應信號
{
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;
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |