51单片机,在按下键盘,然后松开之后,为什么电平会恢复?

本人初学单片机,在学习外部中断和键盘时候,有问题一直想不通。

1.51单片机的I/o口,其实就是对应的一些寄存器,每个寄存器八位。
2.51单片机在通电后,I/o口默认都是高电平,也就是对应寄存器各个位都是1,如果在外部接上的器件的话,输出的都是高电平。
3.在程序中,对某个位赋值,比如语句P1.0 = 0,这时候寄存器相应位位就变成了0。
4.而对于外部的动作,比如某个引脚P2.4,通了一个低电平(比如按键,或者是外部中断),这时就应该也是相应寄存器的位会发生变化,我在程序中也是检测这种变化做出相应处理,但是,当外部接入的电平断开后,为什么该引脚的电平(或者说是相应寄存器的相应位)会恢复成原来的高电平呢,之前不是寄存器的值已经改变了呢,怎么会变回来?

希望高手帮忙看看,问题出在哪里,或是哪一条其实是想错了,出了偏差,帮忙指正一下,万分感激!

请先搞清楚单片机IO口的结构。
单片机IO口有读操作和写操作,分别由不同的MOS管进行联通,并且IO口连接有锁存器,并不是直接就是IO口连接IO寄存器各个位。也就是说IO口在写的时候和读的时候经过的电路是不同的,IO口在读的时候读的是锁存器的值,而锁存器在标准状态下时属于弱上拉,能被外部电平拉低,当撤销外部低电平后恢复高电平。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-22
不知道你对51单片机的I/O端口的硬件结构了解多少。以P2口来说,当把它作为普通I/O端口来使用时,实际上它是一种准双向 I/O 口。当要读取外部信息时必须要作为输入端口,而作为输入端口时为了正确读取信息必须使P2.4内部的一个MOS管处于关断状态,所以先要向其写1,这就使其变成了高电平,所以当你按键松开以后这个写入的1依然存在,P2.4恢复高电平。建议你了解一下硬件结构!
第2个回答  2013-04-22
首先声明本人不是高手,其次P2是不可以位操作的,即使你在p2.4接入一个按键,当你按下按键时,P2.4被强制拉成低电平,当你松开时当然自动复位,不过想让他保持,你可以在中断中加上一条语句如:P2=0xf7;,这样可以保持在中断时你的p2.4是低电平,其他的具体情况具体对待、、、
第3个回答  2013-04-22
所有IO口都这样吗?
估计刚好是你选的那个IO口本身内置了上拉电阻什么的.这个要仔细察看一下规格书.
可以尝试在使用前初始化,不用的时候,既然都默认有上拉,那就直接给个低电平保留.
相似回答