这是一个古老的问题,对于现在的单片机,其实不存在这个问题,但是讲解一下还是好的,只是希望兄弟能及时采纳,我做任务呢.
这个要从微电子角度回答:
单片机的P2口是双向口,就是可以输入,输出,不需要先进行设置,而其他单片机则不然,比如AVR单片机,你想要输出数据,你先要把引脚设置成输出状态,再决定向输出寄存器写0还是1,从而达到输出低电平或者高电平,你想要读入数据,先要把引脚设置成输入状态,再让CPU读输入寄存器.
而51单片机是双向口,所以只有一个P2寄存器,不存在P2的输出寄存器或者P2的输入寄存器,只有一个P2.
那么,单片机复位的时候,P2的引脚是高电平,那么P2的寄存器是什么呢?一定是0xFF吗?
不一定,这里涉及两个概念,P2寄存器,P2引脚,所以,先要执行 P2 = 0xFF,这是把P2的寄存器设置成0xFF这时候,同时也是保证了P2寄存器与P2引脚的可靠联通,这样,再读取P2引脚的时候,P2寄存器就能保证与P2引脚一致了.
如果没有这句,有可能P2的引脚虽然是高电平,但是没有与P2寄存器可靠联通,从而误判断,明明P2引脚全是高电平,P2的寄存器却有一个低电平在里面......
当然,随着后续工艺的改进,这个问题在现在的51单片机上几乎不存在了