片机串行通讯及其接口.ppt

上传人:牧羊曲112 文档编号:6440204 上传时间:2023-10-31 格式:PPT 页数:103 大小:1.83MB
返回 下载 相关 举报
片机串行通讯及其接口.ppt_第1页
第1页 / 共103页
片机串行通讯及其接口.ppt_第2页
第2页 / 共103页
片机串行通讯及其接口.ppt_第3页
第3页 / 共103页
片机串行通讯及其接口.ppt_第4页
第4页 / 共103页
片机串行通讯及其接口.ppt_第5页
第5页 / 共103页
点击查看更多>>
资源描述

《片机串行通讯及其接口.ppt》由会员分享,可在线阅读,更多相关《片机串行通讯及其接口.ppt(103页珍藏版)》请在三一办公上搜索。

1、第九章 串行通讯及其接口,计算机与外部设备或计算机与计算机之间的数据交换称为通信。,9.1概述,9.1.1 串行通信的基本概念,通信分为并行通信与串行通信两种基本方式。,9.1.1.1 并行通信和串行通信,串行通信:将数据分成1位1位的形式在一条传输线上逐个地传送。,并行通信:将数据的各位用多条数据线同时进行传送,外加地址线和通信控制线。,特点:,并行通信常用于集成电路芯片的内部、同一插件板上各部件之间、同一机箱内各插件板之间的信息交互,串行通信常用于设备之间的信息交互,串行通信1)交互数据信息和控制信息 2)有严格的格式(同步和异步)3)电平需要转换,若接收端与发送端使用的不是同一时钟信号(

2、但必须同频率),则为异步通信。,1、异步通信,以字符为单位,一个字符一个字符地传送,并且每一个字符要有起始符和停止符作为开始和结束的标志。(一个字符就是一帧),同步通信和异步通信,根据数据传输方式的不同,可将串行通信分为同步通信和异步通信。,停止位后面是不定长的空闲位。数据的传送可以是不连续的。,每帧数据由4部分组成:起始位(占1位)、数据位(占位)、奇偶校验位(占位,也可以没有校验位)、停止位(占1或2位)。,起始位:1位。低电平(逻辑0)。标志一个字符传送的开始。,数据位:58位。低位在前,高位在后。字符编码方式的不同,使得数据可以是58位。,奇偶校验位:1位。检查字符传送的准确性。有三种

3、方式:奇校验、偶校验和无校验,由用户决定。,停止位:1位、1位半或者两位(高电平逻辑1)。标志一个字符传送的结束。,发送方:传送时先输出起始位“”作为联络信号,接下来的是数据位和奇偶校验位,停止位“1”表示一个字符的结束。其中,数据的低位在前,高位在后。字符之间允许有不定长度的空闲位。,接收方:传送开始后,接收设备不断检测传输线的电平状态,当收到一系列的“1”(空闲位或停止位)之后,检测到一个“”,说明起始位出现,就开始接收所规定的数据位和奇偶校验位以及停止位。,特点:所需传输线少,设备开销较小,在单片机控制系统中得到广泛的应用。但每个字符要附加23位用于起止位,各帧之间还有间隔,因此传输效率

4、不高。,工作流程,目的:提高可靠性方法:奇偶校验法、校验和法,校验方法,基本思想:依据偶校验或奇校验原则,比较发送方和接收方的校验位是否相同。,奇偶校验法的缺点:1.每次需要传送检验位。2.不能监测偶数个错误。,2.校验和方法,特点:校验和方法效率更高,可靠性更高。,2、同步通信,同步通信是一种数据连续传输的串行通信方式,通信时发送方把需要发送的多个字节数据和校验信息连接起来,组成数据块。发送时,发送方只需在数据块前插入12个特殊的同步字符,然后按特定速率逐位输出(发送)数据块内的各位数据。接收方在接收到特定的同步字符后,也按相同速率接收数据块内的各位数据。,在这种通信方式中,数据块内的各位数

