口是一个综合概念,在单片机中口是集数据输入缓冲、数据输出驱动及锁存多项功能为一体的I/O电路,对于口有时也称为端口。
并行I/O口是单片机硬件结构中的一个重要部分,承担着与外界交换信息的任务,并有第二功能端,系统扩展、接口电路都必须通过I/O口进行。8051共有4个双向的8位并行I/O口,分别记作P0、P1、P2、P3,这些口在结构和特性上有相同之处又各具特点,因此它们在功能和用途上的差别很大,具体叙述如下。
图2-13是P0口的位结构图,它由一个输出锁存器、两个三态输入缓冲器和输出驱动及控制电路组成。它既可作为一般的I/O口使用,也可作为低8位地址和数据总线使用。
(1)P0口作为I/O口。
P0口作为输出口使用时,内部控制端发低电平使与门输出为0,场效应管T1截止,此时多路开关MUX与锁存器的 端接通。输出数据时,内部数据加在锁存器D端,当CL端的写脉冲出现后,与内部总线相连的D端数据取反后出现在右端,经场效应管T2反向出现在P0的引脚上。输出驱动为漏极开路式,需要外接上拉电阻,阻值一般为5 kW~10kW。
当作输入口时,端口中的两个缓冲器用于读操作。执行一般的端口输入指令时,读脉冲将图中下方的三态输入缓冲器打开,这样端口上的数据经缓冲器送至内部总线。
图2-13上方的缓冲器并不直接读端口引脚上的数据,而是读锁存器Q端的数据,Q端与引脚上的数据是一致的。这样设计的目的是为了适应“读修改写”类操作指令。所谓“读修改写”操作是端口处于输出状态,而又需要将端口当前的数据读入CPU,待在CPU中进行运算、修改后,再写到端口上,此种情况下若直接读引脚,有可能得到错误的读入结果。
作为一般I/O口使用时,P0口也是一个准双向口,即在输入数据时,应先向端口锁存器写1,即使Q为0,使两个场效应管都截止,引脚处于悬浮状态,作为高阻抗输入。
图2-13 P0口的位结构图
(2)P0口作为地址/数据分时复用总线。
单片机系统扩展片外存储器时,P0口作为输出地址/数据分时复用总线使用。此时内部控制端信号为高电平1,多路开关MUX将CPU内部地址/数据经反向器输出端与场效应管T2接通,同时与门开锁。输出的地址或数据信号通过与门驱动上拉场效应管T1,又通过反向器驱动下拉场效应管T2。这种结构大大增加了负载能力。
P1口是通用I/O准双向静态端口,输出的信息有锁存。图2-14是P1口的位结构图。由图可见,P1端口与P0端口的主要区别在于Pl端口用内部上拉电阻代替了场效应管T1,P2、P3口在这一点上与P1相同,输出信息仅来自内部总线。
P1端口是单片机中唯一仅有单功能的I/O端口——通用输入输出接口,它有输入、输出和读修改写操作3种工作方式。
图2-14 P1口的位结构图
(1)输出方式。
计算机执行写P1口指令(如MOV P1,#data)时,P1口工作于输出方式,此时,数据经内部总线送入锁存器锁存。若输出时D端的数据为1,则该位锁存器输出端Q=1,=0,使T截止,从而引脚上输出高电平;若D端数据为0,则T导通,引脚输出为低电平。
(2)输入方式。
计算机执行读P1口指令(如MOV A,P1)时,P1口工作于输入方式。此时,控制器发出的读信号打开位于图2-14下方的三态门,使引脚上的数据经三态门进入芯片的内部总线,并送到累加器A,因此输入时无锁存功能。
作为输入口使用时,必须先向锁存器写1,使场效应管T截止以获得高阻抗输入,才可以作输入用。若T处于导通状态,则引脚被始终钳拉于低电平上,不可能输入高电平。正因为如此,P1口又被称为准双向端口。单片机复位后,P1口线的状态都是高电平,可以直接用作输入。
(3)读修改写操作。
CPU用一条指令把端口锁存器中的数据读入累加器A或内存RAM中修改,修改后再送回端口锁存器。这些指令的执行过程分成读、修改、写3步,它们是:
ANL P1, #data ;(P1) ← (P1)∧data
ORL P1, #data ;(P1) ← (P1)∨data
XRL P1, A ;(P1) ← (P1)"A
INC P1 ;(P1) ← (P1)+1
P2口的位结构图如图2-15所示。与P1口比较,P2口多了转换控制部分。P2口有两种用途:通用I/O口和高8位地址总线,图中多路开关受内部控制信号控制,用于选择P2口的工作状态。
(1)通用I/O口。
当P2口作通用I/O口使用时,多路开关MUX连接锁存器的Q端,构成一个准双向口。其功能与P1口相同。
图2-15 P2口的位结构图
(2)高8位地址总线。
当系统扩展片外程序存储器或访问片外RAM时,P2端口就周期性地输出用来从外存中取指令的高8位地址(A8~A15),此时MUX在CPU的控制下切换到与内部地址总线相连。
一般来说,如果系统扩展了外部ROM,取指的操作将连续进行,P2口传送的地址信号是不间断的,此时P2口就不能用作I/O端口。如果系统仅仅扩展外部RAM,情况应具体分析:当片外RAM不超过256B时,可以使用寄存器间接寻址方式,由P0口送出低8位地址,P2口引脚上原有的数据在访问片外RAM时不受影响,故P2口仍可作通用I/O口使用;当片外RAM容量较大时,需要由P2口提供高8位地址,P2口就不再用作通用I/O口。
P3口的位结构如图2-16所示。与P1口比较,P3口增加了一个与非门和一个缓冲器,使其各端口线有两种功能选择。当处于第一功能时,第二输出功能线为1,此时输出与P1口相同,内部总线信号经锁存器和场效应管输出。当作输入时,“读引脚”信号有效,下面的三态缓冲器打开(增加的一个为常开),数据通过缓冲器送到CPU内部总线。
图2-16 P3口的位结构图
当处于第二功能时,锁存器由硬件自动置1,使与非门对第二功能信号畅通。此时,“读引脚”信号无效,左下的三态缓冲器不通,引脚上的第二输入功能信号经右下的缓冲器送入“第二功能输入端”。
计算机与外界的信息交换称为通信。基本的通信方法有并行和串行两种。
并行通信就是数据各位同时并行地传送。其优点是通信速度快,缺点是因传输线太多而造成成本高,布线复杂。因此,并行通信适用于近距离、处理速度快的场合,比如计算机与磁盘驱动器、并行打印机以及多CPU的计算机系统等。
串行通信是将数据的各位逐位顺序地依次传送的通信方式。串行通信可通过串行口来实现,其优点是传输线少,通信距离长,特别适合于计算机之间、计算机与外部设备之间的远距离通信,如计算机局域网络、计算机与串行打印机终端的连接。特别是在控制领域中,串行通信在计算机集散控制系统中起着重要的作用。
串行通信又有异步和同步两种方式。
MCS-51内部有一个可编程的全双工串行通信接口,该串行口有4种工作方式,以供不同场合使用。波特率可通过软件编程设置(波特率发生器由片内的定时器/计数器构成)。接收、发送均可工作在查询方式或中断方式下,使用十分灵活。MCS-51的串行口除了用于数据通信外,还可以非常方便地构成一个或多个并行输入输出接口,用作串并转换和用于驱动键盘和显示器。
MCS-51单片机内部的串行口有两个物理上独立的接收、发送缓冲器SBUF,可同时接收和发送数据。发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入。两个缓冲器占用同一个地址(99H)。
控制MCS-51单片机串行口的控制寄存器共有两个,即特殊功能寄存器SCON和PCON。
串行接口的工作方式有4种,由SCON中的SM0、SMl定义,编码及功能如表2-4所示。在这4种工作方式中,串行通信只使用方式1、方式2、方式3。方式0主要用于扩展并行口。
表2-4 串行口工作方式
SM0 |
SM1 |
方 式 |
功能说明 |
0 |
0 |
0 |
移位寄存器方式(用于扩展并行I/O口) |
0 |
1 |
1 |
8位UART,波特率可变(T1溢出率/n) |
1 |
0 |
2 |
9位UART,波特率为fosc/64或fosc/32 |
1 |
1 |
3 |
9位UART,波特率可变(T1溢出率/n) |
注:fosc为MCS-51单片机的时钟频率。
特殊功能寄存器PCON的最高位SMOD是串行口波特率系数的控制位,当SMOD为1时使波特率加倍。但由于PCON不能使用位寻址,因此,置位SMOD需用指令ORL PCON,#80H,而清除SMOD使用指令ANL PCON,#7FH。
各种方式下的波特率的计算见表2-5。常用的波特率及计算器初值见表2-6。
表2-5 波特率计算公式
方 式 |
计算公式 |
方 式 |
计算公式 |
0 |
fosc12 |
2 |
Kfosc/64 |
1 |
Kfosc/[32x12x(256-TH1)] |
3 |
Kfosc/[32x12x(256-TH1)] |
注:若SMOD=0,则K=1;若SMOD=1,则K=2。
表2-6 常用的波特率及计算器初值
波特率/bps |
f/MHz |
SMOD |
定 时 器 | ||
C/T |
方 式 |
重新装入值 | |||
方式0:1M |
12 |
× |
× |
× |
× |
方式2:375K |
12 |
1 |
× |
× |
× |
方式1、3:62.5K |
12 |
l |
0 |
2 |
FFH |
19.2K |
11.0592 |
1 |
0 |
2 |
FDH |
9.6K |
11.0592 |
0 |
0 |
2 |
FDH |
续上表 | |||||
波特率/bps |
f/MHz |
SMOD |
定 时 器 | ||
C/T |
方 式 |
重新装入值 | |||
4.8K |
11.0592 |
0 |
0 |
2 |
FAH |
2.4K |
11.0592 |
0 |
0 |
2 |
F4H |
1.2K |
11.0592 |
0 |
0 |
2 |
E8H |
110 |
6 |
0 |
0 |
2 |
72H |
110 |
12 |
0 |
0 |
1 |
FEEBH |
1.填空题
(1)在MCS-51单片机中,如果采用6MHz晶振,则一个机器周期为 。
(2)内部RAM中,位地址为30H的位,该位所在字节的字节地址为 。
(3)若A中的内容为63H,那么P标志位的值为 。
(4)8031单片机复位后,R4所对应的存储单元的地址为 ,因上电时PSW= 。这时当前的工作寄存器区是 组工作寄存器区。
(5)使用8031芯片时,需将引脚接 电平,因为其片内无 存储器。
(6)通过堆栈操作实现子程序调用,首先就要把 的内容入栈,以进行断点保 护。调用返回时,再进行出栈保护,把保护的断点送回到 。
(7)MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为 KB。
2.选择题
(1)下列说法中哪些是正确的 。
A.8031的CPU是由RAM和EPROM所组成
B.区分片外程序存储器和片外数据存储器的最可靠的方法是看其位于地址范围的低端还是高端
C.在MCS-51中,为使准双向的I/O口工作在输入方式,必须保证它被事先预置为1
D.PC可以看成是程序存储器的地址指针
(2)以下有关PC和DPTR的结论中哪些是正确的 。
A.DPTR是可以访问的,而PC不能访问
B.它们都是16位的存储器
C.它们都有加1的功能
D.DPTR可以分为两个8位的寄存器使用,但PC不能
(3)PC的值是 。
A.当前正在执行指令的前一条指令的地址
B.当前正在执行指令的地址
C.当前正在执行指令的下一条指令的地址
D.控制器中指令寄存器的地址
3.问答题
(1)当MCS-51单片机运行出错或程序陷入死循环时,如何来摆脱困境?
(2)片内RAM低128个单元划分为哪3个主要部分?各部分的主要功能是什么?
(3)如果手中仅有一台示波器,可通过观察哪个引脚的状态来大致判断MCS-51单片机正在工作?