第7章 串行通讯
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}×fosc/32×12×(2^{定时器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}×fosc/32×12×(2^{定时器1位数}-初值)\)
波特率设计
常用波特率(不用背)
多机通讯方式
串行口方式2和3的数据帧的第9位是可编程位,接收时,当接收机的SM2=1时,只有接收到的RB8=1,才能置位RI,接收数据才有效,SM2=0时,无论RB8是什么,都能置位RI,接收到的数据有效。
主机首先发出要求通信的从机地址信号,此时TB8=1,所有从机的SM2=1,所有从机均满足SM2=1,RB8=1的条件,都可置位RI,进入中断服务程序,接收地址信号并识别地址,地址一致置SM2=0,地址不一致置SM2=1,后续主机发送数据帧,TB8=0,唯有SM2=0(即认同的从机)可以置位RI,成功接收数据。
大致流程如下(历年卷考过):
所有从机的SM2置1,使它们处于接收地址帧的状态
主机发送一帧地址信息,其中包含8位地址,第9位为1,以表示发送的是地址帧
从机接收到地址帧后,将其与本机地址作比较
被寻址的从机,清除SM2,以便能够接收主机发来的所有后续信息。未被寻址的所有其他从机仍维持SM2=1,对主机发来的数据帧不予理睬,直至发来新的地址帧
主机发送控制信息和数据(第9位为0)给已被寻址的从机,根据命令,从机可以发送数据给主机,实现两者之间的通信