5、据之间没有间隔,传输效率高;发送、接收双方必须保持同步(使用同一时钟信号),且数据块长度越大,对同步要求就越高。同步通信设备复杂,成本高,一般只用在高速数字通信系统中。,串行通信方式,1)单工方式:这种方式只允许数据按一个固定的方向传输。,数据传输仅能从发送设备传输到接收设备。,2)半双工方式:数据可以从A发送到B,也可以由B发送到A。但A、B之间只有一根传输线,因此同一时刻只能作一个方向的传送。其传送方向由收发控制开关K切换。平时一般让A、B方都处于接收状态,以便能够随时响应对方的呼叫。,两个串行通信设备之间只有一条数据线,数据传输可以沿两个方向,但需要分时进行。,3)全双工方式:数据可同时

6、在两个方向上传送。,3种方式中,1)全双工方式的效率最高;2)半双工方式配置和编程相对灵活,传输成本较低;3)串行通信设备常选用半双工方式。,波特率(Baud rate),单位:bps(bit per second)定义:每秒钟传送的二进制位数。Baudrate:50 19200 57600 50,100,150,300,600,1200,2400,4800,9600,19200,38400,57600,115200,如每秒传送240个字符,而每个字符格式包含10位这时的波特率为10位(bit)240个/s=2400 bit/s。在异步串行通信中,接收方和发送方应使用相同的波特率,才能成功传送

7、数据。,Baudrate9600bps 对应于一个数据位宽约为104us。,数据位宽(每一位代码的传输时间)Td 1/Baudrate,计算机系统中常用串行、并行接口并行:EPP:打印机IDE:硬盘、电子盘IEEE488(GPIB):智能化仪器PCI,串行:异步:RS232-C 384Kbps(15 to 20m)RS422、RS485 1.2Mbps(1200m)同步:USB 1.1 12MbpsUSB 2.0 480Mbps1394 400MbpsSPI 26Mbps(Motorola)Microwire 10Mbps(National Semiconductor,国家半导体公司)I2C

8、400Kbps(Philips),RS232C 简介信号线25 芯,22 根信号线,常用9 根线最简方式 3 根线RXD:数据接收线TXD:数据发送线GND:地线例如 PC 机上的串口COM1、COM2,电平制采用负逻辑,对应电平如下:1:3V 15V0:3V 15V常用驱动器典型的线驱动器MC1488(反向驱动)12V 供电典型的线接收器 MC1489(反向驱动),常用驱动器,MAXIM202,常用驱动器,Sipex 220,常用驱动器,Max232,异步串口硬件连线方式,1.4 种工作方式的特点是什么?分别应用 于什么场合?2.如何启动发送和接收过程?3.首先移出或发送的是D0,还是D7?

9、(9AH10011010B)4.在接收数据过程中采用了什么措施提 供可靠性?5.TI 标志和RI 标志何时会自动置1?6.哪些情况下传送的数据会丢失?,全双工的异步通讯串行口,具有UART的全部功能,能同时进行数据的发送和接收 4种工作方式,波特率由片内定时器/计数器控制。每发送或接收一帧数据,均可发出中断请求。除用于串行通讯,还可用来扩展并行I/O口,或作为串并转换等。,9.2 MCS-51的串行口,MCS-51的串行口主要由两个独立的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器),发送控制器、接收控制器、输入移位寄存器及若干控制门电路组成。基本结构如图所示。,9.2.

10、1 串行口的组成,P3.0是串行数据接收端RXD,P3.1是串行数据发送端TXD。串行接口的结构由串行接口控制电路、发送电路和接收电路3部分组成。发送电路由发送缓冲器(SBUF)、发送控制电路组成,用于串行接口的发送。接收电路由接收缓冲器(SBUF)、接收控制电路组成,用于串行接口的接收。两个数据缓冲器(SBUF)在物理上相互独立,在逻辑上却占用同一字节地址99H。,MCS-51可以通过特殊功能缓冲器SBUF对串行接收或串行发送寄存器进行访问,两个缓冲器共用一个地址99H,由指令操作决定访问哪一个缓冲器。执行写时访问串行发送缓冲器,读时访问接收缓冲器。发送缓冲器只能写入,不能读出;接收缓冲器只

11、能读出,不能写入。接收器具有双缓冲结构,即在从接收缓冲器中读出前一个已收到的字节之前,便能接收第二个字节,如果第二个字节已经接收完毕,第一个字节还没有读出,则将丢失其中一个字节,编程时应引起注意。对于发送器,因为数据是由CPU控制和发送的,所以不需要考虑。,单片机串行接口工作方式是通过初始化设置,将两个相应控制字分别写入串行控制寄存器SCON(98H)和电源控制寄存器PCON(87H)即可。数据缓冲器(99H)发送缓冲器:只管发送数据,CPU写入SBUF的时候(MOV SBUF,A)即为发送;接收缓冲器:只管接收数据,CPU读取SBUF的过程(MOV A,SBUF)即为接收。,控制状态寄存器S

