MCS-51单片机内部有两个独立的接收与发送SBUF,接收SBUF不能发送,发送SBUF不能接收,它们共用一个地址(99H)。内部逻辑结构下图所示:
在串行内部逻辑结构中可以看到,串行通信除了与SBUF有关外,还与串行口控制寄存器SCON(地址为98H)、定时器T1有关,此外还有一个寄存器PCON(地址为87H),该寄存器只有一位与串行通讯有关。
PCON寄存器的功能
串行口控制寄存器SCON(地址为87H),复位初始值为0;寄存器不可以位寻址。
SCON寄存器的功能
串行口控制寄存器SCON(地址为98H),复位初始值为0;寄存器可以位寻址。
SM0与SM1的设置工作方式
工作方式0:8位的同步移位寄存器。
(1)发送时,按照机器周期频率,将SBUF的里面的数据从低位开始一位一位移出去。发送完成后TI置1,向CPU请求中断
(2)接收时,在满足REN =1 与RI = 0的条件下,按照机器周期频率,从RXD端口一位一位接收数据,接收完后RI = 1并向CPU请求中断,再次接收需要设置RI = 0;
(3)波特率:波特率为时钟频率的1/12,固定不变即是波特率 = 机器周期。
注:SM2的值一定是0
工作方式1:
在方式1下,串行口为波特率可调10位的通用异步接口UART,发送与接收一帧信息,包括1位的起始位0,8位数据位和1位的停止位1。
(1)发送时,数据从TXD引脚输出,当数据写入发送缓冲器SBUF后,启动发送器发送,当发送完一帧数据后,硬件将中断标志置1。方式1传送的波特率取决于定时器T1的溢出率与PCON中的SMOD位。
(2)接收时,有REN置1允许接收,串行口采样RXD,当采样到1到0的跳变时,确认是起始信号“0”,开始接收帧数据。当RI =0且停止位为1时,RI = 1,否者信息丢失。
(3)波特率取决于T1与PCON
波特率 = T1溢出率*2SMOD/32
T1工作在定时2方式,自动重装定时器的溢出率为:
T1溢出率 = fosc/(12*(256-X))
波特率 = ( fosc*2SMOD)/(32*12*(256-X))
注:SM2主要用于多机通讯中,但是方式1上,也可以设置SM2的值,控制接受时,是否需要将停止位写入RB8。当SM2 = 0时,写入;SM2 =1时,不写入,这个功能作用不常用,方式1时按照默认SM2 = 0即可。
工作方式2:
在方式2下,串行口为11位的通用异步接口UART,发送与接收一帧信息,包括1位的起始位0,8位数据位、1位可编程位(奇偶校验)与1位的停止位1。
(1)发送时,根据通讯协议软件设置TB8,然后将发送数据写入SBUF,则启动发送器。写SBUF指令除了将8位数据写入SBUF外,同时还将TB8装入发送移位寄存器第9位,并通知发送控制器进行数据发送。
(2)接收时,当REN =1,允许串口接收数据,数据从TXD输入,接收11位数据。当接收器采样到RXD端负跳变,并判断起始位有效后,开始接收一帧数据。当接收器接收到9位数据后满足2条件,则接收数据有效。
(1) RI =0;
(2)SM=0或接收到第9位数据为1。
(3)波特率取决于PCON中的SMOD值,当SMOD =1时,波特率为时钟频率的1/64;当SMOD =1时,波特率为时钟频率的1/32。即是
波特率 = fosc*2SMOD/64
注:在方式2与方式3中,SM2表示是否设置为多机通讯。SM=0,不设置多机通讯;SM1 = 1,设置为多机通讯。
方式3:
在方式3下,串行口为波特率可变的11位的通用异步接口UART,除波特率外方式3与方式2相同。
波特率 = ( fosc*2SMOD)/(32*12*(256-X))
注:为了数据的正确性,往往采样的时候只采样一次,这样就需要占一定的时间进行采样。设置SMOD实际上,设定采样率。当SMOD = 1时,采样率为16;当SMOD =0时,采样率为32。
总结:
1)串口内部的有两个独立的SBUF,它们共用一个地址,发送SBUF只用发送,接收SBUF只能接收;
2)无论是接收数据或者发送数据,数据从RXD端口接收或者TXD端口发送,数据位都是从低到高一位一位接收或者发送;
3)MCS-51单片机中,UART有4种工作方式。
工作方式1:8位同步移位寄存器,将发送SBUF数据移位输出,或者移位寄存器接收后,写入接收SBUF。
工作方式2、3、4:均为协议的串行通讯方式,其中起始位为0,停止位为1,8位数据位,总共10位;
工作方式3、4:还有在停止位前面还有一位奇偶校验位。
工作方式1、3:是可变的波特率通讯方式,波特率由SMOD位与T1的溢出率决定,通常T1工作在定时器2方式下。
工作方式4:波特率只有两个有SMOD位决定;
4)为了数据的正确性,需要对一个信号进行多次采样,但一个机器周期只能采样一次,所以需要多个机器周期才能采样多次。这是为什么即即使在没有T1参与的情况下,波特率还是比较低的原因。
---------------------------------------------------------
如果觉得文章还不错,那就扫码关注吧!