微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第11课 串口通信

第11课 串口通信

时间:12-01 来源:互联网 点击:

成0。在方式1中,当处于接收状态时,若SM2=1,则只有接收到有效的停止位“1”时,RI才能被激活成“1”(产生中断请求)。在方式2和方式3中,若SM2=0,串行口以单机发送或接收方式工作,TI和RI以正常方式被激活并产生中断请求;若SM2=1,RB8=1时,RI被激活并产生中断请求。

(3) REN:串行接受允许控制位。该位由软件置位或复位。当REN=1,允许接收;当REN=0,禁止接收

(4) TB8:方式2和方式3中要发送的第9位数据。该位由软件置位或复位。在方式2和方式3时,TB8是发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=1表示地址,TB8=0表示数据。TB8还可用作奇偶校验位。

(5) RB8:接收数据第9位。在方式2和方式3时,RB8存放接收到的第9位数据。RB8也可用作奇偶校验位。在方式1中,若SM2=0,则RB8是接收到的停止位。在方式0中,该位未用。

(6)TI:发送中断标志位。TI=1,表示已结束一帧数据发送,可由软件查询TI位标志,也可以向CPU申请中断。

注意:TI在任何工作方式下都必须由软件清0。

(7)RI:接收中断标志位。RI=1,表示一帧数据接收结束。可由软件查询RI位标志,也可以向CPU申请中断。

注意:RI在任何工作方式下也都必须由软件清0。

在AT89C51中,串行发送中断TI和接收中断RI的中断入口地址是同是0023H,因此在中断程序中必须由软件查询TI和RI的状态才能确定究竟是接收还是发送中断,进而作出相应的处理。单片机复位时,SCON所有位均清0。

 3、电源控制寄存器PCON

在串口通信时,我们只用PCON寄存器的SMOD位,这一位主要跟波特率的设置有关。下面仅对这一位进行介绍。

SMOD:串行口波特率倍增位。在工作方式1~工作方式3时,若SMOD=1,则串行口波特率增加一倍。若SMOD=0,波特率不加倍。系统复位时,SMOD=0。

5、串行口的工作方式

51单片机的串行口共有四种工种方式,分别为工作方式0、工作方式1、工作方式2及工作方式3,如图1所示。采用何种工作方式主要靠串行口控制寄存器SCON中的SM0和SM1来决定。不同的工作方式,其一次传送的数据位多少不同,同时,波特率的大小的设置也不同。

图1 串行口的四种工作方式

(1)发送和接收

为了便于大家撑握,这里只介绍工作方式1,其它工作方式大家用到时再自行学习。工作方式1每次传送一帧数据为10位,1 个起始位、1 个停止位和8个数据位,低位在前,高位在后,如图2所示。

图2 方式1的数据帧格式

在写程序时,需看懂数据发送和接收的时序图,分别如图3、图4所示。数据发送时使用的是单片机的TXD(P31)引脚,接收时使用的单片机的RXD(P30)引脚,这里我们结合这两个引脚对时序进行分析。

图3 方式1发送时的时序图

图4 方式1数据接收时的时序图

首先我们单片机如何发送和接收一个数据。

发送时,数据从TXD(P31)端输出,当TI=0时,执行数据写入发送缓冲器SBUFF指令时,就启动了串行口数据的发送指令。启动发送后,串行口自动在起始位清0,而后是8位数据位和1位停止位,一帧数据是10位。数据依次从TXD端发出,一帧数据发送完毕,使TXD端的输出线维持在1状态下,并将SCON寄存器中的TI置1,以便查询数据是否发送完毕或作为发送中断请求信号。TI必须由软件清0。

接收时,数据从RXD(P30)端输入,SCON的REN位应处于允许接收状(REN=1)。在此前提下,串行口采样RXD端,当采样从1向0的状态跳变时,就认定是接收一起始位。随后在移位脉冲的控制下,把接收到的数据位移入寄存器中,直接停止位到来之后把停止位送入RB8中,并置位中断标志位RI,通知CPU从SBUF取走接收到的一个字符。

(2)波特率的设定

工作方式1的波特率是可变,波特率的产生与定时器1有关,其产生的电路如图4所示。

图4 方式1的波特率产生电路

以定时器T1作为波特率发生器使用,其值由定时器1的计数溢出率来决定,其公式为:

其中,T1溢出率为一次定时时间的倒数,即:

上式中,X为计数器的初值,M由定时器T1的工作方式所决定,即M=8、13或16,当定时器1作波特率发生器使用时,一般选用工作方式。之所以选择工作方式2,是因为它具有自动加载功能,可以避免通过程序的反复装入初值所引起的定时误差,使波特率更加稳定。因此,对于定时器T1的工作方式2,其溢出率又可简化为:

此时,波特率为:

因此计数初值X的值为;

例如,设两机通信的波特率为2400波特,若晶振频率为12MHZ,串行口工作在方式1,用定时器T1作为波特率发生器,先定时器工作在方式2(要禁止T1中断,以免产生不必要的中断带来的频率误差)。

若SMOD=1,则计数值X的值为:

若SMOD=1,则计数值X的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top