单片机第七章串行通信_第1页
单片机第七章串行通信_第2页
单片机第七章串行通信_第3页
单片机第七章串行通信_第4页
单片机第七章串行通信_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机第七章串行通信第1页,课件共67页,创作于2023年2月7.1串行通信的基本知识1、通信方式 1)并行通信各数据位同时传送,其传送速度快、效率高。但并行数据传送有多少数据位就需要多少根数据线,成本高,比较适合近距离通信。2)串行通信则是数据传送按位顺序进行,最少只需一根传输线即可,成本低、速度慢。计算机与远程终端或终端与终端之间的数据传送通常部是串行的。图7-1所示为两种通信方式示意图。第2页,课件共67页,创作于2023年2月(1)并行通信(2)串行通信第3页,课件共67页,创作于2023年2月 2、异步通信与同步通信方式

异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。

同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过这两种方法实现。

第4页,课件共67页,创作于2023年2月异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间是异步的(字符之间不一定有“位间隔”的整数倍的关系),但同一字符内的各位是同步的(各位之间的距离均为“位间隔”的整数倍)。第5页,课件共67页,创作于2023年2月异步传送的字符帧格式如图所示。一帧字符格式包括1位起始位、5~8位数据位、奇偶校验位和1位停止位。起始位为0,用于表示一个字符的开始。起始位之后传送数据位。在数据位中,低位在前(左),高位在后(右)。数据位可以是5、6、7或8位。奇偶校验位用于对字符传送作正确性检查。有3种可能供选择:奇校验、偶校验和无校验。由用户根据需要选定。停止位在最后,用以标志一个字符传送的结束,它对应于1状态。停止位可能是1、1.5或2位,在实际使用根据需要确定。异步传送可以是连续的,也可以是断续的,且间隔时间可任意改变,间隔用空闲位1填充。在89S51单片机系统中,第九位数据D8可以用作奇偶校验位,也可以用作地址/数据帧标志。第6页,课件共67页,创作于2023年2月图7-2串行异步通信字符帧格式异步通信有固定的字符帧,通信双方只需按约定的帧格式进行发送和接收数据,硬件结构比较简单。当平时不发送数据时,发送端应保持为1。数据接收端将不断检测接收的数据,若连续检测到1之后检测到0,则为新发送来的数据,应立即接收。在同步串行通信中,每一数据块开头时发送1至2个同步字符,使发送方与接收方保持同步。数据块的各个字符间去掉了起始位和停止位,其通信速度比较高,但其硬件结构也比较复杂。同步通信时,如果发送的数据块之间有间隔时间,则发送同步字符填充第7页,课件共67页,创作于2023年2月 2.数据传送方向

1、单工单工是指数据传输仅能沿一个方向,不能实现反向传输。2、半双工半双工是指数据传输可以沿两个方向,但需要分时进行。3、全双工全双工是指数据可以同时进行双向传输。

第8页,课件共67页,创作于2023年2月4、串行通信的传送速率比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:

10位×240个/秒=2400bps波特率表示每秒钟调制信号变化的次数,单位是:波特(Baud)。)。波特率和比特率不总是相同的,对于将数字信号1或0直接用两种不同电压表示的所谓基带传输,比特率和波特率是相同的。所以,我们也经常用波特率表示数据的传输速率。第9页,课件共67页,创作于2023年2月在串行通信中,数据位的发送和接收分别由发送时钟脉冲和接收时钟脉冲进行定时控制。时钟频率高,则波特率也高,通信速度就快;反之,时钟频率低,则波特率也低,通信速度就慢。第10页,课件共67页,创作于2023年2月7.2MCS-51单片机串行口的结构与工作原理 1、串行口的结构

MCS-51单片机内部的串行接口是全双工的,即它能同时发送和接收数据。发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入。串行口还有接收缓冲作用,即从接收寄存器中读出前一个已收到的字节之前就能开始接收第二字节。两个串行口数据缓冲器(实际上是两个寄存器)通过特殊功能寄存器SBUF来访问。写入SBUF的数据储存在发送缓冲器,用于串行发送;从SBUF读出的数据来自接收缓冲器。两个缓冲器共用一个地址99H(特殊功能寄存器SBUF的地址)。

第11页,课件共67页,创作于2023年2月

