当前位置:首页 > 51单片机IO特点
51单片机I/O特点
在上一单元中小灯闪烁的实例中,I/O控制小灯闪烁51 ,只需在软件中对IO置高和置低就可以了,使用起来非常方便。但是在实际应用中如果不了解IO的特点,设计的电路存在缺陷,IO使用起来未必会得心应手,初学者不必深究IO控制原理,但至少得弄明白几个基本的概念,这对后期学习高档单片机也很有帮助。
1、弱上拉输出、推挽输出、开漏输出
51单片机(AT89和STC89系列)IO作为输出,既有开漏输出,也有弱上拉输出。其中P0口是开漏输出,P1、P2和P3是弱上拉输出。
程序写“1”,锁存器输出“0”,则MOS管截止,输出对外呈现高电平。反之,程序写“0”,MOS管导通,输出对外呈现低电平。 上拉电阻大, 输出电流小 上拉电阻,阻值很大 P1、P2和P3结构基本差不多,IO输出端是一个接上拉电阻的MOS管,漏极输出,当程序写“1”,锁存器输出反相信号“0”,则MOS管截止,输出端对外呈现高电平;反之MOS饱和导通,输出低电平。因内部上拉电阻阻值较大,所以称之为弱上拉输出。
P0口比较特殊,既可以作为地址/数据总线,又可以作为输入输出口。地址/数据总线的 作 用我们不用去理会了(基本不会在51单片机上加载存储器),但地址/数据总线的输出形式 确 值得一提,从图上可以看出,MUX开关打向上边,IO作为地址/数据用,OS
作为地址/数据线用,T1和T2轮流导通,推挽输出。 作为普通IO用,T1截止,只有T2起作用,相当于漏极开路。
管T1和T2轮流导通,这种形式成为推挽输出。尽管我们不用地址数据总线,但这种双管轮流导通的形式是AVR/PIC等单片机IO输出的主要形式,输出和输入具有同样大的电流。
P0口用作普通IO时,MUX开关打向锁存器端,锁存器输出只与MOS管T2连接,MOS管T1不起作用,MOS管T2漏极开路,称之为开漏输出。所以P0口作为普通IO使用,需在外部接上拉电阻。
2、拉电流与灌电流
拉电流和灌电流是衡量数字电路输出驱动能力的参数,由于数字电路的输出只有高、低(0,1)两种电平值,高电平输出时,一般是输出端对负载提供电流,其提供电流的数值叫“拉电流”;低电平输出时,一般是输出端要吸收负载的电流,其吸收电流的数值叫“灌电流”。如图所示。
PB1置“1”,高电平,电流从芯片引脚PB1流出,称之为“拉电流” PB0置“0”,低电平,电流从电源VCC经负载流入PB0,称之为“灌电流”。 灌电流越大,输出端MOS管的饱和压降就会越大,则输出低电平则会变高,数字电路的
低电平是有一定限制的,它有一个最大值UOLMAX。电路工作时,不允许超过这个数值,TTL逻辑门的规范规定UOLMAX ≤0.4~0.5V。所以,灌电流有一个上限。
拉电流越大,输出端的高电平就越低。这是因为输出级三极管是有内阻的,内阻上的电压降会使输出电压下降。拉电流越大,输出端的高电平越低。数字电路的高电平有一个最小值UOHMIN。工作时,不允许超过这个数值,TTL逻辑门的规范规定UOHMIN ≥2.4V。所以,拉电流也有一个上限。
AT89S52单片机IO驱动能力,手册里是这样描述的:
P1、P2、P3拉电流最大值不能超过60uA,拉电流再大,则输出电平低于2.4V 。51单片机的拉电流很弱,原因在于输出端上拉电阻阻值很大(几十K)。
每个IO口所允许的最大灌电流为10MA,整个芯片最大灌电流71mA,P0口最大灌电流
26mA,P1、P2和P3口最大灌电流为15mA。
3、双向口与伪双向口
双向口是指单片机输入和输出机构分离的,使用前需先设定是输入还是输出,大部分单片机的IO是双向口。
51单片机的IO是伪双向口,指的是输入和输出并未彻底分离。从IO读数据时,需要先对IO写“1”,然后才能读取外部电平。为什么要先写“1”呢?写“1”的作用是让MOS管T截止,如果MOS管不截止(写“0”MOS管导通),则IO口被拉到低电平,无论外部电平是高还是低,读进来的信号全是低电平,如图所示。
有人可能会问,实际写程序读取外部电平时,都是直接来读的,没有写“1”的操作。这是因为51单片机上电复位后IO是高电平,既在程序运行前进行了写“1”操作,所以实际应用中省略了这一步。
作为输入时,必须让 MOS管截止(即写“1”), 否则读取值全为“0”。
(4)P0外接上拉电阻阻值如何选取
P0开漏输出,需外接上拉电阻,才能正常使用。既然上拉电阻可以自己设定,为了增加输出电流能力,有人把上拉电阻取值较小,这样做确实提高P0口高电平输出电流的能力,但当P0置低,上拉电阻上的电流全部流入内部的MOS管,增加了无用的灌电流。所以上拉电阻取值不能太小,一般在1K-10K之间。不建议通过上拉电阻提高来增大对外输出电流,如果需要大电流,电路中需使用功率元件。
IO驱动之流水灯
LED发光二极管是电子产品中常用的元器件:在电子产品中我们经常使用一个红色或者绿色的发光二极管用来指示系统的工作状态;闪烁的发光二极管用来作为系统的报警信号;发光二极管是数码管和点阵屏的基本单位。在本节中,我们通过一个流水灯的实例,了解发光二极管的特点和51单片机IO口驱动流水灯的程序实现方法。
LED发光二极管
从名字上看,LED发光二极管应属于二极管的范畴。普通硅二极管的导通压降在0.7V左右,发光二极管的导通压降在2V左右(不同颜色的稍微有差别),这是由于发光二极管使用磷砷化镓等材料制作而成导致的。发光二极管是电流控制的元件,亮度由流过自身的电流来决定,一般5mm的LED电流达到1mA就开始起辉,到25mA左右可能烧毁,15-25mA亮度变化已不明显。一般设定电流为2-10mA就可以了。
驱动单个LED发光二极管
51单片机单个IO口的灌电流为10mA,所以驱动单个发光二极管可以与单片机IO口直接相连,采用低电平点亮的方式。电路如图所示。
电流与电阻之间的关系由下面的的公式确定。
取值330欧。
I?
在电路中,电阻R起到限流的作用,调节R的阻值可以控制发光二极管的亮度。导通
5V?VLED R式中,VLED为LED的导通电压,若要保证流过LED的电流在10mA左右,则电阻R
驱动多个发光二极管
51单片机IO口中每一位灌电流是10mA,但整个芯片不超过71mA,每一组不超过15mA(P0口灌电流为26mA)。所以如果同时驱动8个发光二极管,如果亮度较低,电流控制在2mA以下,可以用单片机直接驱动,但如果每一个发光二极管通过的电流在10mA左右,总电流达到80mA,则需要借助功率器件,常用的功率器件有三极管、MOS管和数字IC等。三极管在驱动继电器中讲解,在本节中我们使用数字IC作为功率器件驱动发光二极管。
共分享92篇相关文档