80C51并行口结构与驱动 [附:按键消抖分析]

本文详细介绍了80C51单片机的4个并行口P0、P1、P2和P3的结构和功能,包括在不同情况下的使用方式,如作为通用I/O口、地址/数据总线等。同时,讨论了P0口作为准双向口和双向口的区别。此外,文章还探讨了按键消抖的重要性,提供了硬件和软件消抖的方法,以确保正确处理键输入。
摘要由CSDN通过智能技术生成

       80C51单片机有4个8位的并行I/O接口,分别是P0、P1、P2和P3。各口都是由口锁存器、输出驱动器和输入缓冲器组成。各口编址于特殊功能寄存器中,既有字节地址又有位地址。对各口锁存器的读写,就可以实现口的输入/输出操作。

       当不需要外部程序存储器和数据存储器扩展时,P0口、P2口可用作通用的输入/输出口;

       当需要外部程序存储器和数据存储器扩展时,P0口作为分时复用的低8位地址/数据总线,P2口作为高8位地址总线。

       P1口是80C51唯一的单功能口,仅能用作通用的数据输入/输出口。

     

 

       虽然每口的功能不同,结构也存在一些差异,但每个口的位结构是相同的。所以,口结构就以其位结构进行说明。


P0口的结构

       P0口由一个输出锁存器、一个转换开关MUX、两个三态输入缓冲器、输出驱动电路、一个与门和一个反相器组成。当C=0时,开关处于图中所示位置;当C=1时,开关拨向反相器输出端位置。



       P0用作通用I/O口(C=0)

       当系统不进行片外ROM扩展(即EA=1),也不进行片外RAM扩展时,P0用作通用I/O接口。在这种情况下,单片机硬件自动使控制C=0,MUX开关接向锁存器的反相输出端。另外,与门输出的“0”使输出驱动器的上拉场效应管T1处于截止状态。因此,输出驱动级工作在需要外接上拉电阻的漏极开路方式。

       作输出口时,CPU执行口的输出指令,内部数据总线上的数据在“写锁存器”信号的作用下由D端进行锁存器,经锁存器的反相端送至场效应管T2,再经T2反相,在P0.X引脚出现的数据与内部总线的数据正好一致。

       作输入口时,数据可以读自口的锁存器,也可以读自口的引脚。这时要根据输入操作采用的是“读锁存器”指令还是“读引脚”指令来决定。

       CPU在执行“读—修改—写”类输入指令时(如:ORL P0,A),内部产生的“读锁存器”操作信号,使得锁存器Q端数据进入内部数据总线,在与累加器A进行逻辑运算之后,结果又送回P0的口锁存器并出现在引脚上。读口锁存器可以避免因外部电路原因使原口引脚的状态发生变化造成的误读(例如,用一根口线驱动一个晶体管的基级,在晶体管的射极接地的情况下,当向口线写“1”时,晶体管导通,并把引脚的电平拉低到0.7V。这时若从引脚读数据,会把状态为1的数据误读为“0”。若从锁存器读,则不会读错)。

       CPU在执行“MOV”类输入命令时(如,MOV A,P0),内部产生的操作信号是“读引脚”。这时一定要注意,在执行该类输入指令前要先给锁存器写入“1”,目的是使场效应管T2截止,使引脚处于悬浮状态,可以作为高阻抗输入;否则,在作为输入方式之前曾向锁存器输出过“0”,T2导通会使引脚钳位在“0”电平上,使输入高电平“1”无法接入。所以,P0口在作为通用I/O口时,属于准双向口。

       P0用作地址/数据总线(C=1)

       当系统进行片外ROM扩展(即EA=0)或进行片外RAM扩展(外部RAM传送使用“MOVX@DPTR”或“MOVX@Ri”类指令)时,P0口不再做I/O口使用,而是先传送地址,后传送数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值