12、CON,MCS-51串行口工作方式的设定、接收与发送控制以及工作状态标志的设置都是通过对串行口控制寄存器SCON的编程确定的。SCON为一SFR,其地址为98H,可位寻址,其各位的作用定义如下:,(1)SM0、SM1串行口4种工作方式的选择位 表 串行口的4种工作方式SM0 SM1 方式 功 能 说 明 0 0 0 同步移位寄存器方式(用于扩展I/O口)0 1 1 8位异步收发,波特率可变(由定时器控制)1 0 2 9位异步收发,波特率为fosc/64或fosc/32 1 1 3 9位异步收发,波特率可变(由定时器控制),当串行口以方式2或方式3接收时,如果SM2=1,只有当接收到的第9位数据

13、(RB8)为“1”时,才将接收到的前8位数据送入SBUF,并置“1”RI,产生中断请求;当接收到的第9位数据(RB8)为“0”时,则将接收到的前8位数据丢弃。如果SM2=0,则不论第9位数据是“1”还是“0”,都将前8位数据送入SBUF中,并置“1”RI,产生中断请求。方式1时,如果SM2=1,则只有收到停止位时才会激活RI,没有收到有效的停止位时,RI清0。方式0时,SM2必须为0。,(2)SM2 多机通信控制位 用于方式2或方式3中。,(3)REN允许串行接收位 由软件置“1”或清“0”。REN=1 允许串行口接收数据。REN=0 禁止串行口接收数据。(4)TB8发送的第9位数据 方式2和

14、3时,TB8是要发送的第9位数据,可作为奇偶校验位使用,或在多机通信中可作为地址帧或数据帧的标志。=1为地址帧,=0为数据帧(5)RB8接收到的第9位数据 方式2和3时,RB8存放接收到的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。,(6)TI发送中断标志位方式0时,串行发送第8位数据结束时由硬件置“1”,其它工作方式,串行口发送停止位的开始时置“1”。TI=1,表示一帧数据发送结束,可供软件查询,也可申请中断。CPU响应中断后,向SBUF写入要发送的下一帧数据。TI必须由软件清0。(7)RI接收中断标志位 方式

15、0时,接收完第8位数据时,RI由硬件置1。其它工作方式,串行接收到停止位时,该位置“1”。RI=1,表示一帧数据接收完毕,并申请中断,CPU从接收SBUF取走数据。该位状态也可软件查询。RI必须由软件清“0”。,SMOD:波特率选择位。SMOD=1,波特率加倍。SMOD0,波特率不加倍。例如:方式1的波特率的计算公式为:方式1波特率=(2SMOD/32)定时器T1的溢出率也称SMOD位为波特率倍增位。,9.2.1.2 特殊功能寄存器PCON,字节地址为87H,没有位寻址功能,需要字节传送。,MCS-51单片机串行口共有4种工作方式,SM0、SM1是串行接口的工作方选择位,如表所示。,串行接口中

16、的4种工作方式中,串行通信只使用方式1、方式2、方式3。方式0主要用于扩展并行输入输出口。,9.2.2 串行口的4种工作方式,9.2.2.1 方式0,方式0是把串行接口作为同步移位寄存器使用。其波特率是固定的,为fosc/12,即一个机器周期移位一次。数据由RXD端输出或输入,同时由TXD端输出同步移位脉冲信号。移位数据的发送和接收以一个字符的8位为一组,不设起始位和停止位。低位在前,高位在后。其格式为:,1方式0发送当执行任何一条写SBUF的指令时,就启动了串行接口的发送过程(如MOV SBUF,A)。内部的定时逻辑在SBUF写入数据之后,经过一个完整的机器周期,输出移位寄存器中输出位的内容

