第8章 串行通信及其接口
• 概述
• MCS-51的串行口
• 串行口的控制
概述
•串行通信:
数据一位接一位顺序传送,可只用一根数据线传送多位信息。
返回本章首页
概述
•串行通信有两种基本方式。
同步通信SYNC(Synchronous Data Communication):严格同步,
发送同步码,数据连续,信息量大,速度较高
异步通信ASYNC(Asynchronous Data Communication):帧格式
传送,信息量不大
返回本章首页
异步通信一幀字符信息的结构
异步串行通信数据格式
同步字符 CRC字符
开始
终止
数据块
同步通信数据格式幀结构
概述
•串行通信从传输方式分为:
串行接口有单工、半双工和全双工3种
返回本章首页
概述
•RS-232C总线
•I2C--PHILIPS公司推出的 I2C总线(INTEL IC
BUS)
•SPI--(Serial Peripheral Interface--串行外设接口
)
返回本章首页
串行接口的连接的三种方法
1 三线连接
2 RS-232接口连接
3 modem方式连接
TXD
RXD
GND
TXD
RXD
GND
三线链接
TXD
RXD
GND
TXD
RXD
GND
RS232电
平转换
RS232电
平转换
RS232接口连接
串行通信的传送速率
传送速率用于描述数据传送的快慢。在串行通信中,数
据是按位进行传送的,因此传送速率用每秒钟传送
格式位的数目来表示,称之为波特率(baud rate)。
每秒传送一个格式位就是1波特,即:
1波特=1bps(位/秒)
在串行通信中,格式位的发送和接收分别由发送时
钟脉冲和接收时钟脉冲进行定时控制。时钟频率高,
则波特率也高,通信速度就快;反之,时钟频率低,
则波特率也低,通信速度也慢。
起 始
位
D0 D1 D2 D4D3 D5 D6 D7 X
标志 停止位
检验位
RS232C总线上传输的异步通信典型数据格式
分类 符号 名称 引脚 说明
地线 机架保护地(屏蔽地) 1
信号地(公共地) 7
数据信
号线
TXD 数据发送线 2 在无数据信息传输或收/发信息间隔期,RXD/TXD电平为1。
辅助信道传输速率较主信道低。其余同
RXD 数据接收线 3
TXD 辅助信道数据发送线 14
RXD 辅助信道数据接收线 16
定时
信号
线
DCE发送信号定时 15
指示被传输的每个bit信息的中心位置
DCE接收信号定时 17
DTE发送信号定时 24
控
制
线
RTS 请求发送 4 DTE发给DCE
CTS 允许发送 5 DCE发给DTE
DSR DCE装置就绪 6
DTR DTE装置就绪 20 DTE发给DCE
DCD 接收信号(载波)检测 8 DTE收到满足标准的信号时置位
振铃指示 22 由DCE收到振铃时置位
信号质量检测 21 由DCE根据数据信息是否有错而置位/复位
数据信号速率选择 23 指定两种传输速率中的一种
RTS 辅助信道请求发送 19
CTS 辅助信道允许发送 13
RCD 辅助信道接收检测 12
备
用
线
9
未定义,保留供DCE装置测试使用
10
11
18
25
R
S232C
信
号
线
及
其
在
D
B
-25
的
针
脚
号
概述
•串行接口结构图
返回本章首页
MCS-51的串行口
• 串行口的结构
• 串行口的工作方式
• 波特率的计算
返回本章首页
中断请求
串行口的结构
• MCS-51单片机片内有一个串行接口,可提供同步或全
双工异步串行通信方式.
设有二个互相独立的
接收\发送缓冲器,可
分别接受和发送数据
发送缓冲器只能写入,
接收缓冲器只能读出
两个缓冲器可共用一
个地址码99H
发送:MOV SBUF,A
接收:MOV A,SBUF
中断请求
串行口的结构
•与串行口有关的特殊功能寄存器有:
SCON:串行口控制寄存器
SBUF :缓冲寄存器
PCON:功耗控制寄存器
(D7: SMOD为波特率系数选择位) 。
串行口的结构
1.串行口控制寄存器SCON (98H),可位寻址
– SM0 SM1:确定4种工作方式
– SM2:多机通信控制位
– REN:允许串行接收位
– TB8:待发送的第9位数据
– RB8:接受到的第9位数据
– TI和RI:发送和接收中断标志位(注:软件清零)
• SCON
(98h)
• 位地址
•SM
0
•SM1 •SM2 •REN •TB8 •RB8 •TI •RI
•9F •9E 9D 9C 9B 9A 99 98
D7 D6 D5 D4 D3 D2 D1 D0
2.特殊功能寄存器PCON
•其字节地址为87H,没有位寻址功能。PCON的
格式如图7-7所示,其中与串行接口有关的只有D7
位。
PC
ON
SM
OD
D7 D6 D5 D4 D3 D2 D1 D0
返回本节
串行口的工作方式
1.方式0 (移位寄存器方式)发送/接收时序
发
送
接
收
2.方式1 (8位UART) 发送/接收时序
发
送
接
收
3.方式2 (9位UART)发送/接收时序
发
送
发送数据TXD端输出,发送11位数据。
第9位为可程控的数据,在SCON的TB8中。
TB8由软件值1或清零。
•多机通讯,作为发送地址(1)或数据(0)的标志位。
•双机通讯,作为奇偶校验位。
接
收
数据由RXD端输入,接收11位信息,
当接收器采样到RXD端从1到0的跳变,开始接收一帧信息。
当SM2=1,仅接受地址信号。地址匹配, SM2,<- 0。
SM2=0,接受数据及地址信号。
(RB8=1为地址信号, RB8=0为有效数据位)
• SCON
• 位地址
•SM
0
•SM
1
•SM
2
•RE
N
•TB8 •RB8 •TI •RI
•9F •9E 9D 9C 9B 9A 99 98
D7 D6 D5 D4 D3 D2 D1 D0
4.方式3 (9位UART)
• 当SM0SM1=11时,串行口工作在方式3。方式3
为波特率可变的9位异步通信方式,除了波特率外,
方式3和方式2相同。
返回本节
波特率的计算
串行口方式0的波特率是固定的,为系统时钟的12
分频(fosc/12),即每个机器周期传送一位数据位。
串行口用方式2工作时,波特率为(2SMOD/64)×fosc
。
串行口方式1和方式3用定时器T1作为波特率发生器,
其波特率有多种选择,与T1的溢出率有关
串行口方式1、3的波特率= (2SMOD/32)×T1溢出率
T1的溢出率即T1溢出时间的倒数,它与T1选择的
功能、工作方式和预置初值等有关
波特率的计算
若定时器T1设定为自动重装方式,T1的溢出率及串
行口波特率算式如下:
当单片机与PC机通讯,工作于串行工作方式1,假
定波特率为9600波特,当单片机的fOSC=,
波特率= (2SMOD/32)×T1溢出率, T1溢出率=(28-X)*fOSC/12
SMOD=1时,
X=256- fOSC*2/(384*9600)= 250=0FAH
将X写入TH1和TL1时,若波特率发生器产生的实际传
输率为波特率=波特
波特率相对误差=(9600—)/9600=%
表8-3 常用的波特率及计算器初值
返回本节
串行口的控制
•一、利用串行口扩展I/O
•二、 主从机间的通信
•三、 多机通信接口
返回本章首页
一、利用串行口扩展I/O
单片机串行工作方式0—8位同步移位寄存器
•利用74LS164扩展并行口,编制程序使L0~L7以计数方式
点亮。
•2、共阴数码管八段码ABCDEFGP分别接74LS164的输出口
Q7~Q0,左移位显示0~9
串并转换,发光二极管显示程序设计
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
MAIN: MOV SP,#53H
MOV TMOD, #01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV IE, #82H
SETB TR0
MOV R0,#30H
MOV R1,#0AH
MOV SCON,#00H
CLR TI
NEXT: MOV A, @R0
SETB
MOV SBUF,A
JNB TI $
CLR TI
CLR
INC R0
CLR F0
JNB F0, $
CLR F0
LJMP NEXT
END
初始化:串口方式0
定时器方式1
等待1S
串口发送数据
查询发送完否
(TI=‘1’ )
TI=‘0’
显示数据指针+1
Y
N
1秒定时程序(1秒钟 F0<-1)
INT_T0: PUSH ACC
PUSH PSW
CLR EA
MOV TL0,#3CH
MOV TH0,#0B0H
DJNZ R1,EXIT
MOV R1,#0AH
SETB F0
EXIT: SETB EA
POP PSW
POP ACC
RETI
定时
初值
中断
允许
串口
方式0
定时1S
串行
发送
关闭并行输出
开启并行输出
串并转换,LED显示程序设计
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
OGR 0030H
MAIN:MOV SP,#53H
MOV TMOD, #01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV IE,#82H
SETB TR0
MOV R0,#30H
MOV R1,#0AH
MOV SCON,#00H
CLR TI
NEXT:MOV A,@R0
MOV DPTR,#CDATA
MOVC A,@A+DPTR
初始化:串口方式0
定时器方式1
等待1S
串口发送LED字型码
查询发送完否
(TI=‘1’ )
TI=‘0’
显示数据指针+1
Y
N
SETB
MOV SBUF,A
JNB TI $
CLR
CLR TI
INC R0
CLR F0
JNB F0, $
CLR F0
LJMP NEXT
END
CDATA:DB 0FCH,60H
DB 0DAH,0F2H
DB 66H,0B6H
DB 0BEH,0E0H
DB 0FEH,0F6H
(abcdefgh)
二、 主从机间的通信
1.双机串行异步通信
单片机与单片机间的串行异步通信接口设计
(如图8-14~8-16所示 )
单片机与PC系列微机间的异步串行通信接口
设计(如图8-17所示)
图8-14 两台8031直接通信
图8-15 两台8031采用RS232C总线通信
图8-16 两台8751互传数据
图8-17 8031单片机和PC机通过RS232C总
线通信接口图
程序设计
1、假定甲、乙机进行串行数据通信,其波特率为1200。甲机将内部RAM
40H~4FH单元的内容传送到乙机外部RAM 1000H~100FH单元,请编程实现。
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP T_PG
ORG 0030H
MAIN: MOV SP, #60H
MOV TMOD, #20H
MOV TH1, #0F3H
MOV TL1, #0F3H
MOV PCON, #00H
MOV SCON, #40H
MOV R0, #40H
MOV R1, #10H
SETB EA
SETB ES
假设fsoc=6MHz,串行工作方式1,smod=0,则计数初值为:
X=256-6*106*20 / (384*1200)=256-13=FFH+1-13=0F3H
SETB TR1
MOV A, @R0
CLR TI
MOV SBUF, A
SJMP $
T_PG: DJNZ R1, NEXT
CLR ES
CLR TR1
LJMP BACK
NEXT: INC R0
MOV A, @R0
CLR TI
MOV SBUF, A
BACK: RETI
smod=0
方式1,
REN=0
中断
允许
取数
发送
甲机发送程序:
程序设计
1、假定甲、乙机进行串行数据通信,其波特率为1200。甲机将内部RAM
40H~4FH单元的内容传送到乙机外部RAM 1000H~100FH单元,编程实现。
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP R_PG
ORG 0030H
MAIN: MOV SP, #60H
MOV TMOD, #20H
MOV TH1, #0F3H
MOV TL1, #0F3H
MOV PCON, #00H
MOV SCON, #50H
MOV DPTR, #1000H
MOV R1, #10H
SETB EA
SETB ES
SETB TR1
CLR RI
SJMP $
R_PG: MOV A, SBUF
MOV @DPTR, A
CLR RI
INC DPTR
DJNZ R1, BACK
CLR ES
CLR TR1
BACK: RETI
smod=0
方式1,
REN=1
中断
允许
接受
送外存
乙机接受程序:
多机通信接口
1.多机通信原理
• 串行口控制寄存器SCON中的SM2为多机通信接口控制位。
• RB8=1为地址信号, RB8=0为有效数据位
• 串行口以方式2或3接收时,
SM2=1,则仅当接收到的第9位数据RB8为1时,数据才装入SBUF,
置位RI,请求CPU对数据进行处理;地址匹配, SM2,<- 0。
当SM2=0时,则接收到一个数据后,不管第9位数据RB8是0还是1,
都将数据装入接收缓冲器SBUF并置位中断标志RI,请求CPU处理。
……
2.多机通信程序设计
MCS-51多机通信程序设计
以典型的PC机和MCS-51构成的主从式多机系统
为例,如图7-23所示,阐述多机通信的程序设计。
多机通信示意
……
图7-23 PC机与MCS-51单片机多机通信
实验内容
•1、利用74LS164扩展并行口,编制程序使L0~L7以计数
方式点亮。
•2、数码管八段码ABCDEFGP分别接74LS164的输出口Q7~
Q0,左移位显示0~9。
实验内容
•1、利用8031串行口实现单机的自发自收。将内部RAM
40H~4FH单元的内容传送到外部RAM 1000H~100FH单元。
•2、利用8031串行口实现单机的自发自收。从~
读入开关的状态,并从~输出到发光二极管上面
显示出来
•实验连线:接,~接发光二极管L0~L3
,~接K0~K3
•要求:发送、接收都用中断功能来实现,主程序一旦启动
了发送之后即进入原地踏步状态