一文解决STC51单片机的IO配置问题

我们人类可以通过连接手脚上神经网络,肌腱,控制着我们的肌肉做出各种动作,完成各种造型。那单片机里的肌腱和神经就是今天我们要讲的主角----单片机的IO口。

我们学习单片机,到底学什么呢?最终落脚点,就是落在单片机的IO口上,其实最终就是操作单片机的IO口,什么串口通讯,IIC通信协议,中断,定时器,最终在单片机上体现出来的还是我们对单片机IO口的操作。既然那么重要,今天我们就来好好的说一说单片机的IO口。

说起单片机的IO口,大家肯定会笑话小编,这么简单的东西,还要你说。对,它是简单,看遍你是个人写的单片机教程,最开始讲编程就是从操作单片机IO口开始,都是从点亮一个LED灯开始,是的,点亮一个LED灯,就是对单片机IO的最简单的操作,要么给高电平,要么给低电平,这也是操作IO的唯一的两个方法。怎么说?举个例子:要在某个IO上输出PWM信号,其实就是有规律的在这个IO上交替的给高低电平,给的速度快慢决定了PWM信号的频率,给的高电平的时间所占一个高低电平周期的多少,决定了这个PWM信号的占空比。这么一说,高大上的PWM信号是不是就简单多了。

说了这么多,下面我们具体来说STC51单的IO的配置和各个模式的区别。

STC的51单片机为了更多更能的使用和运用于不同场合,STC51单片机设计了4中IO口模式,分别是:准双向IO口模式、推挽输出模式、高阻输入模式和开漏输出模式。每个IO口的模式配置,需要两个寄存器结合起来进行设置。这两个寄存器分别是PnM1和PnM0,(在STC8系列芯片中n=0,1,2,3,4,5,6,7),以P0口为例,配置P0口需要P0M1和P0M0两个寄存器进行配置,具体如下图:

“”

即P0M1寄存器的第0位和P0M0寄存器的第0位组合起来配置P0.0位的模式,P0M1寄存器的第1位和P0M0寄存器的第1位组合起来配置P0.1位的模式,P0口的其他位以此类推。具体的PnM1和PnM0寄存器的组合方式如下表所示:

“”

1、准双向I/O模式题

准双向I/O模式与标准51相比,虽然在内部结构上是不同的,但在用法上类同,比如要作为输入时都必须先写“1”置成高电平,然后才能去读引脚的电平状态。兼容传统的51单片机,在上电复位后,常规的IO都是准双向IO模式。在准双向IO模式下,端口输出1时能力很弱,允许外部将其拉低,输出0时驱动能力很强,可以吸收很大电流(20mA)。从输出示意图可以看出,在此模式下有三个晶体管来适应不同的需求。当端口寄存器输出1且引脚也为1时,晶体管“弱上拉”打开,提供基本的驱动电流,如果引脚输出的1被外部电路拉低时,“极弱上拉”打开,且关闭“弱上拉”,此时外部需要有足够的灌电流来拉低引脚电平;当端口寄存器为1,且引脚悬空时,“极弱上拉”打开,提供微弱的电流来维持引脚的高电平;当端口寄存器由0变到1时,“强上拉”打开来加快引脚上电平从0到1的转换,强上拉打开后,引脚上电平由0到1的转换需要两个时钟周期,所以需要读外部状态的时候,在端口写1后需要加两个空操作来等待引脚电平的转换,完了读取到的状态才是实际引脚状态。

“准双向IO输出示意图”
准双向IO输出示意图

2、推挽输出模式

推挽输出的特点是不论输出高电平还是低电平都能驱动较大的电流,比如输出高电平时可以直接点亮LED(要串联几百欧限流电阻),而在准双向I/O模式下很难办到。

“推挽输出模式输出示意图”
推挽输出模式输出示意图

3、高阻输入模式

此模式下,电流既不能流入也不能流出,这样可以获得比较高的输入阻抗,这在模拟比较器和ADC应用中是必需的。高阻态是数字电路中的术语,它既不是高电平也不是低电平,上一级电路输出到高阻输入接口,此接口不会对上一级电路的状态有影响,和没接一样,不产生电流的衰减,电平也由接入的电平决定,电路分析时高阻态可做开路理解。可以把它看作输出(输入)电阻非常大。这样在做ADC转换的时候是必须要的,我们都知道电压表的内阻我们认为是无穷大的,在此,我们用ADC转换实现电压表的时候,就需要在高阻模式下进行。注意,在此模式下,不提供20mA的灌电流的吸收能力。

“高阻输入模式示意图”
高阻输入模式示意图

4、开漏输出模式

开漏输出模式既可读外部状态,又可以对外输出高低电平,但是必须加上拉电阻。当端口锁存器输出0时,内部将关闭所有上拉晶体管,此时可以提供20mA的灌电流吸收能力;当端口寄存器输出1是,外部必须接上拉电阻,这也是此模式下的最大的优点----电气兼容性好,外部上拉电阻接3V电源,就能和3V逻辑器件接口,如果上拉电阻接5V电源,又可以与5V逻辑器件接口。

“开漏输出模式示意图”
开漏输出模式示意图

STC8A特例一 ----内部集成了上拉电阻

内部已经集成了3.7K的上拉电阻,可以通过上拉电阻控制寄存器实现禁止和使能。使能上拉电阻控制寄存器相关位后,对应引脚上将接通单片机内部的3.7K电阻,可以省去外部上拉电阻,禁止上拉电阻控制寄存器后将断开内部上拉电阻。官方给出的资料显示,此3.7K上拉电阻实测为4.2K左右,而且在P3.0和P3.1上的上拉电阻可能会略小一些。

STC8A特例二----施密特触发控制

每一个IO口都对应有施密特触发控制位,都可程序控制其使能和禁止。具体使能和禁止的区别,请参看下表。

“”

本文转载自: 单片机技术宅(作者: 小代126)
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理。

点击这里,获取更多关于应用和技术的有关信息
点击这里,获取更多工程师博客的有关信息

推荐阅读