null第7章 串行通信第7章 串行通信本章要点异步通信和同步通信
串行通信波特率
串行通信的制式
串行通信的校验
串行口特殊功能寄存器
串行工作方式null 串行通信优点:便于长距离传送
缺点:传送速度较慢计算机与外界信息交换称为通信。通信的基本方式可分为并行通信和串行通信:并行通信是数据的各位同时发送或同时接收;串行通信是数据的各位依次逐位发送或接收。并行通信优点:传送速度快
缺点:不便长距离传送§7-1 串行通信概述null串行通信形成了多种串行通信的协议与接口标准。
常见的有:
☞通用异步收发器(UART)——本课程介绍的串口
☞通用串行总线(USB)
☞I2C总线
☞CAN总线
☞SPI总线
☞RS-485,RS-232C,RS422A标准……等等null§6-1 串行通信概述一、异步通信和同步通信串行通信按同步方式可分为异步通信和同步通信。1、异步通信异步通信依靠起始位、停止位保持通信同步。 异步通信数据传送按帧传输,一帧数据包含起始位、数据位、校验位和停止位。null异步通信对硬件要求较低,实现起来比较简单、灵活,适用于数据的随机发送/接收;
但因每个字节都要建立一次同步,即每个字符都要额外附加两位,所以工作速度较低;
在单片机中主要采用异步通信方式。null2、 同步通信同步通信依靠同步字符保持通信同步。 同步通信是由1~2个同步字符和多字节数据位组成,同步字符作为起始位以触发同步时钟开始发送或接收数据;多字节数据之间不允许有空隙,每位占用的时间相等;空闲位需发送同步字符。null 同步通信传输速度较快,但要求有准确的时钟来实现收发双方的严格同步,对硬件要求较高,适用于成批数据传送。null 波特率的倒数即为每位传输所需的时间。 相互通信的甲乙双方必须具有相同的波特率,否则无法成功地完成串行数据通信。二、串行通信波特率波特率bps(bit per second)定义: 每秒传输数据的位数,即:1波特 = 1位/秒(1bps)null三、串行通信的制式 串行通信按照数据传送方向可分为三种制式: 单工制式是指甲乙双方通信时只能单向传送数据,发送方和接收方固定。 1、单工制式(Simplex)null 半双工制式是指通信双方都具有发送器和接收器,既可发送也可接收,但不能同时接收和发送,发送时不能接收,接收时不能发送。2、半双工制式(Half Duplex)null 全双工制式是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时也能发送。3、全双工制式(Full Duplex)null 80C51系列单片机有一个全双工的串行口,这个口既可以用于网络通信,也可以实现串行异步通信,还可以作为同步移位寄存器使用。§7-2 80C51串行口null51单片机的串行接口SBUF(发)SBUF(收)发送控制器 TI接收控制器 RI移位寄存器波特率发生器T11A累加器(门)移位寄存器RxDTxD去申请中断引脚引脚CPU内部null 发送时,只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;
接收时,CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读出接收数据。一、串行口特殊功能寄存器1、串行数据缓冲器SBUF 在逻辑上只有一个,既
示发送寄存器,又表示接收寄存器,具有同一个单元地址99H,用同一寄存器名SBUF。
在物理上有两个,一个是发送缓冲寄存器,另一个是接收缓冲寄存器。指令 MOV SBUF,A 启动一次数据发送,可向SBUF
再发送下一个数
指令 MOV A,SBUF 完成一次数据接收,SBUF可再
接收下一个数2、串行控制寄存器SCON2、串行控制寄存器SCON① SM0 SM1 —— 串行口工作方式选择位。
② SM2 —— 多机通信控制位。
③ REN —— 允许接收控制位。REN=1,允许接收。
④ TB8 —— 方式2和方式3中要发送的第9位数据。
⑤ RB8 —— 方式2和方式3中要接收的第9位数据。
⑥ TI —— 发送中断标志。
⑦ RI —— 接收中断标志。null① SM0 SM1——串行口工作方式选择位。其状态组合所对应的工作方式如表6-2所示。 ② SM2------多机通信控制位。在方式2和方式3中,若SM2=1,且RB8(接收到的第9位数据)=1时,将接收到的前8位数据送入SBUF,并置位RI产生中断请求;否则,将接收到的8位数据丢弃。而当SM2=0时,则不论第9位数据为0还是为1,都将前8位数据装入 SBUF中,并产生中断请求。
在方式0时,SM2必须为0。 null③REN------允许接收控制位。REN位用于对串行数据的接收进行控制:REN=0,禁止接收;REN=1,允许接收。该位由软件置位或复位。
④TB8------方式2和方式3中要发送的第9位数据。在方式2和方式3时,TB8是发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0表示数据,TB8=1表示地址。该位由软件置位或复位。
TB8还可用于奇偶校验位。
⑤RB8------方式2和方式3中要接收的第9位数据。在方式2或方式3时,RB8存放接收到的第9位数据。null⑥TI------发送中断标志。当方式0时,发送完第8位数据后,该位由硬件置位。在其他方式下,遇发送停止位时,该位由硬件置位。因此TI=1,表示帧发送结束,可软件查询TI位标志,也可以请求中断。TI位必须由软件清0。
⑦RI------接收中断标志。当方式0时,接收完第8位数据后,该位由硬件置位。在其他方式下,当接收到停止位时,该位由硬件置位。因此RI=1,表示帧接收结束,可软件查询RI位标志,也可以请求中断。RI位也必须由软件清0。接收/发送数据,无论是否采用中断方式工作,每接收/发送一个数据都必须用指令对 RI/TI 清0,以备下一次收/发。null3、电源控制寄存器PCONSMOD=1,串行口波特率加倍。PCON寄存器不能进行位寻址。☞ SMOD:在串行口工作方式 1、2、3 中,是波特率加倍位
=1 时,波特率加倍
=0 时,波特率不加倍。
(在PCON中只有这一个位与串口有关) null二、串行工作方式
80C51串行通信共有4种工作方式,由串行控制寄存器SCON中SM0 SM1决定。
1、串行工作方式0(同步移位寄存器工作方式)
以RXD(P3.0)端作为数据移位的输入/输出端,
以TXD(P3.1)端输出移位脉冲。
移位数据的发送和接收以8位为一帧,不设起始位和停止位,无论输入/输出,均低位在前高位在后。
其帧格式为: 方式0可将串行输入输出数据转换成并行输入输出数据。null⑴ 数据发送 在移位时钟脉冲(TXD)的控制下,数据从串行口RXD端逐位移入74HC164 SA、SB端。当8位数据全部移出后,SCON寄存器的TI位被自动置1。其后74HC164的内容即可并行输出。74HC164 CLR为清0端,输出时CLR必须为1,否则74HC164 Q0~Q7输出为0。 串行口作为并行输出口使用时,要有“串入并出”的移位寄存器配合。(例如CD4094或74HCl64)null(2) 数据接收 串行口作为并行输入口使用时,要有“并入串出”的移位寄存器配合。(例如CD4014或74HCl65) 74HC165 S/L端为移位/置入端,当S/L=0时,从Q0~Q7并行置入数据,当S/L=1时,允许从QH端移出数据。在80C51串行控制寄存器SCON中的REN=1时,TXD端发出移位时钟脉冲,从RXD端串行输入8位数据。当接收到第8位数据D7后,置位中断标志RI,表示一帧数据接收完成。null⑶ 波特率: 方式0 波特率固定,为单片机晶振频率的十二分之一。即一个机器周期进行一次移位。
⑷ 应用举例
【例7-1】电路如图所示,试编制程序按下列顺序要求每隔0.5秒从右向左依次点亮,每次亮一个;循环操作。 解:分析思路如下:null1.SMOD的设置2.选用查询方式,需要关毕中断
3.给累加器A付初值01和,然后左移即可。null MOV SCON,#00H ;串行口方式0
CLR ES ;禁止串行中断 P121
MOV A,#01H ;置发光二极管亮暗控制字表首址
LP1: CLR P1.0 ;关闭并行输出,STR=O时,关闭并行输出;
CLR T1 ;清标志位
MOV SBUF,A ;启动串行发送
JNB TI,$ ;等待发送完毕
SETB P1.0 ;开启并行输出,STR=1时,开启并行输出;
LCALL DELAY ;调用延时0.5秒子程序(参阅例4-13)
CLR TI ;清发送中断标志
RL A ;指向下一控制字
SJMP LP1 ;顺序编号0~29依次操作完毕,从0开始重新
循环
null【例7-2】电路如图所示,用80C51外接CD4014扩展8位并行输入口,输入数据由8个开关提供,试编制程序输入K1~K8状态数据,并存入内RAM40H。nullP1.0=0 将并行数据锁存,
P1.0=1 CD4014允许串行移位操作。
解:编程如下:
KIN: MOV SCON,#00H ;串行口方式0
CLR ES ;禁止串行中断
CLR P1.0 ;锁存并行输入数据
SETB P1.0 ;允许串行移位操作
SETB REN ;允许并启动接收
JNB RI,$ ;等待接收完毕
MOV 40H,SBUF ;存入K1~K8状态数据
RET ;null2、串行工作方式1
方式1是一帧10位的异步串行通信方式,包括1个起始位,8个数据位和一个停止位。
其帧格式为:⑴ 数据发送
发送时只要将数据写入SBUF,在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式。然后在移位脉冲的作用下,由TXD端串行输出。一帧数据发送完毕,将SCON中的TI置1。
⑵ 数据接收
接收时,在REN=1前提下,当采样到RXD从1向0跳变状态时,就认定为已接收到起始位。随后在移位脉冲的控制下,将串行接收数据移入SBUF中。一帧数据接收完毕,将SCON中的RI置1,表示可以从SBUF取走接收到的一个字符。 null⑶ 波特率 T1的溢出时间=(256-X).12/fosc 其中SMOD为PCON寄存器中最高位的值,SMOD=1表示波特率倍增。 方式1波特率可变,由定时/计数器T1的计数溢出率来决定。波特率=(2SMOD/32)T1的溢出率其中:X 是定时器初值null 在实际应用时,通常是先确定波特率,后根据波特率求T1定时初值,因此上式又可写为:null⑷ 应用举例【例7-3】设甲乙机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的16个数据存在内RAM 40H~4FH单元中,乙机接收后存在内RAM 50H为首地址的区域中。
T1初值 = 256 - × = 232 = E8H3212×1200解: 串行方式1波特率取决于T1溢出率(设SMOD=0), 计算T1定时初值: 1105920020null1.SMOD的设置2.编制T1的初始化
3.选用查询方式,需要关毕中断
null甲机发送子程序: TXDA: MOV TMOD,#20H ;置T1定时器工作方式2
MOV TL1,#0E8H ;置T1计数初值
MOV TH1,#0E8H ;置T1计数重装值
CLR ET1 ;禁止T1中断
SETB TR1 ;T1启动
MOV SCON,#40H ;置串行方式1,禁止接收
MOV PCON,#00H ;置SMOD=0(SMOD不能位操作) CLR ES ;禁止串行中断
MOV R0,#40H ;置发送数据区首地址
MOV R2,#16 ;置发送数据长度
TRSA:MOV A,@R0 ;读一个数据
MOV SBUF,A ;发送
JNB TI,$ ;等待一帧数据发送完毕
CLR TI ;清发送中断标志
INC R0 ;指向下一字节单元
DJNZ R2,TRSA ;判16个数据发完否?未完继续
RET ;null RXDB: MOV TMOD,#20H ;置T1定时器工作方式2
MOV TL1,#0E8H ;置T1计数初值
MOV TH1,#0E8H ;置T1计数重装值
CLR ET1 ;禁止T1中断
SETB TR1 ;T1启动
MOV SCON,#40H ;置串行方式1,禁止接收
MOV PCON,#00H ;置SMOD=0(SMOD不能位操作)
CLR ES ;禁止串行中断
MOV R0,#50H ;置接收数据区首地址
MOV R2,#16 ;置接收数据长度
SETB REN ;启动接收
RDSB: JNB RI,$;等待一帧数据接收完毕
CLR RI ;清接收中断标志
MOV A,SBUF ;读接收数据
MOV @R0,A ;存接收数据
INC R0 ;指向下一数据存储单元
DJNZ R2,RDSB;判16个数据接收完否?未完继续
RET ;乙机接收子程序:null 方式2是一帧11位的串行通信方式,即1个起始位,8个数据位,1个可编程位TB8/RB8和1个停止位, 其帧格式为:3、 串行工作方式2当SMOD=0时,波特率=20 ╳ fosc/64= fosc/64
当SMOD=1时,波特率=21 ╳ fosc/64= fosc/32 可编程位TB8/RB8既可作奇偶校验位用,也可作控制位(多机通信)用,其功能由用户确定。 数据发送和接收与方式1基本相同,区别在于方式2把发送/接收到的第9位内容送入TB8/RB8。 波特率:方式2波特率固定,即fosc/32和fosc/64。 如用公式表示则为:波特率=2SMOD ╳ fosc/64null【例7-4】
一个串行方式2发送子程序(SMOD=1),将片内RAM 50H~5FH中的数据串行发送,第9数据位作为奇偶校验位。接到接收方核对正确的回复信号(用FFH表示)后,再发送下一字节数据,否则再重发一遍。解:程序如下:nullnullTRS2: MOV SCON,#80H ;置串行方式2,禁止接收
MOV PCON,#80H ;置SMOD=1
MOV R0,#50H ;置发送数据区首址
TRLP: MOV A,@R0 ;读数据
MOV C,PSW.0 ;奇偶标志送TB8
MOV TB8,C ;
MOV SBUF,A ;启动发送
JNB TI,$ ;等待一帧数据发送完毕
CLR TI ;清发送中断标志
SETB REN ;允许接收
CLR RI ;清接收中断标志
JNB RI,$ ;等待接收回复信号
MOV A,SBUF ;读回复信号
CPL A ;回复信号取反
JNZ TRLP ;非全0(回复信号≠FFH,错误),转重发
INC R0 ;全0(回复信号=FFH,正确), 指向下一数据存储单元
CJNE R0,#60H,TRLP ;判16个数据发送完否?未完继续
RET ;null【例7-5】 编制一个串行方式2接收子程序,接收上例发送的16个数据,存首址为40H的内RAM中,并核对奇偶校验位,接收核对正确,发出回复信号FFH;发现错误,发出回复信号00H,并等待重新接收。null
RXD2:MOV SCON,#80H ;置串行方式2,禁止接收
MOV PCON,#80H ;置SMOD=1
MOV R0,#40H ;置接收数据区首址
SETB REN ;启动接收
RWAP: JNB RI,$ ;等待一帧数据接收完毕
CLR RI ;清接收中断标志
MOV A,SBUF ;读接收数据,并在PSW中产生接收数据的奇偶值
JB PSW.0,ONE ;P=1,转另判
JB RB8,ERR ;P=0,RB8=1,接收有错; ;P=0,RB8=0,接收正确,继续接收
RLOP: MOV @R0,A ;存接收数据
INC R0 ;指向下一数据存储单元
RIT: MOV A,#0FFH ;置回复信号正确
;解:程序如下:nullFDBK: MOV SBUF,A ;发送回复信号
CJNE R0,#50H,RWAP ;判16个数据接收完否?
;未完继续
CLR REN ;16个数据正确接收完毕,禁止接收
RET
ONE: JNB RB8,ERR ;P=1,RB8=0,接收有错
SJMP RLOP ;P=1,RB8=1,接收正确,继续接收
ERR: CLR A ;接收有错,置回复信号错误标志
SJMP FDBK ;转发送回复信号null 方式3同样是一帧11位的串行通信方式,其通信过程与方式2完全相同,所不同的仅在于波特率。方式2的波特率只有固定的两种,而方式3的波特率则与方式1相同,即通过设置T1的初值来设定波特率。4、串行工作方式35、串行口四种工作方式的比较5、串行口四种工作方式的比较 四种工作方式的区别主要表现在帧格式及波特率两个方面。表6-2 四种工作方式比较null 解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHz晶振。6、常用波特率及其产生条件 常用波特率通常按规范取1200、2400、4800、9600、…,若采用晶振12MHz和6MHz,则计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。null表7-8给出了串行方式1或方式3时常用波特率及其产生条件。 nullOVER !