基于单片机的GPS开发 (one) UART串口精讲

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。
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值