跳转至

第7章 串行通讯

第7章 MCS-51串行口

MCS-51单片机内部有一个全双工的串行接口

只能接收或只能发送的称为单工串行口

既可以接收又可发送的,但不能同时进行的称为半双工

能同时接收和发送的串行口称之为全双工串行口

每秒钟内能发送和接收的二进制位数称为波特率。若发送一位的时间为t,则波特率为1/t。单片机中常用的波特率有1200bps、2400bps、4800bps、9600bps、19200bps等。

异步传送方式

异步传送是通过”通用异步收发器UART(Universal Asynchronous Receiver/Transmitter)” 实现的

在异步传送方式中,字符的发送是随机进行的。对于接收方来说需要判断何时有字符来、何时传输结束

在异步通信时,对传送字符必须规定一定的格式。通常,异步传送字符格式如下图图所示。

一个字符在异步传送中又称为一帧数据,通常由4个部分组成:起始位、数据位、奇偶校验位、停止位。

起始位:为逻辑“0”信号,占用一位,用来通知接收设备,一个新的字符开始

数据位:紧跟着起始位的是5~8位数据的最低位(LSB),异步传送规定低位在前,高位在后

奇偶位:紧跟在数据最高位MSB之后,占用1位,奇偶校验时,根据协议置“奇校验”或“偶校验”(可省去)

停止位:为逻辑“1”信号,可占用一位,也可占用两位。接收端收到停止位时,表示一帧数据结束。同时为接收下一帧数据做好准备,只要再收到一个逻辑“0”就是一个新字

串行数据发送和接收管脚

一共使用2个管脚,分别是RXD(P3.0)和TXD(P3.1)

通讯时,一台计算机的TXD与另一台计算机的RXD对接

两台独立的计算机对接时,为了保证参考地电平一致,还需要连接GND

数据缓冲器SBUF

串行口中有2个物理空间上各自独立的发送缓冲器和接收缓冲器

这两个缓冲器共用一个地址99H,发送缓冲器只写不读,接收缓冲器只读不写

接收缓冲器是双缓冲的,以避免在接收下一帧之前,CPU未能即时响应接收器中断,没有把上一帧数据读走而产生两帧数据重叠问题

串行口控制寄存器SCON

字节地址98H,可位寻址,位地址98H~9FH。格式为:

SM0、SM1:串行口方式选择位,如下表所示:

SM2:允许方式2和方式3多机通讯控制位

在方式2和方式3中,如SM2=1,则接收到的第9位数据(RB8)为“1”时,置位接收中断标志RI(RI=1);如SM2=0,则RB8无论为何值,均置位RI。

在方式1时,如SM2=1,则只有在接收到有效停止位时才置位RI,若没有接收到有效停止位,则RI不置位。在方式0中,SM2应为“0”。

REN:允许接收控制位。置“1”时,允许接收,置“0”时,禁止接收。

TB8:在方式2和方式3中要发送的第9位数据

RB8:在方式2和方式3中接收到的第9位数据。在方式1时,如SM2=0,RB8是接收到的停止位在方式0中,不使用RB8。

TI:发送中断标志。在方式0串行发送第8位结束时由硬件置“1”,或在其他方式中串行发送停止位的开始时置“1”。必须由软件清“0”

RI:接收中断标志。在方式0接收到第8位结束时由硬件置“1”,或其他方式接收到停止位的中间时置“1”。必须由软件清“0”。

特殊功能寄存器PCON

字节地址87H,不可位寻址。与串行口有关的只有PCON的最高位。

SMOD:波特率选择位。当SMOD=1,波特率加倍。

串行口工作方式

方式0

方式0为移位寄存器输入/输出方式,可外接移位寄存器,用来扩展I/O口

方式0的波特率是固定的,为fosc/12

这时数据的传送,无论是输入还是输出,均通过引脚RXD(P3.0)端,移位同步脉冲由TXD(P3.1)输出

发送/接收一帧数据为8位二进制数,低位LSB在先,高位MSB在后

方式1

传送一帧数据为10位,其中1位起始位、8位数据位、1位停止位

波特率 = \(2^{SMOD}/32×(T1(定时器1)的溢出率)\)

方式1的发送发送中断标志TI=0时,由写发送缓冲器的指令(MOV SBUF,A)开始启动一次发送

在发送移位脉冲的作用下,从TXD引脚发出一帧信息10位,1位起始位(自动插入)、8位数据位、1位停止位(自动插入)

发送完毕时置TI=1,用以通知CPU可以发送下一字节,同时维持TXD引脚为高电平

方式2

串行口方式2,是11位异步通信接口,其中1位起始位、8位数据位(先低位后高位)、1位附加的可程为“1”或“0”的第9位数据位、1位停止位

方式2的波特率只有2种选择,波特率为\(2^{SMOD}/64×fosc\)

在方式2发送时,数据由TXD端输出

发送一帧信息为11位,附加的第9位数据是SCON中的TB8,可由软件置位或清零。TB8可作多机通信中的地址、数据标志,也可作数据的奇偶校验位

CPU执行一条写入发送缓冲器指令(MOV SBUF,A),就启动发送器发送,发送完一帧信息,TI中断标志置“1”

方式3

串行口被定义为方式3时,为波特率可变的9位异步通信方式除了波特率外,方式3与方式2相同波特率\(=2^{SMOD}/32×(T1(定时器1)的溢出率)\)

波特率设计

常用波特率(不用背)