打印
[牛人杂谈]

M051之通用输入输出口

[复制链接]
1367|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
M051 微控制器共有40 个通用I/O 口,并可复用为特殊功能引脚,如串行口输入输出接口、外部中断触发、PWM 输出等功能。这40 个引脚分别分配在P0、P1、P2、P3、P4 这五个端口上,每个端口最多有8 个引脚,且各引脚之间都是相互独立的,可通过相应的寄存器来控制引脚的工作模式和读取当
前引脚的数据。
每个I/O 引脚上的I/O 类型都能够通过软件独立地配置为输入、输出、开漏或准双向模式。当MCU复位时,端口数据寄存器Px_DOUT[7:0]的值为0x000_00FF。每个I/O 引脚配有110K 欧~300K 欧的非常弱的上拉电阻到输入电源(VDD)上,输入电源可为5V~2.5V。

沙发
xuanhuanzi|  楼主 | 2018-3-18 16:43 | 只看该作者
通用I/O模式的设置
通用I/O 工作模式可分为输入模式、输出模式、开漏模式、准双向模式这四种模式,模式的选择需要
对I/O 模式控制寄存器Px_PMD[1:0]进行编程,当P0/1/2/3/4 被设置为推挽模式或准双向模式时,
源电流和灌电流的参数如下表


注:P0/1/2/3/4 管脚被外部由 1驱动到 0时, 可作来输出电流的源端,在 VDD=5.5V时, 当输入电压
范围接近 2V时,输出电流达到最大值。

使用特权

评论回复
板凳
xuanhuanzi|  楼主 | 2018-3-18 16:56 | 只看该作者
输入模式
设置Px_PMD(PMDn[1:0])为00'b,Px[n]为输入模式,I/O 引脚为三态(高阻态),没有输出驱动能力。Px_PIN 的值反映相应端口引脚的状态.输出模式
设置Px_PMD(PMDn[1:0])为0x01,Px[n]为输出模式,I/O 引脚支持数字输出功能,有拉电流/灌电流能力。Px_DOUT[0:7]相应位的值被送到相应引脚上。

开漏输出模式6.8.4.3
设置Px_PMD(PMDn[1:0])为 10’b,Px.n为开漏模式,I/O支持数字输出功能,但仅有灌电流能力, 为了把I/O引脚拉到高电平状态,需要外接一颗上拉电阻。如果Px_DOUT相应位的值为“0”,引脚上输出低电平. 如果Px_DOUT 相应位的值为“1”, 该引脚由外部上拉电阻控制输出高电平。

准双向模式
设置Px_PMD(PMDn[1:0]) 为11’b,Px.n引脚为准双向模式,I/O同时支持数字输出和输入功能,但拉电流仅达数百uA. 要实现数字输入功能,需要先将Px_DOUT 相应位置1。准双向输出是80C51及其派生产品所共有的模式。若Px_DOUT相应位为”0”, 引脚上输出为“低电平”. 若Px_DOUT相应位为”1”, 该引脚将检查引脚值. 若引脚值为高,没有任何动作,若引脚值为低,该引脚将驱动2个时钟周期的强拉电流,然后关闭强输出驱动,然后引脚状态由内部上拉电阻控制。


使用特权

评论回复
地板
xuanhuanzi|  楼主 | 2018-3-18 16:56 | 只看该作者
准双向模式
设置Px_PMD(PMDn[1:0]) 为2’b11,Px[n]引脚为准双向模式,I/O 同时支持数字输出和输入功
能,但拉电流仅达数百uA。要实现数字输入,需要先将Px_DOUT 相应位置1。准双向输出是80C51 及
其派生产品所共有的模式。若Px_DOUT 相应位bit[n]为”0”, 引脚上输出为“低电平”。若Px_DOUT 相
应位bit[n]为”1”, 该引脚将核对引脚值. 若引脚值为高,没有任何动作,若引脚值为低,该引脚置为
强高需要2 个时钟周期,然后禁用强输出驱动,引脚状态由内部上拉电阻控制。
注: 准双向模式的拉电流能力仅有 200uA 到30uA(相应 VDD的电压从 5.0V到 2.5V)。

使用特权

评论回复
5
xuanhuanzi|  楼主 | 2018-3-18 17:24 | 只看该作者
相关寄存器


使用特权

