第9章 MCS-51单片机的串行接口.ppt

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

AT24CXX时序 I2C时序的子程序(启动) SCL BIT P1.0 ;I2C信号引脚 SDA BIT P1.1 I2C_INI: ;总线状态初始化 SETB SCL ;SCL和SDA都是高电平 SETB SDA CALL I2C_DELAY ;延时 RET I2C_START: ;发送起始信号S SETB SDA ;SCL和SDA都是高电平 SETB SCL CALL I2C_DELAY CLR SDA ;SDA变低 CALL I2C_DELAY RET I2C时序的子程序(发送1字节) I2C_SEND_8B: ;在I2C总线上发送8位的数据或地址字节 PUSH B ;欲发送的字节在A中 MOV B, #8 ;共8位,循环8次 I2C_SNEXT_B: ;循环体 CLR SCL ;SCL变低,SDA上数据可以变化 RLC A ;最高位移入C MOV SDA, C ;送SDA线 CALL I2C_DELAY ;等待稳定 SETB SCL ;SCL变高,从设备可以取走数据 CALL I2C_DELAY ;等待从设备取走 DJNZ B, I2C_SNEXT_B ;循环 POP B ;恢复B RET I2C时序的子程序(接收1字节) I2C_REC_8B: ;接收I2C总线上的8位数据 SETB SDA ;置SDA为输入 PUSH B ;要用到B寄存器 MOV B, #8 ;共8位,循环8次 I2C_RNEXT_B: ;循环体 CLR SCL ;SCL变低,SDA上数据可以变化 CALL I2C_DELAY ;等待从设备将数据送出 SETB SCL ;通知从设备,数据不可变化 CALL I2C_DELAY ;等待数据稳定 MOV C, SDA ;接收 RLC A ;移入A DJNZ B, I2C_RNEXT_B ;循环 POP B ;恢复B RET I2C时序的子程序(应答信号) I2C_WAIT_ACK: ;接收应答信号A CLR SCL ;SCL变低,SDA上数据可以变化 SETB SDA ;置SDA为输入 CALL I2C_DELAY ;等待从设备将A送出 SETB SCL ;通知从设备,数据不可变化 MOV C, SDA ;接收 CLR SCL ;SDA上数据可以变化 RET I2C_NACK: ;发送非应答信号NA CLR SCL ;SCL变低,SDA上数据可以变化 SETB SDA ;送出1 CALL I2C_DELAY ;等待数据稳定 SETB SCL ;SCL变高,从设备可以取走数据 CALL I2C_DELAY ;等待从设备取走 RET I2C时序的子程序(停止信号) I2C_STOP: ;发送停止信号P CLR SCL ;SCL变低 CLR SDA ;SDA变低 CALL I2C_DELAY ;延时 SETB SCL ;SCL变高 CALL I2C_DELAY ;延时 SETB SDA ;SDA变高,释放总线 RET I2C_DELAY: ;延时子程序 NOP NOP RET 实现I2C时序 使用以上子程序,可编写具体读写操作程序 根据习惯,可以使用DPTR存放EEPROM中单元地址,而用累加器A来存放读出或写入的数据 I2C_WR_ADD: ;字节写 PUSH ACC ;DPH、DPL分别存器件地址和单元地址 MOV B, A ;A中为欲写入数据 I2C_WADD_START: CALL I2C_START ;产生起始信号S MOV A, DPH ;DPH高7位为器件地址 CALL I2C_SEND_8B ;送出地址字节 CALL I2C_WAIT_ACK ;读取应答信号A JC I2C_WADD_START ;无应答,重新启动 MOV A, DPL ;器件内单元地址 CALL I2C_SEND_8B ;送出 CALL I2C_WAIT_ACK ;读应答信号A JC I2C_WADD_START MOV A, B ;欲写入的8位数据 CALL I2C_SEND_8B ;送出 CALL I2C_WAIT_ACK ;读

文档评论(0)

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

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

1亿VIP精品文档

相关文档