技术文档

51单片机输入输出 51单片机简单的输入输出(LED和按键)

小编 2024-11-24 技术文档 23 0

51单片机简单的输入输出(LED和按键)

IO输出与输入 是单片机编程最基本的逻辑控制操作,我们以N76E003为例讲解最基本的编程。

如上图,P15为IO输出,输出高电平时,LED灯亮,输出低电平时,LED灭。

P04作为输入,因为没有外部上拉,所以此处需要配置为内部上拉,配置为准双向模式,并且使能内部上拉。测试时用杜邦线将P04短接到GND模拟按键触发(P04引脚低电平时),不短接到GND就是高电平,不触发。

当P04为低电平时,LED亮;当P04为高电平时,LED灭。通过简单的例程来测试输入输出控制。

#include "N76E003.h"

#include "Function_define.h"

#include "SFR_Macro.h"

#define LEDP15//高电平亮

#define KEYP04//按键,按下为低电平

void main(void)

{

/*设置P15为输出推挽模式 */

P15_PushPull_Mode;

/* 默认灯灭*/

P15 = 0;

/* 设置P04为准双向模式 */

P04_Quasi_Mode;

/*并且输出高电平,打开内部上拉功能 */

P04 = 1;

while(1)

{

/* 如果按键按下,点亮LED灯*/

if(KEY == 0)

{

LED = 1;

}

/* 否则熄灭LED */

else

{

LED = 0;

}

}

}

视频加载中...

以上的按键采用查询的方式,在主循环里每次循环都去扫描下P04的电平状态。

我们都知道,输入触发还可以通过中断事件来捕获,那么该怎么配置IO输入中断呢?同样我们以P04被拉低作为触发条件(从高电平到低电平,下降沿触发),当触发中断时,LED亮灭切换。

#include "typedef.h"

#include "N76E003.h"

#include "Function_define.h"

#include "SFR_Macro.h"

#define LEDP15//高电平亮

#define KEYP04//按键,按下为低电平

void PinInterrupt_ISR (void) interrupt 7

{

if(PIF == (1<<4))/* Pin4 */

{

LED = !LED;/* LED控制取反*/

}

PIF = 0x00; /* 清除中断标志 */

}

void main(void)

{

P15_PushPull_Mode;/*设置P15为输出推挽模式 */

LED = 0;/* 默认灯灭*/

P04_Quasi_Mode;/* 设置P04为准双向模式 */

P04 = 1;/*并且输出高电平,打开内部上拉功能 */

Enable_INT_Port0;/*配置P0端口 中断*/

Enable_BIT4_FallEdge_Trig;/*下降沿触发*/

PIF = 0;/* 清除中断标志*/

set_EPI;/* 使能IO输入中断*/

set_EA;/* 使能总中断 */

while(1)

{

}

}

在新唐003芯片,输入中断这里,所有IO输入中断都共享一个中断入口 。进入中断里再判断是哪一个引脚触发的。

另外,不得不说,新唐挖了个坑,同一时刻 只能有一个端口使能中断 ,要么P0口,要么P1口,或者P2.0/P3.0引脚。所以在设计电路时特别要注意,不要将用于中断的IO布置在不同端口(输入中断唤醒功能在低功耗应用时经常用到)。切记,切记,切记!

还有P20引脚只能用作输入,并且是与RST外部复位复用的,使用时要先配置,使用时当心。

(END)

感谢观看

「硬件」9种实用的将33V输出连接到5V输入的方法

欢迎关注【玩转单片机与嵌入式】公号,回复关键字获取更多免费视频和资料

回复【加群】,【单片机】、【STM32】、【硬件知识】、【硬件设计】、【经典电路】、【论文】、【毕业设计】、【3D封装库】、【PCB】、【电容】、【TVS】、【阻抗匹配】、【资料】、【终端电阻】、【Keil】、【485】、【CAN】、【振荡器】、[USBCAN]、【PCB】、【智能手环】、【智能家居】、【智能小车】、【555】、【I2C】、【华为】、【中兴】,等……

