I2C总线芯片AT24C02程序设计(精简版)#include#defineucharunsignedcharsbitsda=P2^0;sbitscl=P2^1;uchara;voiddelay()//延时函数{;;}voidstart()//开始信号{sda=1;delay();scl=1;delay();sda=0;delay();}voidstop()//停止{sda=0;delay();scl=1;delay();sda=1;delay();}voidrespons()//应答,在数据传送8位后,等待或者发送一个应答信号{uchari;scl=1;delay();while((sda==1)&&(i<250))i++;scl=0;delay();}voidinit()//初始化函数,拉高sda和scl两条总线{sda=1;scl=1;}/*****************************************************************************//*根据数据有效性规则,读写数据时必须将SCL拉高,然后送入或读出数据,完毕后再将SCL拉低*//*****************************************************************************/voidwrite_byte(uchardate)//写一字节,将date写入AT24C02中{uchari;scl=0;for(i=0;i<8;i++){date=date<<1;sda=CY;//将要送入数据送入sdascl=1;//scl拉高准备写数据delay();scl=0;//scl拉低数据写完毕delay();}}ucharread_byte()//读取一字节,从AT24C02中读取一个字节{uchari,k;for(i=0;i<8;i++){scl=1;//scl拉高准备读数据delay();k=(k<<1)|sda;//将sda中的数据读出scl=0;//scl拉低数据写完毕delay();}returnk;}voiddelay1(ucharx)//延时程序,放在写入与读出直接{uchara,b;for(a=x;a>0;a--)for(b=100;b>0;b--);}/*******************************************************************//*读出与写入数据时必须严格遵守时序要求*//******************************************************************/voidwrite_add(ucharaddress,uchardate)//向AT24C02中写数据{start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date);respons();stop();}ucharread_add(ucharaddress)//从AT24C02中读出数据{uchardate;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();returndate;}voidmain(){init();//初始化AT24C02write_add(23,0x55);//在23地址处写入数据0x55;delay1(100);P1=read_add(23);//读出地址为23处的数据while(1);}