在串行口发送数据时,将CPU送来的并行数据转换成一定格式的串行数据,从引脚TXD(P3.1)上按规定的波特率逐位输出;接收数据时,外部信号通过引脚RXD(P3.0)输入,再将发送来的串行数据转换成并行数据,等待CPU读入。它的帧格式有8位、10位和11位,可以设置为固定波特率和可变波特率,给使用者带来很大的灵活性。在单片机中,主要适用异步传送方式

第12页,课件共67页,创作于2023年2月图7-3串行口结构框图第13页,课件共67页,创作于2023年2月

7.3串行口控制寄存器SCON和电源控制寄存器PCON 1、串行口控制寄存器SCON

串行口控制寄存器SCON决定串行口通信工作方式,控制数据的接收和发送,并标示串行口的工作状态等。其位格式为:第14页,课件共67页,创作于2023年2月(1)SM0、SM1:串行口工作方式控制位,两位对应四种工作方式,如表7-1所示(fosc是晶振频率)。第15页,课件共67页,创作于2023年2月(2)SM2——多机通信控制位因多机通信是在方式2和方式3下进行,因此SM2位主要用于方式2和方式3SM2=1RB8=1将接收到的前8位数据送SBUF,并置位RI产生中断请求;SM2=1RB8=0将接收到的前8位数据丢弃。SM2=0RB8=1都将前8位数据装入SBUF中,并产生中断请求。SM2=0RB8=0都将前8位数据装入SBUF中,并产生中断请求。当串行口以方式2或方式3接收时,如果SM2=1,则只有当接收到的第九位数据(RB8)为1,才将接收到的前8位数据送SBUF,并置位RI产生中断请求;否则,将接收到的前8位数据丢弃。而当SM2=0,则不论第九位数据为0还是1,都将前8位数据装入SBUF中,并产生中断请求。在方式1时,当处于接收时,若SM2=1,则只有收到有效的停止位时,RI才置1。在方式0时,SM2必须为0。第16页,课件共67页,创作于2023年2月(3)REN——允许串行口接收位REN=0,禁止串行口接收数据REN=1,允许串行口接收数据该位由软件置位或复位。(4)TB8——发送数据第9位在方式2和方式3时,TB8的内容是要发送的第9位数据。在双机通信时,TB8一般作为奇偶校验位使用;在多机通信中,以TB8位的状态表示主机发送的是地址帧还是数据帧,且一般约定:TB8=0为数据帧,TB8=1为地址帧。该位由软件置位或复位。(5)RB8——接收数据位8在方式2或方式3时,RB8存放接收到的第9位数据,代表着接收数据的某种特征(与TB8的功能类似),故应根据其状态对接收数据进行操作。第17页,课件共67页,创作于2023年2月6)TI——发送中断标志当方式0时,发送完第8位数据后,该位由硬件置位。在其它方式下,于发送停止位之前,该位由硬件置位。因此TI=1,表示帧发送结束。其状态既可供软件查询使用,也可请求中断。TI位须由软件清0。(7)RI—接收中断标志当方式0时,接收完第8位数据后,该位由硬件置位。在其它方式下,当接收到停止位时,该位由硬件置位。因此RI=1,表示帧接收结束。其状态既可供软件查询使用,也可以请求中断。RI须由软件清0。第18页,课件共67页,创作于2023年2月 2、电源控制寄存器PCON

电源控制寄存器PCON中只有一位SMOD与串行口工作有关,它的位格式为:

SMOD:波特率倍增位。串行口工作在方式1、方式2、方式3时,若SMOD=1,则波特率提高一倍;若SMOD=0,则波特率不提高一倍。单片机复位时,SMOD=0。第19页,课件共67页,创作于2023年2月 7.4串行口工作方式89S51/S52单片机中的异步通信串行接口能方便地与其他计算机或传送信息的外围设备(如串行打印机、CPU终端等)实现双机、多机通信。单片机的串行口共有4种工作方式。工作方式0移位寄存器方式,可以通过外接移位寄存器芯片实现扩展并行I/O接口的功能。工作方式1、工作方式2、工作方式3都是异步通信方式。工作方式1是8位异步通信接口。一帧信息由10位组成,用于双机串行通信。工作方式2、工作方式3都是9位异步通信接口、一帧信息中包括9位数据,1位起始位,1位停止位,工作方式2、工作方式3的区别在于波特率不同,主要用于多机通信,也可用于双机通信。

