串行通信
§9-1 串行通信基础
§9-2 串行口的结构及串行通信工作方式
§9-3 串行通信方式的应用
§9-1 串行通信基础 返回 一、串行通信概念
若干个数据设备之间的信息交换称为数据通信。通常数据通信采用两种不同的方式:并行方式和串行方式。
并行方式是指数据的各位同时传送,每一位数据都需要一条传输线,如图9-1(a)所示,8位数据总线的微机系统,一次传送8位数据(1个字节),将需要8条数据线,此外,还需要一条信号线和若干条控制信号线,这种方式仅适合于短距离的数据传输,如第8章所介绍的外设与8031之间的传输。并行传输的特点是:传输速率快,接口电路简单。
串行传输是指数据中的各位分时传送,此时只需要一条数据线,外加一条公共信号地线和若干条控制信号线。因为一次只能传送一位,所以对于一个字节的数据,至少要分8位才能传送完毕。如图9-1(b)所示。
串行通信的必要过程是:发送时,要把并行数据变成串行数据发送到线路上去,接收时,要把串行信号变成并行数据,才能被计算机及其它设备处理。
二、串行通信的同步方式与异步方式
异行通信又有两种方式:异步串行通信
和同步串行通信。 1、异步串行通信:
特点是:数据以字符为单位传送,在每个字符数据的传送过程中都要加进一些识别信息位和校验信息位,构成一帧字符信息。在发送时,信息位的同步时钟并不发送到线路上去,在数据的发送端和接收端各自有独立的时钟。
异步通信一帧字符信息由四部分组成:起始
位、数据位、奇偶校验位和停止位。如图9-2所
示。有的字符信息也有带空闲位形式,即在字符之间有空闲字符。
异步通信的速率:波特率。即:每秒钟传送二进制数的位数或者是每秒钟所传输的字符数与位数的乘积。
2、同步串行通信 同步串行通信是以数据块方式传输数据。其帧结构为:同步字符SYN、数据块、校验字符CRC。
同步方式需要提供单独的时钟信号,且要求接收器时钟和发送器时钟严格保持同步。 三、串行通信的制式:
在串行通信的数据传输方式常用的有:半双工和全双工两种方式。如图9-4所示。
四、MODEM通用异步接收器/发送器原理
实现串行通信的必要过程是:必须把并行数据转变成串行数据,或者把串行数据转变成并行数据。数据的串并转换通常都是使用硬件UART即通用异步接收器/发送器来实现的。
UART的硬件结构如图9-4所示。由三部分组成:接收部分、发送部分和控制部分,其中接收和发送都具有双缓冲结构。
工作原理为:接收时,由RXD送来的串行数据先进入移位寄存器,变成并行数据后传送给接收数据缓冲器,在控制信号作用下,并行数据通过数据总路线送给CPU;发送时,由发送缓冲器接收CPU送来的并行数据,送至发送移位寄存器,加上起始位、校验位和停止位,由TXD线串行输出。
MCS-51的串行口是一个可编程全双工
的通信接口,具有UART的全部功能,能同时进行数据的发送和接收,也可作为同步移位寄存器使用。
一、串行口的结构
MCS-51的串行口主要由两个独立的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器),发送控制器、接收控制器、输入移位寄存器及若干控制门电路组成。基本结构如图9-5所示。
MCS-51可以通过特殊功能寄存器
SBUF对串行接收或串行发送寄存器进行访问,两个寄存器共用一个地址99H,由指令操作决
§9-2 串行口的结构及串行通信
工作方式 返回
定访问哪一个寄存器。执行写时访问串行发送寄存器,读时访问接收寄存器。接收器具有双缓冲结构,即在从接收寄存中读出前一个已收到的字节之前,便能接收第二个字节,如果第二个字节已经接收完毕,第一个字节还没有读出,则将丢失其中一个字节,编程时应引起注意。对于发送器,因为数据是由CPU控制和发送的,所以不需要考虑。
二、串行口控制寄存器
MCS-51串行口工作方式的设定、接收与发
送控制以及工作状态标志的设置都是通过对串行口控制寄存器SCON的编程确定的。SCON为一SFR,其地址为98H,可位寻址,其各位的作用定义如下:
(MSB) (LSB)
SM0、SM1:串行口工作方式选择,工作方式选
择见表9-1。其中 fOSC 是振荡器的频率;
SM2:多机通信控制位。在方式2和方式3下,如置SM2=1,则只有在收 到的第9位数据为1时,RI被激活(RI=1,申请中断,要求CPU取 走数据);在方式0下,SM2应为0; REN:允许接收位。由软件置位或清零。REN=1,允许接收;
REN=0, 禁止接收;
TB8:在方式2和方式3下,存放要发送的第9位数据,根据需要由软件 置位或清零; RB8:在方式2和方式3下,存放接收到的第9位数据;在方式1下,如 SM2=0,则该位为接收到的停止位;方式0不用此位;
TI: 发送中断标志。在方式0下,发送完第8位数据位时,由硬件置 位;在其它方式下,当开始发送停止位时,由硬件置位;TI置位, 即是向CPU申请中断,CPU可以发送下一帧数据,在任何方式下, 必须由软件清零; RI:接由中断标志。在方式0下,发送完第8位数据位时,由硬件置位; 在其它方式下,当接收到停止位的中间时置位;RI置位,即申请中 断,要求CPU取走数据,必须由软件清零。 SCON中的各位,在系统复位时均被清零。
表9-1 串行口工作方式选择
三、串行口的工作方式
1、方式0
此时串行口工作于同步移位寄存器方式,
串行口相当于一个并入串出或串入并出的移位寄存器。数据从RXD输入或输出(底位在先),TXD输出同步移位时钟,其传输波特率是固定的,为osc/12。 2、方式1 此时串行口工作于异步通信方式,字符格式为10位(8位数据, 起始位、停止位各1位)。其传输波特率是可变的,对于8051,波特率由定时器1的溢出率决定。
当一帧数据接收完毕,即9位的移位寄存器装满以后,若同时满足以下两个条件:
1)RI=1
2)SM=0或接收到停止位=1
由一帧数据接收有效,停止位进入RB8,8位数据进入SBUF,置位RI,如果上述两个条件不满足,则将不可恢复地丢失接收的数 据。 3、方式2和方式3 此时串行口工作于异步通信方式,字符格式为11位(起始位1位、8位数据、1位可编程数据位、停止位1位)。 方式2方式3的差别仅在于:方式2的波特率为fOSC=/32(SMOD=1)或fOSC=/64(SMOD=0),而
方式2的波特率是可变的,由用户设定。
在两种方式下,接收到的停止位与SBUF、RB8及RI无关。
四、波特率产生
串行口工作于方式0和方式2时,其波特率
是固定的;工作于方式1和方式3时,波特率是由定时器1的溢出率决定,其值为
其中SMOD为特殊功能寄存器PCON中的D7的值。定时器1溢出率取决于它的应有模式的设定。一般情况下,T1设为工作方式2,此时波特率为:
此时应注意将T1设为禁止中断方式。 有时为了获得较低的波特率,也可以将T1设于工作模式1。表9-2列出了用定时器1产生各种常用波特率的方法。
表9-2 定时器1产生的常用波特率
§9-3 串行通信方式的应用
返回
一、串行口数据发送/接收程序的 数据发送/接收程序的基本结构
如图9-6所示
基本结构
二、奇偶校验的处理
采用方式2和方式3时,数据格式中的
第9位可用作奇偶校验位,用以判断数据传送是否出错。
发送时,当发送的字节数据送入累加器A后,P标志和A中的1的总个数应为偶数,此时,可将P值送入“TB8”,这样就实现了数据的补偶发送,与此对应,在接收时,可在读取数据进进行曲“偶校验”,如果RB8中的第9位数据与累加器A从SBUF读入的数据加起来,“1”的个数也是偶数,则接收正确,否则为出错。
三、应用编程举例:
例9-1采用查询方式编写数据块发
送程序。设串口工作于方式2,波特率为fOSC/32,数据块存放的首址为TDATA,字节数为n,程序框图如图9-7所示。
解:框图如图所示:
程序如下:
START: MOV SCON, #80H;设定串口工作方式2
MOV PCON, #80H;设置传送波特率 MOV DPTR,#TDATA;指向数据区首址 MOV R7, #n ;设定传送字节数 TX: ACALL TXSUB ;调一帧传送子程序 INC DPTR ;为一次取数作准备 DJNZ R7, TX ;判断是否传送结束,未完继续 RET
TXSUB: MOVX A,@DPTR ;开始传送数据 MOV C,PSW.0 ;置奇偶校验位到TB8
MOV TB8,C
MOV SBUF,A ;启动数据传送 TX1: JBC TI,TX2 ;查询是否传完
SJMP TX1
TX2: CLR TI ;结束清TI,为一次作准备
RET ;中断返回
例9-2 采用查询方式设计一个数据块接收程
序
此时串口工作于方式3,定时器1用作波特率发生器,波特率为2400,数据块首址存放于寄存器R0,其长度存放于R7。 解:程序框图如图9-8所示。 程序如下:
START: MOV TMOD,#20H MOV TH1,#0F4H;设置波特率所要求的时间常数
MOV TL1, #0F4H
SETB TR1 ;启动T1
MOV SCON,#0D0H;方式3接收 MOV PCON,#00H;使SMOD=0 MOV R1,#20H;数据块首址 MOV R7,#10H
RX:ACALL RXSUB;调接收子程序 INC R1 ;准备取一个数 DJNZ R7,RX RET
(续上页)
RXSUB:JNB RI,$ ;查询等待
CLR RI;清零,为下次接收作准备 MOV A,SBUF ;启动接收 JNB PSW.0,RX1;P=0,转RX1
JNB RB8,RERR ;P=1,RB8=0,转出错处理
SJMP RX2
RX1: JB RB8,RERR;P=0,RB8=1,转出错处理
RX2: MOV @R1,A ;保存数据 RET
RERR: SETB FO RET
例9-3,采用中断方式设计一数据发送程序
设串口工作于方式1,定时器工作于方式2,主频为6MHz,波特率为2400,数据长度(小于255)存放于R7,数据块首址存放于直接地址21H和20H中,设发送数据为ASCII码,发送时在数据最高位加上奇偶校验位。
解:由方式1、3波特率发生公式
当取SMOD=1,Fosc=6MHz,波特率为2400时,可计算得TH1的近似值为243(F3H)。程序框图如图9-9所示。
程序:
ORG 0000H AJMP START
ORG 0023H
AJMP TXDI ;进入串行中断程序 START:MOV TMOD,#20H;定时器1工作方式2
MOV TH1,#0F3H;设时间常数,波特率为2400
MOV TL1,#0F3H SETB TR1 `;启动T1 SETB EA ;CPU开中断 MOV SCON,#40H ;串行口工作于方式1 MOV PCON,#80H ;置SMOD=1 MOV 21H, #20H ;送数据指针
MOV 20H, #00H
MOV R7, #n ; 送数据个数
MOV SBUF,R7 ; 首先发送数据长度个数
SETB ES ; 开串行口中断 WAIT: SJMP WAIT ; 等待中断 CLR ES ; 关中断
TXEND: SJMP TXEND ; 发送结束 TXD1: ACALL TXSUB ;调数据发送子程序
DJNZ R7,LOOP ;判是否发送完毕 SJMP TXEND ;完毕就结束程序 LOOP: RETI ;未完毕继续
TXSUB:MOV DPH,21H ;送数据 MOV DPL,20H MOVX A,@DPTR
MOV C, PSW.0 ;置奇偶校验码 MOV ACC.7,C CLR C
MOV SBUF,A ;发送数据
INC DPTR ;调整地址,为取下一个数据准备
MOV 21H,DPH MOV 20H,DPL
RET ;中断返回
本 章 小 结
串行通信是计算机之间进行通信的一
因篇幅问题不能全部显示,请点此查看更多更全内容