收藏 分享(赏)

通用的24C01-24C256共9种EEPROM的字节读写操作程序.doc

上传人:hskm5268 文档编号:12271856 上传时间:2021-12-08 格式:DOC 页数:8 大小:29KB
下载 相关 举报
通用的24C01-24C256共9种EEPROM的字节读写操作程序.doc_第1页
第1页 / 共8页
通用的24C01-24C256共9种EEPROM的字节读写操作程序.doc_第2页
第2页 / 共8页
通用的24C01-24C256共9种EEPROM的字节读写操作程序.doc_第3页
第3页 / 共8页
通用的24C01-24C256共9种EEPROM的字节读写操作程序.doc_第4页
第4页 / 共8页
通用的24C01-24C256共9种EEPROM的字节读写操作程序.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

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

2、m 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,A0 为 EEPROM 的页选或片选地址;/EepromType 为枚

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

4、d 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 char data j,i=ERRORCOUNT;bit errorf

5、lag=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-)IICSendByte(*DataBuff+);if(!IICRecAck(

6、)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();if(!(ControlByteDelay(255);Delay(25

7、5);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_();_nop_();SCL=0;/*检查应答位*/bit IICR

8、ecAck(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_();_nop_();_nop_();SCL=0;/*向 IIC 总线写数据*/

9、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-);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报