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

下载本文档

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

文档简介

第8章80C51单片机串行通信第8章80C51单片机串行通信8.1串行通信基础知识8.280C51串行口8.380C51串行口工作方式8.4串行通信数据传输速率8.5串行通信应用8.1串行通信基础知识通信:指计算机与外部设备或计算机与计算机之间的信息交换。在计算机系统中,CPU与外部通信的基本方式有两种:并行通信——数据的各位同时传送。串行通信——数据一位一位顺序传送。

基本通信方式示意图

8.1串行通信基础知识并行通信的特点:各数据位同时传送,传送速度快、效率高。但有多少数据位就需要有多少根数据线,因此传送成本高。在集成电路芯片的内部、同一插件板上各部件之间、同一机箱内各插件板之间等的数据传送都是并行的。并行数据传送的距离通常小于30米。串行通信的特点:数据传送按位顺序进行,最少只需一根传输线即可完成,成本低,但速度慢。计算机与远程终端或终端与终端之间的数据传送通常都是串行的。串行数据传送的距离可以从几米到几千公里。串行通信有同步通信和异步通信两种基本方式。

1.异步串行通信异步串行通信是以字符为单位的间歇传输形式。传送时按字符进行包装,为此,在数据位之外要增添起始位、奇偶校验位和停止位,构成一个通信帧。下图为异步通信的帧格式。8.1.1异步通信和同步通信几点说明:①在串行通信中,信息的两种状态分别以mark和space标志。其中mark译为标号,对应逻辑状态1,在发送器空闲时,数据线应保持在mark状态;space译为空格,对应逻辑状态0。②起始位。发送器通过发送起始位而开始一个字符的传输。起始位使数据线处于space状态。③数据位。起始位之后传送数据位。在数据位中,低位在前(左)高位在后(右)。由于字符编码方式的不同,数据位可以是5、6、7或8位等多种形式。④奇偶校验位。用于对字符传送作正确性检查,因此,奇偶校验位是可选择的,共有3种可能,即奇校验、偶校验和无校验,由用户根据需要选定。

