290 likes | 403 Views
第 7 章 串行接口通信. 7.1 概述 7.2 MCS-51 单片机的串行通信接口 7.3 串行口的四种工作方式 7.4 串口综合应用举例. 7.1 概述. 在实际工作中,计算机的 CPU 和外部设备之间常要进行数据交换,一台计算机与其他计算机之间也往往要交换数据,所有的这些信息交换都称为通信。
E N D
第7章 串行接口通信 7.1 概述 7.2 MCS-51 单片机的串行通信接口 7.3 串行口的四种工作方式 7.4 串口综合应用举例
7.1 概述 在实际工作中,计算机的CPU和外部设备之间常要进行数据交换,一台计算机与其他计算机之间也往往要交换数据,所有的这些信息交换都称为通信。 常用的通信方式有两大类:串行通信和并行通信。目前串行通信协议有很多种:USB、I2C、RS-232、SPI等都是串行通信协议。并行通信协议有SPP、EPP、ECP等。通常需要根据信息传送的距离决定采用那种通信方式,例如PC与外部设备(如打印机等)通信时,如果距离小于30m,可以采用并行通信方式,当距离大于30m时,则要采用串行通信方式。
并行通信和串行通信 并行通信是指数据的各位同时进行传送(发送或接收)的通信方式,其优点是传送速度快,其缺点是数据有多少位,就要有多少根数据传送线,同时还必须有必要的控制线。并行通信在位数多、传送距离远就不太合适了。 串行通信指数据是一位一位的按顺序传送的通信方式,它的突出优点是只需要很少的传输线(根据不同的串行通信协议,数据传输线有所不同),这样大大降低了传送成本,特别适用于远距离通信,其缺点是传送速度较慢。 对串行通信主要涉及以下几个概念:串口通信的数据传输方向、同步和异步通信、波特率等
7.1.1 数据传输方向 一般情况下,串行数据传输是在两个通信端之间进行的。其数据传输方向通常有三种:单工、半双工和全双工。 上面三种方式分别对应了:单行道、独木桥、双向车道的通行方式
7.1.2同步和异步通信 • 1 异步通信 • 异步串行通信是以帧的形式发送字符数据,异步串行通信有连续发送字符和不连续发送字符两种方式,当连续发送字符时,每一帧信息由起始位、数据位、奇偶校验位和停止位组成,其帧结构如图7-1所示。 图7-1 字符连续传送的异步通信数据传输格式
2 同步通信 同步通信不同于异步通信,同步通信在数据传输开始前用同步字符(常约定1~2个),并由同步时钟来实现发送和接收端同步。即同步通信使用数据块传送信息,而不是字节,省去了每个字节的起始位和停止位等数据,直到通信结束。同步通信在每个数据块传输的开始使用同步字符,使接收和发送同步。其通信格式如图7-3所示 • 图7-3 同步通信数据传输格式
7.1.3 波特率 波特率是衡量数据传送速率的指标,其定义为单位时间内传送的信息量,信息量的单位为bit,时间单位为秒,则1波特=1位/秒=1bit/s=1bps。 例如,在异步通信中使用1位起始位,8位数据位,无奇偶校验位,1位停止位。即一帧数据长度为10bit,如果在应用中要求数据传送的速率是1秒传送120帧字符,则传送波特率为1200波特。 在异步串行通信双方中,接收和发送方必须使用相同的波特率才能正确传输数据
7.2 MCS-51 单片机的串行通信接口 • 7.2.1 串行通信接口结构 • 7.2.2 串行口控制寄存器SCON和PCON
7.2.2 串行口控制寄存器SCON和PCON 1、串行口控制寄存器SCON MCS-51单片机串行通信方式的选择、接收和发送控制以及串行口的状态标志等均通过对特殊功能寄存器SCON编程来实现。SCON控制字的各位定义如图7-3所示 • 图7-3 SCON控制字格式
2、电源控制寄存器PCON PCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。PCON中的最高位SMOD与串行口工作有关,如图7-5所示 • 图7-5 电源控制寄存器PCON SMOD(PCON.7)——波特率倍增位。 在串行口方式1、方式2和方式3时,波特率和SMOD成正比,亦即当SMOD=1时,波特率提高一倍。 复位时,SMOD=0
7.3 串行口的四种工作方式 • 7.3.1 串口工作方式0 • 7.3.2 串口工作方式1 • 7.3.3 串口工作方式2 • 7.3.4 串口工作方式3
7.3.1 串口工作方式0 • 1 方式0的帧结构 • 2 方式0时的波特率 • 3 方式0工作基本原理 • 4 串行口方式0应用举例
1 方式0的帧结构 方式0为同步移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。串行数据通过RXD输入或输出,而TXD用来输出移位脉冲或外接部件的同步脉冲。方式0是以8位数据为一帧,不设起始位和停止位,先发送或接收最低位,其帧格式如图7-6所示 • 图7- 6 方式0的帧格式
2 方式0时的波特率 方式0时,每个机器周期产生一个移位脉冲,发送或接收一位数据,因此方式0的波特率固定为
3 方式0工作基本原理 方式0的发送过程:当执行一条将数据写入发送缓冲器SBUF的指令,CPU将数据写入到发送缓冲器SBUF时,串行口将8位数据以固定的波特率由RXD引脚输出,同时由TXD引脚输出频率为fosc/12的同步脉冲,字符发送完毕,置中断标志T1=1,向CPU申请中断。
3 方式0工作基本原理 方式0的接收过程:控制字除设置为方式0外,还应设置接收允许控制位REN=1,清除RI中断标志,接收器启动后,RXD为数据输入端,TXD为同步信号输出端,接收器以固定的波特率采样RXD引脚输入的数据信息。当接收完8位数据后又重新置RI=1。
4 串行口方式0应用举例 例7.1:将片内RAM的30H单元中的内容经CD4094并行输出。 分析:CD4094是一种8位串行输入、并行输出的同步移位寄存器,CLK为同步脉冲输入端,STB为控制端,若STB=0,则8位并行数据输出端关闭,但允许串行数据从DATA输入,若STB=1,则DATA输入端关闭,但允许8位数据并行输出。CD4094与单片机连接电路如图7-7所示。 • 图7-7 串口扩展并行I/O口
例7.1 源程序: MAIN: MOV SCON,#00H ;设置工作模式0 MOV A,30H MOV SBUF,A ;发送30H单元内容 CLR P1.0 WAIT: JNB TI,WAIT;判断是否发送完毕 CLR TI SETB P1.0 SJMP $
7.3.2 串口工作方式1 • 1 方式1的帧结构 • 2 方式1时的波特率 • 3 方式1工作基本原理 • 4 串行口方式1应用举例
停止位”1” 1 方式1的帧结构 方式1是以10位数据为一帧,设1位起始位“0”,8位数据位,1位停止位“1”,先发送或接收最低位,其帧格式如图7-8所示 • 图7-8 方式0的帧格式
2 方式1时的波特率 方式1的移位时钟脉冲由定时器T1的溢出率决定,因此,串行口方式1的波特率由定时器T1的溢出率与SMOD值同时决定。即方式1的波特率如式7-3所示
3 方式1工作基本原理 方式1的发送过程:除设置SCON寄存器为方式1 和TI=0外,还需要利用定时器T1来完成波特率的设置,当执行数据写入发送缓冲器SBUF的命令时,就启动了发送器开始发送。发送电路自动在8位发送字符前后分别添加1位起始位和1位停止位。并在发送移位时钟(其频率即是用户设置的波特率)作用下在TXD引脚依次发送一帧信息,发送完后自动维持TXD为高电平,发送完毕后硬件置位TI,并在中断服务程序中由软件将TI复位。
3 方式1工作基本原理 方式1的接收过程:方式1接收操作必须在SCON寄存器中REN位为1、RI为0、工作模式设置为1的前提下进行,同时还必须利用定时器T1来完成波特率的设置。当上述设置完成后,MCS-51单片机的CPU会自动对RXD引脚采样。采样频率为波特率的16倍,当检测到起始位(RXD上检测到1→0的跳变,即起始位)时,接收电路对RXD引脚采样启动串口数据接收。
3 方式1工作基本原理 方式1的收发流程
4 串行口方式1应用举例 例7.3 设有A、B两个单片机,采用中断方式编程实现如下串行通信功能的程序。双机通信电路如图7-9所示。时钟振荡频率为11.0592MHz。 • 图7-9 双机通信 A机: 将首地址为ADDRT的长度为LEN个单元的数据块顺序向B机发送,波特率为2400。 B机:将接收到的LEN个单元的数据块顺序存储在以ADDRR的数据缓冲区中
A机发送源程序: LEN EQU 30H ADDRT EQU 31H ORG 0000H LJMP MAIN ORG 0023H LJMP INT_COMM ORG 0030H MAIN:MOV SCON,# 40H MOV TMOD,#20H MOV TH1,#0F4H MOV TL1,#0F4H SETB TR1 SETB EA SETB ES MOV R2,#LEN MOV R0,#ADDRT MOV A,@R0 MOV SBUF,A LJMP $ ; 中断服务子程序 INT_COMM: CLR TI DJNZ R2,LOOP CLR ES LJMP ENDCOMM LOOP: INC R0 MOV A,@R0 MOV SBUF,A ENDCOMM: RETI END
B机接收源程序: LEN EQU 30H ADDRR EQU 31H ORG 0000H LJMP MAIN ORG 0023H LJMP INT_COMM ORG 0030H MAIN:MOV SCON,#50H MOV TMOD,#20H MOV TH1,#0F4H MOV TL1,#0F4H SETB TR1 SETB EA SETB ES MOV R2,#LEN MOV R0,#ADDRR LJMP $ ;中断服务子程序 INT_COMM:CLR RI MOV A, SBUF MOV @R0,A DJNZ R2,LOOP CLR ES LJMP ENDCOMM LOOP: INC R0 ENDCOMM:RETI END