17、送RXD引脚输出;移位脉冲由TXD引脚输出,它使RXD引脚输出的数据移入外部移位寄存器。8位数据以fosc/12的固定波特率从RXD引脚串行输出。当数据的最高位D7位移出后,停止发送数据和移位脉冲,就完成了1B的输出,并把中断标志(TI)置“1”。如要再发送下一字节数据,必须用软件先将TI清“0”。,时序如图所示。,2方式0接收 REN=0,禁止接收。REN=1,允许接收。向串口的SCON写入控制字(置为方式0,并置“1”REN位,同时RI=0)时,产生一个正脉冲,串行口即开始接收数据。RXD为数据输入端,TXD为移位脉冲信号输出端 接收器也以fosc/12的固定波特率采样RXD引脚的数据信息

18、,当收到8位数据时置“1”RI。表示一帧数据接收完。如要再接收数据,就再用软件将RI清“0”。,时序如下:,方式0下,SCON中的TB8、RB8位没有用到,发送或接收完8位数据由硬件置“1”TI或RI,CPU响应中断。TI或RI须由用户软件清“0”,可用如下指令:CLR TI;TI位清“0”CLR RI;RI位清“0”方式0时,SM2位必须为0。,串行接口为同步移位寄存器的输入/输出方式,而不是通信方式,可外接移位寄存器,用于扩展并行I/O接口。数据都由RXD(P3.0)引脚输入或输出,TXD引脚 总是用于输出同步移位脉冲。,方式1 波特率可变的8位异步通信串行接口为波特率可变的8位数据的异步

19、通信接口。TXD为数据发送引脚,RXD为数据接收引脚。传送1帧数据为10位,其中,1位起始位(0),8位数据位(低位在先),1位停止位(1)。方式1的波特率由定时器(T1)的溢出率和SMOD的状态决定。,1方式1发送 方式1输出时,数据由TXD输出,一帧信息为10位,1位起始位0,8位数据位(先低位)和1位停止位1。当执行一条数据写发送缓冲器SBUF的指令,就启动发送。图中TX时钟的频率就是发送的波特率。发送开始时,内部发送控制信号变为有效。将起始位向TXD输出,此后,每经过一个TX时钟周期,便产生一个移位脉冲,并由TXD输出一个数据位。8位数据位全部发送完毕后,置“1”TI。如要再发送下一字

20、节数据,必须用软件先将TI清零。,2方式1接收 数据从RXD(P3.0)脚输入。当检测到起始位的负跳变时,开始接收数据。定时控制信号有两种 1)接收移位时钟(RX时钟,频率和波特率相同)2)位检测器采样脉冲:接收器以所选择波特率的16倍速率采样RXD引脚电平,接收的值是3次连续采样(第7、8、9个脉冲时采样)进行表决以确认是否是真正的起始位(负跳变)的开始。接收过程中,将每个数据位宽度分成16个状态,并在中间的第7、8、9状态时对RXD采样,采样数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。,当一帧数据接收完,须同时满足两个条件,接收才真正有效。RI

21、=0,即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,说明“接收SBUF”已空。SM2=0或SM2=1且收到的停止位=1(方式1时,停止位进入RB8),则收到的数据装入SBUF和RB8(RB8装入停止位),置“1”中断标志RI。若这两个条件不同时满足,收到的数据将丢失。,9.2.2.3 方式2 9位异步通信接口。每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控的第9位数据和1位停止位。帧格式如下。方式2波特率=(2SMOD/64)fosc,1方式2发送 发送前,先根据通讯协议由软件设置TB8(例如,双机通讯时的奇偶校验位或多机通讯时的地址/数

22、据的标志位)。方式2发送数据波形如图所示。,例 方式2发送在双机通讯中的应用。发送中断服务程序,是在双机通讯中,以TB8作为奇偶校验位,处理方法为数据写入SBUF之前,先将数据的奇偶校验位写入TB8,以保证采用偶校验发送。SDTI:PUSH PSW;现场保护 PUSH Acc SETB SM0;设置方式2发送 CLR SM1 CLR TI;发送中断标志清“0”MOV A,R0;取数据MOV C,P;校验位送TB8,采用偶校验 MOV TB8,C MOV SBUF,A;启动发送 INC R0;数据指针加1 POP Acc;恢复现场 POP PSW RETI;中断返回,2方式2接收 SM0、SM1