一:介绍

在本文中,我们将介绍相反的问题:我们有一个3.3V输出,我们需要驱动一个5V系统。

这是一个非常典型的情况,我们有一个3.3V系统(例如大多数32位系统,如STM32),我们需要将数据发送到较旧的5V系统,如51单片机。首先,我们需要考虑我们正在连接哪种5V系统。特别是,我们需要知道:低电平和高电平输入和输出电压。输入电流对于CMOS输入,输入电流通常在1uA左右或更低,因此不存在这样的问题。对于TTL器件,输入电流甚至可能超过1 mA(例如,参见7400数据表)。因此,在与TTL输入接口时,应采取一些额外的措施,我们将进行逐一的解释。另一个更重要的方面由逻辑电平。

事实上,5V TTL和5V CMOS输入具有不同的逻辑电平,因此我们将提出的一些解决方案对于某些输入是足够的,但这些解决方案无法可靠地用于其他输入类型。

图1:3.3 V CMOS输出、5 V TTL输入和5 V CMOS输入的逻辑电平

将3.3V输出接口至5V输入的主要方式有:

直接连接

使用 74HCTxx 栅极(或其他 5V TTL 输入兼容系列)

使用二极管偏移

电阻偏移

双极型晶体管/场效应管逆变器

系列晶体管

双极型晶体管系列

电平转换器 IC

光耦合器/隔离器

1、直接连接

这是最简单的方法。此解决方案“几乎总是”有效,但有一些重要的警告。

图2:3.3V CMOS和5V TTL器件之间可以直接连接

首先,当与TTL输入接口时,任何最新的CMOS输出都将工作,因为3.3V CMOS的高电平输出电压接近3.3V(注意!实际输出电压取决于输出电流。对于重负载输出,输出电平可能变化为0.5V或更高!),TTL的最小高电平输入电压仍为2V。同样,如果不是负载太重,CMOS的低电平输出电压也低于最大低电平TTL输入电压。我们之所以写“最新”的CMOS,是因为较旧的CMOS芯片(例如CD4xxx系列)具有非常高的输出阻抗,因此它们不会吸收/源出太多电流(您通常不希望吸收/源出超过0.5 mA)。试图获得太多的电流会使输出电压偏移太大。较旧的TTL芯片具有输入电流,可能超过1mA。几乎所有现代CMOS器件(例如MCU的GPIO)都可以毫无问题地驱动更高的电流。其次,当连接到5V CMOS器件时,这可能有效,但不可靠 。事实上,5V CMOS的高电平输入电压为3.5V。这甚至高于您期望从3.3V系统(即3.3V)获得的最大输出电压。不过,为什么这有时还可以使用呢?答案是由于实际的阈值逻辑电平,即5V CMOS的2.5V。任何高于2.5V的电压将被读取为1,任何低于2.5V的电压将被读取为0。但是,实际的阈值水平可能会随着温度和老化而变化:在两个逻辑电平区域之间操作是不安全的。任何噪声或干扰都可能在输出端产生毛刺。如果您的系统必须可靠地工作,那么您需要其他解决方案,如下所示。此外,在驱动接近逻辑电平阈值的数字非迟滞输入时应小心,因为会发生电流消耗。事实上,考虑简单的CMOS逆变器,如下所示:当输入电压接近VDD/2时,两个MOSFET都处于ON状态,因此直流路径电流将从VDD流向GND。 上图是CMOS逆变器的内部电路。如果“IN”信号处的电压接近VDD/2,则两个MOSFET都将处于ON状态,并且电流将在VDD和GND之间流动

优势:

无需其他组件

简单

劣势:

降低噪声裕量,容易收到干扰

仅与某些逻辑族可靠地工作

2、使用逻辑门电路

