第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)的溢出率)\)