1、89C51串行口特点
UART是单片机中的串行异步通信接口,全双工串口,能同时发送和接收数据
可编程:其帧格式可以是8位,10位,11位,并能设置各种波特率
2、控制寄存器
对 89C51串行口初始化编程只用两个控制字分别写入特殊功能寄存器SCON和电源控制寄存器PCON中即可。
(1)SCON控制寄存器
SM0、SM1:工作方式控制位
SM2:多机通信控制位,1-允许、0-不允许
REN:串行接收允许位。1-允许、0-不允许
TB8:发送数据第九位
RB8:接收数据第九位
TI:发送中断标志位
RI:接收中断标志位
SM0和SM1 :串行口工作方式选择位 ,两个选择位对应四种通信方式,如下图所示,其中fosc是振荡频率
SM2:多机通信控制位,主要用于方式2和方式3。
*若SM2 = 1;则允许多机通信。多机通信协议规定,第9位数据(D8)为1,说明本帧数据为地址帧;若第9位数据为0,则本帧数据为数据帧。当一个89c51(主机)与多个89c51(从机)通信时,所有从机的SM2位都置1,主机首先发送的一帧数据为地址,即某从机号,其中第9位为1,所有的从机接收数据后,将其中第9位数据装入RB8中。各个从机根据接收到的第9位数据(RB8中)的值来决定从机是否再接收主机的信息、若(RB8)= 0,说明是数据帧,则使接收中断标志位RI = 0,信息丢失,若RB8 = 1,说明是地址帧,数据装入SBUF并置RI = 1,中断所有从机,被寻址的目标从机清除SM2,以接收主机发来的一帧数据,其它从机仍然保持SM2 = 1。
*若SM2 = 0,即不属于多机通信情况,则接收完一帧数据后,不管第9位数据是0还是1,都置RI = 1,接收到的数据装入SBUF中。在方式0时SM2必须置0。在方式1时,若SM2 = 1,则只有接收到有效停止位时,RI才置1,以便接收下一帧数据。
REN:允许接收控制位,由软件置1或清0
*REN = 1时,允许接收,相当于串行接收的开关
*REN = 0时,禁止接收
在串行通信接收控制过程中,如果满足RI = 0和REN = 1的条件,就允许接收。
TB8:发送数据的第9位(D8)装入TB8中。在方式2或方式3中,根据发送数据的需求由软件置位或复位。在许多通信协议中可用作奇偶校验位,也可以在多机通信中作为发送地址帧或者数据帧的标志位。
RB8:接收数据的第9位,原理同TB8
TI:发送中断标志位,在一帧数据发送完时被置位。在串行发送到停止位的开始时由硬件置位,可用软件查询。它同时也申请中断。TI置位意味着向CPU提供“发送缓冲器SBUF已空”的信息,CPU可以准备发送下一帧数据。串行口发送中断被响应后,TI不会自动清0,必须软件清0.
RI:接收中断标志,在接收到一帧数据后由硬件置位。当RI = 1时,申请中断,表示一帧数据接收结束,并已装入接收SBUF中,要求CPU取走数据,CPU响应中断,取走数据。RI位也必须由软件来清0,。
串行发送中断标志TI和接收中断标志RI是同一个中断源,CPU事先不知道是发送中断TI还是接收中断RI产生的中断请求,所以,在全双工通信时,必须由软件来判别。复位时SCON所有位都清0.
(2) PCON控制寄存器
PCON是功率控制寄存器,我们在配置51单片机中的波特率的时候会用到它:
系统复位默认为SMOD=0。当用51单片机的定时器2产生波特率时,波特率不受SMOD的影响。
各位的定义:
SMOD:
SMOD=0:串口方式1,2,3时,波特率正常
SMOD=1:串口方式1,2,3时,波特率加倍
LVDF:低电压检测标志位,同时也是低电压检测中断请求标志位
GF1、GF0:两个通用工作标志位,用户可以自由使用
PD:掉电模式设定位
PD=0:单片机处于正常工作状态
PD=1:单片机进入掉电模式可由外部中断或硬件复位模式唤醒,进入掉电模式后,外部晶振停振,CPU、定时器、串行口全部停止工作,只有外部中断工作。在该模式下,只有硬件复位和上电能够唤醒单片机。
IDL:空闲模式设定位
IDL=0:单片机处于正常工作状态
IDL=1:单片机进入空闲(Idle)模式,除CPU不工作外,其余仍继续工作,在空闲模式下可由任一个中断或硬件复位唤醒。
一般我们只用到了SMOD这一位,当我们选择波特率加倍的时候,就配置为PCON=0X80;
(3) TMOD控制寄存器
TMOD是定时器、计数器模式控制寄存器,它是一个逐位定义的8为寄存器,但只能使用字节寻址。
由上图我们就可以看出,这个寄存器控制了两个定时器/计数器
寄存器的高四位控制定时器1,低四位控制定时器0
GATE: 门控制
GATE=0: 仅由TR0,TR1置位分别启动定时器T0、T1
GATE=1: 由外部中断引脚INT0、INT1来启动定时器T0、T1
当INT0引脚为高电平时TR0置位,启动定时器T0;
当INT1引脚为高电平时TR1置位,启动定时器T1
C/T:功能选择位
C/T=0:定时功能
C/T=1:计数功能
M1、M0:工作方式选择位
如果我们同时使用定时器1和定时器0的时候,一定要注意对他们初始化的时候,不能够相互影响,即当我们配置好TMOD的低四位之后,再去配值TMOD的高四位的时候,一定不能破坏低四位的数据。
3、串行通信工作方式
根据实际需要,89C51串口可以设置四种工作方式,可有8位、10位或11位帧格式
方式0:8位同步移位寄存器,以8位数据为一帧,不设起始位和停止位,先发送或接收最低位(用于I/O口扩展)。
RXD:数据输入/输出端
TXD:同步脉冲输出端,每个脉冲对应一个数据位
基本很少用到方式0,一般都是用到方式0是通过串口扩展8位并行I/O输出口
方式1:10位异步通信模式
一帧10位:起始位+8位数据位+停止位
波特率:定时器1作为波特率发生器
方式2和方式3:11位异步通讯方式
一帧11位:起始位+9位数据位+停止位
第九位数据位在TB8/RB8中,常用作校验位或者多机通信地址标识位或者数据标识位
发送:先填写TB8,写入SBUF(启动发送),发送完TI = 1.
接收:REN = 1,RI = 0且第9位为1(或SM2 = 0),将接收数据装入SBUF,第9位装入RB8,使RI = 1,否则丢弃接收数据,不置位RI。
来源:CSDN
作者:奋斗才是人生基调
链接:https://blog.csdn.net/weixin_42735156/article/details/104036416