74HCTxx 系列是具有 TTL 兼容逻辑电平的 CMOS 器件(具有 TTL 兼容输入电平的所有其他 5V 逻辑系列也可以正常工作)。特别是,输入高压电平为2V,远低于CMOS高输出电压。通过在系统之间插入任何具有TTL兼容输入电平的逻辑门(请参阅下面的示例),就可以实现合适的电压电平转换器。

任何具有TTL兼容输入的非反相逻辑门都可以可靠地充当转换器。

优势:

可与 CMOS 和 TTL 器件配合使用

只需要一个电源。

劣势:

需要一个外部 IC(可能还需要其去耦电容等器件)

3:使用二极管偏移

通过直接连接到5V CMOS输入,我们看到主要问题是3.3V输出的高电平输出电压,该输出电压不足以仅处于安全区域(最多3.3V,而最小值为3.5V)。相反,低电平CMOS输入的最大电压是VDD的30%,即5V系统中为1.5V。因此,如果我们能在CMOS输出上增加小的偏移,那就太好了。出于这个原因,可以简单地使用二极管和上拉电阻。但是,通过这种方式,电流将流入我们3.3V系统的输出保护二极管。这种电流应尽可能小,以避免损坏3.3V系统。

上述电路中,当3.3V系统的output为高电平时,5V系统的input电压为3.3V+0.7V(二极管的压降),当3.3V系统的output为低电平时,5V系统的input电压为0.7V(二极管的压降)。在测试过程中需要注意,即使在3.3V系统为高电平状态下,3.3V系统也会有电流流入。这可能会导致 3.3V 设备上出现问题。

更好的解决方案是使用额外的二极管。由于新二极管直接连接到3.3V电源轨(它不必通过我们的IC),因此电流将流向电源。

在上述电路中,当输出为高电平时,电流不会流入输出,而是流过D2。尽管如此,这两种解决方案都有一个固有的问题:如果3.3V系统是低功耗,那么它这样就会消耗非常低的电流。如果总电流消耗低于流入电阻器的电流,则3.3V电源轨实际上将由5V通过电阻器和二极管供电。这可能是一个问题,因为如果3.3V系统没有消耗足够的电流,3.3V电压可能会增加到约4.3V,这可能会损坏3.3V系统本身。

为了解决这个问题,有一个简单的解决方案是放置第二个电阻,它至少吸收流入D2的电流(约1V / R1。因此,R2 应为 R1 的 3.3 倍或更低)。

上图中加上R2,其值最多比R1大3.3倍,这样才能确保流入D2的电流将“耗散”,并且不会增加3.3V电压。上拉电阻的值应计算在内,以便:它足够低,可以给我们所需的速度。它比输入阻抗小得多(尽管在CMOS器件中,这不是一个大问题)。它足够大,不会使CMOS输出电压过载,特别是在低电平下。对于那些具有相对较高输出阻抗的CMOS输出(CD40xx系列)来说,这尤其是一个问题。它足够大,以避免过多的电流流入3.3V电源轨。它足够大,可以将电流消耗保持在可接受的水平。

优势:

便宜

劣势:

比其他解决方案慢得多。

需要仔细选择电阻值:避免损坏,获得正常的速度,并将高低压保持在正确的范围内。

相对较高的电流消耗。

需要 2 到 4 个附加组件。

噪声裕量差。

需要一个低阻抗驱动输出。

需要相对较高的输入阻抗

4:电阻偏移

我们也可以使用电阻分压器引入失调。这种简单的解决方案比二极管偏移更便宜(但速度稍慢),并且仍然存在电流流入输出引脚的问题。

一个简单的电阻分压器将允许为我们的3.3V输出增加一个失调。更好的解决方案是在输出中添加一个虚拟负载,该负载将吸附来自5V通过R1和R2的电流。另一种看待这一点的方法是,断开输出,根据计算值,R1-R2-R3将形成电阻分压器,R3两端的电压最多为3.3V。图中指示的值以术语或通用“R”值表示。

