一、串行数据通信基本原理
计算机的数据传送有并行和串行两种方式。并行传送的特点是:各数据位同时传送,传送速度快、效率高。但需要的数据线多,因此传送成本高。并行数据传送的距离通常小于30米。串行传送的特点是:数据传送按位顺序进行,最少只需一根传输线即可完成,成本低,但速度慢。串行数据传送的距离可以从几米到几千公里。
1. 异步串行通信的字符格式
异步串行数据通信以字符为单位,即一次传送一个字符。异步通信的数据格式为:
一帧信息 = 1位起始位(为低电平)+ 5-8位数据位(紧跟着起始位),表示要传送的有效数据(低位在前)+ 1位奇偶校验位(可有可无)+ 1、1.5或2位停止位(为高电平)。
从起始位开始到停止位结束的时间间隔称为一帧。就是一个字符的完整通信格式。因此也把串行通信的字符格式称为帧格式。
2. 串行通信的数据通路形式
串行数据通信有以下几种数据通路形式:
单工形式: A发,B接。
半双工形式: A发或接, B接或发。
全双工形式: A发、接,B接、发。
3. 串行通信的传送速率
传送速率用于说明数据传送的快慢。在串行通讯中,数据是按位进行传送的。因此,传送速度用每秒传送数据位数目来表示,称之为波特率(Baud),每秒传送一个数据位就是一波特。即:
1波特 = 1bps(位/秒)
常用的波特率有:75,110,300,600,1200,2400,4800,9600,19200。
4. 串行通信接口电路
串行数据通信中主要有两个技术问题:
数据传送:数据传送主要解决传送中的标准、格式及工作方式等问题
数据转换:数据转换是指数据的串并转换
串行接口电路基本组成逻辑框图如下:
串行输入 -> 并行输出
并行输入 -> 串行输出
时钟、复位、控制信号 <-> 状态、控制信息
通用异步接收发送器(UART)是实现异步串行通信的常用接口,其他常见的异步串行通信接口还有:
TTL电平直接连接
RS-232C
RS-422、RS-485
20mA电流环
二、MCS-51单片机串行口
MCS-51单片机片内有一个全双工串行口,既可以实现异步串行通信,还可以作为同步移位寄存器来使用。定时器T1可作为串行通信波特率发生器。
1. 串行口寄存器结构
MCS-51单片机串行口的基本结构如下:
TXD串行输出 <- 移位 <- SBUF发送寄存器
RXD串行输入 -> 移位 -> SBUF接收寄存器 -> RI接收中断
时钟 -> 移位
SBUF是串行口的缓冲寄存器。它是一个可字节寻址的专用寄存器,其中包括发送寄存器(只能写)和接收寄存器(只能读),以便能够以全双工方式进行通信,这两个寄存器共用一个地址(99H)。
例如:
启动发送:MOV SBUF,A ;SBUF←(A)
启动接收:MOV A,SBUF ;A←(SBUF)
2. 与串行通信有关的寄存器
与串行通信控制有关的专用寄存器有:
SCON:串行控制,用来设定串行口的工作方式
PCON:电源控制,可控制波特率。
IE: 设置串行中断允许。
串行控制寄存器SCON(98H)格式如下:
SM0 SM1 SM2 REN TB8 RB8 TI RI
各位功能说明:
SM0、SM1:串口工作方式选择位
00 方式0: 同步移位寄存器,波特率固定。
01 方式1:8位异步,波特率可变。
10 方式2:9位异步,波特率固定。
11 方式3:9位异步,波特率可变。
SM2:多机通信控制位,主要用于方式2、3中。
REN:允许串行接收,用软件置位或清除。
TB8/RB8:
在工作方式2、3中,TB8是发送的第九位数据,由软件置位(SETB TB8)或复位(CLR TB8)。在双机通信中,该位作为奇偶校验位;在多机通信中用来表示D7~D0是地址帧或数据帧。即:D8=0:表示数据帧;D8=1:表示地址帧。
RB8:在工作方式2和3中,该位是接收到的第9位数据。
TI:发送中断标志。在发送停止位之前,该位由硬件置位,申请中断,CPU响应中断后,可以发送下一帧数据。该位必须由软件清零。
RI:接收中断标志。在接收到停止位的一半时,该位由硬件置位(还需考虑SM2的设定),申请中断,CPU响应中断后,可以接收下一帧数据。该位也必须由软件清零。
电源控制寄存器PCON(87H)格式如下:
SMOD - - - GF1 GF0 PD IDL
它主要是为CHMOS型单片机的电源控制而设置的。对HMOS型单片机,除了最高位(SMOD)之外,其它位都虚设的,SMOD是串行口波特率的倍增位。
当:SMOD=1时,串行口波特率加倍。系统复位时,SMOD=0。可由下列指令设置:
MOV PCON,#80H ;SMOD←1
MOV PCON,#00H ;SMOD←0
3. 串行口的工作方式
(1) 方式0
方式0为同步移位寄存器方式。RXD端作为数据移位的入口或出口,TXD端提供移位时钟脉冲,移位数据的发送和接收以8位为一帧,不设起始位和停止位,低位在前高位在后,波特率是固定的,为fOSC/12。即一个机器周期移位一次。
功能:用作I/O口扩展。
(2) 方式1
方式1的帧格式为:1位起始位 + 8位数据位 + 1位停止位。
数据发送是由一条写发送寄存器(MOV SBUF,A)指令开始的。此后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式。然后在移位脉冲的作用下,由TXD端串行输出。一个字符帧发送完后,使TXD端输出线维持高电平,并将TI置位,通知CPU可以发送下一个字符。
接收数据时,应使REN=1。在此前提下,串行口采样RXD端,当采样到从1到0的跳变时,就认定是接收到了起始位。随后在移位脉冲的控制下,把接收到的数据位移入接收寄存器中。直到停止位到来之后把它送入到RB8中,并置位RI,通知CPU从SBUF取走接收到的一个字符。
方式1的波特率可变,由下式决定:
波特率 = (2^SMOD)/32 * (T1溢出率)
= (2^SMOD)/32 * fOSC/(12*[256-X])
其中:smod为PCON寄存器最高位的值,fOSC为晶振频率,X为当T1工作于方式2(8位自动加载)时的计数初值。实际使用时,总是先确定波特率,再计算T1的计数初值。即:
X = 256 - (2^SMOD) * fOSC/(384*波特率)
(3) 方式2和方式3
串行口工作在方式2、3时,为9位异步通信口,发送和接收1帧信息由11位组成,即:
1位起始位(0) + 8位数据位(D0~D7) + 1位可编程位(D8) + 1位停止位(1)
D8位既可作为奇偶校验位,也可作为控制位使用,其功能由用户来确定。发送时,可编程位D8(TB8)可设置为0(CLR TB8)或1(SETB TB8)。接收时,TB8送入SCON寄存器中RB8位。
方式2、3的区别是波特率设置不同:
方式2的波特率是固定的。即:波特率 = fosc/32或fosc/64
方式3的波特率是可变的。计算公式同方式1。
下表列出了一些常用的波特率与对应的时间常数设置:
波特率 | fosc | smod | 定时器1方式 | 时间常数 |
---|---|---|---|---|
1200 | 1.0592 | 0 | 2 | E8H |
2400 | 1.0592 | 0 | 2 | F4H |
4800 | 1.0592 | 0 | 2 | FAH |
9600 | 1.0592 | 0 | 2 | FDH |
19200 | 1.0592 | 1 | 2 | FDH |
利用串行口工作方式0可以方便地扩展I/O口。
三、串行口应用举例
例6-1 双机通信
设:甲机发送乙机接收,串行口工作在方式1,波特率为1200,fosc=11.0592MHz。
硬件连接如图:
甲 TXD ---> RXD 乙
RXD <--- TXD
计算时间常数:T1作为波特率发生器,工作于方式2。由表1查得时间常数为E8H。
甲机发送程序:
甲机将内部RAM单元20H~3FH的32个字节的ASCII码数据,在最高位上加奇校验位后,由串行口TXD发送给乙机。即可采用8位异步通信。
START: MOV TMOD,#20H ;T1为方式2
MOV TL1,#0E8H ;时间常数低8位
MOV TH1,#0E8H ;
SETB TR1 ;启动T1工作
MOV SCON,#01000000B ;串行口方式1
MOV R0,#20H ;数据首地址
MOV R7,#32 ;32字节数据
LOOP: MOV A, @R0 ;取数据
MOV C, P ;置奇校验位
CPL C
MOV ACC.7, C
MOV SBUF,A ;启动发送
DONE: JNB TI, DONE ;等待发完一帧
CLR TI ;清TI,允许再发送
INC R0 ;指向下一数据
DJNZ R7, LOOP ;未送完,送下一个数
AJMP START ;循环发送
乙机接收程序:
与甲机发送相呼应,接收器把接收到的32个字节数据存放在内部RAM的20H~3FH中,波特率与晶振频率同上。若奇校验出错,则置进位位1。
程序如下:
START: MOV TMOD,#20H ;T1方式2
MOV TL1,#0E8H
MOV TH1,#0E8H
SETB TR1
MOV R0,#20H
MOV R7,#32
LOOP: MOV SCON,#01010000B ;串行口方式1,能接收
DONE: JNB RI,DONE ;等待接收一帧
CLR RI ;清RI,再接收
MOV A,SBUF ;取数据
JNB P, ERROR ;校验错,转出错处理
ANL A,#7FH ;去掉奇校验位
MOV @R0,A ;奇校验正确,存数据
INC R0 ;指向下一数据
DJNZ R7,LOOP ;数据块未接收完,循环
AJMP START ;循环接收
ERROR: ... ;出错处理
多机通信
多机通信是指一个主机与多个从机之间进行通信。通常采用半双工方式,由主机轮流询问从机。主机发送的数据帧以11位传送,其中第9位为1表示是地址帧,为0表示是数据帧。
从机接收到主机发来的地址帧后,将自己的地址与之比较,若相同则做出响应,准备接收数据帧。否则不响应。
多机通信可以大大节省通信线路,适用于分布式数据采集等场合。
相关文章