㈠ I2C协议从机怎么发送ACK信号啊,就是把SDA拉低,要怎么编程实现啊
以AT89c52单片机为例,主机发送指令过程中,当需要判断SDA是否被拉低时,先值高SDA,然后反复读取SDA电平,当SDA=0时就判断SDA被拉低了,在一定时间内没有读取到SDA=0就判断出错。
汇编举例:
aACK: MOV R7,#0 ;
LOOP: CLR C ;
MOV C, IO_SDA ;
NOP;
JNC IO_SDA , LOOP_OK ;有确认信号转
DJNZ R7, LOOP ;
LOOP_ERR: //一定时间内没有检测到ACK信号。
......
LOOP_OK: //一定时间内检测到ACK信号。
......
㈡ 单片机 iic 应答信号程序中有一句 while((sda==1)&&(i<250))i++ 我想知道 为什么i<250,250这个数字从哪
为了防止IIC的sda信号异常导致在while的死循环,用i来限定sda跳变为0等待时间,如果sda==0则跳出while循环,如果sda==1,最多等待i的255次增量计数后跳出循环,i++是在while循环体内的。IIC对时序有严格的要求,由于各种原因接口上信号异常是有可能发生的。
器件地址0101是器件的标识,多种IIC器件通信时没有这个标识就乱套了,这与i<255八辈子扯不上关系,i就是一个计时等待的变量。
你的问题补充中对24C08器件地址的理解是错误的,有的还用i <100,有的连i都没有,那又怎么理解呢。
㈢ stm8 硬件i2c从机接收程序
首先,iic做从机的程序源码网上比较多,我就不发了,说下调试方法。版
相信主机部分已经调权试通过了,在这个前提下,楼主的思路是没错的,接收非空,读数据。iic属于一个硬件接口,出问题的时候需要借助示波器,监测每个时候每个数据的波形,同时用JTAG在线调试,分析从机相关寄存器的状态,与自己计算的理论值做对比看是否正确,最终会找到一个出错的地方,看着一堆数据确实会枯燥一些,楼主加油,祝成功~
㈣ 51单片机关于IIC的问题
在主机发送应答信号后,把数据总线拉高,就是为了下一步检测从机的应答信号,这程序是连续的,既然前面的程序已经拉高了,准备检测从机的应答信号了,就不用再拉高一次啦,如果你愿意再拉一次也行啊。
㈤ 51单片机如何模拟I2C总线中从机接收ID,发送数据的程序
I2C是单主多从的,不是楼主说的从机接受ID,而是单片机发送ID(由芯片的地址和芯片地址管脚的高低电平决定),然后对应ID的从机发送应答信号。
然后两者再进行数据传输。多看一下IIC的Datasheet,不是很难的。收发时的时序是关键。