51单片机IO口的四种工作状态切换

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两个寄存器值的修改实现,下面介绍下修改原理。

  1. PnM1和PnM0中的n表示修改第几组IO接口,例如修改P1组I/O口,设置为P1M1和P1M0;修改P3组I/O口,设置为P3M1和P3M0
  2. 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灯。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_38039437/article/details/134576974