一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; } |
|