评论回复
6
xuanhuanzi|  楼主 | 2018-3-18 17:25 | 只看该作者
GPIO 中断和唤醒功能
通过Px_IEN 和Px_IMD寄存器,每个GPIO引脚都可以设置为中断源。有5种类型的中断条件可以选择:低电平触发、高电平触发、下降沿触发、上升沿触发、上升和下降沿都触发。对于边沿触发,用户可以使能输入信号去抖动功能来避免由干扰导致的不期望的中断发生。de-bounce 时钟源和采样周期可以由DBNCECON 寄存器设定。.
当芯片进入空闲/睡眠模式时,GPIO也能唤醒芯片。如果使用GPIO唤醒芯片,唤醒触发条件和中断触发条件一致,但是有2件事情需要注意(只有M05xxBN):
1. 进入空闲/睡眠模式之前要确定I/O 的状态
当时有GPIO反转来唤醒系统时,在进入空闲/睡眠模式之前,用户必须确认I/O口的状态。
如果设定的是高电平/上升降沿唤醒,进入空闲/睡眠模式之前必须确认I/O为低电平;如果设定的是低电平/下降沿唤醒,进入空闲/睡眠模式之前必须确认I/O为高电平。
2. 进入空闲/睡眠模式之前要关闭I/O去抖动功能
如果指定的I/O唤醒引脚使能了输入信号去抖动功能,当系统由GPIO唤醒时,系统将发生两次GPIO中断事件。一个中断事件由唤醒导致,另一个由I/O 输入去抖动功能导致。使能空闲/睡眠功能之前,用户应该关闭去抖动功能,以避免两次中断事件。

使用特权

评论回复
7
huangcunxiake| | 2018-3-18 18:29 | 只看该作者
复用管脚,一般默认的都是GPIO吗s

使用特权

评论回复
8
xinpian101| | 2018-3-19 13:06 | 只看该作者
如果做矩阵键盘用这些GPIO的不同模式是不是就可以不像51一样需要上拉电阻

使用特权

评论回复
9
xinpian101| | 2018-3-19 13:14 | 只看该作者
如果做矩阵键盘用这些GPIO的不同模式是不是就可以不像51一样需要上拉电阻

使用特权

评论回复
10
xixi2017| | 2018-3-20 17:23 | 只看该作者
学430时候还带上拉电阻,好像CortexM没有s

使用特权

评论回复
11
小明的同学| | 2018-3-20 22:13 | 只看该作者
定时器和IO用好了,可以干很多事情了。其他的外设都可以模拟了。

使用特权

评论回复
12
小灵通2018| | 2018-3-21 14:52 | 只看该作者
每个I/O 引脚配有110K 欧~300K 欧的非常弱的上拉电阻到输入电源

使用特权

评论回复
13
小灵通2018| | 2018-3-21 15:17 | 只看该作者
准双向模式下,I/O引脚内部上拉电阻被使能。
开漏输出模式
设置Px_PMD(PMDn[1:0])为 10’b,Px.n为开漏模式,I/O支持数字输出功能,但仅有灌电流能力, 为了把I/O引脚拉到高电平状态,需要外接一颗上拉电阻。如果Px_DOUT相应位的值为“0”,引脚上输出低电平. 如果Px_DOUT 相应位的值为“1”, 该引脚由外部上拉电阻控制输出高电平。

使用特权

评论回复
14
小灵通2018| | 2018-3-21 15:18 | 只看该作者
准双向模式
设置Px_PMD(PMDn[1:0]) 为11’b,Px.n引脚为准双向模式,I/O同时支持数字输出和输入功能,但拉电流仅达数百uA. 要实现数字输入功能,需要先将Px_DOUT 相应位置1。准双向输出是80C51及其派生产品所共有的模式。若Px_DOUT相应位为”0”, 引脚上输出为“低电平”. 若Px_DOUT相应位为”1”, 该引脚将检查引脚值. 若引脚值为高,没有任何动作,若引脚值为低,该引脚将驱动2个时钟周期的强拉电流,然后关闭强输出驱动,然后引脚状态由内部上拉电阻控制。

使用特权

评论回复
15
小灵通2018| | 2018-3-21 15:18 | 只看该作者
貌似跟上拉扯上关系的就这两个模式吧

使用特权

评论回复
16
天灵灵地灵灵| | 2018-3-21 17:17 | 只看该作者
若Px_DOUT 相应位bit[n]为”1”, 该引脚将核对引脚值. 若引脚值为高,没有任何动作,若引脚值为低,该引脚置为强高需要2 个时钟周期,然后禁用强输出驱动,引脚状态由内部上拉电阻控制。
看到没,准双向模式下,输入高电平那么将会内部上拉。

使用特权

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

本版积分规则

173

主题

2211

帖子

3

粉丝