所谓偶校验,即数据位和奇偶校验位中逻辑1的个数加起来必须是偶数(全0也视为偶数个1)。所谓奇校验,即数据位和奇偶校验位中逻辑1的个数加起来必须是奇数。⑤停止位。停止位在最后,用于标志一个字符传输的结束,对应于mark状态。停止位可能是1、1.5或2位,在实际应用中根据需要确定。⑥位时间。一个格式位的时间宽度。⑦帧(Frame)。从起始位开始到停止位结束的全部内容称为一帧。异步串行通信是一帧接一帧进行的,传输可以是连续的,也可以是断续(间歇)的。2.同步串行通信为提高传送速度,把数据传输按相等的时间间隔分块进行,在数据块的开始加一些特殊字符,作为发送和接收双方的同步标志。由于数据块的位数较多,为防止错位,在发送数据时一般同时给出时钟信号,以保持接收与发送的同步,这就是同步串行通信。同步串行通信的数据传送格式如下图所示:同步串行通信的数据格式有如下特点和要求:①只在数据块传输的开始使用同步字符串,作为发送和接收双方同步的标志,而在结束时不需要同步标志。②数据字符之间不允许有间隔,当线路空闲或没有数据可发时,可发送同步字符串。③数据块内各字符的格式必须相同。同步串行通信比异步串行通信的传送速度快,但同步串行通信要求收发双方在整个数据传输过程中始终保持同步,这将对硬件提出更高的要求,实现起来难度大一些;而异步串行通信只要求在每帧的短时间内保持同步即可,实现起来容易得多。所以同步串行通信适用于数据量大、对速度要求比较高的串行通信场合。1.单工形式单工(Simplex)形式的数据传输是单向的。通信双方中一方固定为发送端,另一方则固定为接收端。单工形式的串行通信只需要一条数据线,如下图所示。例如,计算机与打印机之间的串行通信。8.1.2串行通信线路形式2.全双工形式全双工(Fullduplex)形式的数据传输是双向的,可以同时发送和接收数据,因此,全双工形式的串行通信需要两条数据线。3.半双工形式半双工(Halfduplex)形式的数据传输也是双向的。但任何时刻只能由其中的一方发送数据,另一方接收数据。因此半双工形式既可以使用一条数据线,也可以使用两条数据线。近程串行通信单片机的数据信号在传输线上传送时,由于受到线间分布电容和噪声干扰等影响,将引起传输信号的幅度衰减和波形畸变,极易导致传输错误。加之导线越长电容越大,所以传输距离就受到一定的限制。由于近距离串行通信不改变数据位波形和频率,所以也称为基带传输方式。虽然基带方式实现起来既方便又经济,但只能用于近程通信。对于近距离的串行通信(例如一个房间内的计算机之间,距离不超过10m),传输中虽有波形畸变产生,但不会严重到影响使用,仍可使用TTL电平直接传输。近距离的串行通信并不复杂,只需将两端串行口直接连接就可进行串行数据通信,省去了接口的麻烦,见下图。远程通信对于远程通信(例如城市之间),不能使用基带传输方式,只能使用模拟信号形式进行,一般使用线。为了在线上进行串行数据传输,需要在发送端把数字信号转变为模拟信号再进行发送,这种把数字信号转变为模拟信号的过程称为调制。在接收端应把模拟信号再转变为数字信号,这一过程称为解调。远程通信多采用双工方式,即通信双方都应具有发送和接收功能。为此在通信线路的两端都设置调制器和解调器,并且把二者结合在一起称为调制解调器(Modem)。使用电话线作传输线的远程通信连接如下图所示。8.280C51串行口为了实现串行通信,需要有硬件电路以解决串行数据传输中的一系列协调问题,这些硬件就是串行接口电路或简称串行口。8.2.180C51串行口硬件结构通常把实现异步通信的串行口称为通用异步接收器/发送器UART(UniversalAsynchronousReceiver/Transmitter)。80C51的串行口,虽然是既能实现同步通信,又能实现异步通信的全双工串行口,但在单片机的串行数据通信中,最常用的是异步方式,因此,常把它写为UART。串行接口结构如下图所示。80C51串行口寄存器结构80C51单片机有两个独立的接收、发送缓冲器SBUF(属于特殊功能寄存器),一个用作发送,一个用作接收。发送缓冲器只能写入不能读出;接收缓冲器只能读出不能写入,两者共用一个字节地址(99H)。在发送时,CPU由一条写发送缓冲器的指令把数据(字符)写入串行口的发送缓冲器SBUF(发)中,然后从TXD端一位位地向外发送。与此同时,接收端RXD也可一位位地接收数据,直到收到一个完整的字符数据后通知CPU,再用一条指令把接收缓冲器SBUF(收)的内容读入累加器。可见,在整个串行收发过程中,CPU的操作时间很短,使得CPU还可以从事其他的各种操作(指工作在中断方式下),从而大大提高了CPU的效率。

80C51串行口通过控制寄存器、中断功能和波特率设置实现串行通信控制。串行口控制寄存器(SCON)-98HSM0、SM1——串行口工作方式选择位。其状态组合所对应的工作方式为:SM0SM1=00,工作方式0;SM0SM1=01,工作方式1;

SM0SM1=10,工作方式2;SM0SM1=11,工作方式3。8.2.2串行口控制机制