第20页,课件共67页,创作于2023年2月7.4.1工作方式0在方式0下,串行口是作为同步移位寄存器使用。主要用于扩展并行I/O口。波特率固定为fosc/12。这时数据由RXD(P3.0)端输入和输出,由TXD(P3.1)端提供移位时钟脉冲。移位数据的发送和接收以8位为一帧,低位在前高位在后,不设起始位和停止位。

1.数据发送与接收在使用方式0进行数据的发送时,CPU将一个字节写入发送缓冲器SBUF,TXD端输出同步时钟信号,串行口即以fosc/12的波特率将8位数据从RXD口输出(低位在前,高位在后),发送完后置位中断标志TI,在继续发送之前须由软件将中断标志位清0。第21页,课件共67页,创作于2023年2月在使用方式0进行数据的接收时,数据从RXD端输入,TXD端输出同步时钟信号,接收缓冲器以fosc/12的波特率接收数据,当接收缓冲器接收完8位数据后置位中断标志RI,在继续接收之前须由软件将中断标志位清0。REN位用于允许接收的控制,REN=0,禁止接收数据;REN=l,允许接收数据。在方式0下不使用串行口控制寄存器SCON中的TB8位和RB8位,即发送或接收数据的第9位,且SM2位必须为0。第22页,课件共67页,创作于2023年2月

方式0接收和发送电路第23页,课件共67页,创作于2023年2月波特率的计算在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。方式0时,移位操作的波特率是固定的,为fosc/12,即一个机器周期进行一次移位,发送或接收一位数据。如fosc=12MHz,则波特率为1M(bps),即1μs移位一次。方式0下波特率不受SMOD位的影响。第24页,课件共67页,创作于2023年2月7.4.2工作方式1方式l是10位为一帧的串行异步通信方式。共包括1个起始位,8个数据位和l个停止位。外部数据从引脚RXD输入,送入到接收缓冲器,需要发送的数据经过引脚TXD输出。第25页,课件共67页,创作于2023年2月方式1输出1.数据发送与接收方式l的数据发送将数据写入发送缓冲器SBUF,随后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移位脉冲的作用下,由TXD端串行输出。一个字符帧发送完后,将SCON寄存器的TI置l。在中断方式下将申请中断,通知CPU可以发送下一个字符帧。第26页,课件共67页,创作于2023年2月接收数据时,SCON的REN位应处于允许接收数据状态下。串行口采样引脚RXD端,当采样到从l到0的状态跳变时,就认定是接收到起始位。随后在移位脉冲的控制下,把接收到的数据位移入接收缓冲器SBUF中。直到停止位到来之后将停止位送入到RB8中,并置位中断标志位RI,在中断方式下将申请中断,通知CPU从接收缓冲器SBUF取走接收到的一个字符。不管中断方式还是查询方式,硬件都不会自动清除RI和TI中断标志,须由用户用软件清0。方式1输入第27页,课件共67页,创作于2023年2月 2、方式2的波特率 工作方式2时,移位脉冲由振荡频率fosc的第二节拍P2时钟(即fosc/2)给出,所以,方式2波特率取决于PCON中的SMOD位的值,当SMOD=0时,波特率为fosc的1/64;当SMOD=1时,波特率为fosc的1/32,用公式表示为;工作方式2波特率=(2SMOD/64)×fosc第28页,课件共67页,创作于2023年2月2.波特率方式l的波特率则是可变的,以定时器T1作为波特率发生器使用,其波特率值由定时器1的计数溢出率来决定,其公式为:串行口方式1的波特率=×定时器T1的溢出率其中SMOD为电源控制寄存器PCON的最高位,是串行口波特率的倍增位,当SMOD=1时,串行口波特率加倍。定时器T1的溢出率取决于计数速率和定时器的初值。计数速率与特殊功能寄存器TMOD中的C/位的状态有关。当C/=0时,T1作为定时器,计数速率=fosc/12,当C/=1时,T1作为计数器使用,计数速率取决于外部输入脉冲时钟频率。第29页,课件共67页,创作于2023年2月当定时器T1作波特率发生器使用时,通常选用工作方式2,即8位自动重加载方式,方便为定时器T1赋初值。在方式2下,TL1作为计数器使用,而预置初值放在TH1中,设计数初值为X,则每过(256-X)个机器周期,定时器T1就产生一次溢出。此时应禁止T1中断。则计数溢出周期为:

