收藏 分销(赏)

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

上传人:pc****0 文档编号:14018002 上传时间:2026-05-28 格式:PPT 页数:103 大小:3.41MB 下载积分:10 金币
下载 相关 举报
单片机串行通讯及其接口.ppt_第1页
第1页 / 共103页
单片机串行通讯及其接口.ppt_第2页
第2页 / 共103页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第九章 串行通讯及其接口,计算机与外部设备或计算机与计算机之间的数据交换称为通信,。,9.1,概述,9.1.1,串行通信的基本概念,通信分为并行通信与串行通信两种基本方式。,9.1.1.1,并行通信和串行通信,串行通信,:将数据分成,1,位,1,位的形式在一条传输线上逐个地传送,。,并行通信,:将数据的各位,用多条数据线同时进行传送,,外加地址线和通信控制线。,特点:,并行通信,常用于集成电路芯片的内部、同一插件板上各部件之间、同一机箱内各插件板之间的信息交互,串行通信,常用于设备之间的信息交互,串行通信,1,)交互数据信息和控制信息,2,)有严格的格式(同步和异步),3,),电平需要转换,若接收端与发送端使用的,不是同一时钟信,号(但必须,同频率,),则为异步通信。,1,、异步通信,以字符为单位,一个字符一个字符地传送,并且每一个字符要有,起始符,和,停止符,作为开始和结束的标志。(,一个字符就是一帧,),9.1.1.2,同步通信和异步通信,根据数据传输方式的不同,可将串行通信分为同步通信和异步通信。,停止位后面是不定长的空闲位。,数据的传送可以是,不连续,的。,每帧数据由,4,部分组成:起始位,(,占,1,位,),、数据位,(,占位,),、奇偶校验位,(,占位,也可以没有校验位,),、停止位,(,占,1,或,2,位,),。,起始位,:,1,位。,低电平,(逻辑,0,)。标志一个字符传送的开始。,数据位,:,5,8,位。低位在前,高位在后。字符编码方式的不同,使得数据可以是,5,8,位。,奇偶校验位,:,1,位。检查字符传送的准确性。有三种方式:,奇校验、偶校验和无校验,,由用户决定。,停止位,:,1,位、,1,位半或者两位(,高电平,逻辑,1,)。标志一个字符传送的结束。,发送方,:传送时先输出,起始位“”作为联络信,号,接下来的是数据位和奇偶校验位,停止位“,1”,表示一个字符的结束。其中,数据的,低位在前,高位在后,。字符之间允许有不定长度的空闲位。,接收方,:传送开始后,接收设备不断检测传输线的电平状态,当收到一系列的“,1”(,空闲位或停止位,),之后,,检测到一个“”,说明起始位出现,,就开始接收所规定的数据位和奇偶校验位以及停止位。,特点,:所需传输线少,设备开销较小,在单片机控制系统中得到广泛的应用。,但每个字符要附加,2,3,位用于起止位,各帧之间还有间隔,因此传输效率不高。,工作流程,目的,:提高可靠性,方法:奇偶校验法、校验和法,校验方法,基本思想,:依据偶校验或奇校验原则,比较,发送方和接收方的校验位是否相同。,奇偶校验法的缺点:,1.,每次需要传送检验位。,2.,不能监测偶数个错误。,2.,校验和方法,特点:校验和方法效率更高,可靠性更高。,2,、同步通信,同步通信是一种,数据连续传输,的串行通信方式,通信时发送方把需要发送的,多个字节数据和校验信息,连接起来,组成数据块。,发送,时,发送方只需在数据块前插入,1,2,个特殊的,同步字符,,然后按特定速率逐位输出,(,发送,),数据块内的各位数据。,接收方,在接收到特定的,同步字符,后,也按,相同速率,接收数据块内的各位数据。,在这种通信方式中,数据块内的各位数据之间,没有间隔,,传输效率高;,发送、接收双方必须,保持同步,(,使用,同一时钟信号,),,且数据块长度越大,对同步要求就越高。,同步通信设备复杂,成本高,一般只用在高速数字通信系统中。,9.1.1.3,串行通信方式,1,)单工方式:这种方式只允许数据按一个固定的方向传输。,数据传输仅能从发送设备传输到接收设备。,2,)半双工方式:数据可以从,A,发送到,B,,,也可以由,B,发送到,A,。但,A,、,B,之间只有一根传输线,因此同一时刻只能作一个方向的传送。其传送方向由收发控制开关,K,切换。平时一般让,A,、,B,方都处于接收状态,以便能够随时响应对方的呼叫。,两个串行通信设备之间只有一条数据线,数据传输可以沿两个方向,但需要,分时进行,。,3,)全双工方式:数据可同时在两个方向上传送。,3,种方式中,,1,)全双工方式的效率最高;,2,)半双工方式配置和编程相对灵活,传输成本较低;,3,)串行通信设备常选用半双工方式。,9.1.1.5,波特率(,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,。,在异步串行通信中,接收方和发送方应使用,相同的波特率,,才能成功传送数据。,Baudrate,9600bps,对应于一个数据位宽约为,104us,。,数据位宽,(,每一位代码的传输时间,)Td,1/,Baudrate,计算机系统中常用串行、并行接口,并行:,EPP,:打印机,IDE,:硬盘、电子盘,IEEE488,(,GPIB,):智能化仪器,PCI,串行:,异步:,RS232-C 384Kbps(15 to 20m),RS422,、,RS485 1.2Mbps(1200m),同步:,USB 1.1 12Mbps,USB 2.0 480Mbps,1394 400Mbps,SPI 26Mbps(Motorola),Microwire,10Mbps(National Semiconductor,,国家半导体公司,),I2C 400Kbps(Philips),RS232,C,简介,信号线,25,芯,,22,根信号线,常用,9,根线,最简方式,3,根线,RXD,:数据接收线,TXD,:数据发送线,GND,:地线,例如,PC,机上的串口,COM1,、,COM2,电平制,采用负逻辑,,对应电平如下:,1,:,3V,15V,0,:,3V,15V,常用驱动器,典型的线驱动器,MC1488(,反向驱动,)12V,供电,典型的线接收器,MC1489(,反向驱动,),常用驱动器,MAXIM202,常用驱动器,Sipex,220,常用驱动器,Max232,异步串口硬件连线方式,1.4,种工作方式的特点是什么?分别应用 于什么场合?,2.,如何启动发送和接收过程?,3.,首先移出或发送的是,D0,,还是,D7,?,(9AH,10011010B),4.,在接收数据过程中采用了什么措施提 供可靠性?,5.TI,标志和,RI,标志何时会自动置,1,?,6.,哪些情况下传送的数据会丢失,?,全双工的异步,通讯串行口,,具有,UART,的全部功能,能同时进行数据的发送和接收,4,种工作方式,波特率由片内定时器,/,计数器控制。,每发送或接收一帧数据,均可发出中断请求。,除用于串行通讯,还可用来扩展并行,I/O,口,或作为串并转换等,。,9.2 MCS-51,的串行口,MCS-51,的串行口主要由,两个独立的,串行数据缓冲寄存器,SBUF,(一个发送缓冲寄存器,一个接收缓冲寄存器),,发送控制器,、,接收控制器、输入移位寄存器,及若干,控制门电路,组成。基本结构如图所示。,9.2.1,串行口的组成,P3.0,是串行数据接收端,RXD,,,P3.1,是串行数据发送端,TXD,。,串行接口的结构由串行接口控制电路、发送电路和接收电路,3,部分组成。,发送电路,由发送缓冲器,(SBUF),、发送控制电路组成,用于串行接口的发送。,接收电路,由接收缓冲器,(SBUF),、接收控制电路组成,用于串行接口的接收。,两个数据缓冲器,(SBUF),在,物理上相互独立,,在,逻辑上,却占用,同一字节地址,99H,。,MCS-51,可以通过特殊功能缓冲器,SBUF,对串行接收或串行发送寄存器进行访问,,两个缓冲器,共用一个地址,99H,,由,指令操作,决定访问哪一个缓冲器。,执行写时访问串行发送缓冲器,读时访问接收缓冲器。发送缓冲器只能写入,不能读出;接收缓冲器只能读出,不能写入。,接收器具有,双缓冲结构,,即在从接收缓冲器中读出前一个已收到的字节之前,便能接收第二个字节,,如果第二个字节已经接收完毕,第一个字节还没有读出,则将丢失其中一个字节,,编程时应引起注意。,对于发送器,因为数据是由,CPU,控制和发送的,所以不需要考虑。,单片机串行接口工作方式是通过,初始化设置,,将两个相应控制字分别写入,串行控制寄存器,SCON(98H),和,电源控制寄存器,PCON(87H),即可。,数据缓冲器,(99H),发送缓冲器:只管发送数据,,CPU,写入,SBUF,的时候,(MOV SBUF,,,A,),即为发送;,接收缓冲器:只管接收数据,,CPU,读取,SBUF,的过程,(,MOV A,,,SBUF,),即为接收。,9.2.1.1,控制状态寄存器,SCON,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,位数据(,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,和,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,接收中断标志位,方式,0,时,,接收完第,8,位数据时,,RI,由,硬件置,1,。,其它工作方式,,串行接收到停止位时,该位置“,1”,。,RI=1,,,表示一帧数据接收完毕,并申请中断,CPU,从接收,SBUF,取走数据。该位状态也可软件查询。,RI,必须由软件清“,0”,。,SMOD,:,波特率选择位,。,SMOD=1,,波特率加倍。,SMOD,0,,波特率不加倍。,例如:方式,1,的波特率的计算公式为:,方式,1,波特率,=,(,2,SMOD,/32,),定时器,T1,的溢出率,也称,SMOD,位为,波特率倍增位,。,9.2.1.2,特殊功能寄存器,PCON,字节地址为,87H,,,没有位寻址功能,,需要字节传送,。,MCS-51,单片机串行口共有,4,种工作方式,,SM,0,、,SM,1,是串行接口的工作方选择位,如表所示。,SM,0,SM,1,方式,功 能 说 明,波 特 率,0,0,1,1,0,1,0,1,0,1,2,3,移位寄存器方式,8,位异步通讯接口,9,位异步通讯接口,9,位异步通讯接口,f,osc,/12,可变,f,osc,/64,,,f,osc,/32,可变,串行接口中的,4,种工作方式中,,串行通信,只使用,方式,1,、方式,2,、方式,3,。,方式,0,主要用于扩展,并行输入输出口,。,9.2.2,串行口的,4,种工作方式,9.2.2.1,方式,0,方式,0,是把串行接口作为同步移位寄存器使用。其波特率是,固定的,为,fosc/12,,,即一个机器周期移位一次。,数据由,RXD,端输出或输入,,同时由,TXD,端输出同步移位脉冲信号,。,移位数据的发送和接收以一个字符的,8,位为一组,,不设起始位和停止位。,低位在前,,,高位在后,。其格式为:,D,0,D,1,D,2,D,3,D,4,D,5,D,6,D,7,1,方式,0,发送,当执行任何一条,写,SBUF,的指令时,就启动了串行接口的发送过程,(,如,MOV SBUF,,,A),。,内部的定时逻辑在,SBUF,写入数据之后,经过一个完整的机器周期,输出移位寄存器中输出位的内容送,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,引脚的数据信息,当收到,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,位数据的异步通信接口。,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,。,如要再发送下一字节数据,必须用软件先将,TI,清零,。,2,方式,1,接收,数据从,RXD,(,P3.0,),脚输入。当检测到起始位的负跳变时,开始接收数据。,定时控制信号有两种,1,)接收移位时钟,(,RX,时钟,频率和波特率相同),2,)位检测器采样脉冲,:,接收器以所选择波特率的,16,倍速率采样,RXD,引脚电平,接收的值是,3,次连续采样,(第,7,、,8,、,9,个脉冲时采样),进行,表决以确认是否是真正的起始位(,负跳变)的开始。,接收过程中,将每个数据位宽度分成,16,个状态,并在中间的,第,7,、,8,、,9,状态时对,RXD,采样,,采样数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。,当一帧数据接收完,须同时满足两个条件,接收才真正有效。,RI=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,波特率,=,(,2,SMOD,/64,),fosc,1,方式,2,发送,发送前,先根据通讯协议由,软件设置,TB8,(,例如,,双机通讯时的奇偶校验位,或,多机通讯时的地址,/,数据的标志位,)。,方式,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=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 PSW,PUSH Acc,SETB SM0,;设置方式,2,接收,CLR SM1,CLR RI,MOV A,SBUF,;收到数据送,A,MOV C,P,JNC L1,;,P,0,跳,L1,JNB RB8,ERP,;,P,1,,,RB8,0,ERP,为出错处理程序,AJMP L2,;,P,1,,,RB8,1,接收数据正确,L1:JB RB8,ERP,;,RB8,1,,跳,ERP,L2:MOV R0,A,INC R0,POP Acc,POP PSW,ERP:,;出错处理程序段,RETI,例,方式,2,接收在双机通讯中的应用。与上例相对应。若第,9,位数据为校验位,在接收程序中作,偶校验,处理,设,1,组寄存器区的,R0,为数据缓冲器指针。,9.2.2.4,方式,3,SM0,、,SM1=11,,串口为方式,3,。,波特率可变的,9,位异步通讯方式,除波特率外,方式,3,和方式,2,相同。方式,3,的时序见方式,2,。,方式,3,波特率,=,(,2,SMOD,/32,),定时器,T1,的溢出率,9.2.3,波特率的设定,串行通信双方对发送或接收数据的波特率事先要约定好保持一致。,MCS-51,单片机的波特率设置与工作方式有关,其中,方式,0,和方式,2,的波特率是固定,的,而,方式,1,和方式,3,的波特率是可变,的,由,定时器,T1,的溢出率和,SMOD,的状态决定。,定时器,T1,产生波特率的计算,(,1,),方式,0,波特率时钟频率,fosc1/12,,,不受,SMOD,位的值的影响,。若,fosc,=12MHz,,,波特率为,fosc/12,即,1Mb/s,。,(,2,),方式,2,波特率,=,(,2,SMOD,/64,),fosc,若,fosc,=12MHz:SMOD=0,波特率,=187.5kb/s,;,SMOD=1,波特率,=375kb/s,(,3,),方式,1,或方式,3,时,波特率为:,波特率,=,(,2,SMOD,/64,),T1,的溢出率,当,T1,作为波特率发生器时,常使,T1,工作在,自动重装初值,的,8,位定时器方式,,并禁止,T1,中断,。,这种方式可避免重新设定定时初值而产生波特率误差。,TH1,从初值计数到产生溢出,它每秒溢出的次数称为溢出率。,实际上是先给定数据传输速率,根据速率来确定计数初值,N,例,若,8031,单片机的时钟振荡频率为,11.0592MHz,,选用,T1,为方式,2,定时作为波特率发生器,波特率为,2400b/s,,求初值。,这里时钟振荡频率选为,11.0592 MHz,,就可使初值为整数,从而产生精确的波特率。,在单片机的应用中,相同机种单片机的波特率很容易达到一致,只要晶振频率相同,可以采用完全一致的设置参数。,异机种单片机的波特率设置较难达到一致,这时的设计原则应使两个通信设备之间的波特率误差,小于,2.5%,。,常用的串行接口波特率、晶振频率以及各参数的关系如表,7,所示。,串口工作方式,及波特率,/(bit/s),fosc,/MHz,SMOD,定时器,(T1),C/T,工作方式,初值,方式,0,1MHz,12,无关,方式,2,375kHz,12,1,无关,方式,1,方式,3,62.5 kHz,12,1,0,2,FFH,19.2 kHz,11.0592,1,0,2,FDH,9600Hz,11.0592,0,0,2,FDH,4800Hz,11.0592,0,0,2,FAH,2400Hz,11.0592,0,0,2,F4H,1200Hz,11.0592,0,0,2,E8H,表中有两点需要注意:,(1),时钟振荡频率为,12MHz,或,6MHz,时,表中初值,X,和相应的波特率之间有一定误差。例如,,FDH,的对应的理论值是,10416,波特(时钟,6MHz,)。与,9600,波特相差,816,波特,消除误差可以调整时钟振荡频率,fosc,实现。例如采用的时钟振荡频率为,11.0592MHz,。,(2),如果串行通讯选用很低的波特率,例如,波特率,选为,55,,可将定时器,T1,设置为方式,1,定时。但在这种情况下,,T1,溢出时,需用在中断服务程序中重新装入初值。中断响应时间和执行指令时间会使波特率产生一定的误差,,可用改变初值的方法加以调整,。,例,使用,MCS-51,单片机串行工作收发字节字符,并要求偶校验,要求传送波特率为,1200 baud,。,解,分析:因要求有校验位,故为串行工作方式,2,或方式,3,,又因波特率为,1200 baud,,,故只能在方式,3,下工作。定义定时器,1,采用工作方式,2,。由表可知,定时器,T,1,的初始值为,0E8H,,,设发送数据区的首地址为,20H,,,接收数据后的首地址为,40H,。,主程序:,MOV TMOD,,,#20H,;,设置定时器,1,工作方式,2,MOV TL,1,,,#0E8H,MOV,TH,1,,,#0E8H,MOV R,0,,,#20H,MOV R,1,,,#40H,SETB TR,1,;,启动定时器,1,MOV SCON,,,#OEOH,;,设置串行工作方式,3,接收允许,SETB EA,SETB ES,ACALL SEND,SJMP$,中断服务程序:,ORG 0023H,;,串行中断入口,AJMP SER,SER:JNB RI,,,SEN,;,不是,RI,中断(即为,TI,中断),转发送子程序,ACALL RECIVE,;是,RI,中断转接收子程序,SJMP NEXT,SEN:ACALL SEND,NEXT:RETI,发送子程序:,SEND:MOV A,R,0,MOV C,P,;,置偶校验位,MOV TB,8,C,INC R,0,MOV SBUF,,,A,CLR TI,;,TI,清,零,RET,接收子程序:,RECIVE,:,MOV A,SBUF,MOV C,RB,8,;取校验位,MOV R,1,,,A,INC R,1,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,标准接口实现点对点的双机通讯,串行通信方式的应用,一、串行口数据发送,/,接收程序的基本结构,数据发送,/,接收程序的基本结构如图所示,9.3,应用程序设计,波特率的计算和,UART,的初始化,串行口工作于方式,0,:,方式,2,:,方式,1,、,3,:,9.3,应用程序设计,方式,1,、,3,的波特率,9.3,应用程序设计,例,1,:,f,osc,6MHz,,,SMOD,1,,波特率,9600bps,,求,T1,的初值,解:,T1,的分频值,N,有:,N,60009.61216=3.255,取,N,3,则有,TH1,0FDH,,,TL1,0FDH,9.3,应用程序设计,例,2,:预用,51,单片机的,UART,传送数据,要求采用偶校验方法,波特率为,9600bps,,试选择,UART,的工作方式,并写出初始化代码。(,fosc,6MHz,),解:,选择串行口工作方式,方式,2,为,9 bit UART,,但,Baud rate,fosc/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=1,MOV TMOD,#20H;0010 0000,定时方式,2,MOV TH1,#0FDH,MOV TL1,#0FDH,SETB TR1,9.3,应用程序设计,查询方式下数据的基本收发过程,发送:,MOV SBUF,#0AAH,JNB TI,$,CLR TI,MOV SBUF,#55H,接收:,JNB RI,$,CLR RI,MOV A,SBUF,奇偶校验方法的应用,采用,9,位,UART,方式:,1start+8data+1parity+1stop,9.3,应用程序设计,例,3,:阅读以下代码段,归纳程序的功能,并说明,R0,,,R7,的作用。,A,机发送:,SEND:MOV A,R0,MOV C,P,;P,按偶校验原则置位,MOV TB8,C,;存入检验位,MOV SBUF,A,SWAIT:JBC TI,NEXT,SJMP SWAIT,NEXT:INC R0,DJNZ R7,SEND,RET,B,机接收:,RWAIT:JBC RI,REV,SJMP RWAIT,REV:MOV A,SBUF,JNB P,ISNP,;P=0,JNB RB8,ISERR,;P=1,但,RB8=0,SJMP SAVE,;P=1,RB8=1,ISNP:JB RB8,ISERR,;P=0,但,RB8,1,SAVE:MOV R0,A,INC R0,DJNZ R7,RWAIT,RET,ISERR:SETB F0,;PSW.5,置出错标志为,1,SJMP SAVE,9.3,应用程序设计,校验和方法的应用,8,位,UART,方式:,1start+8data+1stop,A,机发送:,SEND:MOV A,R0,MOV SBUF,A,ADD A,R2,MOV R2,A,;计算校验和,;仅保留低,8,位,JNB TI,$,CLR TI,B,机接收:,REV:JNB RI,$,CLR RI,MOV A,SBUF,MOV R0,A,ADD A,R2,;,计算校验和,MOV R2,A,;接收校验和、比较、设置标志信息,JNB RI,$,CLR RI,MOV A,SBUF,CJNE A,02H,ERR,;,默认为,0,组,;,寄存器中的,R2,MOV A,#00H,SJMP MIX,ERR:MOV A,#0FFH,MIX:,思考:,1.R2,有何作用?,2.,与“奇偶校验法”相比“校验和”方法有何优点?,9.3,应用程序设计,联络的必要性及其实现,基本方法:,A,机,B,机:发“,AA”,,即,10101010B,B,机,A,机:发“,BB”,,即,10111011B,联络过程的实现,A,方:,CONTACT:,MOV SBUF,#0AAH,JNB TI,$,CLR TI,ACALL D5MS,JNB RI,CONTACT,CLR RI,MOV A,SBUF,CJNE A,#0BBH,CONTACT,;,联络成功,B,方:,CONTACT:,JNB RI,$,CLR RI,MOV A,SBUF,CJNE A,#0AAH,CONTACT,MOV SBUF,#0BBH,JNB TI,$,CLR TI,;,联络成功,Baudrate,9600bps,,发送一个字节(,10bits,)所需要的时间,1.04 ms,9.3,应用程序设计,双机通讯设计实例,任务要求:,将,A,机片内,RAM,中的,10,个数据发送给,B,机,两机中的数据存放地址相同,波特率为,9600bps(,系统,fosc,=12MHz),采用校验和方法检测数据的正确性,基本思想和方案设计,选,8,位,UART,方式,方式,1,,波特率可变,SCON=0101 0000B=50H,;,UART,方式,1,,允许接收,PCON=00H(SMOD=0),9.3,应用程序设计,确定,TMOD,,,TH1,,,TL1,T1,定时方式,2,:,TMOD,0010 0000B,20H,T1,的分频值,N,12000/9.6/12/32=3.255,取,N,3,则有,TL1,TH1,FDH,12000/9.6=1250,9.3,应用程序设计,3.,资源分配,R0,:数据块首地址,R1,:数据块长度,R2,:校验和低,8,位,4.,联络方法:,A,机发出“,AA”,,,B,机发出“,BB”,5.,状态信息,联络过程出错:,EEH,检验正确:,00H,检验错误:,FFH,9.3,应用程序设计,9.3,应用程序设计,双机通讯中的常见问题,1,、帧格式不统一,2,、波特率不统一,3,、实际波特率存在误差(单片机与,PC,机通信时需特别关注),例,4,:设,SMOD=1,,,Baudrate,9600bps,,,T1,的分频值为,6,,分别对应于,fosc,12MHz,和,11.0592MHz,求取实际波特率。,fosc,12MHz,:实际,Baudrate,12000/12/6/16=10417bps,fosc,11.0592MHz,:实际,Baudrate,11059.2/12/6/16=9600bps,9.3,应用程序设计,4,、,T1,定时计数器未正确设置,T1,多选用定时方式,2,T1,也可选为定时方式,1,,但必须在,T1,中断程序中对,T1,进行重新赋值。,T0,不可作为波特率发生器使用,52,系列中,T2,也可作为波特率发生器,优点:,T2,可工作于,16,位,Auto,reload Mode,可以支持更高的波特率。,此时:,T2,对,fOsC,的,2,分频信号计数,而不是,12,分频信号。,例 采用查询方式设计一个数据块接收程序。串口工作于方式,3,,定时器,1,用作波特率发生器,波特率为,2400,,数据块首址存放于寄存器,R0,,,其长度存放于,R7,。,程序如下:,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,例,采用中断方式设计一数据发送程序,设串口工作于方式,1,,定时器工作于方式,2,,主频为,6MHz,,,波特率为,2400,,数据长度(小于,255,)存放于,R7,,,数据块首址存放于直接地址,21H,和,20H,中,设发送数据为,ASCII,码,发送时在数据最高位加上奇偶校验位。,解:由方式,1,、,3,波特率发生公式,当取,SMOD=1,,,Fosc=6MHz,,,波特率为,2400,时,可计算得,TH1,的近似值为,243,(,F3H,)。,程序框图如图所示。,程序:,ORG 0000H,AJMPSTART,ORG 0023H,AJMPTXDI,;进入串行中断程序,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,:,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服