23、=10,且REN=1。数据由RXD端输入,接收11位信息。当位检测到RXD从1到0的负跳变,并判断起始位有效后,开始收一帧信息。在接收器完第9位数据后,需满足两个条件,才能将接收到的数据送入SBUF。(1)RI=0,意味着接收缓冲器为空。(2)SM2=0或接收到的第9位数据位RB8=1时。当上述两个条件满足时,接收到的数据送入SBUF(接收缓冲器),第9位数据送入RB8,并置“1”RI。若不满足两个条件,接收的信息将被丢弃。,方式2接收数据的时序如图所示。,PIRI:PUSH PSWPUSH AccSETB SM0;设置方式2接收CLR SM1CLR RI MOV A,SBUF;收到数据送AM

24、OV C,PJNC L1;P0,跳L1JNB RB8,ERP;P1,RB80,ERP为出错处理程序 AJMP L2;P1,RB81,接收数据正确 L1:JB RB8,ERP;RB81,跳ERP L2:MOV R0,A INC R0 POP Acc POP PSW ERP:;出错处理程序段 RETI,例 方式2接收在双机通讯中的应用。与上例相对应。若第9位数据为校验位,在接收程序中作偶校验处理,设1组寄存器区的R0为数据缓冲器指针。,9.2.2.4 方式3SM0、SM1=11,串口为方式3。波特率可变的9位异步通讯方式,除波特率外,方式3和方式2相同。方式3的时序见方式2。方式3波特率=(2SM

25、OD/32)定时器T1的溢出率,波特率的设定串行通信双方对发送或接收数据的波特率事先要约定好保持一致。MCS-51单片机的波特率设置与工作方式有关,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率和SMOD的状态决定。定时器T1产生波特率的计算(1)方式0波特率时钟频率fosc1/12,不受SMOD位的值的影响。若fosc=12MHz,波特率为fosc/12即1Mb/s。(2)方式2波特率=(2SMOD/64)fosc 若fosc=12MHz:SMOD=0 波特率=187.5kb/s;SMOD=1 波特率=375kb/s,(3)方式1或方式3时,波特率

26、为:波特率=(2SMOD/64)T1的溢出率,当T1作为波特率发生器时,常使T1工作在自动重装初值的8位定时器方式,并禁止T1中断。这种方式可避免重新设定定时初值而产生波特率误差。TH1从初值计数到产生溢出,它每秒溢出的次数称为溢出率。,实际上是先给定数据传输速率,根据速率来确定计数初值N,例 若8031单片机的时钟振荡频率为11.0592MHz,选用T1为方式2定时作为波特率发生器,波特率为2400b/s,求初值。这里时钟振荡频率选为11.0592 MHz,就可使初值为整数,从而产生精确的波特率。,在单片机的应用中,相同机种单片机的波特率很容易达到一致,只要晶振频率相同,可以采用完全一致的设

27、置参数。异机种单片机的波特率设置较难达到一致,这时的设计原则应使两个通信设备之间的波特率误差小于2.5%。常用的串行接口波特率、晶振频率以及各参数的关系如表7所示。,表中有两点需要注意:(1)时钟振荡频率为12MHz或6MHz时,表中初值X和相应的波特率之间有一定误差。例如,FDH的对应的理论值是10416波特(时钟6MHz)。与9600波特相差816波特,消除误差可以调整时钟振荡频率fosc实现。例如采用的时钟振荡频率为11.0592MHz。(2)如果串行通讯选用很低的波特率,例如,波特率选为55,可将定时器T1设置为方式1定时。但在这种情况下,T1溢出时,需用在中断服务程序中重新装入初值。

28、中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的方法加以调整。,例使用MCS-51单片机串行工作收发字节字符,并要求偶校验,要求传送波特率为1200 baud。解分析:因要求有校验位,故为串行工作方式2或方式3,又因波特率为1200 baud,故只能在方式3下工作。定义定时器1采用工作方式2。由表可知,定时器T1的初始值为0E8H,设发送数据区的首地址为20H,接收数据后的首地址为40H。主程序:MOV TMOD,#20H;设置定时器1工作方式2MOV TL1,#0E8HMOV TH1,#0E8H MOV R0,#20HMOV R1,#40HSETB TR1;启动定时器1MO

29、V SCON,#OEOH;设置串行工作方式3,接收允许SETB EASETB ESACALL SENDSJMP$,中断服务程序:ORG 0023H;串行中断入口 AJMP SERSER:JNB RI,SEN;不是RI中断(即为TI中断)转发送子程序 ACALL RECIVE;是RI中断转接收子程序 SJMP NEXTSEN:ACALL SENDNEXT:RETI,发送子程序:SEND:MOV A,R0 MOV C,P;置偶校验位 MOV TB8,C INC R0 MOV SBUF,A CLR TI;TI清零 RET接收子程序:RECIVE:MOV A,SBUF MOV C,RB8;取校验位 M

