第七章 串口通信与8051单片机串行口
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这就是我们所谓的通信协议。
7.2 8051串行口及其应用
概述 •有一个可编程全双工串行通信接口(UART-Universal Asychronous Receiver/Transmitter ) P3.0 P3.1
RXD 接收
TXD 发送
•可同时发送、接收数据(Transmit/Receive) •有四种工作方式,帧格式有8、10、11位。 •波特率(Baud rate)可设置
(1)计算定时器的初值 根据已知条件,选择定时器Tl采用工作模式2,假定SMOD=0,根据波特率计 算关系式,可得: Tl初值X=256﹣2SMOD×fosc/384/波特率 =256﹣20×6×10 6 /384/1200=242.98 由于定时初值为一个整数,得到:TH1=TL1=243=0F3H
SM0 =SM1=0 SM2=0 断方式编程
RI,TI=0
发送REN=0, 可采用查询或中
P98
采用查询方式,显示的延迟时间通过调用延迟程序DELAY来实现。
MAIN: MOV SCON , # 00H ;串行口初始化,工作方式0 MOV A, # 80H ;置初值(最左一位发光二极管亮) LOOP: MOV SBUF , A ;开始串行输出 WAIT: JNB TI,WAIT ;TI=0,等待 CLR TI ;清发送中断标志 LCALL DELAY ;调用延时子程序,使显示持续一段时间 RR A ;准备右边一位显示 SJMP LOOP
解2:由于选用定时器Tl工作模式2作为波特率发生器,串口工作为方式1,设定 时器初值为X,则有: X=256﹣2SMOD×fosc/384/波特率=256﹣20×11.0592×106 /384/4800=250=0FAH 所以,定时器T1的初值为:(TH1)=(TL1)=0FAH 如果串行通信选用很低的波特率,可将定时器Tl置于模式0或模式1,即13位 或16位定时方式;但在这种情况下,Tl溢出时,需用中断服务程序重装初值。
f osc 1 ( K ) 12 2 初值
T1方式1:K=16 T1方式2、3:K=8
所以: 波特率
f osc 1 ( K ) 2SMOD / 32 12 2 初值
其实,定时器T1通常工作在方式2下,TH1和TL1分别设为两个8位重 装载计数器,TH1重装TL1。 为什么? 所以: 定时器T1模式2的初始值 X=256﹣2SMOD×fosc/(波特率×384) 例7-1:8051单片机时钟振荡频率为11.0592MHz,选用定时器Tl工作模 式2作为波特率发生器,波特率为4800bps,假设SMOD=0,串口工作方 式1,求定时器Tl的初值。
为什么单片机晶振选11.0592MHz? 五、8051串行口的应用
1、方式0的应用(已讲过) 2、方式1的应用(例7-3) 3、方式2、3的应用(例7-4)
例7-3:8031串行口按双工方式收发字符,要求传送的波特率为1200bps。 设fosc为6MHz,编写有关的通信程序。
解:双工通信要求收、发能同时进行。实际上,收、发操作主要是由串 行接口电路实现,CPU只是把数据从接收缓冲器读出或把数据写入发送 缓冲器。数据传送采用中断方式进行,响应中断以后,通过检测是RI置 位还是TI置位来决定CPU是进行发送操作还是接收操作。发送和接收都 通过调用子程序来完成,设发送数据区的首地址为20H,接收数据区的 首地址为40H,且发送和接收的字符小于32个。
四、波特率设计
1.方式0的波特率 方式0波特率=fosc/12 移位寄存器使用,移位脉冲由TXD产生 2.方式2的波特率 方式2波特率=fosc×2SMOD/64 3.方式1和方式3的波特率 由T1的溢出率决定,所以是可变的。 方式1、方式3波特率=(T1溢出率) ×2SMOD/32
注意T1一般工作在定时方式下,也就是对内部脉冲技术,即fosc/12脉 冲计数。 T1溢出率与工作方式有关 T1方式0:K=13
时钟
计 算 机 乙
计 算 机 甲
数据
0 1 1 0 1
数据+时钟
计 算 机 乙
外同步
自同步
3.波特率
定义:每秒钟传输二进制代码的位数 单位 :位/秒(bps)bit per second。 用来表征数据传输的速度。 注意: 这里和字符数据的实际传输速率不同。
每秒传的帧数,这和帧的格式有关
若波特率为1200bps,字符数据传输率为? (假定数据为1个起始位,8位数据位,1个校验位,1个停止位) 总结:两台设备要进行串行通信,必须满足两个条件: (1)通信双方必须采用统一的编码方法; (2)通信双方必须能产生相同的传送速率。
CP
CP
1移位
P1.0控制移位还是置入数据。
0置入数据
程序举例:以8位并行口读入20H组字节数据,并把它们转存到内部 RAM数据区(首址为30H)的程序清单:
MOV R7, #20H MOV R0, #30H RCV0: CLR P1.0 ;置入数据 SETB P1.0 ;允许移位 RCV1: MOV SCON, #00010000B;方式0,允许接收,并启动接收 STP: JNB RI, STP ; CLR RI ; MOV A, SBUF ;从串口中读入数据 MOV @R0, A INC R0 DJNZ R7, RCV0 ……
8位同时传送 接 收 设 备 询问 应答
1 0 1 0 1 1 0 0
发 送 设 备
接 收 设 备
D0
D7
8位顺次传送
发 送 设 备
并行通信
串行通信
并行通信,即数据的各位同时传送; 串行通信,即数据一位一位顺序传送。
7.1 串行通信概述
一、数据通信 通信方式有两种,即并行通信和串行通信。通常根据信息传送的距离 决定采用哪种通信方式。
多机通信控制位
0:单机对单机 1:多机通信 1:地址帧 0:数据帧
(用在方式2、3时,发送数据的第9位)
RB8
允许串行接收位
0:禁止串口接收 1:允许串口接收
2.PCON(87H)
87H SMOD × × × GF1 GF0 PD IDL
只有该位有用,为1时,波特率×2;为0时不变。 SMOD:波特率倍增位。在串行口方式1、方式2和方式3时,波特率和 2SMOD成正比。
省略了延时子程序DELAY
2. 方式1 10位异步通信方式, 8位数据位, 1位起始位, 1位停止位 (1)发送
TXD P3.1输出 TI=0时,MOV SBUF, A 发送电路自动在8位数据加1个起始位和一个停止位,然后在TXD上 发送,发送完一帧数据后,TI置1 发送波特率由T1的溢出率16分频或32分频决定 (SMOD)
(1)接收
REN=1 RI=0 RXD(数据输入) D0 D1 D2 D3 D4 D5 D6 D7
TXD(移位脉冲)
条件:REN=1,RI=0的条件下,REN=1的一个高电平过来启 动接收过程,一次接收启动开始。 此时RXD为串行输入端,TXD为同步脉冲输出端。 fosc/12
例:利用两片74LS165扩展2个8位并行输入口
3.方式2和方式3 11位异步通信, 1位起始位(0),8位数据位(低位在前),1位 可编程的第9数据位和1位停止位(1)。两者的差别在于波特率的设置 不同。 方式2波特率——fosc/32或fosc/64 fosc*2SMOD/64 方式3波特率——T1的溢出率决定。 (1)发送:方式2、3类似于方式1,TI=0时,MOV SBUF, A 执行向 SBUF传送指令启动,不同的是CPU会自动把TB8中的这一位加到第9位 数据位,发送,发送完毕,TI=1,申请中断。 (2)接收:方式2、3类似于方式1,RI=0,REN=1时启动,不同方式1, 接收到的第9位数据为奇偶位,存入到RB8中,接收完毕,置位RI。
……
数据字符n
……
用户自己定义,常采用ASCII码中(16H) SYNC代码 用于确认数据字符的开始(接收端不断采样,把采样到的 字符与双发约定的字符比较,相同表示后面的是数据,要接收。 缺点:要求发送和接收时钟严格同步,但速度块,可达 56000bps 很难
计 算 机 甲
0 1 1 0 1
数据 时钟
三、 8051串行口工作方式
1.方式0 同步移位寄存器,常用于扩展I/O口,不作串口用。波特率固定,fosc/12。 数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1) 引脚输出。发送和接收均为8位数据,低位在先,高位在后。常见的例子: 利用74LS164扩展并行输出口,利用74LS165扩展并行输入口等。
图7-3异步通信的帧数据格式
起始位 字符帧(数据帧) 数据位 奇偶校验位 停止位
0 8位 奇校验或偶校验 1
假如两帧数据有时间间隔,那就是空闲位为1
异步通信的特征之一 2.同步通信
一次通信只传送一桢数据,包含若干个数据 较长
同步字符 数据字符1 数据字符2
……
数据字符n
……
同步通信的帧数据格式
同步字符 数据字符1 数据字符2
一、8051串行口结构
用于存放将要发送的字 8051内部 发送缓冲器SBUF 符数据(只能写,不能 读) 有两个SBUF 接收缓冲器SBUF 用于存放将要接收的字 符数据(只能读,不能 写) 但是两个SBUF共用同一个地址99H(SFR)中,所以用户只能用一个。
MOV SBUF, A MOV A, SBUF
(2)发送
写入SBUF RXD(数据) TXD(移位脉冲) TI(中断标志)
D0 D1 D2 D3 D4 D5 D6 D7
执行一条向SBUF传送指令时,数据从RXD发送,TXD同步移位 脉冲,波特率fosc/12
A,B串行输入端
D0 ~ D7 D0 ~ D7
Cr
Cr
清零端,0 164输出为0
CP时钟脉冲输入端,上升沿作用下实 现移位
9FH SM0
9EH SM1
9DH SM2
9CH REN
9BH 9AH 99H 98H TB8 RB8 TI RI
工作方式选择
接收中断标志
(软件清除)
发送中断标志
(软件清除)
(用于方式2、3存放数据的第9位,由软件置位或复位 接收数据的第9位 方式1下,SM2=0 时,存放的是停止 位)
发送数据的第9位
解1:波特率=(T1溢出率)*2SMOD/32 T1溢出速率=波特率×32/2SMOD=4800×32/20=153600Hz T1溢出间隔:DT=1/T1溢出速率=1/153600 利用T1工作方式2,实现定时DT时间,设定时初值为X,则: X=256﹣DT×fosc/12=256﹣(1/153600)×11.0592×106/12=256﹣6=250=0FAH 所以,定时器T1的初值为:(TH1)=(TL1)=0FAH
中国计量学院
第七章 串行通信与8051串行口
串行通信和并行通信
8位同时传送 接 收 设 备 询问 应答
1 0 1 0 1 1 0 0
发 送 设 备
接 收 设 备
D0
D7
8位顺次传送
发 送 设 备
并行通信
串行通信
并行通信,即数据的各位同时传送; 串行通信,即数据一位一位顺序传送。
串行通信和并行通信
(2)接收
对RXD采样,采样频率是波特率的16倍
数据从RXD(P3.0输入) RI=0,REN=1时,启动接收过程。 接收波特率同发送,由T1的溢出率16分频或32分频决定。 在接收到第9位数据(停止位)时,才把前面接收的8个数据存入到 SBUF中,并把停止位送到RB8中。 一帧数据接收完毕后,置RI为1.
串行通信:距离远 并行通信:距离近,速度快,传输线多 二、串行通信的传送方式 单工 半双工 全双工
三、异步通信和同步通信
异步通信 同步通信 1.异步通信 在异步通信中,数据是以字符(或字节)为单位组成字符帧,一帧一 帧发送,一帧一帧接收。 但是:接收端怎么知道发送端何时开始发送和何时结束发送呢? 这由字符帧格式决定
发送一帧数据
接收一帧数据
改Hale Waihona Puke Baidu中断标记位TI、RI
那发送和接收的波特率怎么设置呢?或时钟控制如何呢? 由主机频率晶振和T1定时器来决定。(在后面讲)
二、串口控制器
51对串口的控制都是对串口控制器来完成的,比如说波特率的设置等。 1. SCON SCON (98H) 位地址 位功能 9FH SM0 9EH SM1 9DH SM2 9CH 9BH 9AH 99H REN TB8 RB8 TI 98H RI
7.2 8051串行口及其应用
概述 •有一个可编程全双工串行通信接口(UART-Universal Asychronous Receiver/Transmitter ) P3.0 P3.1
RXD 接收
TXD 发送
•可同时发送、接收数据(Transmit/Receive) •有四种工作方式,帧格式有8、10、11位。 •波特率(Baud rate)可设置
(1)计算定时器的初值 根据已知条件,选择定时器Tl采用工作模式2,假定SMOD=0,根据波特率计 算关系式,可得: Tl初值X=256﹣2SMOD×fosc/384/波特率 =256﹣20×6×10 6 /384/1200=242.98 由于定时初值为一个整数,得到:TH1=TL1=243=0F3H
SM0 =SM1=0 SM2=0 断方式编程
RI,TI=0
发送REN=0, 可采用查询或中
P98
采用查询方式,显示的延迟时间通过调用延迟程序DELAY来实现。
MAIN: MOV SCON , # 00H ;串行口初始化,工作方式0 MOV A, # 80H ;置初值(最左一位发光二极管亮) LOOP: MOV SBUF , A ;开始串行输出 WAIT: JNB TI,WAIT ;TI=0,等待 CLR TI ;清发送中断标志 LCALL DELAY ;调用延时子程序,使显示持续一段时间 RR A ;准备右边一位显示 SJMP LOOP
解2:由于选用定时器Tl工作模式2作为波特率发生器,串口工作为方式1,设定 时器初值为X,则有: X=256﹣2SMOD×fosc/384/波特率=256﹣20×11.0592×106 /384/4800=250=0FAH 所以,定时器T1的初值为:(TH1)=(TL1)=0FAH 如果串行通信选用很低的波特率,可将定时器Tl置于模式0或模式1,即13位 或16位定时方式;但在这种情况下,Tl溢出时,需用中断服务程序重装初值。
f osc 1 ( K ) 12 2 初值
T1方式1:K=16 T1方式2、3:K=8
所以: 波特率
f osc 1 ( K ) 2SMOD / 32 12 2 初值
其实,定时器T1通常工作在方式2下,TH1和TL1分别设为两个8位重 装载计数器,TH1重装TL1。 为什么? 所以: 定时器T1模式2的初始值 X=256﹣2SMOD×fosc/(波特率×384) 例7-1:8051单片机时钟振荡频率为11.0592MHz,选用定时器Tl工作模 式2作为波特率发生器,波特率为4800bps,假设SMOD=0,串口工作方 式1,求定时器Tl的初值。
为什么单片机晶振选11.0592MHz? 五、8051串行口的应用
1、方式0的应用(已讲过) 2、方式1的应用(例7-3) 3、方式2、3的应用(例7-4)
例7-3:8031串行口按双工方式收发字符,要求传送的波特率为1200bps。 设fosc为6MHz,编写有关的通信程序。
解:双工通信要求收、发能同时进行。实际上,收、发操作主要是由串 行接口电路实现,CPU只是把数据从接收缓冲器读出或把数据写入发送 缓冲器。数据传送采用中断方式进行,响应中断以后,通过检测是RI置 位还是TI置位来决定CPU是进行发送操作还是接收操作。发送和接收都 通过调用子程序来完成,设发送数据区的首地址为20H,接收数据区的 首地址为40H,且发送和接收的字符小于32个。
四、波特率设计
1.方式0的波特率 方式0波特率=fosc/12 移位寄存器使用,移位脉冲由TXD产生 2.方式2的波特率 方式2波特率=fosc×2SMOD/64 3.方式1和方式3的波特率 由T1的溢出率决定,所以是可变的。 方式1、方式3波特率=(T1溢出率) ×2SMOD/32
注意T1一般工作在定时方式下,也就是对内部脉冲技术,即fosc/12脉 冲计数。 T1溢出率与工作方式有关 T1方式0:K=13
时钟
计 算 机 乙
计 算 机 甲
数据
0 1 1 0 1
数据+时钟
计 算 机 乙
外同步
自同步
3.波特率
定义:每秒钟传输二进制代码的位数 单位 :位/秒(bps)bit per second。 用来表征数据传输的速度。 注意: 这里和字符数据的实际传输速率不同。
每秒传的帧数,这和帧的格式有关
若波特率为1200bps,字符数据传输率为? (假定数据为1个起始位,8位数据位,1个校验位,1个停止位) 总结:两台设备要进行串行通信,必须满足两个条件: (1)通信双方必须采用统一的编码方法; (2)通信双方必须能产生相同的传送速率。
CP
CP
1移位
P1.0控制移位还是置入数据。
0置入数据
程序举例:以8位并行口读入20H组字节数据,并把它们转存到内部 RAM数据区(首址为30H)的程序清单:
MOV R7, #20H MOV R0, #30H RCV0: CLR P1.0 ;置入数据 SETB P1.0 ;允许移位 RCV1: MOV SCON, #00010000B;方式0,允许接收,并启动接收 STP: JNB RI, STP ; CLR RI ; MOV A, SBUF ;从串口中读入数据 MOV @R0, A INC R0 DJNZ R7, RCV0 ……
8位同时传送 接 收 设 备 询问 应答
1 0 1 0 1 1 0 0
发 送 设 备
接 收 设 备
D0
D7
8位顺次传送
发 送 设 备
并行通信
串行通信
并行通信,即数据的各位同时传送; 串行通信,即数据一位一位顺序传送。
7.1 串行通信概述
一、数据通信 通信方式有两种,即并行通信和串行通信。通常根据信息传送的距离 决定采用哪种通信方式。
多机通信控制位
0:单机对单机 1:多机通信 1:地址帧 0:数据帧
(用在方式2、3时,发送数据的第9位)
RB8
允许串行接收位
0:禁止串口接收 1:允许串口接收
2.PCON(87H)
87H SMOD × × × GF1 GF0 PD IDL
只有该位有用,为1时,波特率×2;为0时不变。 SMOD:波特率倍增位。在串行口方式1、方式2和方式3时,波特率和 2SMOD成正比。
省略了延时子程序DELAY
2. 方式1 10位异步通信方式, 8位数据位, 1位起始位, 1位停止位 (1)发送
TXD P3.1输出 TI=0时,MOV SBUF, A 发送电路自动在8位数据加1个起始位和一个停止位,然后在TXD上 发送,发送完一帧数据后,TI置1 发送波特率由T1的溢出率16分频或32分频决定 (SMOD)
(1)接收
REN=1 RI=0 RXD(数据输入) D0 D1 D2 D3 D4 D5 D6 D7
TXD(移位脉冲)
条件:REN=1,RI=0的条件下,REN=1的一个高电平过来启 动接收过程,一次接收启动开始。 此时RXD为串行输入端,TXD为同步脉冲输出端。 fosc/12
例:利用两片74LS165扩展2个8位并行输入口
3.方式2和方式3 11位异步通信, 1位起始位(0),8位数据位(低位在前),1位 可编程的第9数据位和1位停止位(1)。两者的差别在于波特率的设置 不同。 方式2波特率——fosc/32或fosc/64 fosc*2SMOD/64 方式3波特率——T1的溢出率决定。 (1)发送:方式2、3类似于方式1,TI=0时,MOV SBUF, A 执行向 SBUF传送指令启动,不同的是CPU会自动把TB8中的这一位加到第9位 数据位,发送,发送完毕,TI=1,申请中断。 (2)接收:方式2、3类似于方式1,RI=0,REN=1时启动,不同方式1, 接收到的第9位数据为奇偶位,存入到RB8中,接收完毕,置位RI。
……
数据字符n
……
用户自己定义,常采用ASCII码中(16H) SYNC代码 用于确认数据字符的开始(接收端不断采样,把采样到的 字符与双发约定的字符比较,相同表示后面的是数据,要接收。 缺点:要求发送和接收时钟严格同步,但速度块,可达 56000bps 很难
计 算 机 甲
0 1 1 0 1
数据 时钟
三、 8051串行口工作方式
1.方式0 同步移位寄存器,常用于扩展I/O口,不作串口用。波特率固定,fosc/12。 数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由TXD(P3.1) 引脚输出。发送和接收均为8位数据,低位在先,高位在后。常见的例子: 利用74LS164扩展并行输出口,利用74LS165扩展并行输入口等。
图7-3异步通信的帧数据格式
起始位 字符帧(数据帧) 数据位 奇偶校验位 停止位
0 8位 奇校验或偶校验 1
假如两帧数据有时间间隔,那就是空闲位为1
异步通信的特征之一 2.同步通信
一次通信只传送一桢数据,包含若干个数据 较长
同步字符 数据字符1 数据字符2
……
数据字符n
……
同步通信的帧数据格式
同步字符 数据字符1 数据字符2
一、8051串行口结构
用于存放将要发送的字 8051内部 发送缓冲器SBUF 符数据(只能写,不能 读) 有两个SBUF 接收缓冲器SBUF 用于存放将要接收的字 符数据(只能读,不能 写) 但是两个SBUF共用同一个地址99H(SFR)中,所以用户只能用一个。
MOV SBUF, A MOV A, SBUF
(2)发送
写入SBUF RXD(数据) TXD(移位脉冲) TI(中断标志)
D0 D1 D2 D3 D4 D5 D6 D7
执行一条向SBUF传送指令时,数据从RXD发送,TXD同步移位 脉冲,波特率fosc/12
A,B串行输入端
D0 ~ D7 D0 ~ D7
Cr
Cr
清零端,0 164输出为0
CP时钟脉冲输入端,上升沿作用下实 现移位
9FH SM0
9EH SM1
9DH SM2
9CH REN
9BH 9AH 99H 98H TB8 RB8 TI RI
工作方式选择
接收中断标志
(软件清除)
发送中断标志
(软件清除)
(用于方式2、3存放数据的第9位,由软件置位或复位 接收数据的第9位 方式1下,SM2=0 时,存放的是停止 位)
发送数据的第9位
解1:波特率=(T1溢出率)*2SMOD/32 T1溢出速率=波特率×32/2SMOD=4800×32/20=153600Hz T1溢出间隔:DT=1/T1溢出速率=1/153600 利用T1工作方式2,实现定时DT时间,设定时初值为X,则: X=256﹣DT×fosc/12=256﹣(1/153600)×11.0592×106/12=256﹣6=250=0FAH 所以,定时器T1的初值为:(TH1)=(TL1)=0FAH
中国计量学院
第七章 串行通信与8051串行口
串行通信和并行通信
8位同时传送 接 收 设 备 询问 应答
1 0 1 0 1 1 0 0
发 送 设 备
接 收 设 备
D0
D7
8位顺次传送
发 送 设 备
并行通信
串行通信
并行通信,即数据的各位同时传送; 串行通信,即数据一位一位顺序传送。
串行通信和并行通信
(2)接收
对RXD采样,采样频率是波特率的16倍
数据从RXD(P3.0输入) RI=0,REN=1时,启动接收过程。 接收波特率同发送,由T1的溢出率16分频或32分频决定。 在接收到第9位数据(停止位)时,才把前面接收的8个数据存入到 SBUF中,并把停止位送到RB8中。 一帧数据接收完毕后,置RI为1.
串行通信:距离远 并行通信:距离近,速度快,传输线多 二、串行通信的传送方式 单工 半双工 全双工
三、异步通信和同步通信
异步通信 同步通信 1.异步通信 在异步通信中,数据是以字符(或字节)为单位组成字符帧,一帧一 帧发送,一帧一帧接收。 但是:接收端怎么知道发送端何时开始发送和何时结束发送呢? 这由字符帧格式决定
发送一帧数据
接收一帧数据
改Hale Waihona Puke Baidu中断标记位TI、RI
那发送和接收的波特率怎么设置呢?或时钟控制如何呢? 由主机频率晶振和T1定时器来决定。(在后面讲)
二、串口控制器
51对串口的控制都是对串口控制器来完成的,比如说波特率的设置等。 1. SCON SCON (98H) 位地址 位功能 9FH SM0 9EH SM1 9DH SM2 9CH 9BH 9AH 99H REN TB8 RB8 TI 98H RI