I/O 端口,是单片机学习者首先接触的基本外围功能,用于输出控制信号、或者输入外部状态信号。尽管功能简单、易用,在实际的电子产品开发中,仍有值得注意的细节,甚至这些细节的处理关乎产品的质量。作为示例,本文介绍2点需要关注的内容。
1、端口的方向设置
对于双向I/O端口,具体应用中根据实际需要,设置为输入端口或者输出端口,这个功能的实现,通常是在初始化程序中,通过设置I/O端口的方向寄存器来完成的。
如下例所示:

以上的程序,从逻辑上看,没有任何问题。但是,在产品的实际工作过程中,方向寄存器中的设定值,存在被意外改写的风险。例如,强噪声环境中运行的电子产品。
那么,如何尽可能地降低这种风险带来的负面影响呢?
常用的方法,是每隔一段时间,重复设置方向寄存器,以减少方向寄存器被意外改写所带来运行故障。如下所示。

2、位操作指令的使用
有的单片机提供了位操作指令(例如:SEB命令,CLB命令),用于对某一输出端口执行置位(端口输出高电平)或复位(端口输出低电平)操作。但是,使用位操作时如果不慎,也可能会给产品的运行带来意外的故障。为什么呢?
通常,单片机的CPU访问内置RAM(含SFR)时,是以字节为单位访问的。对于某一端口的位操作,实际执行的操作是:读入字节 => 修改目标位 => 以字节写回寄存器。
例:
8bit 的端口P1,其中P10设置为输出端口,P11-P17设置为输入端口。执行 SEB P10 命令使P10输出高电平。其执行过程,如下图所示。

本文介绍了电子产品开发中MCU I/O端口处理的两个关键点:1) 防止方向寄存器被意外改写,建议定期重设以确保端口正确工作;2) 使用位操作指令时注意潜在影响,特别是在输入/输出切换场景下,应先设置输出缓冲器的初始值,以避免意外数据导致的问题。这两个细节对提升产品品质至关重要。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



