标题: 讨论一下51单片机的IIC通信的应答信号与非应答信号 [打印本页]

作者: xzf586    时间: 2018-8-16 14:14
标题: 讨论一下51单片机的IIC通信的应答信号与非应答信号
按照多数教材的理解,应答信号应该是这样:当发送器发送8位数据以后,要发送一个应答信号,个人理解:此处应该是发送一个“要求接收器回复一个应答信号的信号”,有点拗口,可能更加准确些!也就是发送器拉高SDA,然后等待接收器能否拉低SDA信号,能够拉低SDA,就是回复发生器的应答信号,发送器收到此信号后,继续发送;如果接收器不能拉低SDA,那发送器就认为是无应答信号,停止工作,也就是释放总线。发生器等待应答信号期间,SCL应该是高电平!虽然单片机模拟对应答信号要求不是很高,一般都可以工作,但是看了不少程序,总觉得不太符合。不知道上面理解的对不对,欢迎指正!
作者: woshige    时间: 2018-8-16 15:16
最近刚学完iic,如果不纠结概念的话应该就是,发送完数据等待应答信号,接收到应答就继续执行,非应答就结束,楼主不说的话还真没有细细研究
作者: xzf586    时间: 2018-8-16 15:28
woshige 发表于 2018-8-16 15:16
最近刚学完iic,如果不纠结概念的话应该就是,发送完数据等待应答信号,接收到应答就继续执行,非应答就结 ...

如果只看参考程序,有时候还真的没有在意
作者: 达达达    时间: 2018-8-16 17:43
最近用软件模拟过IIC通信,写应答信号库函数的时候,主机释放SDA总线也就是把电平拉高,在下一个时钟周期读SDA总线然后返回SDA的值就行了,并没有发送“要求接收器回复一个应答信号的信号”。
作者: 726434632    时间: 2018-8-17 10:32
我一般都是主机模拟应答信号,不管从机。只要从机没坏,都能工作
作者: xzf586    时间: 2018-9-15 08:17
我们编写程序,利用proteus仿真,一般都是主机拉低SDA,代替从机回复的应答信号,实际硬件这个SDA的拉低应该由从机完成,所以在这个问题上,大家容易混淆,到底这个应答信号是谁发出的!
作者: ciyu    时间: 2018-9-15 10:11
感觉没必要这么复杂吧!单片机向I2C发送数据完成后,接收器产生一个应答动作,并且通过I2C总线发送一个应答信号给单片机
作者: Y_G_G    时间: 2018-9-23 15:19
IIC其实很简单的,让我这个小白来告诉你吧
IIC的主要信号就是三个:启动信号,停止信号,应该信号
启动和停止信号:在任何时候都可以产生
应该信号:在发送或者接收完成8个位之后的第9个位来产生.0为应答,1为不应答,向器件写入数据时,应答信号由接收器产生,从器件读出数据时,应答信号由单片机产生
以51读写24C01为例:
向24C01写入时,先写入启动信号,然后写入地址(8个位),在第9个位的时候,SDA线要为高电平(释放SDA线),接下来,单片机要不断的读取SDA线,当写入完成时,24C01会把SDA线拉低,就表示已经写入完成了.
读出数据时:先是一个启动信号,然后写入要读取的地址,再写入一个启动信号,然后单片机就开始读取SDA的电平数据了,在读取完8个位之后,在第9个位的时候,单片机要把SDA拉低(0),再给24C01一个时候,等于是告诉24C01已经接收到完整的8个位了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1