C51编程18-中断篇(串行通讯2)

MCS-51单片机内部有两个独立的接收与发送SBUF,接收SBUF不能发送,发送SBUF不能接收,它们共用一个地址(99H)。内部逻辑结构下图所示:

C51编程18-中断篇(串行通讯2)_第1张图片

    

    在串行内部逻辑结构中可以看到,串行通信除了与SBUF有关外,还与串行口控制寄存器SCON(地址为98H)、定时器T1有关,此外还有一个寄存器PCON(地址为87H),该寄存器只有一位与串行通讯有关。

 

  PCON寄存器的功能

        串行口控制寄存器SCON(地址为87H),复位初始值为0;寄存器不可以位寻址。

    

C51编程18-中断篇(串行通讯2)_第2张图片

 

    SCON寄存器的功能

        串行口控制寄存器SCON(地址为98H),复位初始值为0;寄存器可以位寻址。

C51编程18-中断篇(串行通讯2)_第3张图片

     

     SM0与SM1的设置工作方式

C51编程18-中断篇(串行通讯2)_第4张图片

    

    工作方式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。

C51编程18-中断篇(串行通讯2)_第5张图片

    (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。

C51编程18-中断篇(串行通讯2)_第6张图片

    (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参与的情况下,波特率还是比较低的原因。

 

---------------------------------------------------------

如果觉得文章还不错,那就扫码关注吧!

你可能感兴趣的:(51单片机,单片机)