標題: 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