Ⅰ 求教:两个51单片机之间的IIC通讯
IIC通讯只能是TTL连接通信,要求两个单片机是近距离的,应在1米以内。既然是TTL连接,为何不用串口呢,也是TTL连接,串口通信简单多了。
而IIC通信,两个单片机都是用引脚来模拟的,通信协议比较麻烦,写程序很麻烦的,又何苦呢?
Ⅱ 有IIC总线的单片机和没有的有什么区别编程的时候为什么都需要模拟IIC时序呢
只有STM32F103C8051F 等档次较高的单片机才贺行有IIC总线接口.
大多数单片机都没有IIC总线接口,用普通IO口模拟程序也不复杂禅判哗,传输速度也不低,冲戚所以一般都用模拟IIC时序
Ⅲ 如何实现双单片机模拟iic通信
对于疑问1:for循环已经把数据从主器件发送到从器件,没错,后面加那几句是为了释放数据总线,这是芯片协议已经规定了的,为什么是scl=0;而sda=1呢,应该总线SCL与SDA都是线与关系,任意一个器件输出低电平,都使该总线的信号变低,你可能会这么想:为什么不是scl=1;delay();sda=1;delay();呢?那是因为当scl=1;sda=1;这是终止信号。对吧,这样写的话IIC将会停止工作。
对于疑问2:加这几句也一样,是芯片现已规定:无论是写数据还是读数据,写完读完之后需释放总线,for循环语句的意思是:
for(i=0;i<8;i++)
{
scl=1; //拉高时钟总线,开始读数据
delay();
k=(k<<1)|sda; // 将读取到的sda数据存放到k中,这里你可能有点无法理解,我举个例子:刚开始k=0x00(系统默认),当读取到的sda数据为1时,k=0x01;对吧,反之当读取到的sda数据为0时,k=0x00;
scl=0;// 读取完一个数据,拉低时钟总线
delay();
}
就这样循环8次,这样一个字节的数据就从主器件读到了从器件了。对吧。
如果那个释放总线你理解不了,你就记住,这是芯片协议规定,读完或写完都必须释放总线。iic协议都是如此。
希望能帮助到你。
Ⅳ 关于IIC总线和单片机
I方C
这个办并知或法不好,编程也复杂绝伍,而且不通用,只有一个好处就是熟悉了IIC总线了
建议每个传感器做单一检测,然后通过通信(有线或无线)方猛纳式进行信息传输,主机应尽量用上位机.
Ⅳ 单片机iic总线问题
I2C总线理解上的难点就是在于
ACK和NACK的使用上,估计你就没看明白I2C协议。简要的给你说下:ACK的时候,SCL=1,表示时钟拉高,增加Delay是为了等待SDA的数据回传(这时master的SDA是输入态,slave的SDA是输出态,SDA==0
即表示Slave响应正确)。ACK主要出现在Command、Address、Data数据传输时。
而NACK主要是在读数据后,结束位前出现,这时Master的SDA为输出,Slave的SDA为输入,SDA需要输出‘1’,告知Slave即将读操作结束。
反观你的代码,ACK中强加Delay不是不行,但很难做的通用兼容。建议考虑判断Sda状态,同时需要有错误退出机制。
最后,你还是再看下I2C
Specification
吧,另外,I2C总线是OC门,注意这个特点,应用很灵活。
Ⅵ 单片机iic是做什么的
与使用IIC协议的芯片连接通信。单片机的IIC一般是指的单片机能够通过编程实现硬件IIC。你说的是STM32单片机吧?
硬件IIC比模拟IIC速度更快,但是接口固定,并不是一个好选择。用来学习还是不错。
Ⅶ 请教两个51单片机间搞软IIC协议通信
I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。
I2C总线只有两根双向信号线。一锋局局腊昌根是数据线SDA,另一根是时钟线SCL。
I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。
所以无论P0还是P1、P2、P3都要吧~但P0有了,应该不用了吧。我也不太懂。一楼的应银让该对。
Ⅷ 两个51单片机如何通过i2c通讯
一般情况下,要进行I2C通讯,你最起码其中有一个芯片要本身就带有I2C通讯接口,用这个带有I2C接口的芯片来作从器件,这样就相对好处理一点。你要是两个都不带这个接口,来模拟的话,很有难度。除非你对I2C协议很清楚,不过从楼主的提问来看,估计就不怎么熟悉这种协议。
所以建议还是用别的通讯方式吧,比如用SPI,相对会好处理一点,用其中一个芯片的INTx来模拟CS接口,作为从器件在中断中来处理,另外一个就模拟主器件来控制从器件,这样或许会好弄点。如果楼主确实需要通讯,还是赶快换个思路吧,要是卡在一个地方动不了,会耽误你的进程的,祝你好运!
Ⅸ 在单片机中IIC中如果没有应答信号单片机如何处理
IIC总线是每发送一个字节(8位)数据后,从动设备将主动将SDA引脚拉低,表示数据正常。
如果没有拉低,说明在发送过程中出现了总线时序错误,可能会导致意外情况,那么为了将这种意外降到最低,当没有应答信号时,应采取以下措施:
1.
数据重新发送,以覆盖原来的错误
2.
设置合理的超时时间,以在超时后允许系统重发。
3.
对于重要数据,比如需要保存的系统参数,在无应答信号时,需要将数据读回进行校验,防止出现写错误。