90c51汇编c51IIC总线EEPROM.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
90c51汇编c51IIC总线EEPROM

/*********************************** 【ilong 编写 e-mail:lyj051031448@163.com qq:825240885】 【功能】 IIC对EEPROM 的读写 【参数与说明:】 P2.0:SCK P2.1:SDA P2.2:WP 30H :要写的数据的首地址 31H :要写的数据的长度 32H :EEPROM 写数据的首地址 33H :读的数据保存的首地址 34H :读的数据长度 35H :EEPROM 读数据的首地址 36H :从机地址 高四位(选从机类型)为“1010”(EEPROM), 低四位的前三位(A2,A1,A0)为选从机地址, 最后位为0,由程序设置要写,还是要读 【问题】:写操作时,只有在停止总线后,EEPROM才回将其缓存里的数据写入ROM里, 而停止总线后在执行读操作就会出错。 如果发送完写完后,直接启动读,读会成功,但写失败 ***********************************/ SJMP START ORG 0030H CLR 00H //收到应答检查 标志位 MOV 30H,#00H START: MOV 40H,#46H //Fuck You MOV 41H,#75H MOV 42H,#63H MOV 43H,#6BH MOV 44H,#00H MOV 45H,#59H MOV 46H,#6FH MOV 47H,#75H MAIN: MOV 36H,#0A4H //选从机 MOV 30H,#40H //设置写参数 MOV 31H,#08H MOV 32H,#30H LCALL MSDATA //启动总线并发送(写)数据 LCALL D_S MOV 33H,#60H //设置读参数 MOV 34H,#04H MOV 35H,#20H LCALL MRDATA //再启动总线并接收(读)数据 LCALL STOP_IIC //停止总线 wait: jnb 02h,wait MSDATA: //MCU发(写)数据 LCALL STA_IIC //启用IIC总线 MOV A,36H //获取从机地址, CLR ACC.0 //写操作 LCALL WRBYT //发送 LCALL CACK //检测应答 MOV A,32H //获取,要写入的EEPROM首地址 LCALL WRBYT //发送 LCALL CACK //检测应答 WR_S: MOV R1,30H //获取要发送数据的首地址 MOV A,@R1 LCALL WRBYT //发送一字节数据 LCALL CACK //检测应答 INC 30H DEC 31H MOV R2,31H CJNE R2,#00H,WR_S //是否发送指定长度 LCALL STOP_IIC //停止IIC总线 RET MRDATA: //MCU接收(读)数据 LCALL STA_IIC //启动IIC总线 MOV A,36H //获取从机地址 CLR ACC.0 //写操作(伪写,来使EEPROM的指针指向要读的地址) LCALL WRBYT //发送 LCALL CACK MOV A,35H //发送要读取的地址 LCALL WRBYT LCALL CACK LCALL STA_IIC //为关闭的情况下,再次启动IIC总线, MOV A,36H //获取从机地址 SETB ACC.0 //读操作 LCALL WRBYT LCALL CACK //读取数据========== S_R: MOV R1,33H //获取接收首地址 LCALL RDBYT //接收一字节数据 MOV @R1,A //保存到MCU LCALL NACK //发送应答信号,准备接收下一字节数据 INC 33H DEC 34H MOV R2,34H CJNE R2,#01H,S_R //是否接收指定长度数据,到01H而不到00H是因为最后需要发送一个非应答,不让从机再发送数据 MOV R1,33H LCALL RDBYT //接收一字节数据 MOV @R1,A //保存到MCU LCALL MNACK //发送非应答 // LCALL ST

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档