C51 IO输入输出

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.1TXD    串行数据发送
P3.2 INT0    外部中断 0 输入
P3.3 INT1外部中断 1 输入
P3.4 T0    定时器 0 外部计数输入
P3.5 T1定时器 1 外部计数输入
P3.6 WR     外部数据存储器写控制
P3.7 RD     外部数据存储器读控制

引脚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chem4111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值