版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章:串口通信本章基本要求: ⑴基本概念 ⑵51的串行接口* ⑶串行接口的应用*并行并行通信串行串行串行串行1位9.1 串行通信基础 所谓“通信”是指计算机与其他设备之间进行的信息交换。 通信的方式分为并行通信和串行通信两种。
并行通信是构成一组数据的各位同时进行传送,例如8位数据或16位数据并行传送。 其特点是传输速度快,但当距离较远、位数又多时导致了通信线路复杂且成本高。
串行通信是数据一位接一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现通信(如电话线),可大大地降低成本,适用于远距离通信。缺点是传送速度慢。9.1 串行通信基础 下图为以上两种通信方式的示意图。由图可知,假设并行传送N位数据所需时间为T,那么串行传送的时间至少为NT,实际上总是大于NT的。9.1 串行通信基础9.1.1 串行通信的分类1、异步通信 异步传送的特点是数据在线路上的传送不连续。在传送时,数据是以一个字符为单位进行传送的。它用一个起始位表示字符的开始,用停止位表示字符的结束。异步传送的字符格式如图所示。 ①字符帧:也叫数据帧,由起始位、数据位、奇偶校验位和停止位4个部分组成。9.1 串行通信基础9.1 串行通信基础 ②波特率:就是数据的传送速率,即每秒钟传送的二进制位数,单位:位/秒。 说明:要求发送端与接收端的波特率必须一致。波特率越高,传送速度越快。例:设字符传送的速率为120字符/秒,而每1个字符为10位,那么传送的波特率为:10位/字符×120字符/秒=1200位/秒=1200波特。每1位二进制位的传送时间Td就是波特率的倒数,例中:Td=1/1200=0.833ms9.1 串行通信基础2、同步通信 在异步传送中,每一个字符都要用起始位和停止位作为字符开始和结束的标志,占用了一定的时间。为了提高传送速度,有时就去掉这些标志,而采用同步传送,即1次传送1组数据。在这1组数据的开始处要用同步字符SYN来加以指示,如图示:9.1.2 串行通信的制式 串行通信的数据传送方向有三种形式。9.1 串行通信基础
1、单工制式(Simplex)
单工制式是指甲乙双方通信时只能单向传送数据,发送方和接收方固定。单工:广播9.1 串行通信基础
2、半双工制式半双工制式是指通信双方都具有发送器和接收器,既可发送也可接收,但不能同时接收和发送,发送时不能接收,接收时不能发送。半双工:对讲机9.1 串行通信基础
全双工制式是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时也能发送。3、全双工制式双工:电话9.1 串行通信基础9.1.3 调制解调器 计算机通信是一种数字信号的通信,如图所示。它要求传送线的频带很宽,而在长距离通讯时,通常是利用电话线来传送的,该线不可能有这样宽的频带。如果用数字信号经过传送线直接通讯,信号就会畸变。9.1 串行通信基础 因此要在发送端用调制器(Modulator)把数字信号转换为模拟信号,在接收端用解调器(Demodulator)检测此模拟信号,再把它转换成数字信号,如图所示。9.2 MCS-51单片机串行接口 51单片机内部有一个功能很强的全双工串行口,可同时发送和接收数据。它有四种工作方式,可供不同场合使用。波特率由软件设置,通过片内的定时/计数器产生。接收、发送均可工作在查询方式或中断方式,使用十分灵活。 51的串行口除了用于数据通信外,还可以非常方便地构成1个或多个并行输入/输出口或作串并转换,用来驱动键盘与显示器。51单片机的串行接口硬件结构SBUF(发)SBUF(收)发送控制器TI接收控制器RI移位寄存器波特率发生器T1+A累加器移位寄存器RxDP3.0TxDP3.1去申请中断引脚引脚CPU内部1、发送和接收电路
①SBUF是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。两个缓冲器只用一个字节地址99H,可通过指令对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。
MOVSBUF,A;CPU写SBUF,就是修改发送缓冲器;
MOVA,SBUF;CPU读SBUF,就是读接收缓冲器。串行口对外也有两条独立的收发信号线RXD(P3.0)和TXD(P3.1),因此可以同时发送、接收数据,实现全双工传送。9.2 MCS-51单片机串行接口
②发送和接收过程都是在发送和接收时钟控制下进行的,必须与设定的波特率保持一致。 一般,51单片机的串口时钟是由内部定时器的溢出率经16分频后提供。2、串行口控制寄存器SCON、PCON SCON用来控制串行口的工作方式和状态(可位寻址)。在复位时所有位被清0,字地址为98H。PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址为87H,不能位寻址。 SCON、PCON的格式和内容如下图。9.2 MCS-51单片机串行接口串行口控制寄存器SCON(98H)1、SM0、SM1控制串行口方式
2、SM2允许方式2、3的多机通讯特征位
在方式2、3中若SM2=1→表示接收的第九位数据(RB8)为1时,激活RI。
在方式0,1中SM2必须为0。
SM0
SM1工作方式功能简述波特率00方式08位同步移位寄存器fosc/1201方式110位UART可变10方式211位UARTfosc/32或/6411方式311位UART可变
3、REN允许串行接收位,由软件置/复位1:允许接收0:不允许接收4、TB8在方式2、3中要发送的第九位数据,由软件置/复位
5、RB8在方式2、3中是接收的第九位数据在方式0中不用RB8。串行口控制寄存器SCON(98H)6、RI接收中断标志(必须由软件清除)
在方式0中串行接收到第8位结束时自动置位。在方式1、2、3中串行接收到停止位的中间时置位。
1111111SBUF11111111RxD1RI=17、TI发送中断标志(必须由软件清除)
在方式0中串行发送第8位结束时自动置位。在方式1、2、3中串行发送停止位的开始时置位。串行口控制寄存器SCON(98H)
电源控制寄存器PCONPCOND7D6D5D4D3D2D1D0位名称SMOD———GF1GF0PDIDLSMOD=1,串行口波特率加倍。PCON寄存器不能进行位寻址。☞
SMOD:在串行口工作方式1、2、3中,是波特率加倍位=1时,波特率加倍=0时,波特率不加倍。(在PCON中只有这一个位与串口有关)
9.2.2 串行口的工作方式 51的串行口有四种工作方式,它是由SCON中的SM0、SM1来定义的,如下表和下屏表格所示。9.2 MCS-51单片机串行接口SM0
SM1工作方式功能简述波特率00方式08位同步移位寄存器fosc/1201方式110位UART可变10方式211位UARTfosc/32或/6411方式311位UART可变SM0SM1工作方式说明波特率00方式0(扩展I/O口)移位输入/输出(用于扩展I/O引脚)方式为fosc(振荡频率)的1/12。01方式1(常用)波特率可变的8位异步串行通信方式0方式2(不常用)波特率固定的9位异步串行通信方式1方式3(常用)波特率可变的9位异步串行通信方式9.2 MCS-51单片机串行接口1、方式0 为同步移位寄存器方式,其波特率是固定的,为fosc(振荡频率)的1/12。
①方式0发送:数据从RXD引脚串行输出,TXD引脚输出同步脉冲。当1个数据写入串行口发送缓冲器时,串行口将8位数据以fosc/12的固定波特率从RXD引脚输出,从低位到高位。发送完后置中断标志TI为1,呈中断请求状态,在再次发送数据之前,必须用软件将TI清0。9.2 MCS-51单片机串行接口②方式0接收:在满足REN=1(允许接收)、RI=0的条件下,串行口处于方式0输入。此时,RXD为数据输入端,TXD为同步信号输出端,接收器也以fosc/12的波特率采样RXD引脚输入的数据信息。当接收器接收完8位数据后,置中断标志RI=1为请求中断,在再次接收之前,必须用软件将RI清0。9.2 MCS-51单片机串行接口 说明: 在方式0工作时,必须使SCON寄存器中的SM2位为“0”,这并不影响TB8位和RB8位。方式0发送或接收完8位数据后由硬件置位TI或RI中断请求标志,CPU在响应中断后要用软件清除TI或RI标志。若串行口要作为并行口输入输出,这时必须设置“串入并出“或”并入串出”的移位寄存器来配合使用(如74HC164或74HC165等)。9.2 MCS-51单片机串行接口2、方式1 该方式为波特率可变的8位异步通信接口。
①方式1发送:数据位由TXD端输出,发送1帧信息为10位,其中1位起始位、8位数据位(先低位后高位)和一个停止位“1”。 CPU执行1条数据写入发送缓冲器SBUF的指令,就启动发送器发送。当发送完数据,就置中断标志TI为1。
9.2 MCS-51单片机串行接口 方式1所传送的波特率取决于定时器T1的溢出率和特殊功能寄存器PCON中SMOD的值,即方式1的波特率=(2SMOD/32)×定时器T1的溢出率。 ②方式1接收:当串行口置为方式1,且REN=1时,串行口处于方式1输入状态。它以所选波特率的16倍的速率采样RXD引脚状态。9.2 MCS-51单片机串行接口3、方式2 该方式为11位异步通信接口。
①方式2发送:发送数据由TXD端输出,发送1帧信息为11位,其中1位起始位(0)、8位数据位(先低位后高位)、1位可控位为1或0的第9位数据、1位停止位。附加的第9位数据为SCON中的TB8,它由软件置位或清0,可作为多机通信中地址/数据信息的标志位,也可作为数据的奇偶校验位。9.2 MCS-51单片机串行接口PIPL: PUSH PSW ;保护现场 PUSH ACC CLR TI ;清0发送中断标志 MOV A,@R0 ;取数据 MOV C,P ;奇偶位送C MOV TB8,C ;奇偶位送TB8 MOV SBUF,A ;数据写入发送缓冲器,启动发送 INC R0 ;数据指针加1 POP ACC ;恢复现场 POP PSW RETI ;中断返回9.2 MCS-51单片机串行接口方式2中使用TB8作为发送数据的奇偶校验位,发送程序如下:
②方式2接收:当串行口置为方式2,且REN=1时,串行口以方式2接收数据。方式2的接收与方式1基本相似。数据由RXD端输入,接收11位信息,其中1位起始位(0)、8位数据位、1位附加的第9位数据、1位停止位(1)。 方式2的波特率=(2SMOD/64)×fosc 若附加的第9位数据为奇偶校验位,在接收中断服务程序中应作检验处理,参考程序如下:9.2 MCS-51单片机串行接口PIPL: PUSH PSW ;保护现场 PUSH ACC CLR RI ;清0接收中断标志 MOV A,SUBF ;接收数据 MOV C,P ;取奇偶校验位 JNC L1 ;偶校验时转L1 JNB RB8,ERR ;奇校验时RB8为0转出错处理 SJMP L2L1: JB RB8,ERR ;偶校验时RB8为1转出错处理L2: MOV @R0,A ;奇偶校验对时存入数据 INC R0 ;修改指针 POP ACC ;恢复现场 POP PSW RETI ;中断返回ERR: … ;出错处理 RETI ;中断返回9.2 MCS-51单片机串行接口方式2中使用RB8作为接收数据的奇偶校验位,接收程序如下:4、方式3 方式3为波特率可变的9位异步通信方式,除了波特率有所区别之外,其余方式都与方式2相同。 方式3的波特率=(2SMOD/32)×(定时器T1的溢出率)9.2 MCS-51单片机串行接口9.2.3 串行口的通信波特率 串行通信的四种工作方式对应着三种波特率。
①对于方式0,波特率是固定的,为单片机时钟的十二分之一,即fosc/12。
②对于方式2,波特率有两种可供选择,即fosc/32和fosc/64。对应于以下公式: 波特率=fosc×2SMOD/649.2 MCS-51单片机串行接口
③对于方式1和方式3,波特率都由定时器T1的溢出率来决定,使用下面公式: 波特率=(2SMOD/32)×(定时器T1的溢出率) 而定时器T1的溢出率则和所采用的定时器工作方式有关,并可用以下公式表示: 定时器T1的溢出率=fosc/12×(2n-X) 其中X为定时器T1的计数初值,n为定时器T1的位数,对于定时器方式0,取n=13;对于定时器方式1,取n=16;对于定时器方式2、3,取n=8。9.2 MCS-51单片机串行接口 常用波特率和定时器T1初值9.2 MCS-51单片机串行接口 注意:如果选定的波特率对应的初值C不是整数,则实际波特率与标准值就存在偏差,若晶振频率为12MHz,则标准波特率9600对应的初值C为252.745(SMOD1为0时的计算值),由于初值C只能取最接近计算值的整数,因此,C取253(FDH)。而当C=253时,实际波特率为10417,与理论值相对误差为:约5.7%。
9.2 MCS-51单片机串行接口 实践表明:当两个串行通信设备之间的波特率误差超过2.5%时,串行通信将无法进行,且通信速率越高,发送、接收波特率的允许误差范围就越小。因此,当单片机控制系统需要与PC机通信时,单片机控制系统的晶振频率fosc往往不是整数(如6MHz、12MHz),而是某一特定值,如11.0592MHz就是常用的一种晶振频率之一。9.2 MCS-51单片机串行接口9.3 MCS-51串行口的应用
串行口的编程 串行口需初始化后,才能完成数据的输入、输出。其初始化过程如下:
①按选定串行口的操作方式设定SCON的SM0、SM1两位二进制编码。 ②对于操作方式2或3,应根据需要在TB8中写入待发送的第9位数据。 ③若选定的操作方式不是方式0,还需设定接收/发送的波特率。设定SMOD的状态,以控制波特率是否加倍。若选定操作方式1或3,则应对定时器T1进行初始化以设定其溢出率。9.3.1 串口在方式0下的应用 当串行口工作于方式0时,串行口本身相当于“并入串出”(发送状态)或“串入并出”(接收状态)的移位寄存器。8位串行数据b0~b7依次从RDX(P3.0)引脚输出或输入,移位脉冲信号来自TXD(P3.1)引脚,输出/输入移位脉冲频率固定为系统时钟频率fosc的12分频(对于8XC5X2芯片来说,在“6时钟/机器周期”模式下,移位脉冲频率是时钟频率fosc的6分频),不可改变。9.3 MCS-51串行口的应用1、方式0的串行输出:使用74LS164,如下图 最简的程序可以写为: MOV SCON,#00000000B ;定义串行工作方式 CLR TI ;清除发送中断标志 MOV SUBF,A ;输出串行数据LOOP: JNB TI,LOOP ;等待一帧数据发送结束9.3 MCS-51串行口的应用说明: 使用中断方式时,在中断处于开放状态下(串行中断允许ES为1,中断允许EA为1),当TI有效时,将产生串行中断请求。值得注意是CPU响应串行中断后,不会自动清除TI,需要用“CLRTI”指令清除TI,以便输出新的串行数据。 9.3 MCS-51串行口的应用2、方式0的串行输入:使用74LS165,如下图 RxD引脚接74LS165芯片的串行数据输出端,TxD引脚接74LS165芯片的移位脉冲CLK。其工作过程见如下说明:9.3 MCS-51串行口的应用 说明:在接收中断标志RI为0(即无效,表明串行数据输入缓冲器SBUF空)情况下,当REN=1时,即可启动串行接收过程:在移位脉冲(来自TXD引脚)作用下,165芯片并行数据b0~b7逐一移到RDX引脚,并保存到CPU内的串行接收缓冲器内,当接收到b7位数据时,串行接收中断标志RI为1,表明已接收了一帧数据,CPU可以读SBUF寄存器。这样,在REN为1后,可通过查询RI标志来确定接收过程是否完成。当然,在中断处于开放状态下(串行中断允许ES为1,中断允许EA为1),当RI有效时,将产生串行中断请求。注意:CPU响应串行中断后,不会自动清除RI,需要用“CLRRI”指令清除RI,以便接收新的数据。参考程序如下: MOV SCON,#00000000B ;定义串行工作方式0 CLR P1.7 ;输出送数脉冲(允许165芯片 ;接收并锁存并行输入端数据) NOP SETB P1.7 ;延迟一个机器周期后, ;取消送数负脉冲 CLR RI ;清除接收中断标志RI SETB REN ;允许接收LOOP: JNB RI,LOOP ;等待一帧数据接收结束 MOV A,SBUF ;读串行输入数据9.3 MCS-51串行口的应用9.3.2 串行口在其他方式下的应用 在方式1、2、3下,串口用于异步通信,不同之处在帧格式和波特率的差异。 方式1为8位数据位,方式3为9位数据位,两种方式的波特率都是受定时器T1的溢出率控制。 在用方式1或方式3实现串行异步通信时,初始化程序要设定串行口的工作方式,并对定时器T1进行初始化,即设定定时器方式和定时器初值。此外,还要编写发送子程序和接收子程序。9.3 MCS-51串行口的应用1、方式1 当SM1、SM0为01时,选中串行口工作在方式1,8位的异步串行通信方式,其中TXD是发送端,RXD是接收端。发送或接收一帧信息包括1位起始位(固定为0)、8位串行数据(低位在前,高位在后)和一位停止位(固定为1)共10位,波特率与定时器T1(或T2)溢出率、SMOD位有关(可变)。9.3 MCS-51串行口的应用
①方式1的发送过程如下:在TI为0的情况下(表示当前不处于发送状态,串行口发送控制电路处于空闲状态),任何写串行数据输出缓冲器SBUF指令(如MOVSBUF,A)均会触发串行发送过程:51串行口自动在8个串行数据位的前、后分别插入一个起始位(0)和一个停止位(1),构成10位信息帧,然后按设定的波特率依次输出起始位(0)、8个数据位(顺序为b0~b7)和停止位(1)。当8位数据(即b7位)发送结束后(即开始发送停止位),串行口自动将发送中断标志TI置1。这样执行了写SBUF寄存器操作后,可通过查询TI标志来确定发送过程是否已完成。若中断处于开放状态下,TI有效时,将产生串行中断请求。9.3 MCS-51串行口的应用 ②方式1的接收过程如下:在接收中断标志RI为0(即串行数据输入缓冲器SBUF处于空闲状态)情况下,当REN位为1时,串行口即处于接收状态。在接收状态下,存在两个定时信号:一个是移位脉冲信号(即发送波特率);另一个是RXD引脚电平状态检测信号(也称为数据检测脉冲),它的频率是移位脉冲的16倍。进入接收状态后,串行口便按数据检测脉冲速率不断检测RXD引脚的电平状态,当发现RXD引脚由高电平变为低电平后——表明发送端开始发送起始位(0),启动接收过程,并复位接收波特率发生器,使数据检测脉冲与接收移位脉冲保持同步,然后按设定波特率顺序读出数据位和停止位。9.3 MCS-51串行口的应用 当接收完一帧信息(即接收到停止位)后,如果RI位为0,便将“接收移位寄存器”中的内容装入串行数据输入缓冲寄存器SBUF中,停止位装入SCON寄存器的RB8位中,并将串行接收中断标志RI置1。这样通过查询RI标志即可确定接收过程是否已完成。若中断处于开放状态下,RI有效时,也产生串行中断请求。不过值得注意是CPU响应串行中断后,不会自动清除RI,需要用“CLRRI”指令清除RI,以便接收下一帧信息。9.3 MCS-51串行口的应用2、方式2和方式3 当SM0、SM1为10、11时,串行口工作于方式2、方式3。方式2和方式3都是9位异步串行通信口,区别是方式2的波特率固定为时钟频率的32或64分频,不可变,因此不常用(原因是与其他串行通信设备连接困难)。而方式3的波特率与T1(或T2)定时器的溢出率、电源控制寄存器PCON的SMOD位有关,可调。选择不同的初值或晶振频率,即可获得常用的波特率,因此方式3较常用。下面以方式3为例,介绍串行口9位异步通信过程。9.3 MCS-51串行口的应用
①数据发送:其实方式3与方式1之间的区别是:方式3是9位的异步串行通信方式,一帧信息为11位,由一位起始位(0)、9位数据、一位停止位(1)组成。因方式3需要发送9位串行数据,低8位存放在SBUF寄存器中,第9位(b8)存放在SCON寄存器的TB8位。因此,发送前必须先通过位传送指令将第9位数据写入SCON的TB8位,然后才能执行写串行数据发送缓冲寄存器SBUF,启动发送过程。第9位(b8)内容没有规定,可以是数据,也可以是奇偶校验位,在多机通信中,常作为数据/地址标志或其他控制位。因此,串行口方式3应用范围更广。9.3 MCS-51串行口的应用
②数据接收:在方式3中,当REN位为1时,使串行口进入接收状态。接收的信息从RXD引脚输入,接收到的低8位数据存放在“移位寄存器”中,第9位(b8)存放在SCON寄存器的RB8中。在方式3下,启动接收过程后,如果RI=0、SM2=0(单机方式),则接收到第9位(b8)数据后,串行口便将存放在移位寄存器中的8位数据装入串行接收数据缓冲寄存器SBUF中,并自动将串行接收中断标志RI置1。如果不满足RI=0、SM2=0条件,本次接收信息无效,接收到第9位数据后,不将“移位寄存器”内容装入SBUF特殊功能寄存器,RI也不会置1。9.3 MCS-51串行口的应用 其中RI为0条件可提供“接收缓冲器SBUF空闲”信息,防止后接收数据覆盖以前接收的数据;而设置“SM2为1,接收的第9位数据必须1,接收才有效”条件为了实现多机通信(当SM2为0,不论第9位数据为低电平还是高电平均能接收,是为了在非多机通信条件下,接收发送端的奇偶校验位)。 方式2、3的有效接收条件与方式1似乎不同,但实际上没有区别。因为在方式1中,串行口把停止位(1)作为第9位(即b8)写入SCON寄存器的RB8位,而停止位总是1,因此在方式1中只要接收到停止位,RB8位就一定是1,满足了“SM2为1时,RB8位为1”的接收条件,于是在方式1中,只要RI为0,就能正常接收。9.3 MCS-51串行口的应用例:设甲乙机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的16个数据存在内RAM40H~4FH单元中,乙机接收后存在内RAM50H为首地址的区域中。
T1初值=256-×=232=E8H3212×1200解: 串行方式1波特率取决于T1溢出率(设SMOD=0), 计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论