续上一篇,依旧学习8051单片机的硬件结构以及I/O口的电路结构。
(1)UART是 通用的异步的接收发送串口。
211个寻址位的位地址,位地址范围为00H~FFH,其中00H~7FH 这128位处于片内RAM字节地址20H~2FH单元中,每一位都可以进行置1或清0,每一位也可以进行读和写。
如图:
其余的83个可寻址位分布在特殊功能寄存器SFR中,如图:
可被位寻址的特殊寄存器有11个,共有位地址88个,5个位未用,其余83个位的位地址离散地分布于片内数据存储器区字节地址为80H~FFH的范围内,其最低位的位地址等于其字节地址,且其字节地址的末位都为0H或8H。
存储器结构图:
?注:关键在于EA引脚怎么接,在用proteus仿真时,默认为高电平(=1)
4个8位并行1/0端口,为P0、P1、P2和P3,其输出锁存器属特殊功能寄存器
端口组成:每位均由输出锁存器、输出驱动器和输入缓冲器组成
4个端口均可位寻址。
双功能的8位并行端口,字节地址为80H,位地址为80H~87H,在端口的地方有一个锁存器其实就是特殊功能寄存器。
PO口某一位的位电路结构,如图:
?要求:必须掌握P0口的工作过程
回顾:P0口是分时服用的并行I/O口,一是做总线口,另外做A/O口
总线口:
先发出低8位地址后,被外部的8地锁存器能锁住,然后再作为数据端口,由于单片机引脚树目有限,所以是分时服用的,当作为总线口时,先发低8位地址,在往外发数据。
P0口位电路包括:
? (1)1个数据输出的锁存器。
? (2)2个三态的数据输入缓冲器,分别是用于读锁存器数据的输入缓冲器BUF1和读引脚数据的输入缓冲器BUF2。
? (3)一个多路转接开关MUX,它的一个输入来自锁存器的 Q*端,另一个输入为地址/数据信号的反相输出。MUX由“控制”信号控制,实现锁存器输出和地址/数据信号间转接。
? (4)数据输出的控制和驱动电路,由2个场效应管(FET)组成。
做总线口:
开关MUX由控制信号控制,打到了地址/数据的另一端,控制信号的另一端由于片内硬件结构使其为1,所以与门打开,地址和数据那端,就是要发的地址或者数据,当它发出为1时,另一端为0,MUX开关打向这里,进而使得场校应管截止,控制信号的输入与门为1,数据那端输入也为1,所以与门的输出为1,加到长向管上吗,使得其导通,由于下面那个长向管截止,那么在下面那个长向管上面的一段为高电平(=1),那么他(P0)的输出就为1,这是做总线口时的工作状态。
做数据I/O口:
控制信号为0,开关MUX与锁存器一端相连接,然后CPU自动往D写个1,则对面的Q也为1,则Q一把为0,与下面的场效应管相连,使得其截止,由于控制信号为0,只要开关与锁存器相连,那么地址/数据那一端也为0,则与门为0,上面的场效应管也截止,所以做输入时两个场效应管都截止,那么数据就通过PO口进入单片机内,由于他俩都截止了,所以从引脚往里看,都是悬浮态,是高阻态,使得其余外部隔绝。
所以P0口与另外三个口不同,是双向口,双向口的最大特点就是具有高阻悬浮态。
数据进来之后,还有一个三态门,这个三态门,由执行的指令来控制,往里面读入数据有两种可能,一种是读引脚,另一种是读锁存器,硬件通过所编写的指令来进行区分。
读引脚:
信号有效,三态门打开进到片内。
读锁存器:
读的是,刚才输入进去的0或1的状态,读Q端通过三态门进去,进入片内。
注:PO做输入数据的I/O口,必须外接一个上拉电阻,才能使其端口为高电平。
差别:
直接读引脚并不能反映,刚刚是往锁存器写的是0还是1,这就会出错。所以读引脚还是读锁存器,单片机有自己的汇编指令。
注:
(1)在实际中,进行设计时,只要外部扩有外部RAM和I/O口,只要他们是统一编制的,就要用P0口作为总线口,作总线口就不会做I/0口,做I/0口,一定要接上拉电阻,是准双相口,这样才有高电平输出。但是做总线口,作为低8位地址和数据端口,不用外加,是双相口。
(2)如果有一个上拉电阻连到Vcc,然后从引脚看等效输入阻抗,没有高阻态,是一个准双向口,做I/O口。
(3)单片机复位时,锁存器自动写1
(4)由输出转为输入的时候,一定要写1,目的就是把下面场效应管截止,处于输入状态