SM2——多机通信控制位。TB8——发送数据位8。RB8——接收数据位8。(这3位用于多机通信)因为多机通信是在方式2和方式3下进行的,因此SM2主要用于方式2和方式3。当串行口以方式2和方式3接收数据时,SM2=1,则只有在接收到的第9位数据(RB8)为1时才将接收到的前8位数据送入SBUF,并置位RI产生中断请求;否则将接收到的前8位数据丢弃。SM2=0,则不论第9位数据是0还是1,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。REN——允许接收位。REN=0;禁止接收;REN=1,允许接收。TI——串行发送中断请求标志。在数据发送过程中,当最后一个数据位被发送完成后,TI由硬件置位。RI——串行接收中断请求标志。在数据接收过程中,当采样到最后一个数据位有效时,RI由硬件置位。2.串行中断80C51有两个串行中断,即串行发送中断和串行接收中断。但这两个串行中断共享一个中断向量0023H。每当串行口发送或接收一个数据字节时,都产生中断请求。串行中断请求在芯片内部发生,因此不需要引脚。两个中断共享一个中断向量,就需要在中断服务程序中对中断源进行判断,以便进行不同的中断处理。对于串行中断控制共涉及3个寄存器,其中一个就是串行口控制寄存器SCON,用于存放串行中断请求标志。另外两个中断允许控制寄存器IE和中断优先级控制寄存器IP。8.380C51串行口工作方式80C51单片机的串行口共有4种工作方式,见下表。

SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可变10方式211位UARTfosc/64或fosc/3211方式311位UART可变8.3.1串行工作方式0串行工作方式0是把串行口作为同步移位寄存器使用,实现串行数据的输入/输出。移位数据的传输以8位为一组,低位在前、高位在后。利用串行工作方式0,加上“并入串出”或“串入并出”芯片的配合,80C51的串行口可实现数据的并行输入/输出。方式0实现数据并行输入/输出,“并入串出”芯片74LS165、

CD4014)用于把并行输入数据通过移位形成位串,传送给串行口;而“串入并出”芯片(74LS164、CD4094)则接收串行口的串行数据,通过移位形成8位并行数据输出。74LS164CLR为清0端,输出时CLR必须为1,否则74HC164Q0~Q7输出为0。

74HC165S/L端为移位/置入端,当S/L=0时,从Q0~Q7并行数据置入寄存器,当S/L=1时,允许从Q端移出数据。

串行接口工作方式0其波特率是固定的,为fosc(振荡频率)的1/12。1.方式0发送数据从RxD引脚串行输出,TxD引脚输出同步脉冲。当一个数据写入串行口发送缓冲器时,串行口将8位数据以fosc/12的固定波特率从RxD引脚输出,从低位到高位。发送后置中断标志TI为1,请求中断,在再次发送数据之前,必须用软件将TI清零。2.方式0接收在满足REN=1和RI=0的条件下,串行口处于方式0输入。此时,RxD为数据输入端,TXD为同步信号输出端,接收器也以fosc/12的波特率对RxD引脚输入的数据信息采样。当接收器接收完8位数据后,置中断标志RI=1为请求中断,在再次接收之前,必须用软件将RI清零。在方式0工作时,必须使SCON寄存器中的SM2位为“0”,这并不影响TB8位和RB8位。方式0发送或接收完数据后由硬件置位TI或RI,CPU在响应中断后要用软件清除TI或RI标志。

8.3.2串行工作方式1

串行工作方式1是10位为一帧的异步串行通信方式,帧格式包括1个起始位,8个数据位和1个停止位。这种工作方式是为双机通信而准备的。1.方式l发送由一条写发送寄存器(SBUF)的指令开始,随后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移位脉冲的作用下,由TXD端串行输出。一个字符帧发送完后,使TXD输出线维持在1状态下,并将SCON寄存器的TI位置1,通知CPU可以接着发送下一个字符。2.方式1接收

SCON的REN位应处于允许接收状态,即REN=1。在此前提下,串行口采样RXD端,当采样到从1到0的状态跳变时,就认为已接收到起始位。随后在移位脉冲的控制下,把接收到的数据位移入接收寄存器中。直到停止位到来之后置位中断标志位RI,通知CPU从SBUF取走接收到的一个字符。

8.3.3串行工作方式2和3串行工作方式2和3都是11位为一帧的串行通信方式,即1个起始位、9个数据位和1个停止位。这两种工作方式主要是为多机通信而准备的。