30、OV R1,A INC R1 CLR RI;RI清0 RET,9.2.4 单片机串行通信,单片机串行接口主要用于计算机之间的串行通信,包括两单片机之间多个单片机以及单片机与PC机之间的串行通信。,1双机串行通信,两台MCS-51单片机可采用三线零调制解调方式连接,两台单片机的发送端TXD与接收端的RXD交错相连,地线相连,即完成硬件的连接。,两个MCS-51单片机相距在几米之内,两个MCS-51单片机相距在几米以外,3 MCS-51单片机与PC机的串行通信,如果双机通讯距离在30米之内,可利用RS-232C标准接口实现点对点的双机通讯,串行通信方式的应用一、串行口数据发送/接收程序的基本结构

31、数据发送/接收程序的基本结构如图所示,9.3 应用程序设计,波特率的计算和UART 的初始化串行口工作于方式0:方式2:方式1、3:,9.3 应用程序设计,方式1、3的波特率,9.3 应用程序设计,例 1:fosc6MHz,SMOD1,波特率9600bps,求 T1 的初值解:T1 的分频值N 有:N60009.61216=3.255取 N3则有 TH10FDH,TL10FDH,9.3 应用程序设计,例 2:预用 51 单片机的UART 传送数据,要求采用偶校验方法,波特率为9600bps,试选择UART 的工作方式,并写出初始化代码。(fosc6MHz)解:选择串行口工作方式方式2 为9 b

32、it UART,但Baud ratefosc/64 or fosc/32因此选择方式3计算T1 的初值初始化代码:MOV SCON,#11010000B;SM0 SM1=1 1(方式3,9bitUART);SM2=0;REN=1 允许接收MOV PCON,#80H;1000 0000B,SMOD=1MOV TMOD,#20H;0010 0000 定时方式2MOV TH1,#0FDHMOV TL1,#0FDHSETB TR1,9.3 应用程序设计,查询方式下数据的基本收发过程发送:MOV SBUF,#0AAHJNB TI,$CLR TIMOV SBUF,#55H接收:JNB RI,$CLR RI

33、MOV A,SBUF奇偶校验方法的应用采用 9 位UART 方式:1start+8data+1parity+1stop,9.3 应用程序设计,例 3:阅读以下代码段,归纳程序的功能,并说明 R0,R7 的作用。,A 机发送:SEND:MOV A,R0MOV C,P;P按偶校验原则置位MOV TB8,C;存入检验位MOV SBUF,ASWAIT:JBC TI,NEXTSJMP SWAITNEXT:INC R0DJNZ R7,SENDRET,B 机接收:RWAIT:JBC RI,REVSJMP RWAITREV:MOV A,SBUFJNB P,ISNP;P=0JNB RB8,ISERR;P=1 但

34、RB8=0SJMP SAVE;P=1,RB8=1ISNP:JB RB8,ISERR;P=0,但RB81SAVE:MOV R0,AINC R0DJNZ R7,RWAITRETISERR:SETB F0;PSW.5 置出错标志为1SJMP SAVE,9.3 应用程序设计,校验和方法的应用8 位UART 方式:1start+8data+1stop,A 机发送:SEND:MOV A,R0MOV SBUF,AADD A,R2MOV R2,A;计算校验和;仅保留低 8 位JNB TI,$CLR TI,B 机接收:REV:JNB RI,$CLR RIMOV A,SBUFMOV R0,AADD A,R2;计算

35、校验和MOV R2,A,;接收校验和、比较、设置标志信息JNB RI,$CLR RIMOV A,SBUFCJNE A,02H,ERR;默认为0 组;寄存器中的R2MOV A,#00HSJMP MIXERR:MOV A,#0FFHMIX:,思考:1.R2 有何作用?2.与“奇偶校验法”相比“校验和”方法有何优点?,9.3 应用程序设计,联络的必要性及其实现基本方法:A 机B 机:发“AA”,即 10101010BB 机 A机:发“BB”,即 10111011B联络过程的实现,A 方:CONTACT:MOV SBUF,#0AAHJNB TI,$CLR TIACALL D5MSJNB RI,CONT

