电子产品开发细节之 MCU I/O 端口处理

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

I/O 端口,是单片机学习者首先接触的基本外围功能,用于输出控制信号、或者输入外部状态信号。尽管功能简单、易用,在实际的电子产品开发中,仍有值得注意的细节,甚至这些细节的处理关乎产品的质量。作为示例,本文介绍2点需要关注的内容。

1、端口的方向设置
对于双向I/O端口,具体应用中根据实际需要,设置为输入端口或者输出端口,这个功能的实现,通常是在初始化程序中,通过设置I/O端口的方向寄存器来完成的。
如下例所示:
在这里插入图片描述
以上的程序,从逻辑上看,没有任何问题。但是,在产品的实际工作过程中,方向寄存器中的设定值,存在被意外改写的风险。例如,强噪声环境中运行的电子产品。
那么,如何尽可能地降低这种风险带来的负面影响呢?
常用的方法,是每隔一段时间,重复设置方向寄存器,以减少方向寄存器被意外改写所带来运行故障。如下所示。
在这里插入图片描述
2、位操作指令的使用
有的单片机提供了位操作指令(例如:SEB命令,CLB命令),用于对某一输出端口执行置位(端口输出高电平)或复位(端口输出低电平)操作。但是,使用位操作时如果不慎,也可能会给产品的运行带来意外的故障。为什么呢?
通常,单片机的CPU访问内置RAM(含SFR)时,是以字节为单位访问的。对于某一端口的位操作,实际执行的操作是:读入字节 => 修改目标位 => 以字节写回寄存器。
例:
8bit 的端口P1,其中P10设置为输出端口,P11-P17设置为输入端口。执行 SEB P10 命令使P10输出高电平。其执行过程,如下图所示。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值