在这两种工作方式下,字符还是8个数据位,只不过增加了一个第9数据位(D8),它是一个可编程位,其功能由用户设定。在发送数据时,应予先在串行口控制寄存器SCON的TB8位中把第9个数据位的内容准备好。这两种工作方式的数据接收过程也与方式1基本类似,不同点仍在第9数据位上,串行口把接收到的前8个数据位移入SBUF,而把第9数据位送SCON的RB8。串行工作方式2和3是为多机通信而准备的。两者的工作过程相同,差别仅在于波特率的设置,方式2的波特率是固定的,而方式3的波特率可由用户根据需要设定,设定方法与方式1相同。

8.4串行通信数据传输速率传输速率的表示方法1.与传输速率有关的术语波特率:每秒钟事件发生的数目或信号变化的次数。单位:波特(B,Baud)比特率:每秒钟传送二进制的位数。单位:位/秒(bps)说明:(1)在一般的单片机串行通信中,事件和信号变化都反映在二进制位上,波特率与比特率的概念是一样的。(2)但在高速串行通信中,由于一个事件的编码往往不止1位,因此波特率与比特率就不一样了。例如事件按4位编码,如果数据传输的波特率是2400,则比特率就是96002.单片机中使用的波特率在单片机中使用波特率来表示串行通信的传送速率。波特率:每秒钟传送二进制的位数1波特=1位/秒(bps)注意:波特率和字符的传输速率不同例如:如果每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、8个数据位、1个停止位),这时的波特率为:

10位×240个/秒=2400bps波特率是串行通信的重要技术指标在串行通信中,波特率除表明数据传送速率外,还可以表示串行口中移位脉冲频率的高低。波特率高表明移位脉冲频率高,串行数据传输速度就快;反之,波特率低表明移位脉冲频率也低,串行数据传输速度就慢。在实际的串行通信中,应根据速度要求、线路质量以及设备情况等因素选定波特率。1.串行工作方式0的波特率串行工作方式0的波特率是固定的,其计算公式为:2.串行工作方式2的波特率串行工作方式2的波特率也是固定的,但有两个数值。其计算公式为:

SMOD=0时,波特率=,SMOD=1时,波特率=8.4.280C51单片机的波特率设置位序

B7

B6

B5B4B3B2B1B0位符号SMOD

///GF1GF0PDIDL电源控制寄存器PCON字节地址87H其中SMOD:串行口的波特率倍增位SMOD=0,波特率不加倍SMOD=1,串行口波特率加倍。系统复位时,SMOD=0。PCON不能位寻址。

3.串行工作方式1和方式3的波特率串行工作方式1和方式3的波特率不是固定的,可以根据需要设置。当串行口工作在方式1和方式3时,由80C51单片机的定时器T1作为波特率发生器(以定时器T1作波特率发生器是由系统决定的),为串行口提供移位脉冲。串行工作方式1和方式3的波特率计算公式为:当定时器T1作波特率发生器使用时,通常选用工作方式2(即8位自动重装载方式)。选择方式2可以避免通过程序反复装入定时初值所引起的定时误差,使波特率更加稳定定时器的溢出周期:定时器溢出一次所需要的时间。定时器的溢出率:单位时间定时器溢出的次数。溢出率等于溢出周期的倒数当定时器T1工作在方式2(即8位自动重装载方式),假定定时器T1的计数初值为X,则定时器T1的溢出周期为:溢出率为溢出周期的倒数,则定时器T1的溢出率为:实际使用中,波特率是已知的。因此需要根据波特率的计算公式求定时初值X。则波特率计算公式为:根据上述波特率计算公式,得出计数初值的计算公式为:用户只需要把定时初值设置到定时器1,就能得到所要求的波特率。思考题:定时器T1工作在方式2,串行口方式1波特率=1200bps,fosc=12MHZ,SMOD=0,则X=?如果T1预装的初值X=E6H,则实际得到的波特率为:误差怎么解决?其它条件不变,取fosc=11.0592MHZ,则X=?说明:(1)当串行口工作在方式1或方式3,且要求波特率按规范取1200、2400、4800、9600…时,若采用晶振12MHz和6MHz,按波特率计算公式算出的T1定时初值将不是一个整数,因此会产生波特率误差而影响串行通信的同步性能。解决的方法可以调整单片机的晶振频率fosc,通常采用为11.0592MHz的晶振,这样可使计算出的T1初值为整数。(2)实际使用时,可根据波特率的计算公式来计算T1的初值。为避免烦杂的初值计算,可以通过查常用波特率与定时器1的参数关系表。(3)串行口工作在方式1和方式3时,定时器1初始化程序的步骤:首先确定波特率再计算定时器1的计数初值然后进行定时器的初始化例题:单片机的晶振频率为11.0592MHZ,串行口工作在方式1,波特率为2400bps,计算定时器T1的计数初值,并写出初始化程序。(假设SMOD=0)解:定时器T1工作在方式2(8位自动重装载方式)初始化程序:MOVTMOD,#20HMOVTL1,#0F4HMOVTH1,#0F4HSETBEACLRESMOVPCON,#00HMOVSCON,#50HSETBTR180C51单片机的串行口共有4种工作方式,见下表。

SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可变10方式211位UARTfosc/64或fosc/3211方式311位UART可变【例题】用80C51单片机的串行口外接串入并出的芯片CD4094扩展并行输出口控制一组发光二极管,使发光二极管从左至右延时轮流点亮。(fosc=12MHZ)ORG0000HLJMPMAINORG2000HMAIN:MOVSCON,#00H MOVA,#80H CLRP1.0START:MOVSBUF,ALOOP:JNBTI,LOOP SETBP1.0 ACALLDELAY CLRTI RRA CLRP1.0 SJMPSTARTDELAY:MOVR7,#05HLOOP2:MOVR6,#0FFHLOOP1:DJNZR6,LOOP1 DJNZR7,LOOP2 RET END【思考题】用80C51单片机的串行口外接并入串出的芯片CD4014扩展并行输入口,输入一组开关的信息,开关K闭合时有效。ORG0000HLJMPMAINORG2000HMAIN:SETBP1.1START:JBP1.1,START SETBP1.0 MOVSCON,#10HCLRP1.0LOOP:JNBRI,LOOP CLRRI MOVA,SBUF

80C51

RXD

TXD

P1.0QB

CLK

P/S

P1.1K0K7

KCD401472H2006MHz110D0H20011.0592MHz600E8H20011.0592MHz1.2KF4H20011.0592MHz2.4KFAH20011.0592MHz4.8KFDH20011.0592MHz9.6KFDH20111.0592MHz19.2KFFH20112MHz62.5K串口方式1或3×××112MHz375K串口方式2××××12MHz1M串口方式0相应初值所选方式C/T定时器T1SMODFosc波特率常用波特率与定时器1的参数关系表8.5串行通信应用近程串行通信调制解调器的使用8.5.3双机通信1、问题的提出把甲机存放在内部RAM40H—4FH中的16个字节的数据块传送到乙机内部RAM40H—4FH中,如何实现?2、问题分析与解决

从上面的问题可以看出,这实际上是双机通信问题,由甲机发送,乙机接收。在进行双机通信之前,发送和接收双方要进行一些约定,明确一些技术问题。(1)数据通路采用何种形式,硬件电路如何连接?采用何种串行工作方式?约定:串行工作方式1双机异步通信接口电路若fosc=11.0592MHZ,取SMOD=0,根据波特率的计算公式也可以通过查表,确定X=F4H。可求得计数初值X为:(2)数据传送的波特率是多少?约定:2400bps(4)双方如何取得联络?约定:甲机向乙机发送一个E1作为联络信号,表示请求通信乙机收到E1信号后,回答一个E2作为应答信号,表示通信(3)如何检验数据传输的正确性?约定:采用累加和检验(代码和检验)累加和检验:发送方对所发送的数据块求和,并将“检验和”附加到数据块末尾,也发送给接收方。接收方接收数据时,也是先对数据块求和,将所得结果与发送方的“检验和”进行比较,若两者相同,表示传送正确,若不相同表示传送出了差错。(5)双方通信如何结束?约定:乙机如果接收的数据正确,向甲机发送00H信号,表示结束双方的通信。乙机如果接收的数据不正确,向甲机发送非00H信号,表示数据出错,要求甲机重新发送。3、编写程序在编写程序之前,要分别给出甲机和乙机的流程图,根据流程图编写甲机和乙机的通信程序。甲机通信流程图乙机通信流程图ASTART:CLREAMOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HMOVPCON,#00HSETBTR1MOVSCON,#50HALOOP1:MOVSBUF,#0E1HJNBTI,$

