第7章
单片机的串行通信
本章的学习目标
单片机串行通信I/O接口的结构
串行通信控制寄存器
单片机串行通信的工作方式
串行通信应用。
通
信
方
式
串行通信的概念
异步通信与同步通信
并行通信—空间上区分各位数据及联络
控制信号。占用传输线多,速度快。
串行通信—时间上区分各位数据及联络
控制信号。占用传输线少,速度慢。
一、串行通信方式
信息传输在一个方向上只占用一跟通信线,
它既作为数据线,又作为联络线。
信息
格式
上分
异步通信方式: 按字符传输
同步通信方式: 按数据块传输
1.异步通信数据格式
停
止
位
起
始
位
低位 高位
7位数据位 奇偶
校验
停
止
位
第N个字符第N-1个字符
1 0
2.同步通信SYNC
(Synchronous Data Communication)
在同步通信中,数据或字符开始处是用
同步字符来指示(一般约定为1~2个字符),以
实现发送端和接收端同步,一旦检测到约定同步
字符,下面就连续按顺序接收数据。
串行通信的波特率
波特率(bps)是异步通信中数据传送速率的
单位,其意义是每秒传送多少位二进制数。
例如:数据传送的速率为120个字符每秒,每个字
符由1个起始位、8个数据位和1个停止位组成,则
其传送波特率为:
10b×120/s=1200bps=1200波特
串行通信的方式
按照数据传送方向,串行通信可分为单工、半双工(half
duplex)制式和全双工(full duplex)制式。
1.半双工制式
在半双工制式下,甲机和乙机之间只有一个
通信回路,接收和发送不能同时进行,只能分时
发送和接收。
演 示
思考:
实际生活的例子?
2.全双工制式
在全双工制式下,甲、乙两机之间数据的
发送和接收可以同时进行,称为全双工传送。
不管哪种形式的串行通信,在两机之间均应有
共地线。
思考:
实际生活的例子?
串行通信总线标准及其接口
RS-232C接口
RS-232C是使用最早、应用最多的一种异步串行通信总线
标准。是美国电子工业协会(EIA)1962年公布,1969年最后修
定而成的。其中,RS表示Recommended Standard,232是该标
准的标识号,C表示最后一次修定。
RS-232C主要用来定义计算机系统的一些数据终端设备
(DTE)和数据电路终接设备(DCE)之间的电气性能。
RS-232C串行接口总线适用于:设备之间的通信距离不
大于15 m,传输速率最大为20 kb/s。
1. RS-232C信息格式标准
RS-232C采用串行格式,如图7-5所示。该标准规定:
信息的开始为起始位,信息的结束为停止位;信息本身可
以是5、6、7、8位再加一位奇偶校验位。如果两个信息之
间无信息,则写“1”,表示空。
图7-5 RS-232C信息格式
2. RS-232C电平转换器
RS-232C规定了自己的电气标准,由于它是在TTL电
路之前研制的,所以它的电平不是+5 V和地,而是采用
负逻辑,即逻辑“0”:+5 V~+15 V;逻辑“1”:-5
V~-15 V。 因此,RS-232C不能和TTL电平直接相连,
使用时必须进行电平转换,否则将使TTL电路烧坏,实
际应用时必须注意!常用的电平转换集成电路是传输线
驱动器MC1488和传输线接收器MC1489。
图7-6 MAX232引脚图
常用的电平转换电路是MAX232。图为MAX232的引脚图。
接计算机 接单片机
3. RS-232C总线规定
RS-232C引脚图
RS-232C标准总线为25根,采用标准的D型25芯插头座。各引
脚的排列如图。
DTE:数据终端设备(如个人计算机)
DCE:数据电路终接设备(如调制解调器)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
方向 名称
第2路发送数据
发送时钟
第2路接收数据
接收时钟
未用
第2路请求发送
数据终端就绪
数据信号检测
振铃指示
数据信号速率选择
发送时钟
未用
未用
保护地
发送数据 到DCE
接收数据 到DCE
请求发送 到DCE
允许发送 到DTE
数据置位就绪 到DTE
信号地
载波检测 到DTE
留作调试用
第2路载波检测 到DTE
第2路允许发送 到DTE
名称 方向
到DCE
到DTE
到DTE
到DTE
到DCE
到DCE
到DTE
到DTE
到DCE
到DCE
RS-449、RS-422A、RS-423A标准接口
RS-232C虽然应用广泛,但因为推出较早,在现代
通信系统中存在以下缺点:数据传输速率慢,传输距离
短,未规定标准的连接器,接口处各信号间易产生串扰。
鉴于此,EIA制定了新的标准RS-449,该标准除了与RS
-232C兼容外,在提高传输速率,增加传输距离,改善
电气性能等方面有了很大改进。
1. RS-449标准接口
RS-449是1977年公布的标准接口,在很多方面可
以代替RS-232C使用。
RS-449与RS-232C的主要差别在于信号在导线上的
传输方法不同:RS-232C是利用传输信号与公共地的电
压差,RS-449是利用信号导线之间的信号电压差,在
m的24-AWG双铰线上进行数字通信。RS-449规
定了两种接口标准连接器,一种为37脚,一种为9脚。
RS-449可以不使用调制解调器,它比RS-232C传输
速率高,通信距离长,且由于RS-449系统用平衡信号
差传输高速信号,所以噪声低,又可以多点或者使用
公共线通信,故RS-449通信电缆可与多个设备并联。
2. RS-422A、RS-423A标准接口
RS-422A文本给出了RS-449中对于通信电缆、驱动
器和接收器的要求,规定双端电气接口形式,其标准是
双端线传送信号。它具体通过传输线驱动器,将逻辑电
平变换成电位差,完成发送端的信息传递;通过传输线
接收器,把电位差变换成逻辑电平,完成接收端的信息
接收。RS-422A比RS-232C传输距离长、速度快,传输
速率最大可达10 Mb/s,在此速率下,电缆的允许长度为
12 m,如果采用低速率传输,最大距离可达1200 m。
20 mA电流环路串行接口
20 mA电流环是目前串行通信中广泛使用的一种接
口电路。电流环串行通信接口的最大优点是低阻传输
线对电气噪声不敏感,而且易实现光电隔离,因此在
长距离通信时要比RS-232C优越得多。图7-9是一个实
用的20 mA电流环接口电路。它是一个加上光电隔离的
电流环传送和接收电路。在发送端,将TTL电平转换为
环路电流信号,在接收端又转换成TTL电平。
图 20 mA电流环接口电路
TTL数据
入
TTL数据
出
通信需要考虑的因素:
(1) 通信速度和通信距离。通常的标准串行接口,都
要满足可靠传输时的最大通信速度和传送距离指标,但
这两个指标具有相关性,适当降低传输速度,可以提高
通信距离,反之亦然。例如,采用RS-232C标准进行单向
数据传输时,最大的传输速度为20 kb/s,最大的传输距
离为15 m。而采用RS-422A标准时,最大的传输速度可达
10 Mb/s,最大的传输距离为300 m,适当降低传输速度,
传输距离可达1200 m。
(2) 抗干扰能力。通常选择的标准接口,在保证不
超过其使用范围时都有一定的抗干扰能力,以保证可靠
的信号传输。但在一些工业测控系统中,通信环境十分
恶劣,因此在通信介质选择、接口标准选择时,要充分
考虑抗干扰能力,并采取必要的抗干扰措施。例如在长
距离传输时,使用RS-422A标准,能有效地抑制共模信号
干扰;使用20mA电流环技术,能大大降低对噪声的敏感
程度。
在高噪声污染的环境中,通过使用光纤介质可减少
噪声的干扰,通过光电隔离可以提高通信系统的安全性。
MCS-51的串行接口
MCS-51串行口结构
MCS-51内部有两个独立的接收、发送缓冲器SBUF。
SBUF属于特殊功能寄存器。发送缓冲器只能写入不能读出,
接收缓冲器只能读出不能写入,二者共用一个字节地址
(99H)。串行口的结构如图7-10所示。
1.串行口控制寄存器SCON
SM0、SM1:控制串行口的工作方式。
SM2:允许方式2和方式3进行多机通信控制位。
REN:允许串行接收控制位。REN=1,允许接收。
TB8:是工作在方式2和方式3时要发送的第9位数据,
根据需要由软件置位和复位。
RB8:是工作在方式2和方式3时接收到的第9位数据。
TI:发送中断标志位。必须由软件清零。
RI:接收中断标志位。必须由软件清零。
SM0、SM1:串行口工作方式选择位
2.特殊功能寄存器PCON
SMOD:波特率倍增位。
当SMOD=1时,波特率加倍;
当SMOD=0时,波特率不加倍。
GF1、GF0:两个通用标志位,用户使用。
思考:
该两位的作
用是什么?
单片机串行口的工作方式
1.方式0
串行接口工作方式0为同步移位寄存器方式,多用
于I/O口的扩展,其波特率是固定的,为f
osc
/12。TXD引
脚输出同步移位脉冲,RXD引脚串行输入/输出。
2.方式1
在方式l时,串行口被设置为波特率可变的8位异步
通信接口。发送/接收1帧数据为10位,其中1位起始位、
8位数据位(先低位后高位)和1位停止位。
3.方式2
串行口工作为方式2时,被定义为9位异步通信接
口。发送/接收1帧数据为11位,其中1位起始位、8位
数据位、1位控制/校验位和1位停止位。控制/校验位
为第9位数据。
4.方式3
方式3为波特率可变的11位异步通信方式,除了波
特率有所区别之外,其余同方式2。
.3 串行通信的波特率
(1)方式0的波特率
在方式0下,串行口通信的波特率是固定的,
其值为fosc/12(fosc为主机频率)。
(2)方式2的波特率
在方式2下,通信波特率为fosc/32或fosc/64
,根据特殊功能寄存器PCON中SMOD位的状
态来决定串行口在那个波特率下工作。选择公
式为:
(3)方式1或方式3的波特率
在这两种方式下,串行口波特率是由定时器
的溢出率决定的,因而波特率是可变的。波特率
的公式为:
式中:K为定时器T1的位数。
单片机串行口的应用
串行口扩展显示器
【例7-1】用8位串入并出移位寄存器74HC164扩展显
示器。
功能:把数据从显示缓冲区送到数码管。
ORG 1000H
MOV R2,#08H ;显示8个数码管
MOV R0,#DIS ;显示缓冲区未地址送入R0
DL0:MOV A,@R0 ;取要显示数作查表偏移量
MOV DPTR,#TAB ;指向字形表首
MOVC A,@A+DPTR ;查表得字形码
MOV SBUF,A ;发送显示
DL1: JNB T1,DL1 ;等待发送完一帧
CLR T1 ;清中断标志,准备继续发送
DEC R0 ;更新显示单元
DJNZ R2,DL0 ;重复显示所有数码管
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H
; 0,1,2,3,4,
DB 92H,82H,0F8H,80H,90H
;5,6,7,8,9,
DB 88H,83H,0C6H,0A1H,86H
;A,B,C,D,E,
DB 8EH,0BFH,8CH,0FFH
;F,-,P,暗
串行口扩展的键盘
在方式0下,串行口作同步移位寄存器用,
以8位数据为一帧,先发送或接收最低位,每
个机器周期发送或接收一位,故其波特率是固
定的,为fosc/12。串行数据由RXD()
端输入或输出。
ORG 0100H
START: MOV R0,#50H ;片内RAM
MOV DPTR,#TAB
RCVI: MOV SCON,#10H;设置串口0并接收
JNB RI,$ ;一帧接收完毕
CLR RI
MOV A,SBUF ;读数据
MOV R0,#0 ;初始键号
MOV R1,#0 ;查询健计数器
LP1: RRC A ;从低位健判断
JNC N1 ;c不等于1,有健
INC R0 ;初始键号加一
INC R1
CJNE R1,#08,LP1;8个是否判断完毕
SJMP RCVI
N1: MOV A,R0
ADD A,A
JMP @A+DPTR ;有健按下
TAB: AJMP OPR0 ;转向0号健
AJMP OPR1
…
AJMP OPR7
OPR0: …
LJMP START
OPR7: …
LJMP START
END
双机通信
【例7-3】编程把甲机片内RAM50H~5FH单元中的
数据块从串行口输出。定义在方式3下发送,TB8
作奇偶校验位。采用定时器1方式2作波特率发生
器,波特率为1200波特,f
osc
=11.0592MHz,预
置值TH1=0E8H。
编程使乙机从甲机接收16个字节数据块,并
存入片外3000H~300FH单元。接收过程中要求判
奇偶校验标志RB8。若出错则置F0标志为1,若正
确则置F0标志为0,然后返回。
发送子程序如下:
ORG 0000H
MOV TMOD,#20H ;设置定时器1为方式2
MOV TL1,#0E8H ;设预置值
MOV TH1,#0E8H
SETB TRI ;启动定时器1
MOV SCON,#0C0H;设置串行口为方式3
MOV PCON,#00H ;SMOD=0
MOV R0,#50H ;设数据块指针
MOV R7,#10H ;设数据长度10H
TRS: MOV A,@R0 ;取数据送至A
MOV C,P
MOV TB8,C ;奇偶位P送至 TB8
MOV SBUF,A ; 启动发送
WAIT:JNB TI,$ ;判1帧是否发送完
CLR TI
INC R0 ;更新数据单元
DJNZ R7,TRS ;循环发送至结束
END
接收子程序编程如下:
MOV TMOD,#20H ;设置定时器1为方式2
MOV TL1,#0E8H ;设预置值
MOV TH1,#0E8H
SETB TR1 ;启动定时器1
MOV SCON,#0C0H ;设置串行口为方式3
MOV PCON,#00H ;SMOD=0
MOV DPTR,#3000H ;设置数据块指针
MOV R7,#10H ;设数据块长度
SETB REN ;允许接收
WAIT:JNB RI,$ ;判1帧是否接收完
CLR RI
MOV A,SBUF ;读入1帧数据
JNB ,PZ ;奇偶位P为0则跳转
JNB RB8,ERR ;P=l,RB8=0则出错
SJMP YES ;二者全为1则正确
PZ: JB RB8,ERR ;P=0,RB8=l则出错
YES:MOVX @DPTR,A ;正确,存放数据
INC DPTR ;修改地址指针
DJNZ R7,WAIT ;判断数据块接收完否
CLR ;接收正确且接收完清F0标志
RET ;返回
ERR: SETB ;出错则置F0标志为“l”
RET ;返回