×(256一X)溢出率为溢出周期的倒数,则波特率为:波特率=×实际使用时,需要先确定波特率,再根据波特率计算定时器T1的计数初值,然后进行定时器的初始化。根据上述波特率计算公式,得出计数初值的计算公式为X=256-第30页,课件共67页,创作于2023年2月选择定时器T1工作在方式2下,是因为方式2具有自动重载入功能,可避免通过程序反复装入初值所引起的定时误差。使波特率更加稳定,也更方便。表7-5列出了在选择定时器T1作为波特率发生器使用时,各种常用的波特率以及相应的控制位和时间常数表7-5定时器T1的常用波特率C/波特率/bpsfosc/MHzSMOD定时器T1工作方式初值1920011.059102FDH960011.059002FDH480011.059002FAH240011.059002F4H120011.059002E8H60011.059002D0H30011.059002A0H15011.05900240H第31页,课件共67页,创作于2023年2月7.4.3工作方式2工作方式2是11位为一字符帧的串行异步通信方式,帧格式包括1个起始位、9个数据位和1个停止位。在方式2下,字符还是8个数据位。而第9数据位既可作奇偶校验位使用,也可作控制位使用。发送之前应先在串行口控制寄存器SCON的TB8位中准备好,其波特率与SMOD位有关。第32页,课件共67页,创作于2023年2月当将第9位数据写入TB8之后,向SBUF写入字符帧的8个数据位,启动串行口发送数据。一个字符帧发送完毕后,将TI位置1。方式2的接收过程与方式1基本类似,所不同的是在第9位数据上,串行口把接收到的8个数据送入SBUF,而把接收的第9数据送到RB8。根据SM2的状态和RB8的值确定串行口是否会置位中断标志位RI。第33页,课件共67页,创作于2023年2月如果SM2=0,则不论第九位数据为0还是1,都将前8位数据装入SBUF中,并产生中断请求。

如果SM2=1,且接收到的第九位数据RB8=1时,将接收到的前8位数据送SBUF,并置位RI产生中断请求。这表示在多机通信时,接收到的信息为地址帧,此时将RI置1,接收发来的地址帧。

如果SM2=1,且接收到的第九位数据RB8=0时,将接收到的前8位数据丢弃。这表示接收到的信息为数据帧,但不是发给本机的,此时RI不置1。

串行口工作在方式2和方式3时会在多机通信一节讲述。在工作方式2和工作方式3时的情况如下表7-6所示。SM2=1RB8=1将接收到的前8位数据送SBUF,并置位RI产生中断请求SM2=1RB8=0将接收到的前8位数据丢弃。SM2=0RB8=1都将前8位数据装入SBUF中,并置位RI产生中断请求。SM2=0RB8=0都将前8位数据装入SBUF中,并置位RI产生中断请求。第34页,课件共67页,创作于2023年2月2.波特率方式2的波特率是固定的,且有两种。这与电源控制寄存器PCON中波特率倍增位SMOD的值有关。当SMOD=1时,波特率为晶振频率的1/32;当SMOD=0时,波特率为晶振频率1/64。用公式表示为:波特率=×7.4.4工作方式3方式3同样是11位为一帧的串行通信方式,其通信过程与方式2完全相同,所不同的仅在于波特率。方式2的波特率只有固定的两种,而方式3的波特率则可由用户根据需要设定。其设定方法与方式l是一样的,即通过设置定时器T1的初值和波特率倍增位SMOD来设定波特率。第35页,课件共67页,创作于2023年2月7.5串行口应用举例【例7.1】设计一个发送程序,将片内RAM中50H~5FH中的数据串行发送,串行口设定为方式2状态,TB8作奇偶校验位。在数据写入发送缓冲器之前,先将数据的奇偶位P写入TB8,这时第9位数据作奇偶校验用。程序清单如下TRT:MOVSCON,#80H;方式2设定MOVPCON,#80H;取波特率为fosc/32MOVR0,#50HMOVR7,#10H;数据长度10HLOOP:MOVA,@R0;取数据送AMOVC,PSW.0;MOVTB8,CMOVSBUF,A;数据送SBUF,启动发送WAIT:JBCTI,CONT;判断发送中断标志SJMPWAITCONT:INCR0DJNZR7,LOOPRET第36页,课件共67页,创作于2023年2月【例7.2】设计一个接收程序,将接收的16个字节数据送入片内RAM中50H~5FH单元中。设串行口方式3状态工作,波特率为2400。定时器/计数器1作波特率发生器时,SMOD=0,计数常数为0F4H。程序清单如下:RVE:MOVTMOD,#20H;T1编程为方式2定时状态MOVTH1,#0F4H;计数常数送T1MOVT11,#0F4HSETBTR1;启动T1MOVR0,#50HMOVR7,#10H;数据长度lOH-R7MOVSCON,#0D0H;串行口编程方式3接收MOVPCON,#00H;置SMOD=0WAIT:JBCRI,PRI;等待接收到数据SJMPWAIT第37页,课件共67页,创作于2023年2月PRI:MOVA,SBUF;奇偶校验判P=RB8?JNBPSW.0,PNPJNBRB8,PERSJMPRIGHTPNP:JBRB8,PERRIGHT:MOV@R0,A;数据送缓冲器INCR0DJNZR7,WAIT;判断数据块接收完否?CLRPSW.5;正确接收完16个字节置标志位RET第38页,课件共67页,创作于2023年2月