CLRTIJNBRI,$

CLRRIMOVA,SBUFXRLA,#0E2H

JNZALOOP1ALOOP3:MOVSBUF,@R0

MOVA,R6ADDA,@R0MOVR6,A

INCR0JNBTI,$CLRTIDJNZR7,ALOOP3

MOVSBUF,R6JNBTI,$CLRTIJNBRI,$

CLRRIMOVA,SBUFJNZALOOP2

RET甲机发送程序清单(采用查询方式)ALOOP2:MOVR0,#40H

MOVR7,#10HMOVR6,#00HBSTART:CLREAMOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HMOVPCON,#00HSETBTR1MOVSCON,#50HBLOOP1:JNBRI,$CLRRIMOVA,SBUFXRLA,#0E1H

JNZBLOOP1

MOVSBUF,#0E2H

JNBTI,$CLRTIBLOOP2:MOVR0,#40H

MOVR7,#10H

MOVR6,#00HBLOOP3:JNBRI,$CLRRIMOVA,SBUFMOV@R0,A

INCR0ADDA,R6

MOVR6,ADJNZR7,BLOOP3JNBRI,$CLRRIMOVA,SBUFXRLA,R6

JZEND1

MOVSBUF,#0FFH

JNBTI,$

CLRTIAJMPBLOOP2END1:MOVSBUF,#00HRET乙机接收程序清单(采用查询方式)8.5.4多机通信多机通信是指一台主机和多台从机之间的通信。通常单片机的多机通信采用主从式多机通信方式。在这种方式中,只有一台主机,有多台从机。主机发送的信息可以传到各个从机或指定的从机,各从机发送的信息只能被主机接收。主要问题:怎样识别地址?怎样维持主机与指定从机之间的通信?1.多机通信连接电路在串行方式2或方式3条件下,可实现一台主机和多台从机之间的通信,其连接电路如图所示。2.多机通信原理

多机通信时,主机向从机发送的信息分为地址帧和数据帧两类,以可编程第9位TB8作区分标志:TB8=0,表示数据;TB8=1,表示地址。多机通信充分利用了80C51串行控制寄存器SCON中的多机通信控制位SM2的特性。当SM2=1时,CPU接收的前8位数据是否送入SBUF取决于接收的第9位RB8的状态:若RB8=1,将接收到的前8位数据送入SBUF,并置位RI产生中断请求;若RB8=0,则接收到的前8位数据丢弃。即当从机SM2=1时,从机只能接收主机发送的地址帧(RB8=1),对数据帧(RB8=0)不予理睬。当从机SM2=0时,从机可接收主机发送的所有信息。

