通用的24c01-24c256共9种eeprom的字节读写操作程序

上传人:子 文档编号:45960547 上传时间:2018-06-20 格式:DOC 页数:8 大小:14.80KB
返回 下载 相关 举报
通用的24c01-24c256共9种eeprom的字节读写操作程序_第1页
第1页 / 共8页
通用的24c01-24c256共9种eeprom的字节读写操作程序_第2页
第2页 / 共8页
通用的24c01-24c256共9种eeprom的字节读写操作程序_第3页
第3页 / 共8页
通用的24c01-24c256共9种eeprom的字节读写操作程序_第4页
第4页 / 共8页
通用的24c01-24c256共9种eeprom的字节读写操作程序_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《通用的24c01-24c256共9种eeprom的字节读写操作程序》由会员分享,可在线阅读,更多相关《通用的24c01-24c256共9种eeprom的字节读写操作程序(8页珍藏版)》请在金锄头文库上搜索。

1、通用的通用的 24C01-24C25624C01-24C256 共共 9 9 种种 EEPROMEEPROM 的字节读写操作程序的字节读写操作程序通用的 24C0124C256 共 9 种 EEPROM 的字节读写操作程序 一个通用的 24C0124C256 共 9 种 EEPROM 的字节读写操作程序,此程序有五个入口条件,分别为读写数据缓冲区指针,进行读写的字节数,EEPROM 首址,EEPROM 控制字节,以及 EEPROM 类型。此程序结构性良好,具有极好的容错性,程序机器码也不多:#pragma ot(6,SIZE)#include #include #define ERRORCOU

2、NT 10sbit SDA=P00;sbit SCL=P01;enum eepromtype M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256;enum eepromtype EepromType;/DataBuff 为读写数据输入输出缓冲区的首址/ByteQuantity 为要读写数据的字节数量/Address 为 EEPROM 的片内地址/ControlByte 为 EEPROM 的控制字节,具体形式为(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中 R/W=1,/表示读操作,R/W=0 为写操作,A2,A1,A

3、0 为 EEPROM 的页选或片选地址;/EepromType 为枚举变量,需为 M2401 至 M24256 中的一种,分别对应 24C01 至 24C256;/函数返回值为一个位变量,若返回 1 表示此次操作失效,0 表示操作成功;/ERRORCOUNT 为允许最大次数,若出现 ERRORCOUNT 次操作失效后,则函数中止操作,并返回 1/SDA 和 SCL 由用户自定义,这里暂定义为 P00 和 P01;/其余的用户不用管,只要把只子程序放在你的程序中并调用它就可以了;/*/bit RW24XX(unsigned char *DataBuff,unsigned char ByteQua

4、ntity,unsigned int Address,unsigned char ControlByte,enum eepromtype EepromType)void Delay(unsigned char DelayCount);void IICStart(void);void IICStop(void);bit IICRecAck(void);void IICNoAck(void);void IICAck(void);unsigned char IICReceiveByte(void);void IICSendByte(unsigned char sendbyte);unsigned c

5、har data j,i=ERRORCOUNT;bit errorflag=1;while(i-)IICStart();IICSendByte(ControlByteif(IICRecAck()continue;if(EepromTypeM2416)IICSendByte(unsigned char)(Address8);if(IICRecAck()continue;IICSendByte(unsigned char)Address);if(IICRecAck()continue;if(!(ControlByteerrorflag=0; /*clr errorflagwhile(j-)IICS

6、endByte(*DataBuff+);if(!IICRecAck()continue;errorflag=1;break;if(errorflag=1)continue;break;elseIICStart();IICSendByte(ControlByte);if(IICRecAck()continue;while(-ByteQuantity)*DataBuff+=IICReceiveByte();IICAck();*DataBuff=IICReceiveByte(); /read last byte dataIICNoAck();errorflag=0;break;IICStop();i

7、f(!(ControlByteDelay(255);Delay(255);Delay(255);return(errorflag);/*以下是对 IIC 总线的操作子程序*/*启动总线*/void IICStart(void)SCL=0; /SDA=1;SCL=1;_nop_();_nop_();_nop_();SDA=0;_nop_();_nop_();_nop_();_nop_();SCL=0;SDA=1; /*停止 IIC 总线*/void IICStop(void)SCL=0;SDA=0;SCL=1;_nop_();_nop_();_nop_();SDA=1;_nop_();_nop_

8、();_nop_();SCL=0;/*检查应答位*/bit IICRecAck(void)SCL=0;SDA=1;SCL=1;_nop_();_nop_();_nop_();_nop_();CY=SDA; /因为返回值总是放在 CY 中的SCL=0;return(CY);/*对 IIC 总线产生应答*/void IICACK(void)SDA=0;SCL=1;_nop_();_nop_();_nop_();_nop_();SCL=0;_nop_();SDA=1;/*不对 IIC 总线产生应答*/void IICNoAck(void)SDA=1;SCL=1;_nop_();_nop_();_no

9、p_();_nop_();SCL=0;/*向 IIC 总线写数据*/void IICSendByte(unsigned char sendbyte)unsigned char data j=8;for(;j0;j-)SCL=0;sendbyte=1; /无论 C51 怎样实现这个操作,始终会使 CY=sendbyte7;SDA=CY;SCL=1;SCL=0;/*从 IIC 总线上读数据子程序*/unsigned char IICReceiveByte(void)register receivebyte,i=8;SCL=0;while(i-)SCL=1;receivebyte=(receivebyte1)|SDA;SCL=0;return(receivebyte);/*一个简单延时程序*/void Delay(unsigned char DelayCount)while(DelayCount-);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号