串行通信实例

有两台8031单片机相距很近,直接将它们的串行口相连,1#机的TXD接2#机的RXD,2#机的TXD接1#机的RXD,二机的GND相连。二机的晶振频率均为11.0592MHZ,通信的波特率为4800bps。现将第一台8031单片机片内RAM40H~5FH单元内的数据,串行发送到第二台8031单片机片内RAM60H~7FH单元中。第39页,课件共67页,创作于2023年2月

发送与接收的参考程序如下:1#单片机发送程序:

ORG1000H TX:

MOVTMOD,#02H

MOVTH1,#0FAH

MOVTL1,#0FAH MOVSCON,#80H ;设定工作方式2

MOVPCON,#00H; 波特率为fosc/64

SETBTR0 第40页,课件共67页,创作于2023年2月

MOVR0,#40H ;设发送数据的地址指针

MOVR2,#20H ;设发送数据长度LOOP: MOVA,@R0 ;取发送数据送A

MOVC,PSW.0

MOVTB8,C ;奇偶位送TB8

MOVSBUF,A ;启动发送WAIT: JBCTI,LL1

;判发送中断标志

SJMPWAIT

第41页,课件共67页,创作于2023年2月LL1:

INCR0

DJNZR2,LOOP

RET2#单片机接收程序:

ORG1000HRX:

MOVTMOD,#02H

MOVTH1,#0FAH

MOVTL1,#0FAH

MOVSCON,#90H ;设定工作方式2,并允许接收第42页,课件共67页,创作于2023年2月

MOVPCON,#00H

SETBTR0

MOVR0,#60H

MOVR2,#20H

LOOP: JBCRI,MM1 ;等待接收数据

SJMPLOOP

MM1: MOVA,SBUF ;读入一帧数据

JBPSW.0,PP1 ;判接收端奇偶

JBRB8,ERROR ;判发送端奇偶

SJMPRIGHT

第43页,课件共67页,创作于2023年2月PP1:

JNBRB8,ERROR ;接收出错RIGHT: MOV@R0,A ;接收正确

INCR0

DJNZR2,LOOP

ERROR: SETBPSW.5 ;置出错标志

