AT24C08的IIC通信协议.ppt
文本预览下载声明
AT24C08的IIC通信协议 编程实例 主发送程序设计 主接收程序设计 IIC中断程序 测试程序 * 1、单字节写操作? START-发送器件地址-ack-发送字节地址-ack-发送数据-ack?-?STOP ?? 按“页”写操作,“页”是指高位地址一样一组数据,对于24C01/02/04/08/16,一页数据为16字节,一页指高四位地址一样的一组数据。? START-发送器件地址-ack-发送页首地址-ack-发送数据-ack.........-?发送数据-ack?-?STOP 当前单字节读操作,“当前”指的是前面进行过读操作,但是没有STOP,芯片内部“指针”指的字节即为“当前”字节。? START-发送器件地址(读)-ack-接收数据-no ack-STOP 随机单字节读操作? START-发送器件地址(写)-ack-发送字节地址-ack-START-发送器件地址(读)-ack-接收数据-no ack-STOP 当前连续字节读操作? START-发送器件地址(读)-ack-接收数据-ack-接收数据??-ack...............接收数据(最后字节)-no ack-STOP 随机连续字节读操作? START?-发送器件地址(写)-ack-发送字节首地址-ack-START-发送器件地址(读)-?ack-接收数据-ack-接收数据-ack.........接收数据(最后字节)??-noack-STOP? #define WRDATA (1) //写操作 #define POLLACK (2) //返回ACK操作 #define RDDATA (3) //读数据操作 #define SETRDADDR (4) //设置地址操作 #define IICBUFSIZE 0x20 //数据缓冲大小 static U8 _iicData[IICBUFSIZE]; //数据缓存 static volatile int _iicdataCount; //数据计数 static volatile int _iicStatus; //数据状态 static volatile int _iicMode; //操作状态 static int _iicPt; void Wr24c080(U32 slvaddr,U32 addr,U8 data) { _iicMode = WRDATA; _iicPt = 0; _iicData[0] = (U8)addr; _iicData[1] = data; _iccDataCount = 2; rIICDS = slvAddr; //器件地址 0xa0 rIICSTAT = 0xf0; //主发送,开始 while(_iccDataCount!=-1); _iccMode = POLLACK; while(1) { rIICDS = slvAddr; _iicStatus = 0x100; rIICSTAT = 0xf0; //主发送,开始 rIICCON = 0xaf; //Resumes IIC operation while(_iicStatus == 0x100); if(!(_iicStatus0x1))break; //接收到ACK } rIICSTAT = 0xd0; //Stop MasTx condition rIICCON = 0xaf; //Resumes IIC operation Delay(1); //Wait until stop condtion is in effect } voi
显示全部