资源描述:
《24C04模拟IIC读写程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、SCLBITP1.7;定义24C02的串行时钟线SDABITPl.6;定义24C02的串行数据线ORG00HSTART:MOVR1,#20H;数据保存地址MOVR7,#120;取数据的个数・・**********************************CALLFIRST;开始命令MOVA,#0A0H;写器件地址CALLSUBS.■9n»Tw<
2、WrT>91%rYwrTw»TwrTw»Tw<
3、WrTw»Tw91%rYwrTw»TwrjwrTw»Tw<
4、WrYw91%”MOVA,#00h;所要读的器件的地址CALLSUBS•■r
5、wrj^rj*rjwrjw
6、r
7、^ejwrjwrj^rj^rj*r
8、^r
9、wrj^rj*rjwrjwr^r
10、^ejwrjwrj*rj^rj^rj^rj*rjw”CALLFIRST;开始命令MOVA,#OA1H;开始读数据CALLSUBS%£>•上・上^lf•■”WIN:CALLSUBRMOV@RI,AINCR1DJNZR7.WINCLRSDACALLDELAYSETBSCLCALLDELAYSETBSDAJMP$SUBR:MOVR0,#08HLOOP2:SETBSCLCALLDELAYMOVC,SDARLCACLRSCLCALLDELAYDJNZRO,LOOP2CJNER7,#OOh,LOWl;改S
11、ETBSDAJMPCLIMBERLOW1:CLRSDACLIMBER:CALLDELAYSETBSCLCALLDELAYCLRSCLCALLDELAYSETBSDARETSUBS:MOVR5,#08HLOOP:CLRSCLRLCAMOVSDA,CNOPSETBSCLCALLDELAYDJNZR5,LOOPCLRSCLCALLDELAYSETBSCLREP:MOVC,SDAJCREPCLRSCLRETDELAY:NOPNOPRETFIRST:SETBSDASETBSCLCALLDELAYCLRSDACALLDELAYCLRSCL;开始传数据RETENDI2C驱动24c04程
12、序mugenwon发表于2007-5-2315:26:00看到很多人在找24Cxx的程序,找了乂用不了,T脆拿自己的分享算了。以下代码功能极其强人,而且使用方便,基木上改几个参数,直接调用就行。至于原理说起來就太长了,只好白己消化吸收。只能用24c01A〜24C16A系列,容量超过的不行/*本程序可以一次读和写最多256个字节数据,超岀会发牛卷页,即从Oxff回到0x00继续写或者读,请注意本子程序使用方法如下:先把卜血的#definenumbyte改为对MIC型号调用Write_Flash()和Read_Flash()前,先把page07填好对应的页数,下面的函数声明处
13、有说明需要在主程序处定义一些参数,如下:bitf_rom;//eprom应答标志,=1不应答ucharxdataepromerr;〃用来统计写入岀错的次数uintxdataepadd;〃用来作为rom口标写入的首地址,要进行计算ucharxdatapage07;〃每256个字节当一页,请注意不耍写错页ucharxdata*ncon;〃用来处理写入或读入的缓存地址ucharxdatalenI;//rom笫一段数据长度,看eprom.cucharxdatalen2;//rom屮间段数据页数,看eprom.cucharxdatalen3;//rom末尾段数据长度,看eprom.
14、c如果不川外部存储器件,把关键字xdata去掉,然后再修改Write_Hash()和Read_Flash()的声明部分参数*/〃定义使用的IC,容量超过了这些IC就不能用了#defined_24c01a8〃定义IC每一页的字节数#defined_24c028#defined_24c0416#defined_24c08a16#defined_24cl6a16#definenumbyte_paged_24cl6a#defineWriteDeviceAddressOxaO//写驱动地址指令#defineReadDeviceAddressOxal〃读驱动地址指令voidnod2(
15、){unsignedchari;//4.6us延时for(i=0;ivl3;i++)_nop_();}/*功能:发起始信号*/voidStart_Cond()SDA=1;nod2();SCL=1;nod2();SDA=O;nod2();SCL=O;nod2();功能:发停止信号voidStop_Cond(){SDA=0;nod2();SCL=1;nod2();SDA=1;nod2();SCL=0;功能:发确认信号*/voidAck(){SDA=0;nod2();SCL=1;nod2();SCL=0;nod2();SDA=1;n