RET第44页,课件共67页,创作于2023年2月7.6多机通信单片机的多机通信是指一台主机和多台从机之间的通信,其连接如图7-12所示。89S51/S52单片机串行口方式2与方式3专门应用于多机通信。主机发送的信息可传送到各个从机或指定的从机,而各从机发送的信息只能被主机接收。各从机应当编址,以便主机能按地址寻找从机。多机通信主要靠主、从机之间正确地设置与判断多级通信控制位SM2和发送、接收到的第9位数据。多机通信时,主机向从机发送的信息分地址和数据两类。以第9数据位作区分标志,为0时表示数据,为1时表示地址。多机通信之前,需要给各个从机编址,以方便主机寻址。第45页,课件共67页,创作于2023年2月1、硬件连接单片机构成的多机系统常采用总线型主从式结构。所谓主从式,即在数个单片机中,有一个是主机,其余的是从机,从机要服从主机的调度、支配。80C31单片机的串行口方式2和方式3适于这种主从式的通信结构。当然采用不同的通信标准时,还需进行相应的电平转换,有时还要对信号进行光电隔离。在实际的多机应用系统中,常采用RS-485串行标准总线进行数据传输。第46页,课件共67页,创作于2023年2月通信开始,当主机欲与某个从机之间通信时,首先发送一个地址帧,主机发送时,通过设置TB8位的状态来表明发送的是地址还是数据,当TB8=1时,表示地址帧,当TB8=0时,表示数据帧。而在从机方面,为了接收信息,初始化时应把SCON的SM2位置l。由于SM2=1,此时接收到的第9数据位(即为主机发出的TB8)状态为1,即RB8=1,所以各从机都分别将数据送SBUF,并置位RI,发出中断请求,通过中断服务程序来判断主机发送的地址与本从机地址是否相符。若相符,则把该从机的SM2位清0,以准备接收其后传送来的数据。其余从机由于地址不符,则仍然保持SM2=1状态。此后主机发送数据帧,使TB8=0,虽然各从机都能接收到,但只有SM2=0的那个被寻址的从机才把数据送接收缓冲器SBUF。其余各从机皆因SM2=l和RB8=0,表示接收的信息为主机发给其他从机的数据,而将数据舍弃。这就是多机通信中主从机的通信情况。通信只能在主从机之间进行,如若进行两个从机之间的通信,需通过主机作中介才能实现。第47页,课件共67页,创作于2023年2月综上所述,把多机通信的过程总结如下:(1)全部主、从机均初始化为工作方式2或方式3,置位SM2=1,允许串行口中断。(2)主机置位TB8=1,发送要寻址的从机地址。(3)所有从机均接收主机发送的地址,并各自进入中断服务程序,进行地址比较。(4)被寻址的从机确认地址后,置本机SM2=0,并向主机返回地址供主机核对。如果地址不符合,该从机SM2位不变。(5)主机核对无误后,向被寻址的从机发送命令,通知从机是进行数据接收或者数据发送。(6)主从机之间进行数据通信。(7)通信结束后,主、从机重置SM2=1,再进行下一次多机通信。第48页,课件共67页,创作于2023年2月2、软件实现主机程序清单:设从机地址号存于40H单元,命令存于41H单元。

MAIN:MOVTMOD,#20H;T1方式2 MOVTH1,#0FDH;初始化波特率9600 MOVTL1,#0FDH MOVPCON,#00H SETBTR1 MOVSCON,#0F0H;串口方式3,多机,准备接收应答LOOP1:SETBTB8MOVSBUF,40H;发送预通信从机地址

JNBTI,$ CLRTIJNBRI,$;等待从机对联络应答

CLRRIMOVA,SBUF;接收应答,读至A XRLA,40H;判应答的地址是否正确

JZAD_OK第49页,课件共67页,创作于2023年2月

AD_ERR:MOVSBUF,#0FFH;应答错误,发命令FFHJNBTI,$CLRTISJMPLOOP1;返回重新发送联络信号

AD_OK:CLRTB8;应答正确

MOVSBUF,41H;发送命令字

JNBTI,$ CLRTIJNBRI,$ ;等待从机对命令应答

CLRRIMOVA,SBUF;接收应答,读至A XRLA,#80H;判断应答是否正确

JNZCO_OK SETBTB8SJMPAD_ERR;错误处理第50页,课件共67页,创作于2023年2月CO_OK:MOVA,SBUF;应答正确,判是发送还是接收命令

XRLA,#01H JZSE_DATA;从机准备好接收,可以发送

MOVA,SBUF XRLA,#02H JZRE_DATA;从机准备好发送,可以接收

LJMPSE_DATARE_DATA:MOVR6,#00H;清校验和接收16个字节数据

MOVR0,#30H MOVR7,#10H第51页,课件共67页,创作于2023年2月LOOP2:JNBRI,$CLRRIMOVA,SBUF MOV@R0,A INCR0 ADDA,R6 MOVR6,ADJNZR7,LOOP2JNBRI,$ CLRRIMOVA,SBUF;接收校验和并判断

XRLA,R6 JZXYOK;校验正确

MOVSBUF,#0FFH;校验错误