通信开始时,主机首先发送地址帧。由于各从机的SM2=1和RB8=1,所以各从机均能接收到地址帧,分别发出串行接收中断请求,通过串行中断服务程序来判断主机发送的地址与本从机地址是否相符。如果相符,则把自身的SM2清0,以准备接收随后传送来的数据帧。其余从机由于地址不符,则仍保持SM2=1状态,因而不能接收主机传送来的数据帧。这就是多机通信中主、从机一对一的通信情况。这种通信只能在主、从机之间进行,如果想在两个从机之间进行通信,则要通过主机作中介才能实现。3.多机通信过程(1)主、从机工作于方式2或方式3,主机置SM2=0,REN=1;从机置SM2=1,REN=1。(2)主机置位TB8=1,向从机发送寻址地址帧,各从机因满足接收条件(SM2=1,RB8=1),从而接收到主机发来的地址,并与本机地址进行比较。(3)地址一致的从机(被寻址机)将SM2清0,并向主机返回地址,供主机核对。地址不一致的从机(未被寻址机)保持SM2=1。(4)主机核对返回的地址,若与此前发出的地址一致则准备发送数据;若不一致则返回(2)重新发送地址帧。(5)主机向从机发送数据,此时主机的TB8=0,只有被选中的那台从机能接收到该数据。其他从机则舍弃该数据。(6)本次通信结束后,从机重新置SM2=1,等待下次通信。4.多机通信实现方法(1)有关通信协议的几条规定①从机地址为00H~FEH,即允许接255台从机。②“地址”FFH是对所有从机都起作用的一条控制命令,命令使被寻址从机恢复SM2=1的状态。

③假定主机发送的控制命令代码为:00H——主机发送从机接收命令;01H——从机发送主机接收命令;其它为非法命令。④从机状态字格式如下:

D7D6D5D4D3D2D1D0ERR00000TRDYRRDYERR=1,表示收到非法指令;

TRDY=1,表示发送准备就绪;

RRDY=1,表示接收准备就绪。(2)软件设计

主机和从机程序都以子程序形式出现,所不同的是在这里设从机采用中断的方式。在调用主机子程序之前,应先准备好R0、R1、R2、R3和R4中的参数。主机中寄存器的分配:R0:主机接收数据块首址;R1:主机发送数据块首址;R2:被寻址的从机地址;R3:主机发出的指令;R4:数据块长度。主机串行口设为方式3,允许接收,并置TB8为1,故控制字为11011000B=D8H。

从机采用中断的方式,即接收到地址帧后就进行串行口中断申请。CPU响应后,进入中断服务程序。从机串行口的初始化、定时器初始化和中断初始化等都在从机主程序中完成。从机串行口中断服务参考程序中SLAVE为本机地址,并用F0和PSW.1作为本从机发送和接收准备就绪的状态位。即:F0中为1表示从机发送准备就绪,PSW.1=1为本机已准备好接收。

从机中寄存器的分配:R0:存放发送数据块始址R1:存放接收数据块始址R2:存放发送数据块长度R3:存放接收数据块长度MOVSCON,#OD8H;串行口初始化MSIO1:MOVA,R2MOVSBUF,A;启动发送,发送从机地址JNBRI,$;等待从机回答CLRRI;从机回答后清RIMOVA,SBUF;取从机地址XRLA,R2;核对地址JZMSIO3;相符转MSI03MSIO2:MOVSBUF,#OFFH;准备重发地址SETBTB8;设地址帧标志SJMPMSIO1;重发地址MSIO3:CLRTB8;准备发送指令MOVSBUF,R3;发出指令JNBRI,$;等待从机回答CLRRI;从机回答后清RIMOVA,SBUF;取应答信息JNBACC.7,MSIO4;核对指令接收是否出错SJMPMSIO2;指令出错,重发主机程序

MSIO4:CJNER3,#00H,MSIO5;若为发送指令,则转发送程序段JNBACC.0,MSIO2;从机未准备好接收,重新联络STX:MOVSBUF,@R1;从机准备好,开始发送JNBTI,$;等待发送结束CLRTI;清TI,准备发送下一帧数据INCR1;修改指针DJNZR4,STX;未完,继续RET;发送完,返回MSIO5:JNBACC.1,MSIO2;从机未准备好发送,重新联络SRX:JNBRI,$;等待接收完毕CLRRI;清RI,为下次接收准备MOVA,SBUF;取出收到的数据MOV@R0,A;存入数据INCR0;修改指针DJNZR4,SRX;未完,继续RET;接收完毕,返回主机程序

ORG1000HSTART:MOVTMOD,#20H;定时器T1为方式2 MOVTH1,#0F4H ;波特率为1200bps MOVTL1,#0F4H

温馨提示

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

评论

0/150

提交评论