1.串行口的基本结构和工作过程: MCS-51单片机内部设有适用于全双工的串行口电路,它既可以实现与其他单片机或计算机的异步通信,也可以作移位寄存器使用。串行口有四种工作方式,可以根据需要选择,并通过设定相应控制寄存器来控制其运行。 (1)串行口的基本结构:MCS-51单片机内部有一个可编程的全双工异步通信接口,其基本结构如图1-24所示。从图中可以看出,串行口电路基本上可以分成发送、接收和波特率发生器三大部分,其中发送部分主要由发送缓冲器(SBUF)、发送控制器和控制门等组成,接收部分则主要包括接收缓冲器(SBUF)、接收控制器以及移位寄存器等。其中,发送与接收缓冲器都称为SBUF,但这是两个完全独立的缓冲器,分别用于发送和接收数据。 发送控制器和接收控制器都是复杂的逻辑控制电路,用于数据发送和接收的开始与停止的检测控制、字符帧的形成等。在发送部分的控制门主要用于形成帧格式所必需的起始、停止位等,接收部分有一个移位寄存器,相当于多了一层缓冲作用。
(2)串行数据发送和接收的基本过程:
①发送数据。串行口发送数据大致分为四个步骤。
a.将发送的数据写入SBUF。SBUF属于专用寄存器,在SFR中有它的地址99H,所以只要执行“ MOV SBUF,A”指令,就可以将累加器A中的数据写入SBUF。
b.形成完整的帧格式。在CPU执行了上述指令后,发送控制器就会控制门电路,自动在数据前面加上起始位0和停止位1,以形成完整的帧格式。
C.发送串行数据。在波特率发生器的控制下,按低位在前、高位在后的顺序,将一帧字符逐位发送到TXD引脚。发送完毕就保持高电平作为空闲位。
d.发出中断请求。在发送了完整的一帧字符后,发送控制器将串行口控制寄存器(SCON)中的中断标志TI置1,即提出中断申请,通知CPU一帧数据已发送完毕。随后由软件将TI清0。
②接收数据。串行口接收数据的过程大致如下。
a.通过RXD引脚接收数据。接收控制器对RXD引脚采样,当连续采到低电平时,便可确认是一帧字符的起始位,于是在接收控制器的控制下将数据逐位移人移位寄存器。对于每一位,接收控制器中的“位检测器”都要快速连续检测3次,以确认数据位是1还是0,目的在于排除信号传输中的干扰,保证接收数据的可靠性。
b.将数据移入SBUF。接收一帧字符完毕,就将数据的有效部分(除去起始、停止等位)由移位寄存器传送到SBUF。
c.发出中断申请。数据传送到SBUF后,接收控制器将SCON寄存器中的中断标志位RI置1,以向CPU申请中断。
d.读SBUF数据。CPU中断响应时,执行“MOV A,SBUF”指令,将数据送入累加器A,然后由软件将RI清0。
请注意,发送和接收用的SBUF是两个独立的缓冲器,但使用同一个SFR地址。不过由于对它们的访问使用的指令不同,所以不会造成混淆。
2.串行通信控制寄存器:
MCS51单片机的串行口是可编程的,对它初始化编程只用两个控制字分别写入串行口控制寄存器(SCON)和电源控制寄存器(PCON)中即可。
(1)串行口控制寄存器(SCON):SCON是一个特殊功能寄存器,用于设定串行口的工作方式、接收/发送控制和设置状态标志,位寻址,字节地址为98H,位地址为98H~9FH。其各位如下。
SM0、SM1:串行口工作方式选择位,4种方式如表1-8所示。
SM2:多机通信控制位,用于工作方式2和方式3。如果SM2=1,则允许多机通信。
REN:允许串行接收位。由软件控制,REN=1时,允许串行口接收数据,相当于串行接收数据的开关;REN=0时,禁止接收数据。
TB8:在工作方式2和方式3时,TB8是发送数据的第9位,由软件置位或清0。方式
0和方式1中该位未用。
RB8:在工作方式2和方式3时,RB8存放接收到的数据的第9位,代表收到的数据的某种特征。
TI:发送中断标志位。方式0中,发送完第8位数据后由硬件置位;其他方式中,在开始发停止位时由硬件置位。当TI=1时,表示帧发送结束,向CPU申请中断。TI必须由软件清0。
RI:接收中断标志。方式0时,接收完第8位数据后由硬件置位;其他方式中,当接收到停止位的中间时由硬件置位。当RI=1时,表示帧接收结束,向CPU申请中断。RI必须由软件清0。
(2)电源控制寄存器(PCON):PCON的字节地址为97H,不能位寻址,只有最高位SMOD与串行口工作有关。
SMOD:串行口波特率倍增位。方式1~方式3时,当SMOD=1,串行口波特率加倍;
复位时,SMOD=0。
单片机系统复位后,SCON各位的值和SMOD的值均为0。
3.串行口通信工作方式:
MCS-51单片机系统的可编程串行口通信工作方式有4种:方式0主要用于I/O口的扩展,串行通信一般使用方式1~方式3。这四种方式传输的数据格式有8位帧、10位帧和11位帧。
(1)方式0:方式0的一帧数据为8位,没有起始位和停止位,8个数据位,先发或先收最低位。工作在方式0时,串行口是作为同步移位寄存器使用的。串行数据由RXD(P3.0)端输入/输出,同步移位脉冲由TXD(P3.1)端输出。
方式0输出时,串行口可以外接串行输入、并行输出的移位寄存器,如74L164、CD4094等,逻辑电路如图1-25(a)所示,TXD端输出的移位脉冲将RXD端输出的数据(低位在先)逐位移入74LS164或CD4094。
方式0输入时,串行口外接并行输入、串行输出的移位寄存器,如74LS165,其逻辑电路如图1-25(b)所示。当REN=1和RI=0时,就会启动串行口接收。移位脉冲由TXD输出,使外部移位寄存
器输入,并且左移位,最右端的数据为最后一位数据,移位结束后由硬件将输入移位寄存器的内容写入SBUF,TXD端停止输出脉冲,中断标志RI自动置1,完成8位数据的输入。
(2)方式1: 方式1要求的字符格式是每帧字符为10位,包括1个起始位、8个数据位和1个停止位。没有奇偶校验位(图1-20)。
①数据发送和接收。在SCON中TI=0的条件下,执行“ MOV SBUF,A”指令后,发送控制器就自动加入起始位和停止位,构成完整的帧格式。在移位脉冲控制下,由TXD端串行输出,然后TI自动置1。
在SCON中RI=0的条件下,若REN=1,串行口就开始采样RXD端,当采样到低电平时就开始在移位脉冲控制下接收串行数据,然后将数据部分装入SBUF,将随后到来的停止位送入SCON中的RB8位,并将中断标志RI置1,即发出中断请求。CPU响应中断后,即用指令“MOV A,SBUF”取走字符。
注意:在方式1下,SM2应预先置成0。
②波特率的设定。当定时器T0按方式3工作时,定时器TI可以作为波特率发生器使用。串行口在方式1下工作时,波特率就由波特率发生器决定。我们已经知道,定时器TI作波特率发生器使用时,是按方式2工作的,即8位定时器、自动重装模式。只要给出一定的初值,定时器就可以重复地溢出。若定时器初值为x,那么TI的溢出周期为:
4.多机通信简介:
MCS-51单片机串行口工作在方式2或方式3时,可实现多机通信功能,即一台主机和多台从机之间通信,如图1-26所示。当主机向从机发送信息时,主机首先发送一个地址帧,此帧数据的第9数据位TB8应设置为“1”,以表示是地址帧,8位数据位是某台从机的地址。
这种通信只能在主、从机之间进行,从机之间的通信需经主机作中介才能实现。主、从多机通信的过程如下。
①主、从机均初始化为方式2或方式3,且置SM2=1,REN=1,串行开中断。
②主机置位TB8=1,向从机发送寻址地址帧,其中包括8位需要与之通信的从机地址,第9位为1。
③所有的从机置SM2=1,RB8=1,满足接收条件,接收主机发来的地址,并与本机地址比较。对于地址相同的从机,置SM2=0(清零),以接收主机随后发来的数据信息;
对于地址不符合的从机,仍保持SM2=1的状态,对主机随后发来的数据不予理睬,直至发送新的地址帧。
④地址一致的从机向主机返回地址,供主机核对,不一致的从机恢复初始状态。
⑤主机核对返回的地址,若与刚才发出的地址一致则准备发送数据;若不一致则返回①重新开始。
⑥主机向从机发送指令或数据,数据帧的第9位为0。此时主机TB8=0,只有被选中的那台从机能接收到该数据,其他从机则舍弃该数据。
⑦本次通信结束后,主从机重新置SM2=1,又可进行新一次的通信。
在汽车电子控制系统中,常要用到多机通信技术。例如发动机ECU系统中采集到的转速传感器信号,往往也要被自动变速器、ABS等其他系统采用;这时就可以用多机通信的方法,由发动机的微控制器随时将转速数据发送到车内的通信系统上,系统其他的微控制器就可以接收,实现数据共享。汽车上目前普遍采用的CAN总线,就是基于多机通信的信息共享技术设计的。