36、ACTCLR RIMOV A,SBUFCJNE A,#0BBH,CONTACT;联络成功,B 方:CONTACT:JNB RI,$CLR RIMOV A,SBUFCJNE A,#0AAH,CONTACTMOV SBUF,#0BBHJNB TI,$CLR TI;联络成功,Baudrate9600bps,发送一个字节(10bits)所需要的时间1.04 ms,9.3 应用程序设计,双机通讯设计实例任务要求:将A 机片内RAM 中的10 个数据发送给B 机两机中的数据存放地址相同波特率为9600bps(系统fosc=12MHz)采用校验和方法检测数据的正确性基本思想和方案设计选8 位UART 方式,

37、方式1,波特率可变SCON=0101 0000B=50H;UART 方式1,允许接收PCON=00H(SMOD=0),9.3 应用程序设计,确定TMOD,TH1,TL1T1 定时方式2:TMOD0010 0000B 20HT1 的分频值N12000/9.6/12/32=3.255取 N3则有 TL1TH1FDH12000/9.6=1250,9.3 应用程序设计,3.资源分配R0:数据块首地址R1:数据块长度R2:校验和低8 位4.联络方法:A 机发出“AA”,B 机发出“BB”5.状态信息联络过程出错:EEH检验正确:00H检验错误:FFH,9.3 应用程序设计,9.3 应用程序设计,双机通讯

38、中的常见问题1、帧格式不统一2、波特率不统一3、实际波特率存在误差(单片机与PC 机通信时需特别关注)例 4:设SMOD=1,Baudrate9600bps,T1 的分频值为6,分别对应于fosc12MHz 和11.0592MHz 求取实际波特率。fosc12MHz:实际Baudrate12000/12/6/16=10417bpsfosc11.0592MHz:实际Baudrate11059.2/12/6/16=9600bps,9.3 应用程序设计,4、T1 定时计数器未正确设置T1 多选用定时方式2T1 也可选为定时方式1,但必须在T1 中断程序中对T1 进行重新赋值。T0不可作为波特率发生器

39、使用52 系列中T2 也可作为波特率发生器优点:T2 可工作于16 位Autoreload Mode可以支持更高的波特率。此时:T2 对fOsC 的2 分频信号计数,而不是12 分频信号。,例 采用查询方式设计一个数据块接收程序。串口工作于方式3,定时器1用作波特率发生器,波特率为2400,数据块首址存放于寄存器R0,其长度存放于R7。,程序如下:START:MOV TMOD,#20H MOV TH1,#0F4H;设置波特率所;要求的时间常数MOV TL1,#0F4HSETB TR1;启动T1MOV SCON,#0D0H;方式3接收MOV PCON,#00H;使SMOD=0 MOV R1,#2

40、0H;数据块首址MOV R7,#10H RX:ACALL RXSUB;调接收子程序INC R1;准备取一个数DJNZ R7,RXRET,(续上页)RXSUB:JNB RI,$;查询等待CLR RI;清零,为下次接收作准备MOV A,SBUF;启动接收JNB PSW.0,RX1;P=0,转RX1JNB RB8,RERR;P=1,RB8=0,转出错处理SJMP RX2RX1:JB RB8,RERR;P=0,RB8=1,转出错处理RX2:MOV R1,A;保存数据RETRERR:SETB FORET,例 采用中断方式设计一数据发送程序 设串口工作于方式1,定时器工作于方式2,主频为6MHz,波特率为

41、2400,数据长度(小于255)存放于R7,数据块首址存放于直接地址21H和20H中,设发送数据为ASCII码,发送时在数据最高位加上奇偶校验位。解:由方式1、3波特率发生公式 当取SMOD=1,Fosc=6MHz,波特率为2400时,可计算得TH1的近似值为243(F3H)。程序框图如图所示。,程序:ORG 0000HAJMPSTARTORG 0023HAJMPTXDI;进入串行中断程序 START:MOV TMOD,#20H;定时器1工作方式2MOV TH1,#0F3H;设时间常数,;波特率为2400MOV TL1,#0F3HSETB TR1;启动T1SETB EA;CPU开中断MOV S

42、CON,#40H;串行口工作于方式1MOV PCON,#80H;置SMOD=1MOV 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;返回,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号