JNBTI,$ CLRTILJMPRE_DATA第52页,课件共67页,创作于2023年2月XYOK:MOVSBUF,#00H;校验和正确,发00HJNBTI,$ CLRTISETBTB8;置地址标志

LJMPRETENDSE_DATA:MOVR6,#00H;发送16个字节数据

MOVR0,#30H MOVR7,#10HLOOP3:MOVA,@R0 MOVSBUF,AJNBTI,$ CLRTIINCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP3第53页,课件共67页,创作于2023年2月

MOVA,R6 MOVSBUF,A;发校验和

JNBTI,$ CLRTIJNBRI,$ CLRRIMOVA,SBUF XRLA,#00H JZRET_END;从机接收正确

SJMPSE_DATA;从机接收不正确,重新发送

RET_END:RET第54页,课件共67页,创作于2023年2月从机程序清单:设本机号存于40H单元,41H单元存放“发送”命令,42H单元存放“接收”命令。

MAIN:MOVTMOD,#20H;初始化串行口

MOVTH1,#0FDH MOVTL1,#0FDHMOVPCON,#00H SETBTR1MOVSCON,#0F0HLOOP1:SETBEA;开中断

SETBES SETBRRDY;发送与接收准备就绪

SETBTRDY SJMPLOOP1第55页,课件共67页,创作于2023年2月SERVE:PUSHPSW;中断服务程序

PUSHACC CLRESCLRRI MOVA,SBUF XRLA,40H;判断是否本机地址

JZSER_OK LJMPENDI;非本机地址,继续监听SER_OK:CLRSM2;是本机地址,取消监听状态

MOVSBUF,40H;本机地址发回

JNBTI,$ CLRTIJNBRI,$ CLRRIJBRB8,ENDII;是复位命令,恢复监听

MOVA,SBUF;不是复位命令,判是“发送”还是“接收”

XRLA,41H JZSERISE;收到“发送”命令,发送处理

MOVA,SBUF XRLA,42H JZSERIRE;收到“接收”命令,接收处理

SJMPFFML;非法命令,转非法处理第56页,课件共67页,创作于2023年2月SERISE:JBTRDY,SEND;从机发送是否准备好

MOVSBUF,#00HSJMPWAIT01SEND:MOVSBUF,#02H;返回“发送准备好”

WAIT01:JNBTI,$ CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主机接收是否准备就绪

LCALLSE_DATA;发送数据

LJMPENDFFML:MOVSBUF,#80H;发非法命令,恢复监听

JNBTI,$ CLRTILJMPENDIISERIRE:JBRRDY,RECE;从机接收是否准备好

MOVSBUF,#00H SJMPWAIT02第57页,课件共67页,创作于2023年2月RECE:MOVSBUF,#01H;返回“接收准备好”WEIT02:JNBTI,$CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主机发送是否就绪

LCALLRE_DATA;接收数据

LJMPENDENDII:SETBSM2ENDI:SETBESEND:POPACC POPPSW RETI第58页,课件共67页,创作于2023年2月SE_DATA:CLRTRDY;发送数据块子程序

MOVR6,#00H MOVR0,#30HMOVR7,#10HLOOP2:MOVA,@R0 MOVSBUF,AJNBTI,$ CLRTIINCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP2;数据块发送完毕?

MOVA,R6 MOVSBUF,AJNBTI,$;发送校验和

CLRTIJNBRI,$ CLRRIMOVA,SBUF XRLA,#00H;判发送是否正确

JZSEND_OK SJMPSE_DATA;发送错误,重发第59页,课件共67页,创作于2023年2月SEND_OK:SETBSM2;发送正确,继续监听

SETBES RETRE_DATA:CLRRRDY;接收数据块子程序

MOVR6,#00HMOVR0,#30HMOVR7,#10H第60页,课件共67页,创作于2023年2月LOOP3:JNBRI,$ CLRRIMOVA,SBUFMOV@R0,A INCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP3;接收数据块完毕?

JNBRI,$;接收校验和

CLRRIMOVA,SBUF XRLA,R6;判断校验和是否正确

JZRECE_OK MOVSBUF,#0FFH;校验和错误,发FFHJNBTI,$ CLRTILJMPRE_DATA;重新接收第61页,课件共67页,创作于2023年2月RECE_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论