实验时有一个小问题可以研究一下,就是,为什么P2的高四位是0xF?首先,在我们一开始的时候,整个函数尚未进行,仅仅实现了变量的定义(分配空间)的时候,可以看到仿真结果是P0和P2两个八位寄存器的值都是0xFF,即一开始,就已经将所有位设置为了高电平,所以在后续的时候,P2的第四位不断地发生改变,而高四位则一直延续为0xF。但是为什么一开始的初始值是全为1呢?这和P0,P1,P2,P3这四组端口的性质有关:
首先看一下设计书中对于这四个端口的定义
可以看到对他们的定义就是简单的并行端口,但是这四个并不是完全相同的。书中对他们的记录是这样的:
MCS-51单片机有4个8位的并行接口,记做P0,P1,P2,P3,共32根I/O线,实际上就是SFR中的4个,每个口主要由四部分构成:端口锁存器、输入缓冲器、输出驱动器和引至芯片外的端口引脚。他们都是双向通道,都可以独立的作为输入或输出。
这4个通道的功能不完全相同,P0口和P2口内部各有一个2选1的选择器,受内部控制信号的控制(可以理解为P0M和P2M两组寄存器)。四个接口在进行I/O方式时,特性基本相同:
1)作为输出时,内部带有锁存器,故可以直接与外设相连
2)作为输入时,有两种方式,即读端口和读引脚。读端口实际上不从外部选入