打印
[技术问答]

单片机IO口详解

[复制链接]
1030|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mickit|  楼主 | 2024-10-19 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

一、三态

单片机IO的三态是指:高电平(1)、低电平(0)、高组态(Z)。

二、高阻态

高阻i是一种电路状态.既不是高电平,也不是低电平,以高阻态对下级电路输出,下级电路什么影响也没有.高阻态的IO电平高低,随下级电路变化而变,下级为高,它就是高,下级是低它就是低.可以看成是悬空状态.

所以,高阻状态的作用就是你不会影响其他,这在总线通讯中特别重要

像通用的51单片机,IO口都有这样的标注(下图是CMS5880的IO引脚配置截图)

当你设置成输入时,此时引脚状态就是高组态。有些单片机规格书翻译不太准确,

应该要翻译成:0=  引脚被配置为输入(高阻抗)
翻译成“高阻抗”应该是比较准确的,
翻译成“三态”容易引起误解

三、IO模式的内部结构

现在我们拿我们入门学得at89c51来分析其引脚端口结构。

1.P0口双向八位三态IO

P0口大家肯定不陌生,想当初第一次画最小系统板,在P0口接上拉电阻,从而点灯点不亮。那为什P0口要加上拉电阻呢?

这是P0口内部结构图,首先P0口的上面那个三极管D0是在进扩展存储器或扩展总线时使用MOVX指令时才会控制它的导通和截止,在不用此指令时都是截止的。也就是我们平常使用如:P0_1=0 P0_1=1这些语句时控制的都是下面那个三极管D1。

当P0=0时,等效图是中间的,三极管D1导通,P0点的电位为0。

而当P0=1时,等效图是右边的,三极管D1截止,而上面的三极管D0始终是截止的,这样P0点就等效于悬空了,所以要外接上拉电阻,才能有高电平。

所以,当你置1时,由于内部没有上拉电阻,所以为高组态,不能正常输出高、低(高组态输出的电平不确定)

2.P1口准双向IO

内带上拉电阻

当P1=0时,三极管D导通,见中间的等效图

当发出P1=1的指令后,三极管D截止,见右边等效

那为什么叫准双向IO,因为当IO口要设置为输入时,需要先想该端口写“1”,单片机才能正确读取外部的高低电平。

也就是要现有个准备过程,所以叫“准双向3”.P2 P3也是。

双向口与准双向口的区别主要是:准双向口I/O口操作时做数据输入时需要对其置1,否则若前一位为低电平,后一位输入的电平为高则MOS管拉不起来导致出错。而双向口则不需要做此动作,因为双向口有悬浮态。
准双向口就是做输入用的时候要有向锁存器写1的这个准备动作,所以叫准双向口。
真正的双向口不需要任何预操作可直接读入读出。
1:准双向一般只能用于数字输入输出,输入时为弱上拉状态(约50K上拉),端口只有两种状态:高或低。
2:双向除用于数字输入输出外还可用于模拟输入输出,模拟输入时端口通过方向控制设置成为高阻输入状态。双向端口有三种状态:高、低或高阻


使用特权

评论回复
沙发
eleg34ance| | 2025-1-15 19:52 | 只看该作者
单片机的IO口是单片机与外部设备进行数据交互的重要接口。IO口的功能和配置是单片机开发中的基础知识

使用特权

评论回复
板凳
twinkhahale| | 2025-1-15 21:07 | 只看该作者
IO口的主要功能是输入和输出:输入模式:读取外部信号(如按键状态、传感器信号等)。输出模式:控制外部设备(如LED、继电器、电机等)

使用特权

评论回复
地板
suiziq| | 2025-1-15 23:25 | 只看该作者
单片机的IO口通常由以下部分组成:数据寄存器,用于存储IO口的输入或输出数据。例如:Px寄存器(如P1、P2等)。方向寄存器:用于配置IO口的方向(输入或输出)。例如:DDRx寄存器(如DDR1、DDR2等)。

使用特权

评论回复
5
ewyu| | 2025-1-16 08:15 | 只看该作者
上拉/下拉电阻:用于在输入模式下稳定信号。例如:通过配置PUR(上拉电阻寄存器)或PDR(下拉电阻寄存器)启用

使用特权

评论回复
6
hhdhy| | 2025-1-16 09:21 | 只看该作者
某些IO口可以复用为其他功能(如UART、SPI、I2C等)。通过配置复用寄存器实现。

使用特权

评论回复
7
一切D都好| | 2025-1-16 11:10 | 只看该作者
IO口的工作模式通常包括几种输入模式、输出模式、浮空模式和模拟模式等等

使用特权

评论回复
8
nqty| | 2025-1-16 14:06 | 只看该作者
以常见的8位单片机为例,配置IO口的步骤如下:设置方向寄存器:配置IO口为输入或输出。例如:DDR1 = 0xFF; 将P1口配置为输出。设置数据寄存器:在输出模式下,设置IO口的电平。例如:P1 = 0x55; 将P1口的第0、2、4、6位设置为高电平。启用上拉/下拉电阻(可选):在输入模式下,启用上拉或下拉电阻。例如:PUR1 = 0xFF; 启用P1口的上拉电阻。配置复用功能(可选):如果需要复用功能,配置复用寄存器。例如:AFSEL1 = 0x01; 将P1.0配置为UART功能。

使用特权

评论回复
9
yuliangren| | 2025-1-16 15:09 | 只看该作者
IO口的输出电流能力通常有限(如20mA)。驱动大电流设备时,需要外部驱动电路(如晶体管、MOS管)

使用特权

评论回复
10
teaccch| | 2025-1-16 16:27 | 只看该作者
一般来说,电平范围,高电平:通常为VCC(如3.3V或5V)。低电平:通常为0V。

使用特权

评论回复
11
星星点点didi| | 2025-1-16 19:50 | 只看该作者
输入模式下,IO口的输入阻抗较高(如几十kΩ)。IO口通常具有抗干扰设计(如施密特触发器)

使用特权

评论回复
12
Stahan| | 2025-1-19 23:30 | 只看该作者
三态感觉更难理解啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

1352

帖子

1

粉丝