I2C串行接口技术iic总线.ppt

  1. 1、本文档共82页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(3) 发送应答位信号子程序MACKMACK: CLR SDA SETB SCL NOP ;保持数据时间,即SCL为高,时间大于40 μs NOP CLR SCL SETB SDA RET (4) 发送非应答位信号子程序MNACKMNACK: SETB SDA SETB SCL NOP ;保持数据时间,即SCL为高,时间大于4.0 μs NOP CLR SCL CLR SDA RET 在使用上述子程序时,如果单片机的主时钟不是6 MHz,则应调整NOP指令个数,以满足时序要求。 2) I2C总线数据传送的模拟子程序 从I2C总线的数据操作中可以看出,除了基本的启动(STA)、终止(STOP)、发送应答位(MACK)、发送非应答位(MNACK)外,还应有应答位检查(CACK)、发送一字节(WRBYT)、接收一字节(RBYT)、发送N字节(WRNBYT)和接收N字节(RDNBYT)这5个子程序。 (1) 应答位检查子程序CACK 在应答位检查子程序(CACK)中,设置了标志位。 CACK中用F0作标志位,当检查到正常应答位后,F0=0;否则F0=1。 CACK: SETB SDA;置SDA为输入方式 SETB SCL;使SDA上数据有效 CLR F0;预设F0=0 MOV C,SDA;输入SDA引脚状态 JNC CEND;检查SDA状态,正常应答转CEND,且F0=0 SETB F0;无正常应答,F0=1 CEND: CLR SCL;子程序结束,使SCL=0 RET (2) 发送一字节数据子程序WRBYT 该子程序是向虚拟I2C总线的数据线SDA上发送一字节数据的操作。调用该子程序前,将要发送的数据送入A中。占用资源: R0,C。 WRBYT:MOV R0,#08H;8 位数据长度送R0中 WLP: RLCA;发送数据左移,使发送位入C JC WR1;判断发送1还是0,发送1转WR1 AJMP WR0;发送0转WR0 WLP1: DJNZ R0,WLP;8位是否发送完,未完转WLP RET;8位发送完结束 WR1: SETB SDA;发送1程序段 SETB SCL NOP NOP CLR SCL CLRS DA AJMP WLP1 WR0: CLR SDA;发送0程序段 SETB SCL NOP NOP CLR SCL AJMP WLP1 (3) 从SDA上接收一字节数据子程序RDBYT 该子程序用来从SDA上读取一字节数据,执行本程序后,从SDA上读取的一字节存放在R2或A中。占用资源: R0、R2和C。 RDBYT: MOV R0,#08H;8位数据长度送R0中 RLP: SETB SDA;置SDA为输入方式 SETB SCL;使SDA上数据有效 MOV C,SDA;读入SDA引脚状态 MOV A,R2;读入0程序段,由C拼装入R2中 RLCA MOV R2,A CLR SCL;使SCL=0可继续接收数据位 DJNZ R0,RLP;8位读完了吗?未读完转RLP RET (4) 向被控器发送N字节数据子程序WRNBYT 在I2C总线数据传送中,主节点常常需要连续地向外围器件发送多个字节数据,本子程序是用来向SDA线上发送N字节数据的操作。 该子程序的编写必须按照I2C总线规定的读/写操作格式进行。 如主控器向I2C总线上某个外围器件连续发送N个数据字节时,其数据操作格式如下: 其中,SLAW为外围器件寻址字节(写)。 按照上述操作格式所编写的发送N字节的通用子程序(WRNBYT)清单如下: WRNBYT: MOV R3,NUMBYT LCALL STA;启动I2C总线 MOV A,SLA;发送SLAW字节 LCALL WRBYT LCALL CACK;检查应答位 JB F0,WRNBYT;非应答位则重发 MOV R1,#MTD WRDA: MOV A,@R1 LCALL WRBYT LCALL CACK JB F0,WRNBYT INC R1 DJNZ R3,WRDA LCALL STOP RET 在使用本子程序时,占用资源为R1和R3,但须调用STA、STOP、WRBYT和CACK子程序,而且使用了一些符号单元。 在使用这些符号单元时,应在片内RAM中分配好这些地址。这些符号单元有:  MTD主节点发送数据缓冲区首址;  SLA外围

文档评论(0)

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

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

1亿VIP精品文档

相关文档