本章要点:
①异步通信和同步通信 ②串行通信波特率 ③串行通信的制式 ④串行通信的校验 ⑤串行口特殊功能寄存器 ⑥串行工作方式
计算机与外界信息交换称为通信。通信的基本方式可分为并行通信和串行通信。并行通信是数据的各位同时发送或同时接收;串行通信是数据的各位依次逐位发送或接收。
并行通信优点:传送速度快 缺点:不便长距离传送 串行通信优点:便于长距离传送 缺点:传送速度较慢
§7~1 串行通信基础
实际应用中,CPU与其外部设备之间常要进行信息交换,计算机之间也需要交换信息,所有这些信息交换均称为“通讯”。
通讯的基本方式可分为并行通讯和串行通讯两种。
并行通讯:数据的各位同时进行传送的方式。特点是传输速度快,但当距离较远,位数又多时导致了通讯线路复杂且成本高,如图7.1(a)所示。
串行通讯:数据一位一位地顺序传送的通讯方式。其特点是通讯线路简单,只要一对传输线就可以实现通讯,并可以利用电话线,从而降低了成本,适用于远距离通讯,但传送速度慢,如图7.1(b)所示。
一、异步通信和同步通信 1. 异步传送:
每一个字符要用起始位和停止位作为字符开始和结束的标志,它是以字符为单位一个个地发送和接收的。
每个字符的组成格式如图7.2(a)所示。首先是一位起始位表示开始;后面紧跟着的是字符的数据字,可以是8或9位数据,在数据字中可根据需要加入奇偶校验位;最后是停止位,其长度可以是一位、一位半或两位。所以,串行传送的数据字加上起始位和停止位就形成一个字符串行传送的帧。起始位用逻辑“0”表示,停止位用逻辑“1”表示。图所示为数据字为7位,第8位(或第9位)是奇偶校验位。加上起始位、停止位,一个字符由10位(11位)组成。这样加上成帧信号后,字符便可以一个接一个地传送了。
在异步传送中,字符间隔不固定,在停止位后可以加空闲,空闲位用高电平表示,用于等
待传送。这样,接收和发送可以随时地或间断地进行,而不受时间的限制。图7.2(b)为有空闲位的情况。
D0D1D2D3D4D5D6D701001001控制 (选通)状 态或外设T (a)并行通讯 ( )计算机8T计算机或外设(b)串行通讯 图7.1 通讯的基本方式
在异步数据传送中,CPU与外设之间事先必须约好两项事宜:
①字符格式。双方要约好字符的编码形式,奇偶校验形式、以及起始位和停止位的规定。
第(n-1)个字符奇偶校验0/10/1停止位1起始位0第n个字符奇偶校验停止位1第(n+1)个字符起始位07位数据(或8位)( )计算机计算机 7位数据(或8位)0/10/10/10/10/10/10/10/10/10/10/10/1低位高位下降沿指出下一个字符的开始第(n+1)个字符(a)
第n个字符起始位00/10/1奇偶校验0/10/1停止位11空用位11起始位07位数据(或8位)0/10/10/10/10/10/1低位位时间取决于波特率高位下降沿指出下一个字符的开始
(b)
图7.2 异步通讯的格式
②波特率(Baud rate)。波特率是衡量数据传送速率的指标,它要求发送站和接收站都要以相同的数据传送速率工作。
假设数据传送的速率是120字符/秒,而每一个字符假如为10位,则其传送的波特率为: 10位/字符×120字符/秒=1200位/秒 =1200波特(二进制电平时)
简而言之,传送采用二进制电平时,“波特”就是每秒传送多少位。1200波特,就意味着每秒可以传送1200位。而每一位的传送时间Td就是波特率的倒数。
应注意,波特率和有效数据位的传送速率并不一致。例如,上述10位中,真正有效的数据位只有7位。所以,有效数据位的传送速率只有 7×120=840位/秒
此外,波特率也是衡量传输通道频宽的一个指标。
异步通讯的传送速率一般在50~9600波特之间,常用于计算机到CRT终端和字符打印机之间的通讯、直通电报以及无线电通讯的数据发送等等。
2. 同步传送:
所谓同步传送就是去掉异步传送时每个字符的起始位和停止位的成帧标志信号,仅在数据块开始处用同步字符来指示,如图7.3所示。很显然,同步传送的有效数据位传送速率高于异步传送,可达50千波特,甚至更高。其缺点是硬件设备较为复杂,因为它要求要有时钟来实现发送端和接收端之间的严格同步,而且对同步时钟脉冲信号的相位一致性还要求非常严格,为此通常还要采用“锁相器”等措施来保证。
SYN字符#1SYN字符#2数据
图7.3 同步传送
二、串行通讯中传输制式
AB一般情况下,串行数据传送是在两个通讯端之间进行的。其数据传送的方向有如图7.4所示的几种情况。
(a) 单工通信方式AK(b) 半双工通信方式ABBK图(a)为单工通讯方式。A端为发送站,B为接收站,数据仅能从A站发至B站。
图(b)为半双工通讯方式。数据可以从A发送到B,也可以由B发送到A。不过同一时间只能作一个方向的传送,其传送方式由收发控制开关K来控制。
(c) 全双工通信方式
图7.4 点-点串行通讯方式 图(c)为全双工通讯方式。每个站(A、B)既可同时发送,又可同时接收。
图7.4所示的通讯方式都是在两个站之间进行的,所以也称为点—点通讯方式。图7.5所示为主从多端通讯方式。A站可以向多个终端(B、C、D„等)发出信息。在A站允许的条件下,可以控制管理B、C、D„等站在不同的时间向A站发出信息。又根据数据传送的方向分为多终端半双工通讯和多终端全双工通讯。这种多端通讯方式常用于主-从计算机系统通讯中。
ABABCCDD (a)多终端半双工通讯方式 (b)多终端全双工通讯方式
图7.5 主从多终端通讯方式
§7~2 串行口的结构和工作原理
80C51单片机有一个全双工的串行口,这个口既可以用于网络通信,也可以实现串行异步通信,还可以作为同步移位寄存器使用。
一、 串行口结构及基本原理 1. 串行口结构
有两个物理空间上各自独立的发送缓冲器和接收缓冲器。这两个缓冲器公用一个地址99H,发送缓冲器只写不读,接收缓冲器只读不写。接收缓冲器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时响应接收器中断,没有把上一帧数据读走而产生两帧数据重叠问题。对于发送缓冲器,为了保持最大传送速率,一般为单缓冲型,因为发送时CPU是主动的,不会产生写重叠问题。
2.串行数据发送和接收的基本原理
串行数据缓冲器SBUF,在逻辑上只有一个,既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H,用同一寄存器名SBUF。在物理上有两个,一个是发送缓冲寄存器,另一个是接收缓冲寄存器。发送时,只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;接收时,CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读出接收数据。
二、串行通信控制寄存器 1. 串行口控制寄存器SCON
其字节地址98H,可位寻址,位地址98H~9FH。格式为
D7 SM1 SM2 REN TB8 RB8 TI D0 RI SCON(98H) SM0 包括方式选择位、接收发送控制位及中断状态标志位。
SM0、SM1:串行口方式选择位
SM2:允许方式2、方式3多机通讯控制位。在方式2或方式3中,如SM2=1,则接收到的第9位数据(RB8)为“0”时,不启动接收中断标志RI(RI=0)。当接到收的第9位数据(RB8)为“1”时,则启动接收中断RI(RI=1)。如果SM2=0,则接收到的第9位数据(RB8)无论为“1”或“0”均启动RI(RI=1)。在方式1时,如SM2=1,则只有在接收到有效停止位时才启动RI,若没有接收到有效停止位,则RI为“0”。如果不是多机通讯,则无论串行口工作在方式0、1、2、3时,一般SM2都置为“0”。
表7-1 串行口工作方式
SM0 0 0 1 1 SM1 方式 0 1 0 1 0 1 2 3 功能说明 移位寄存器方式(用于I/O扩展)波特率为fosc/12 8位UART,波特率可变(T1溢出率决定) 9位UART,波特率为fosc/64或fosc/32 9位UART,波特率可变(T1溢出率决定) REN:允许接收控制位。由软件置“1”时,允许接收;由软件置“0”时,禁止接收。 TB8:在方式2和方式3中要发送的第9位数据。需要时由软件置位或复位。
RB8:在方式2和方式3中是接收到的第9位数据。在方式1时,如SM2=0,RB8是接收到的停止位。在方式0中,不使用RB8。
TI:发送中断标志。由硬件在方式0串行发送数据第8位结束时置“1”,或在其它方式中串行发送停止位的开始时置“1”。向CPU申请中断或供CPU查询。必须由软件清“0”。
RI:接收中断标志。由硬件在方式0接收到数据第8位结束时置“1”,或其它方式接收到停止位的中间时置“1”。向CPU申请中断或供CPU查询。必须由软件清“0”。
3.特殊功能寄存器PCON
字节地址87H,没有位寻址功能。与串行口有关的只有最高位。 PCON(87H) SMOD SMOD:波特率选择位。当SMOD=1时,波特率提高一倍。 SM0 SM1 —— 串行口工作方式选择位。 SM2 —— 多机通信控制位。
REN —— 允许接收控制位。REN=1,允许接收。
TB8 —— 方式2和方式3中要发送的第9位数据。 RB8 —— 方式2和方式3中要接收的第9位数据。 TI —— 发送中断标志。 RI —— 接收中断标志
§7~3 串行口的工作方式和应用
一、 串行工作方式0
80C51串行通信共有4种工作方式,由串行控制寄存器SCON中SM0 SM1决定。
1、数据发送和接收
以RXD(P3.0)端作为数据移位的输入/输出端,以TXD(P3.1)端输出移位脉冲。
移位数据的发送和接收以8位为一帧,不设起始位和停止位,无论输入/输出,均低位在前高位在后。其帧格式为:方式0可将串行输入输出数据转换成并行输入输出数据。
⑴ 数据发送
串口作为并行输出口使用时,要有“串入并出”移位寄存器配合。在移位时钟脉冲(TXD)的控制下,数据从串行口RXD端逐位移入74HC164 SA、SB端。当8位数据全部移出后,SCON寄存器的TI位被自动置1。其后74HC164的内容即可并行输出。74HC164 CLR为清0端,输出时CLR必须为1,否则74HC164 Q0~Q7输出为0。
(2) 数据接收
串行口作为并行输入口使用时,要有“并入串出”的移位寄存器配合。74HC165 S/L端为移位/置入端,当S/L=0时,从Q0~Q7并行置入数据,当S/L=1时,允许从QH端移出数据。在80C51串行控制寄存器SCON中的REN=1时,TXD端发出移位时钟脉冲,从RXD端串行输入8位数据。当接收到第8位数据D7后,置位中断标志RI,表示一帧数据接收完成。
串行口扩展为并行口输出
串行口扩展为并行口输入
2. 波特率
方式0 波特率固定,为单片机晶振频率的十二分之一。
3. 应用举例
【例】1.电路如图所示,试编制程序按下列顺序要求每隔0.5秒循环操作。 ① 8个发光二极管全部点亮;
② 从左向右依次暗灭,每次减少一个,直至全灭; ③ 从左向右依次点亮,每次亮一个; ④ 从右向左依次点亮,每次亮一个; ⑤ 从左向右依次点亮,每次增加一个,
直至全部点亮; ⑥ 返回从②不断循环。
LIGHT: MOV SCON , #00H ;串行口方式0 CLR ES ;禁止串行中断
MOV DPTR , #TAB ;置发光二极管亮暗控制字表首址 LP1: MOV R7 , #0 ;置顺序编号0 LP2: MOV A , R7 ;读顺序编号
MOVC A , @A+DPTR ;读控制字 CLR P1.0 ;关闭并行输出 MOV SBUF , A ;启动串行发送 JNB TI,$ ;等待发送完毕 CLR TI ;清发送中断标志 SETB P1.0 ;开启并行输出 LCALL DLY500ms ;调用延时0.5秒子程序 INC R7 ;指向下一控制字
CJNE R7 ,#30, LP2 ;判循环操作完否?未完继续 SJMP LP1 ;顺序编号0~29依次操作完,从0开始重新循环 TAB: DB 0FFH ,7FH ,3FH ,1FH , 0FH , 07H , 03H , 01H , 00H;
从左向右依次暗灭, 每次减少一个,直至全灭;
DB 80H , 40H , 2 0H , 10H , 08H , 04H , 02H , 01H ;从左向右依次点亮,每次亮一
个
DB 02H , 04H , 08H , 10H , 20H , 40H , 80H ;
从右向左依次点亮,每次亮一个
DB 0C0H , 0E0H , 0F0H , 0F8H , 0FCH , 0FEH ;
从左向右依次点亮,每次增加一个,直至全部点亮;
【例】2.电路如图,编程:输入K1~K8状态数据,并存入内RAM 40H。
解:编程如下:
KIN: MOV SCON , #00H ;串行口方式0 CLR ES
;禁止串行中断
CLR P1.0 ;锁存并行输入数据 SETB P1.0 ;允许串行移位操作
SETB REN ;允许并启动接收(TXD发送移位脉冲) JNB RI,$ ;等待接收完毕 MOV 40H,SBUF ;存入K1~K8状态数据
RET ;
因篇幅问题不能全部显示,请点此查看更多更全内容