1、I I2 2C C 总线芯片总线芯片 AT24C02AT24C02 程序设计(精简版)程序设计(精简版)#include#define uchar unsigned charsbit sda=P20;sbit scl=P21;uchar a;void 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()/应答,在数据传送 8 位后,等待或者发送一个应答信号uchar
2、 i;scl=1;delay();while(sda=1)&(i250)i+;scl=0;delay();void init()/初始化函数,拉高 sda 和 scl 两条总线sda=1;scl=1;/*/*根据数据有效性规则,读写数据时必须将 SCL 拉高,然后送入或读出数据,完毕后再将SCL 拉低*/*/void write_byte(uchar date)/写一字节,将 date 写入 AT24C02 中uchar i;scl=0;for(i=0;i8;i+)date=date1;sda=CY;/将要送入数据送入 sdascl=1;/scl 拉高准备写数据delay();scl=0;/s
3、cl 拉低数据写完毕delay();uchar read_byte()/读取一字节,从 AT24C02 中读取一个字节uchar i,k;for(i=0;i8;i+)scl=1;/scl 拉高准备读数据delay();k=(k0;a-)for(b=100;b0;b-);/*/*读出与写入数据时必须严格遵守时序要求*/*/void write_add(uchar address,uchar date)/向 AT24C02 中写数据start();write_byte(0 xa0);respons();write_byte(address);respons();write_byte(date);r
4、espons();stop();uchar read_add(uchar address)/从 AT24C02 中读出数据uchar date;start();write_byte(0 xa0);respons();write_byte(address);respons();start();write_byte(0 xa1);respons();date=read_byte();stop();return date;void main()init();/初始化 AT24C02write_add(23,0 x55);/在 23 地址处写入数据 0 x55;delay1(100);P1=read_add(23);/读出地址为 23 处的数据while(1);