重复更改微控制器上的I / O方向是否稳定?

时间:2010-04-20 17:03:02

标签: microcontroller

我是微控制器编程的新手,我已经将我的微控制器板连接到另一个设备,该设备根据发送给它的命令提供状态,但是这个状态是在用于提供数据的同一个I / O引脚上提供的。基本上,我有一个8位数据线用作微控制器的输出,但对于某些命令,如果我选择读取它,我会在其中一条数据线上获得状态。因此,我需要更改这一行的方向以读取状态,从而将此行转换为输入的输出,然后返回到输出。这是可接受的编程还是这种I / O引脚的改变经常导致不稳定?

感谢。

4 个答案:

答案 0 :(得分:4)

更改I / O线的方向以读取外设返回的状态应该没有任何问题,前提是在外围设备开始驱动线路之前将线路状态更改为输入然后执行此操作在外围设备停止驱动之前,不要尝试将线路作为输出。你必须要避免的是两个驱动器设备之间的争用,即两个端由处理器和外围设备驱动到相反的状态。这最多会导致处理器,外设或两者的功耗或更糟的引脚驱动电路出现大幅增加。

您没有说出处理器或外围设备是什么,所以我无法判断接口中是否有任何控制位使远程设备能够输出状态,以便您可以随时知道外围设备是否正在驱动线路

答案 1 :(得分:1)

我已经在数字I / O引脚上完成了这项工作而没有任何问题,但我对此非常陌生。这可能完全取决于您使用的是哪种微控制器。

答案 2 :(得分:1)

是的,重复更改微控制器上的I / O方向是完全正常的。 这是通过I2C和iButton等集电极开路总线进行通信的标准方法。 (有关汇编语言代码示例的链接,请参阅PICList: busses。)

  • 发送0位:将输出LATx位设置为0,然后将TRISx位设置为OUTPUT。
  • 发送1位:保持输出LATx位为0,并将TRIS位设置为INPUT(让外部电阻上拉线为高电平)
  • 侦听来自外设的响应:将输出LATx位保持为0,并将TRIS位设置为INPUT。当外设发送1时,让外部电阻上拉线为高电平,或者当外设发送0时,让外设将线拉低。从PORTx引脚读取该位。

如果总线的两端都正确遵循此协议(特别是,如果主动没有一端将线路驱动为高电平),则您永远不必担心争用或当前峰值。

答案 3 :(得分:0)

重要的是要记住,任何高速IO切换都会产生EMI。 根据开关频率,电路板布局和器件敏感度,此EMI可能会影响应用的性能和可靠性。

如果您的应用程序出现问题,请使用示波器检查电路板通道中的辐照EMI。