单片机1602一个读忙程序的问题,请大神赐教???

2025-05-09 02:28:35
推荐回答(1个)
回答(1):

这个是典型的关于51单片机的问题,所有的讲51单片机的书上都会指出,
它的端口是弱上拉的结构,读取端口状态之前必须写1。

下面说一下为什么读之前需要先写1.
写1,写的是输出锁存器,读取,读得是端口的状态,或者说是外部输入。这两个操作访问的硬件是不一样的。
输出锁存器输出1的时候,外部电路可以把端口的高电平拉成低电平,因为51是弱上拉。反之,输出锁存器输出0的时候,外部电路是很难把端口的低电平拉成高电平的,拉成高电平就意味着芯片的管脚损坏。
所以,读之前,输出必须写1,这样外部输入可以是高,也可以是低,不会损坏芯片的管脚。反之,如果写0,那么外部电路只能是低电平,如果是高电平,要么读不到,要么管脚损坏。

当然,具体管脚上的硬件要比这里说的复杂,但原理上大概是这样。

回到你的问题,
P1=0xFF是写P1的输出,让输出维持高电平,或者说弱上拉状态。
P1&0x80并不是你想的0xFF&0x80,而是取P1的当前输入的状态与0x80进行与运算。