当输出为3.3V时,添加R3将允许将来自5V的任何电流分流至地(而不是通过输出引脚分流至3.3V。

当输出为0时,电压将为5V *(R2/(R1+R2)),即1V,低于1.5V阈值。当输出为3.3V时,电压将为5V * (R2/(R1+R2)) + 3.3V * (R1/(R1+R2)) = 3.64V。通过调整R1/R2比率可以实现更好的高电平值,但必须考虑到,当输出为0V时,电压应小于1.5V。注意:我们分别以0和3.3V作为CMOS输出电压,当输出分别为低电平和高电平时。虽然高电平电压没有问题(除非R3太低)(因为它被R1 + R2拉起),但低电平电压将根据流入输出的电流而增加。

优势:

比二极管偏移量便宜。

劣势:

比二极管失调解决方案慢,特别是在高到低的过渡中,因为电流流过R1和R2,相对于二极管,R1和R2的阻抗要高得多。

需要仔细选择电阻值,以避免损坏,获得适当的速度,并将高低压保持在正确的范围内。

相对较高的电流消耗。

需要 2 到 3 个附加组件。

噪声裕量差。

需要一个低阻抗驱动输出。

需要相对较高的输入阻抗。

5、三极管或MOS管转换

如果可以接受或需要反相信号,则可以使用简单的MOSFET/BJT。否则,可以使用其他阶段。

上图中是简单的三极管的反相器。级联两个将允许实现直接信号,而不是反相信号。

上图是MOSFET的 版本,使用的器件更少,但价格更昂贵。

优势:

相对于二极管偏移,尺寸要简单得多。

更好的噪声裕量,因为低电平和高电平都接近电源轨。

劣势

需要 2/3 个外部组件。

它是反相的。

相对较慢的由低变为高的时间。

相对于MOSFET实现,BJT实现实际上相对较慢,因为BJT关断特性相对较慢。

当MOSFET/BJT处于导通状态时,消耗相对较高。

需要相对较高的输入阻抗

6、MOS管转换

上图的工作原理很简单。当输出为3.3V时,MOSFET将处于关断状态,因为VGS=0V,因此输出由上拉电阻保持在5V。如果输出为低电平,则 VGS 为 3.3V。假设MOSFET具有逻辑电平阈值(当VGS = 2.5V时应完全导通),MOSFET将导通,将低电平值传递至5V输入。

优势:

双向

相对简单的解决方案。

它不会使输入反相,就像通用源配置中的单个 MOSFET/BJT 一样。

劣势:

需要 2 个外部元件

相对较慢。

需要一个低阻抗驱动输出以避免过载。

功耗相对较高。

需要相对较高的输入阻抗。

7、三极管转换

这种方案与上面的MOS管方案类似,只是这里使用了三极管。工作原理是相同的,当output输出3.3V时,三极管截止。此时Input的电压被电阻上拉到5V。当output输出0V时,三极管导通,input的电压为三极管的Vce电压。它与前一个电路具有相同的优点,但也引入了一些额外的缺点。

优势:

双向

相对简单的解决方案。

它不会使输入反相,就像通用源配置中的单个 MOSFET/BJT 一样。

劣势:

需要 3 个外部组件。

相对较慢。

需要一个低阻抗驱动输出以避免过载。

功耗相对较高。

需要相对较高的输入阻抗。

BJT饱和集电极至发射极电压(VCESAT)被添加到低电平输出电压中。不过,一般不印象使用。

8:使用电平转换IC

专用电平转换器 IC(如 74LVC1T245)将满足您所需的一切需求,与分立式解决方案相比具有更好的性能,但价格要高得多。有许多变体,例如具有不同速度(和价格)的更多通道(74LVC8T245,74LVC16T245)或不同的逻辑系列(74ALVT162245)。

当您需要高性能 3.3V 至 5V 电平转换(通常在高速总线、时钟等中)时,请使用此解决方案。

与其他解决方案相比,电平转换器通常性能更好,特别是在噪声裕量和速度方面(直接连接除外)。

优势:

快速(即使不如直接连接快,因为增加了一个小的延迟)。

高噪声裕量

劣势:

需要一个电平转换器,可能还需要 2 个去耦电容器(每个电源域一个)。

贵。

9、使用隔离器件

该解决方案是“任何电压到任何电压”的转换器,因此它也可用于3.3V到5V的转换。有 4 种配置,具体取决于您的要求。

上图中是采用光耦合器的非反相配置。

上图是使用使用光耦合器的反相配置。请注意,某些配置需要强大的低电平输出驱动器(而在高级输出强度方面没有任何要求),而另一种配置则需要强大的高级输出驱动程序。同样,输出将提供一个强的上拉/下拉路径(通过耦合器)和一个较弱的上拉/下拉路径(分别通过下拉/上拉电阻)。

您可以使用基于电容式、巨磁阻或磁耦合的更新器件,而不是使用标准光隔离器,即使这些器件通常要昂贵得多。

优势:

电气绝缘。

更好的安全性。

“任何电压到任何电压”转换。

您可以选择反转信号。

劣势:

通常速度较慢,除非使用高速隔离器。

相对昂贵。

相当笨重的设备。

高功耗。

输出和输入阻抗有一些限制。

E N D

相关问答

MCS— 51单片机 I/O口的 输入 / 输出 逻辑电平是多少?

逻辑电平和51没有关系,和芯片工艺有关,一般为5V或者3.3V.逻辑电平和51没有关系,和芯片工艺有关,一般为5V或者3.3V.

51单片机 p0口用作 输出 时应外接什么?

因为P0口没有内部上拉电阻,所以要接上拉电阻,其他P口就不需要了1、P0的8位皆为漏极开路输出(OpenDrain,OD),千万不要误解为图腾式输出,每个引脚可驱动8...

怎么用 51单片机 控制 输出 稳定连续的0~5V的电压?

51单片机IO口输出高电平时,接近VCC,可以按VCC来计算。你使用5V供电,IO输出高电压平应该按5V计算。LED限流电阻=(5V-led工作时端电压)/led工作电流LE...

51单片机 p口 输出 电压多少伏?

答:51单片机输出低电平驱动能力很强,至少可达20mA~50mA。高电平驱动能力很弱,电流在5mA以下。带动4~8个TTL负载是指一个输出类的IO口可与4~8个TTL的输入引脚相...

51单片机 端口 输出 高电平时,电压约为多少?

你好,51单片机输出高电平时,电压约为5V,这是因为51单片机主控芯片内部供电电压为5V。需要注意的是,输出高电平时,单片机的输出引脚可以提供的最大电流为20mA...

基于 51单片机 怎么让pcf8591 输出 正弦波形?

pcf8591是一个有4个模拟输入,一个模拟输出,这个芯片与单片机之间的通信是通过IIC实现的,单片机可以控制一个模拟输出,将模拟输出等时的一位一位的增加后一位...

51单片机 P0口做 输入 口时需要先写一并且外接上拉电阻,是这样的吗?

51单片机P0口做输入口时需要先写1即可,外部不需要上拉电阻。其实,单片机上电复位时,P0已全部为置1状态,就可以直接读输入状态了。只有输出过低电平,再读输入...

51单片机输出 为什么不是高电平有效?

因为51单片机的引脚是准双向口,在输入前置高电平,是为了正确读引脚的内容,也就是说,在输出变输入前,必须送高电平才能正确读到数,已经是输入状态,可以不再...

51单片机 ,引脚 输出 电流有多大-ZOL问答

但一般的单片机有一定的输出功率,在功率限制下,电流一般为30~40ma,两个,还需要要一个232转TTL,放在P3.0与P3.1口上,一个RXD,一个TXD,正好一个下载一个上传...

multisim怎么使用 51单片机 的头文件?

1.利用multisim建立一个Design,放置一个51单片机,根据向导建立一个51单片机的源代码工程,并选择生成一个main.c文件。2.在生成的main.c中有一个main函数,输...1....

猜你喜欢