51单片机IO口的四种工作状态切换
1.概述
这篇文章介绍单片机IO引脚的四种工作模式,每个模式都有各自的用武之地,后面在驱动外设硬件时会用它不同的模式。
2.IO口四种工作模式介绍
PnM1 | PnM0 | I/O口工作模式 |
---|---|---|
0 | 0 | 准双向口:灌电流达20mA, 上拉电流为150~270uA |
0 | 1 | 推挽输出:强上拉输出达20mA,外接限流电阻 |
1 | 0 | 高阻输入 |
1 | 1 | 开漏:内部上拉电阻断开,外接上拉电阻。既可以读外部状态也可对外部输出 |
名词解释
灌电流:VCC给其他IO引脚输入的电流
上拉电流:其他IO引脚到GND的电流
2.切换IO口四种工作模式
下面切换IO口工作模式是基于STC12C2052单片机介绍,该单片机默认IO模式为准双向。下面介绍下如何将它切换为其他的模式。
2.1.切换I/O口模式原理
单片机切换不同的模式是通过对PnM1和PnM0两个寄存器值的修改实现,下面介绍下修改原理。
- PnM1和PnM0中的n表示修改第几组IO接口,例如修改P1组I/O口,设置为P1M1和P1M0;修改P3组I/O口,设置为P3M1和P3M0
- PnM1和PnM0的值采用16进制,下面通过一个例子介绍如何计算它的值。
例如:设置P1.7和P1.6两个引脚为推挽输出模式
引脚组名 | 第8位 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 第1位 |
---|---|---|---|---|---|---|---|---|
P1(一组占用一个字节8位) | P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
二进制位 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
将上面表格中的二进制分为高4位和低4位,1100转换为十进制是12,用十六进制值表示就是0xC0。
//设置P1.7 P1.6推挽输出 P1M0和P1M1值
P1M0 = 0X00 // 0000 0000
P1M1 = 0XC0 // 1100 0000
将一组接口的8位二进制分为高4位和低4位,如果要将设置P1.3和P1.2两个引脚为推挽输出模式,低4位也是1100转换为十进制是12,不就和上面的冲突了吗。其实十进制转十六进制时候,十六进制0x后面两位也是分开的,左边一位对应二进制高4位的值,右边一位对应二进制低4位值。
//设置P1.3 P1.2推挽输出 P1M0和P1M1值
P1M0 = 0X00 // 0000 0000
P1M1 = 0X0C // 0000 1100
2.1.切换为推挽输出模式
1.程序代码
下面是定义P1组I/O接口的P1.7 P1.6引脚为推挽模式,该引脚对应二进制中高四位。转换为十六进制是0XC0
/*************************************************************
* 程序名: 设置接口推挽模式
* 编写人: bruce
* 硬件支持:STC12C2052
* 日 期: 2023-11-23
* 修改日志:
/*************************************************************/
#include<STC12C2052AD.H>
// 定义P1.7 和 P1.6接口
sbit LED1 = P1^7;
sbit LED2 = P1^6;
void main(void){
//设置P1.7 和 P1.6接口为推挽模式
P1M0 = 0X00;
P1M1 = 0XC0;
// 定义接口高低电平
LED1 = 1;
LED2 = 0;
}
下面是定义P1组I/O接口的P1.3 P1.2引脚为推挽模式,该引脚对应二进制中低四位。转换为十六进制是0X0C
/*************************************************************
* 程序名: 设置接口推挽模式
* 编写人: bruce
* 硬件支持:STC12C2052
* 日 期: 2023-11-23
* 修改日志:
/*************************************************************/
#include<STC12C2052AD.H>
// 定义P1.3 和 P1.2接口
sbit LED1 = P1^3;
sbit LED2 = P1^2;
void main(void){
//设置P1.3 和 P1.2接口为推挽模式
P1M0 = 0X00;
P1M1 = 0X0C;
// 定义接口高低电平
LED1 = 1;
LED2 = 0;
}
2.硬件电路
设置P1.7 和 P1.6接口为推挽模式
LED灯正极连接单片机9号引脚,负极连接单片机7号引脚,设置为推挽模式后,输出20mA点亮,高亮LED灯。
斜体样式设置P1.3 和 P1.2接口为推挽模式
LED灯正极连接单片机5号引脚,负极连接单片机4号引脚,设置为推挽模式后,输出20mA点亮,高亮LED灯。