1.IO对应的寄存器
P0(80H):P0 口锁存器,双向 8 位 I/O 口(可复用为地址 / 数据总线)。
P1(90H):P1 口锁存器,准双向 8 位 I/O 口。
P2(A0H):P2 口锁存器,准双向 8 位 I/O 口(可复用为高 8 位地址线)。
P3(B0H):P3 口锁存器,准双向 8 位 I/O 口,每一位有第二功能(如串口、中断、定时器等)
2. 输出工作原理
当作为输出口时,CPU 通过写入数据到端口寄存器(如 P0),控制内部 MOS 管导通或截止,从而使引脚输出高电平或低电平:
输出高电平时:内部上拉电阻导通,引脚呈现高电平(P0 口无内部上拉,需外部电阻)
输出低电平时:下拉 MOS 管导通,引脚接地,呈现低电平
3. 输入工作原理
作为输入口使用时,需先向端口寄存器写入0xFF(全 1),使内部 MOS 管截止,此时引脚状态可被内部缓冲器读取:
读引脚:通过MOV C, P0.0等指令直接读取外部引脚状态
读锁存器:通过MOV A, P0等指令读取端口寄存器的值(用于某些特殊操作)
4.按键控制小灯代码
(此处输入引脚硬件电路默认上拉)
/**************************************************************************************
* 独立按键实验 *
实现现象:下载程序后按下K1按键可以对D1小灯状态取反。
注意事项:无
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P3^1; //定义P31口是k1
sbit led=P2^0; //定义P20口是led
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : keypros
* 函数功能 : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros()
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
led=~led; //led状态取反
}
while(!k1); //检测按键是否松开
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
while(1)
{
keypros(); //按键处理函数
}
}
5.各端口详细说明
(1)P0 口(80H)
结构特点:漏极开路设计,无内部上拉电阻,作为普通 I/O 口使用时需外接 10kΩ 上拉电阻
双重功能:
普通 I/O 口:8 位双向口,可输入输出数据
复用功能:访问外部存储器时,分时作为低 8 位地址线(A0~A7)和 8 位数据线(D0~D7)
应用场景:需要大电流驱动的外部设备、外部存储器扩展
(2) P1 口(90H)
结构特点:准双向口,内部集成上拉电阻,无需外部电阻
功能:唯一纯 I/O 口,无复用功能,每一位均可独立作为输入或输出
应用场景:LED 指示灯、按键、传感器等简单外设连接
(3)P2 口(A0H)
结构特点:准双向口,内部带上拉电阻
双重功能:
普通 I/O 口:8 位双向口
复用功能:访问外部存储器时作为高 8 位地址线(A8~A15)
注意:当系统扩展外部存储器时,P2 口通常被用作地址线,不能再作为普通 I/O 口
(4)P3 口(B0H)
结构特点:准双向口,内部带上拉电阻
双重功能:
普通 I/O 口:8 位双向口
第二功能:每一位都有特殊功能,如下表:
引脚 | 第二功能 | 说明 |
P3.0 | RXD | 串行数据接收 |
P3.1 | TXD | 串行数据发送 |
P3.2 | INT0 | 外部中断 0 输入 |
P3.3 | INT1 | 外部中断 1 输入 |
P3.4 | T0 | 定时器 0 外部计数输入 |
P3.5 | T1 | 定时器 1 外部计数输入 |
P3.6 | WR | 外部数据存储器写控制 |
P3.7 | RD | 外部数据存储器读控制 |
引脚