第10章 串行通信及其接口
• 串行通信基础
• MCS-51串行通信
• MCS-51串行通信工作方式
串行通信基础
•一、串行通信的基本概念
•串行通信:是将数据的各位一位一位地依次传送。
传送距离较远,适合于计算机之间、计算机与外
部设备之间的远距离通信。
•并行通信:指数据各位同时传送。速度快、效率
高、距离短。
•串行通信有 同步通信和异步通信两种方式:
返回本章首页
同步字符 CRC字符
开始
终止
数据块
图9-5 同步通信数据格式
返回本节
•同步通信:每个数据块开始时,发送一个或两个同步字符,
使发送和接收双方取得同步,数据块各字符间取消了起始位
和发送位。如发送的数据之间有间隔时,用发送同步字符填
充。(较少使用)
•同步字符由用户规定,如:01111110
•同步传送时,收、发双方要求时钟和频率一致。(较少使用)
图9-4 异步串行通信数据帧格式
•异步通信:数据在线路上是以一个字(或字符)为单位来
传送的。不需严格的同步时钟控制,也不需数据流的连续性。
在串行通信中常用。
•数据帧:包含起始位(“0”电平),数据位(从低位到高
位逐位数据传送),奇偶校验位、停止位(用“1”表示)。
• 线路不传送数据时,应保持为“1”(保证起始处有一
个下跳沿)。
单片机的串行通信使用的是异步串行通信,所谓异步就是
指发送端和接收端使用的不是同一个时钟。异步串行通信通常
以字符(或者字节)为单位组成字符帧传送。字符帧由发送端
一帧一帧地传送,接收端通过传输线一帧一帧地接收。
在异步通信中,收、发两方必须事先规定两件事:
1. 字符帧的帧格式
字符帧由四部分组成,分别是起始位、数据位、奇偶校验
位、停止位。如图所示:
1) 起始位:位于字符帧的开头,只占一位,始终位逻辑低
电平,表示发送端开始发送一帧数据。
2) 数据位:紧跟起始位后,可取5、6、7、8位,低位在前,
高位在后。
3)奇偶校验位:占一位,用于对字符传送作正确性检查,因此奇偶校
验位是可选择的,共有三种可能,即奇偶校验、偶校验和无校验,由用户根
据需要选定。
4)停止位:末尾,为逻辑“1”高电平,可取1、、2位,表示一帧
字符传送完毕。
如:ASCII码帧(字符)为10位。
其中:数据7位
起始位、校验位、停止位各一位。
字符帧格式
2. 传送的速率
串行通信的速率用波特率来表示,所谓波特率就是指一秒钟
传送数据位的个数。每秒钟传送一个数据位就是1波特。即:1
波特=1bps(位/秒) 。
在串行通信中,数据位的发送和接收分别由发送时钟脉冲
和接收时钟脉冲进行定时控制。时钟频率高,则波特率高,通
信速度就快;反之,时钟频率低,波特率就低, 通信速度就慢。
如120个字符(帧)/秒,每帧数据有10位,则传输速率为1200
波特率。(1200bit/s)
接收器
图9-1 单工方式
发送器
1.单向数据传送:数据只向一个方向传送
二、串行通信数据传送方向
接收器
接收器
发送器
发送器
数据流
图9-2 半双工方式
2.半双向数据传送:用一根传送线既作输入又作输出,但通
信双方不能同时收、发数据。要改变数据传送方向,必须进
行通信双方的收、发设备的开关 切换。
发送器
接收器
数据流
接收器
发送器
图9-3 全双工方式
3.全双向数据传送:由两根传送线来发送和
接收数据,双方可同时进行发送和接收。
串行数据通信要解决两个关键技术问题,一个是
数据传送,另一个是数据转换。所谓数据传送就是指
数据以什么形式进行传送。所谓数据转换就是指单片
机在接受数据时,如何把接收到的串行数据转化为并
行数据,单片机在发送数据时,如 何把并行数据转换
为串行数据进行发送。
所有串行接口电路都是以并行数据形式和CPU接
口,以串行数据形式和外部通信接口。
•通用异步接收发送器UART
接收器
发送器
控制部件
串行输入
时钟
复位
并行输入
时钟
控制信号
并行输出
数据
总线
串行输出(对外)
状态信息
控制信息
UART基本组成框图
UART主要功能:
1、数据的串化、反串化
数据的串化:将并行数据变为串行数据;(发送器)
数据的反串化:将串行数据变为并行数据;(接收器)
2、格式信息的插入和删除
格式信息:异步通信中的起始位、校验位、停止位等。
串化过程:将格式信息插入和数据一起构成一个完整
的数据帧。
反串化过程:滤出格式信息,保留数据位。
3、错误检验
检验数据通信过程是否正确。
• MCS-51串行通信
•MCS-51单片机将一个“全双工串行通信接口电
路”集成在单片机内。
数据转换
串行接口电路为用户提供了两个串行口缓冲寄存器
(SBUF),一个称为发送缓存器,它的用途是接收片内
总线送来的数据,即发送缓冲器只能写不能读。发送缓冲
器中的数据通过TXD引脚向外传送。另一个称为接收缓冲
器,它的用途是向片内总线发送数据,即接收缓冲器只能
读不能写。接收缓冲器通过RXD引脚接收数据。因为这两
个缓冲器一个只能写,一个只能读,所以共用一个地址
99H。串行接口电路如图所示。
MCS-51串行口寄存器结构
•串行接收的双缓冲结构
移位寄存器
数据缓冲器SBUF
一帧数据(8位)接收完,由移位寄存器装入
SBUF,立即接收下一帧。要求主机应立即将
SBUF中数据取走。否则前一帧数据将丢失。
发送是由CPU操纵的,不会发生帧重叠错误。
将数据写入SBUF,(自动)通过移位脉冲一位一
位地发送出去。
二级
MCS-51单片机串行通信的控制寄存器
与串行通信有关的寄存器有三个
1. 串行口控制寄存器(SCON)
SCON是MCS-51单片机的一个可位寻址的专用寄存器,用于串行数据通信
的控制。单元地址为98H,位地址为98H~9FH。寄存器的内容及位地址表示
如下:
位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H
位符号 SM0 SM1 SM2 REN TB8 RB8 TI RI
各位的说明如下:
1) SM0 、SM1——串行口工作方式选择位
2) SM2——允许方式2、3的多机通信控制位
在方式2和3中,若SM2=1且接收到的第九位数
据(RB8)为1,才将接收到的前8位数据送入接收
SBUF中,并置位RI产生中断请求;否则丢弃前8位数
据。若 SM2=0,则不论第九位数据(RB8)为1还是
为0,都将前8位送入接收SBUF中,并产生中断请求。
方式0时,SM2必须置0。
多机通信的机制:地址帧 数据帧 地址帧
被确认的从机,复位SM2=0,接收RB8=0的数据。
RR8=1 地址帧
RR8=0 数据帧
SM2=1 多机方式
SM2=0 直通方式
3) REN——允许接收位 (通过软件值位、复位)
REN=0 禁止接收数据
REN=1 允许接收数据
4) TB8——发送数据位8
在方式2、3时,TB8的内容是要发送的第9位数据(格式信息)在多机通
信中,通过TB8状态来表示主机发送的是地址帧(1),还是数据帧(0),
其值由用户通过软件来设置。
5) RB8——接收数据位8 (和TB8对应)
在方式2、3时,RB8是存放接收的第9位数据。可判断是地址帧(1),
还是数据帧(0)。
在方式1时,RB8是接收的停止位。
在方式0时,不使用RB8
A B
单机方式
主机
从机2 从机1 从机n
多机方式
6) TI——发送中断标志位
在方式0时,发送完第8位数据后,该位由硬件置位。
在其它方式下,于发送停止位开始时,由硬件置位。
因此,TI=1表示帧发送结束,其状态既可供软件查
询使用,也可请求中断。
TI必须由软件清“0”。
7) RI——接收中断标志位
在方式0时,接收完第8位数据后,该位由硬件置位。
在其它方式下,于接收到停止位中间时,该位由硬件
置位。
因此,RI=1表示帧接收结束,其状态既可供软件查
询使用, 也可请求中断。
RI由必须软件清“0”。
2. 电源控制寄存器(PCON)
PCON不可位寻址,字节地址为87H。它主要是为
CHMOS型单片机80C51的电源控制而设置的专用寄存
器。其内容如下:
与串行通信有关的只有D7位(SMOD),该位为波特率倍增
位,当SMOD=1时,串行口波特率增加一倍,当SMOD=0时,串
行口波特率为设定值。当系统复位时,SMOD=0。
位序 D7 D6 D5 D4 D3 D2 D1 D0
位符号 SMOD / / / GF1 GF0 PD IDL
3. 中断允许控制寄存器(IE)
进行字节操作时,寄存器地址为0A8H。按位操作时,各位的地
址为0A8H~0AFH。寄存器的内容及位地址表示如下:
位地址 0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8H
位符号 EA / / ES ET1 EX1 ET0 EX0
ES:串口中断允许位
ES=0:禁止串口中断
ES=1:允许串口中断
MCS-51串行通信工作方式
串行口的工作方式由SM0和SM1确定,编码和功能如表所示。
方式0和方式2的波特率是固定的,而方式1和方式3的波特
率是可变的,由T1的溢出率决定。
SM0 SM1 方式 功能说明 波特率
0 0 方式0 移位寄存器方式 fosc/12
0 1 方式1 8位UART 可变
1 0 方式2 9位UART fosc/64 或者fosc/32
1 1 方式3 9位UART 可变
方式0发送时序
串行工作方式0(移位方式)
1. 数据输出(发送) 并口扩展P147
当数据写入SBUF后,数据从RXD()端在移位脉冲
TXD(
数据的串并转换。当8位数据全部移出后,TI由硬件置位,发生中断请
求。若CPU响应中断,则从0023H单元开始执行串行口中断服务程序,
数据由74LS164并行输出。其接口逻辑如图所示。
图为接口逻辑
移位数据:
一帧8位。低
位在前,高
位在后,没
有起始位、
停止位。
图为 方式0接收时序
2. 数据输入(接收)
要实现接收数据,必须首先把SCON中的允许接收位
REN设置为1。当REN设置为1时,数据就在移位脉冲的
控制下,从RXD端输入。当接收到8位数据时,置位接收
中断标志位RI,发生中断请求。其接口逻辑如图所示。由
逻辑图可知,通过外接74LS165,串行口能够实现数据的
并行输入。(并串转换)
图为外接移位寄存器输入
•数据输出(发送):
当8位数据全部移出后 ,TI被自动置位。
•数据输入(接收):
当REN=1(允许接收),接收到8位数据时,
RI被自动置1。
【例】使用74LS164的并行输出端接8支发光二极管,
利用它的串入并出功能,把发光二极管从左到右依次点
亮,并反复循环。假定发光二极管为共阴极接法。
图为电路设计
解:电路如图。软件部分如下:
ORG 0000H
LJMP MAIN
ORG 1000H
MAIN: MOV SCON,#00H ;串行口工作在方式0
CLR ES ;禁止串行中断
MOV A, #80H ;发光二极管从左边亮起
DELR: CLR ;关闭并行输出
MOV SBUF, A ;串行输出
WAINT:JNB TI, WAIT ;状态查询
SETB ;开启并行输出
ACALL DELAY ;调用延时子程序
CLR TI ;清发送中断标志
RR A ;发光右移
AJMP DELR ;继续
EDN
串行工作方式1
方式1为10位一帧的异步串行通信方式。其帧格式为
1个起始位、8个数据位和1个停止位。如图所示。
图为方式1的帧格式
1. 数据输出(发送)
数据写入SBUF后,开始发送,此时由硬件自动加入
起始位和停止位,构成一帧数据,由TXD串行输出。输出
一帧数据后,TXD保持在高电平状态下(停止位1),并
将TI置位,通知CPU可以进行下一个字符的发送。
图为方式1发送时序
图为方式1接收时序
2. 数据输入(接收) 被动状态
当REN=1且接收到起始位后(1到0),在移位脉冲的控制下,把
接收到的数据移入接收缓冲寄存器(SBUF)中,直到停止位到来后,
把停止位送入RB8(1)中,并置位RI,通知CPU接收到一个字符。
3. 波特率的设定
工作在方式1时,其波特率是可变的,波特率的计算公式为:
其中,SMOD为PCON寄存器最高位的值,其值为1
或0。
波特率=2^SMOD*定时器1的溢出率/32
当定时器1作波特率发生器使用时,选用定时工作方式2(即自动
加载定时初值方式)。选择定时工作方式2可以避免通过程序反复装
入定时初值所引起的定时误差,使波特率更加稳定。假定计数初值为
X,则计数溢出周期为:
溢出率为溢出周期的倒数。则波特率的计算公式为:
实际使用中,波特率是已知的。因此需要根据波特
率的计算公式求定时初值X。用户只需要把定时初值设
置到定时器1,就能得到所要求的波特率。
图为两台8031直接通信
应用举例(用方式1实现双机串行通信)
(1)通信双方的硬件连接
作为应用系统首先要研究通信双方如何连接。一种办法是把
两片8051的串行口直接相连,一片8051的TXD与另一片的RXD
相连,RXD与另一片的TXD相连,地与地连通。由于8051串行
口的输出是TTL电平,两片相连所允许的距离极短。
(2)通信双方的软件约定
为实现双机通信,我们规定如下:
• 假定A机为发送机,B机为接收机。
• 当A机发送时,先送一个“AA”信号,B机收到后回答一个
“BB” 信号,表示同意接收。
• 当A机接收到“BB”后,开始发送数据,每发送一次求一
次“检查和”,假定数据块长16个字节,起始地址为30H,一个
数据块发送完后再发出“检查和”。
B机接收数据并转存到数据区,起始地址也为30H,同时每接收一次
也计算一次“检查和”,当一个数据块收齐后,再接收A机发来的“检查
和”,并将它与B机的“检查和”进行比较。若两者相等,说明接收正确,
B机回答一个00;若两者不相等,说明接收不正确,B机回答一个FF,请
求重发。
• A机收到00的答复后,结束发送。若收到的答复非0,则重新将数据
发送一次。
• 双方均以1200波特的速率传送。假设晶振频率为6MHz ,计算定时器
1的计数初值:
为使波特率不倍增,设定PCON寄存器的SMOD=0,则
PCON=00H ..
(3)基本的通信程序
设计程序框图如图所示。
图为 双机通信程序结构图
根据结构图设计出下述通信程序:
A机通信程序:
ASTART: MOV TMOD,#20H ;设定定时器1工作方式2
MOV TL1,#0F3H ;设定计数初值
MOV TH1,#0F3H ;计数重装值
MOV PCON,#00H ;波特率不倍增
SETB TR1 ;启动T1
MOV SCON,#50H ;设置串行口方式1
ATT1: MOV SBUF, #0AAH ;发送“AA”
AWAIT1: JBC TI, ARR1 ;等待一帧发送完
SJMP AWAIT1
ARR1: JBC RI,ARR2 ;等待应答信号
SJMP ARR1
ARR2: MOV A, SBUF
XRL A,#0BBH
JNZ ATT1 ;判断是否是应答信号
“00”
ATT2: MOV R0, #30H
MOV R7,#10
MOV R6,#00H
ATT3: MOV SBUF, @R0
MOV A,R6
ADD A,@R0
MOV R6,A
INC R0
AWAIT2: JBC TI,ATT4
SJMP AWAIT2 ;发送有效数据
ATT4: DJNZ R7, ATT3 ;判断是否传送完毕
MOV SBUF, R6
AWAIT3: JBC TI, ARR3
SJMP AWAIT3 ;等待
ARR3: JBC RI, ARR4
SJMP ARR3 ;等待
ARR4: MOV A, SBUF
JNZ ATT2
AEND: RET
B机通信程序:
BST\ART: MOV TMOD, #20H ;设定定时器1工作方式2
MOV TH1,#0F2H ;设定计数初值
MOV TL1,#0F2H ;计数重装值
MOV PCON,#00H ;波特率不倍增
SETB TR1
MOV SCON,#50H
BRR1: JBC RI,BRR2
SJMP BRR1 ;等待
BRR2: MOV A,SBUF ;把接收到的数据送入A
XRL A,#0AAH ;判断接收到数据是否是
“AA”
JNZ BRR1 ;如果不是继续等待
BTT11: MOV SBUF,0BBH ;发送应答信号
BWAIT1: JBC TI, BRR3 ;等待
SJMP BWAIT1
BRR3: MOV R0,#30H ;接收有效数据
MOV R7,#10
MOV R6,#00H
BRR4: JBC RI,BRR5
SJMP BRR4
BRR6: MOV A, SBUF
XRL A,R6
JZ BEND
MOV SBUF,#0FFH
BWAIT3: JBC TI, BRR3
SJMP BWAIT3
BEND: MOV SBUF, #00H
RET
串行工作方式2、3
• 当SM0SM1=10、11时,串行口工作在方式2、3。方式2
波特率为( 1/64) fosc或( 1/32) fosc,方式 3波特率
=(2SMOD/32)×定时器T1的溢出率,为波特率可变的9位
异步通信方式,除了波特率外,方式3和方式2相同。
•字符帧11位:
•起始位(0)1位、数据位8位、可程控第9位数据、停止位
(1)1位。
•发送时,第9位数据由SCON中TB8位提供,软件设置:
• SETB TB8 ; CLR TB8 (多机通信时)
•接收时,串行口把接收到的前8个数据位送入SBUF,而把
•第9位数据装入SCON中RB8位,系统自动装入。
返回本节
图为方式2发送时序
图为 方式2的接收时序
波特率的计算
波特率计算公式
表7-3 常用的波特率及计算器初值
返回本节
•对于可变波特率(方式1、3)其计算公式:
波特率=(2SMOD/32)×定时器T1的溢出率
定时器溢出率:单位时间定时器溢出的次数;
溢出率为溢出周期的倒数。
溢出周期:定时器溢出一次所需时间。(定时时间)
当定时器T1作波特率发生器时,通常选用定时方式2
(8位自动加载),可以避免通过程序反复装入定时初值
所引起的定时误差,使波特率更加稳定。
假定计数初值为X,则计数溢出周期为:
则波特率的计算公式为:
实际使用中,
①首先确定波特率;(双方已相互约定)
②再根据波特率的计算公式求定时1初值X;
③然后进行定时器1的初始化,就能得到所要求的波
特率。
SMOD值可通过
MOV PCON,#00H
或MOV PCON,#80H设定。
例:设fosc=6MHZ,波特率为1200bit/s,计算定时器1的
计数初值。串行口为工作方式1,写出相应的初始化程序。
解:设SMOD=0,T1为工作方式2。
•初始化程序:
•MOV TMOD,#20H ;设置T1工作方式2
•MOV TL1,#0F3H ;计数初值
•MOV TH1,#0F3H;
•SETB EA ;中断允许
•MOV PCON,#00H ;波特率不倍增
•MOV SCON,#50H ;串行方式1,REN=1
•SETB TR1 ;启动T1工作
多机通信接口
1.多机通信原理
串行口控制寄存器SCON中的SM2为多机通信
接口控制位。串行口以方式2或3接收时,若SM2
为1,则仅当接收到的第9位数据RB8为1时,数据
才装入SBUF,置位RI,请求CPU对数据进行处理;
当SM2为0时,则接收到一个数据后,不管第9位
数据RB8是0还是1,都将数据装入接收缓冲器
SBUF并置位中断标志RI,请求CPU处理。
……
图为 MCS-51单片机主从式多机通信
8051
TXD RXD
•多机通信:一台主机和多台从机之间的通信。
•多机通信机制:主机发送信息,可以传送到各个从机或指
定从机,各从机发送的信息只能被主机接收。
•主机发送:地址帧 数据帧 地址帧 。通过第9位数
据确 定。
TB8=1,地址帧
TB8=0,数据帧
•从机接收:串口工作在方式2、3下,
多机通信标志SM2()=1时,当
RB8=1:地址帧,将数据装入SBUF,置RI,发出接收中
断请求。
RB8=0:数据帧,在SM2=1, RB8=0时,接收数据丢弃。
•SM2=0:直通方式,不论RB8是0还是1,都将收到的数据
装入SBUF,并发出中断请求。(再置SM2=1)
• 对于所有从机,由于SM2=1, RB8=1,(都接收地址
帧)各自发出中断请求。判断主机发送的是否与本机相符,
若相符,则从机SM2清0(变成直通方式),准备接收其
后发送来的数据。
•多机通信过程:
•① 全部从机串口工作方式初始化为2或3,置位SM2,允
许中断;
•② 主机置位TB8,发送要寻址的从机地址;
•③ 所有从机均接收主机发送的地址,进入中断进行地址
比较;
•④ 确认寻址从机,自身SM2清0,向主机返回地址,供
主机核对;
•⑤ 核对无误,从机向被寻址从机发送命令,通知从机进
行一对一的数据通信。
多机通信程序设计 P195
•串行通信的接口标准
•美国电子工业协会公布的串行通信的接口标准
(EIA)
•正逻辑:
•高电平用“1”表示;
•低电平用“0”表示;
•RS232(电压型总线标准)电平逻辑:负逻辑。
•带负载时:逻辑1:-5V~-15V
逻辑0:+5V~+15V
不带负载时:输出电平,-25V~+25V
输入电压,-25V~+25V
•RS232串行信息格式:
•MCS-51串行口通信采用TTL正逻辑
•逻辑1:+
•逻辑0:
•因此, RS232与MCS-51串行口接口时,必须进行电平转
换。
“1” –
12V
“0”
+12V
•电平转换常用芯片:
•传输线驱动器:MC1488
•供电电压:±12V,输入TTL电平,输出RS232电平。
实现将TTL逻辑电平转换为RS232逻
辑电平。
•传输线接收器:MC1489
•供电电压:±5V,输入RS232电平,输出TTL电平。
(a)MC1488 (b)MC1489
图7-20 MC1488,MC1489引脚
•RS232接口常用信号:
•信号线 引脚
•保护地 1
•信号地 7
•发送数据TXD 2
•接收数据RXD 3
•请求发送RTS(输出) 4
•消除发送CTS (输入) 5
•数据准备好(输入) 6
两台8031采用RS232C总线通信
TXD
RXD
TXD
RXD
1~2米距离
•长距离可用485,MODEM,GPS,等。
THANK YOU VERY MUCH !
•本章到此结束,
•谢谢!
结束放映 返回本章首页