上一篇文章我们对C51的IO简单的介绍了一下,现在我们来简单了解C51的IO的结构
这里我们学习一下比较常见的单片机的IO模式,分别是准双向,开漏输出和推挽输出
(这里要提一嘴,我们用的STC88C52RC是没有推挽输出功能的,STC公司后续推出的一些机型才有推挽输出功能)
接下来我们来看看这几种模式
1.准双向
看看下面的原理图,机内信号通过一个非门取反后送入一个MOS管,MOS管负责控制这个IO的高低电平,配合内部上拉电阻完成高低电平的输出
为了方便我们分析,我们把这个MOS管看成一只NPN三极管。区别是三极管靠电流导通,MOS管靠电压导通
结合前面我们讲过的知识,对于一只NPN三极管,基极b电压比集电极c电压大0.7V的时候,三极管发射极e与集电极c之间导通
准双向输出高电平
当机内给高电平信号的时候,经过非门取反,得到低电平信号,在这里我视作0V,非门取反后直接接到三极管b极,相当于b极电压0V,三极管的c极接地,视作0V。此时由于b极电压与c极电压差小于0.7V,三极管截止
电源正极的电流就经过内部上拉电阻流向c极,只有一路电流从正极到上拉电阻再流出IO,这时候相当于IO接入高电平
准双向输出低电平
当机内给低电平信号的时候,经过非门取反,得到高电平信号,在这里我视作5V,非门取反后直接接到三极管b极,相当于b极电压5V,三极管的c极接地,视作0V。此时由于b极电压与c极电压差达到0.7V以上,三极管导通
电源正极的电流就经过内部上拉电阻流向c极,c,e之间导通,所以直通,一直流至负极。另一路电流从外部IO经过三极管的C极,再流向e极,最后流至地,实现接低
这时候我想你会问,那电流为什么不从vcc流向电阻,最后流出IO呢?我想说,我相信你高中的时候学过,电流总是从正极流向负极。我们来观察,在这个电路里面,正极的电流已经流向负极了,IO这一路电流也流向负极,也就实现了低电平输出
2.开漏输出
开漏输出的结构如下
细心的朋友已经发现了,开漏输出的电路结构跟准双向的区别就是没有内部上拉电阻
内部输出0的时候,原理跟准双向输出相同
但是如果内部输出为1的时候
这时候IO是悬空状态,相当于IO跟单片机断开了
如果需要输出高电平,这时候就需要外部上拉电阻
3.推挽输出(了解)
所谓的推挽,就是指使用两个三极管或者MOS管交替地将信号推到正和负极性,实现放大的效果
推挽输出的电路结构
在这个结构中,两个MOS管配合,实现推挽输出,最大的特点就是输出电流够大(大约20mA)
在这里,T1 MOS管可以看成PNP三极管,T2 MOS管可看成NPN三极管
输出高电平的原理:
内部输出高电平信号经过非门取反,送到两个三极管的b极,上面的PNP三极管导通,下面的NPN三极管截止,电流从VCC流过PNP管,流出IO。
输出低电平的原理:
内部输出低电平信号经过非门取反,送到两个三极管的b极,上面的PNP三极管截止,下面的NPN三极管导通,IO电流经过NPN三极管流过地,实现输出低电平
C51的IO模式
我们的AT89C52单片机只支持开漏输出和准双向输出
P0组IO只支持开漏输出,仔细观察,你的开发板上的P0组IO是不是有一排上拉电阻?
P1,P2,P3支持准双向IO输出
这些是单片机设计的时候就配置好的
我们无法修改,但是根据不同IO组的输出功能进行合理利用,依旧能达到我们想要的效果