250 likes | 414 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 数据传输方向 一般情况下,串行数据传输是在两个通信端之间进行的。其数据传输方向通常有三种:单工、半双工和全双工。 如果在通信过程的任意时刻,A端为发送端、B端为接收端,数据仅能从A端发至B端称为单工通信。例如日常生活中的无线寻呼就是典型的单工通信设备。传呼台作为发送端,负责发送数据。BP作为接收端,只能接收来自传呼台的信号,而不能反向发送。 如果在通信过程中,数据可以从A端发至B端,也可以从B端发至A端,但是在同一时间只能作一个方向的传送。这种传输方式称为半双工通信。例如日常生活中的无线对讲机就是半双工通信设备。 如果在通信过程的任意时刻,同时存在A到B和B到A的双向数据传输,此时两个方向的信号采用不同的信道,二个信道上的信息不相互干扰。这种传输方式称为全双工通信。例如日常生活中的电话、移动通信等都是典型的全双工通信设备。
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.1 串行通信接口结构 MCS-51单片机通过串行数据接收引脚RXD(P3.0) 和串行数据发送引脚TXD(P3.1)与外界进行通信。 串行口内有一个可直接寻址的专用寄存器—串行口缓冲寄存器SBUF,在物理上,SBUF由两个寄存器组成:一个发送寄存器、一个接收寄存器,两者共用一个地址99H,可同时发送、接收数据,CPU写SBUF,就是修改发送寄存器,读SBUF就是读接收寄存器。 接收寄存器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时响应串口接收中断,没有把上一帧数据读走,产生两帧数据重叠的情况。 发送寄存器没有采用双缓冲结构,因为发送数据是由CPU控制的,用户在编程时,必须避免产生写重叠情况,即在用户程序中必须等数据发送完毕后才能发送下一个数据
串行口控制寄存器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的波特率固定为
方式0的发送过程:当执行一条将数据写入发送缓冲器SBUF的指令时,CPU将数据写入到发送缓冲器SBUF时,串行方式0的发送过程:当执行一条将数据写入发送缓冲器SBUF的指令时,CPU将数据写入到发送缓冲器SBUF时,串行 口将8位数据以固定的波特率 由RXD引脚输出,同时 由TXD引脚输出频率为 的同步脉冲,字符发送完毕, 置中断标志T1=1,向CPU申请中断。 方式0的接收过程:控制字除设置为方式0外,还应设置接收允许控制位REN=1,清除RI中断标志,接收器启动后,RXD为数据输入端,TXD为同步信号输出端,接收器以 固定的波特率 采样RXD引脚输入的数据信息。 当接收完8位数据后又重新置RI=1。 3 方式0工作基本原理
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是以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复位。 方式1的接收过程:方式1接收操作必须在SCON寄存器中REN位为1、RI为0、工作模式设置为1的前提下进行,同时还必须利用定时器T1来完成波特率的设置。当上述设置完成后,MCS-51单片机的CPU会自动对RXD引脚采样。采样频率为波特率的16倍,当检测到起始位(RXD上检测到1→0的跳变,即起始位)时,接收电路对RXD引脚采样启动串口数据接收。
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