已阅读5页,还剩94页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章单片机的内部功能,5.1定时/计数器,5.1.1概述定时/计数器简称定时器,8051单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。,定时器对内部时钟的计数或对外部事件的计数都不占用CPU时间。每个定时/计数器都有四种工作模式。,5.1.2定时/计数器的控制字,1.工作模式寄存器TMOD(89H),(1)操作模式控制位M0和M1两位操作模式控制位形成4种编码,对应于4种工作模式,具体见P107的表51。在模式0、1和2,T0和T1的工作模式相同,在模式3,两个定时器的模式不同。(2)方式选择位C/T=0时,为定时方式,计数脉冲来自于单片机内部的脉冲,对机器周期计数。=1时,为计数方法,计数器的输入来自外部脉冲,分别从引脚T0和T1输入。,(3)门控位GATE=0时,只要用指令使控制寄存器的TR0(TR1)置1就启动了定时器,而与/INT0(/INT1)无关。=1时,只有在/INT0(/INT1)为高电平且TR0(TR1)为1的情况下,才能启动定时器的工作。,2.定时器控制寄存器TCON(88H),各位的意义见P108.,5.1.3定时/计数器的4种工作模式,1模式0(具体说明见P109),2模式1(具体说明见P109),3模式2(具体说明见P110),4模式3(具体说明见P111),(1)T0在工作模式3下的情况此时,T0被分为两个独立的8位计数器TL0和TH0.其中,TL0除了只有8位寄存器外,其功能与操作方式与模式0、1下完全相同。而TH0只能作为内部定时功能,并占用了定时器T1的控制位TR1和T1的溢出标志位TF1。并且其启动与关闭也只受TR1的控制,见图。问题:它自己的控制位TR0和溢出标志位TF0哪去了?,(2)T1在工作模式3下的情况若将T1设置为模式3,则T1立即停止计数,因此,事实上T1没有工作模式3。但当T0工作于模式3时,T1仍可工作于模式0、1与2。不过由于TR1与TF1被T0占用,因此,此时,T1无法产生溢出中断请求,也无法受TR1的控制,只能作为波特率发生器或分频电路等使用。见P111的图58。,5.1.4定时/计数器应用中的一些基本计算,1.初值的计算(1)计数器初值:设计数模值为M,计数初值设定为X,计数器计满为零所需的计数值为C,则:X=M-C(M=213,216,28)(2)定时器初值:t=(M-X)*T机器=(M-X)*T振荡*12由此算出X。,2.几种工作方式的最大定时时间计算当初值X=0时,定时时间为最大,设FOSC(F振荡)=12MHZ,则TOSC(T振荡)=1/12us,几种工作方式下的最大定时时间为:方式0:tMAX=8.192MS方式1:tMAX=65.536MS方式2、3:tMAX=0.256MS,例:FOSC=12MHZ,试计算定时时间2ms所需的定时器的初值.分析:方式2、方式3下tMAX=0.256MS,所以必须将工作方式设在方式0或方式1:方式0:X=213-2MS/1uS=6192=1830HTL0=10H,TH0=0C1H(X=1100000110000B,其中高8位送TH0,低5位送TL0)方式1:X=216-2MS/1uS=63536=0F830HTL0=30H,TH0=0F8H,5.2中断系统,MCS-51中断系统概述:5个中断源,具有二个中断优先级,可实现二级中断服务程序的嵌套。每个中断源均可软件编程为高优先级或低优先级中断,允许或禁止向CPU请求中断。有关的特殊功能寄存器(SFR)有:中断允许寄存器IE中断优先级控制寄存器IP中断源寄存器(TCON、SCON中的有关位)注:均可位寻址。,5.2.1MCS-51中断系统的组成与中断源1.中断系统组成:51单片机的中断系统由中断源、中断控制电路和中断入口地址电路等组成。,2.中断源与中断入口地址8051单片机中断系统有如下2类5个中断源:(1)外部中断源2个/INT0:外部中断源0,通过P3.2引脚进入,低电平或下降沿有效。/INT1:外部中断源1,通过P3.3引脚进入,低电平或下降沿有效。以上两个中断源的中断标志和触发方式控制位锁存在TCON的低四位。见P116,(2)内部中断源3个T0:定时/计数器0中断,由T0回零溢出引起。T1:定时/计数器1中断,由T1回零溢出引起。TI/RI:串行I/O中断,完成一帧字符发送/接收引起。当某中断源提出的中断申请被CPU响应后,CPU就自动将断点地址压入堆栈保护,然后将该中断源的中断入口地址装入PC,中断服务程序就从此地址开始执行。注意:各个中断源的中断入口地址均已由系统规定,不能改动。见P116的表5-2或P21的表2-3。,5.2.2中断控制51中断系统的中断控制涉及到4个专用寄存器,功能如下:1.中断请求标志(1).TCON中的中断标志位4个中断请求标志位,分别是:TF1,TF0,IE1,IE0见教材P1162个中断触发方式控制位,分别是:IT1,IT0(=0代表电平触发,=1边沿触发)见教材P116,(2).SCON中的中断标志位SCON为串行口控制寄存器,其低2位用来锁存串行口的接收中断和发送中断标志RI和TI.其意义见P117,2.中断允许控制寄存器IEIE在特殊功能寄存器中,字节地址A8H,位地址分别是A8HAFH。IE控制CPU对中断源总的开放或禁止以及每个中断源是否允许中断。其格式如图所示。,3.中断优先级控制寄存器IP概述:51系列单片机的中断系统分为两级:高优先级和低优先级;每个中断源都可通过编程设置为高优先级或低优先级;中断优先级由寄存器IP来控制。IP在特殊功能寄存器中,字节地址为B8H,位地址分别是B8HBFH,IP用来锁存各中断源优先级的控制位,其格式如图所示。,IP管理优先级的原则是:(1)优先级控制位为1,则相应的中断就是高优先级,否则就是低优先级。(2)当同时接收到几个同一优先级的中断请求时,其优先级的顺序为:,通过IP的控制,可以实现如下功能:(1)实现中断优先级排队,即可以根据中断的紧急程序,确定一个合适的中断服务顺序;(2)实现中断嵌套。,5.2.3中断的处理过程中断的处理过程可以分为:中断响应、中断处理与中断返回三个阶段。,1.中断响应单片机在每个机器周期的S5P2期间,顺序采样每个中断源,CPU在下一个机器周期的S6期间按优先级顺序查询中断标志,若查询到某个中断标志位为1如果不被下述条件所阻止,则将在下一个机器周期的S1(状态1)期间按优先级进行中断处理。阻止条件:1)CPU正在处理相同或更高级的中断请求;2)现在的机器周期不是执行指令的最后一个机器周期;3)正在执行的指令是RETI或对IE、IP的写操作指令。(执行这些指令后,至少再执行一条指令后才会响应中断),中断得到响应后:先置相应的优先级激活触发器以封锁同级和低级中断,自动清除中断标志,由硬件将程序计数器PC内容压入堆栈保护,然后将对应的中断矢量装入程序计数器PC,使程序转向中断矢量地址单元中去执行相应的中断服务程序。注意:对于电平触发的外部中断源(/INT0、/INT1),要求在中断返回前撤消中断请求(使引脚上的电平变为高电平),以免中断返回后又再次响应该中断而出错!,2.中断处理从中断服务程序的第一条指令开始到中断返回指令为止,这个过程称为中断处理或中断服务。包括两部分内容:(1)保护现场;包括PSW、工作寄存器与专用寄存器等(2)具体中断服务。编写中断服务程序的注意事项见P120.,3.中断返回中断服务程序最后执行中断返回指令RETI,标志中断响应的结束,主要有两个作用:(1)恢复断点;(2)复位内部与中断优先级有关的触发器,以便CPU可以响应其他中断。4.关于中断请求的撤消的一些问题见P120,5.2.4中断的使用方法对中断的管理和控制一般在主程序的初始化部分,主要涉及的内容有:CPU的开中断与关中断;中断请求的允许与禁止;中断优先级的设定;外部中断的触发方式等。,一个完整的有关中断使用方法的例子:设某8051应用系统中使用了两个中断源,一个为外部中断/INT0,下降沿触发,优先级为低,中断处理程序中要用到ACC、PSW、DPTR;另一个为定时中断0,优先级为低,每2ms引起一次中断,中断处理程序中要用到ACC、PSW。要求编写相关的程序。(设FOSC=12MHZ),分析:(1)本单片机系统的程序主要包含主程序与中断服务程序两大部分;(2)对中断进行管理与控制的初始化程序可以直接放在主程序的前部,也可以以子程序的形式由主程序调用来实现初始化。(3)中断初始化程序主要涉及到前面阐述的开关中断、中断屏蔽与允许、优先权设定、中断触发方式外,还包括中断入口源程序的处理等。本例题的一种程序设计方式如下:,;-主程序部分-;一:复位入口与中断入口源程序ORG0000HLJMPBOOTORG0003H;0003H为/INT0的中断服务LJMPIE0_0;程序入口地址ORG000BH;000BH为T0的中断服务LJMPTF0_0;程序入口地址,ORG00013H;0013H为/INT1的中断服务RETI;程序入口地址,无相应的;中断服务程序,所以立即;返回。ORG0001BH;001BH为T1的中断服务RETI;程序入口地址,道理同上。ORG00023H;0023H为TI/RI的中断服务RETI;程序入口地址,道理同上。,;二:公用初始化程序BOOT:MOVSP,#40H;定位堆栈位置CLREA;关闭总中断;三:/INT0的中断初始化程序SETBIT0;设置/INT0为下降沿触发SETBEX0;允许/INT0中断请求CLRPX0;设置/INT0为低优先级;四:T0的定时初始化程序与中断初始化程序MOVTMOD,#01H;设置T0为模式1MOVTL0,#30H;设置T0的初值MOVTH0,#0F8H;见前面的例题;注意:由于还没有设置TR0,所以定时还未启动。,SETBET0;允许T0中断,由IE寄存;器控制SETBPT0;设置T0为高优先级中;断,由IP寄存器控制。SETBEA;打开总中断SETBTR0;启动定时器T0;五:主程序的主体部分MAIN:.LJMPMAIN,;-中断服务程序部分-;一:/INT0中断服务程序IE0_0:PUSHACC;保护现场PUSHPSWPUSHDPLPUSHDPHPOPDPH;恢复现场POPDPLPOPPSWPOPACCRETI;中断返回,;二:T0中断服务程序TF0_0:PUSHACC;保护现场PUSHPSWMOVTL0,#30H;重装T0的初值MOVTH0,#0F8HPOPPSW;恢复现场POPACCRETI;-结束整个程序-END,5.2.5定时/计数器与中断的编程与应用,1.模式0的应用设单片机的Fosc=12MHZ,现要求在P1.0引脚上输出周期为2ms的方波,编写相关程序。总体分析:要在P1.0引脚上输出周期为2ms的方波,则每隔1ms就要使P1.0引脚上的电平反转一次,问题的关键就变成定时1ms的问题,可采用定时中断的方式实现题目要求。(1)选择定时器工作模式由于Fosc=12MHZ,从以前的分析可知,模式0与1均能满足要求。我们这里取模式0,定时器采用T0。,因此,TMOD=00H其中:TMOD.1TMOD.0(M1M0)=00TMOD.2C/T=0,T0作定时器TMOD.3GATE=0,计数不受/INT0控制TMOD.4TMOD.7不用,现取0000(2)计算T0定时1ms的初值设T0的初值为X则:(213-X)*1us=1ms,可以算出:X=213-1ms/1us=81921000=7192=1C19H(1C19H=1110000011001B)所以:TH0=11100000B=E0H,TL0=11001B=19H,(3)程序如下:;一:主程序ORG0000HLJMPMAINORG0600HMAIN:MOVSP,#40HCLREAMOVTMOD,#00HMOVTH0,#0E0HMOVTL0,#19HSETBET0;T0中断允许SETBEASETBTR0;启动T0的定时HERE:SJMPHERE;等待中断,;二:中断服务子程序ORG000BHLJMPCTC0ORG0800HCTC0:MOVTH0,#0E0H;重装初值MOVTL0,#18HCPLP1.0;P1.0取反以输出方波RETIEND,2.模式1的应用模式1的应用与模式0的基本相同,只是最大定时时间长了32倍。例题:设单片机的Fosc=12MHZ,现要求利用定时器1控制定时在P1.0引脚上输出50HZ的方波,编写相关程序。分析:由于方波的周期=1/50HZ=20ms,故P1.0引脚的电平必须每10ms反转一次,T1的定时时间为10ms,只能采用模式1。TMOD=10H初值为:X=21610ms/1us=55536=D8F0HTH1=D8H,TL1=F0H,;如不采用中断方式,程序如下:MOVTMOD,#10HSETBTR1LOOP:MOVTH1,#0D8HMOVTL1,#0F0HJNBTF1,$;查询T1是否产生溢;出,没有则等待CLRTF1;若溢出,则清TF1标;志(在中断模式下,;则会自动清除)CPLP1.0;取反以输出方波SJMPLOOP,3.模式2的应用例题:要求用T1的模式2对外部信号计数,每计满100次将P1.0取反。分析:可采用每计满100次的溢出信号TF1申请中断,在中断服务程序中将P1.0引脚取反。(1)工作模式寄存器设定:(TMOD.5TMOD.4)M1M0=10(TMOD.6)C/T=1(TMOD.7)=0;不受/INT1控制TMOD.3TMOD.0不用,可取0000所以:TMOD=01100000B=60H,(2)计数初值设定:X=28100=156=9CH所以,TH1=9CH,TL1=9CH,(3)程序如下:MAIN:MOVTMOD,#60HMOVTH1,#9CHMOVTL1,#9CHMOVIE,#88H;相当于SETBET1;SETBEASETBTR1;启动T1计数HERE:SJMPHEREORG001BH;T1的中断服务程序入口CPLP1.0RETI;由于这个中断服务程序不超过8个字节,所以可以不转移;到其他地方!,4.模式3的应用例题:要求使T0工作于模式3,TL0和TH0作为两个独立的8位定时器分别产生200us和400us的定时中断,使P1.0和P1.1分别输出周期为400us与800us的方波。设单片机的Fosc=6MHZ。编写相关程序。分析:(1)设定TMOD.显然:TMOD=00000011B=03H(2)设定初始值对于TL0,要求定时时间为200us,而T机器=1/6M*12=2us所以:X=256200us/2us=156=9CH对于TH0,要求定时时间为400usX=256400us/2us=56=38H所以:TL0=9CH,TH0=38H,(3)程序如下:ORG0000HLJMPMAIN;-TL0的中断服务程序,由于程序小于8字节,直接放这里-ORG000BH;TL0的中断服务程序入口MOVTL0,#9CH;重装初值CPLP1.0;P1.0取反RETI;-TH0的中断服务程序,由于程序小于8字节,直接放这里-ORG001BH;TH0的中断服务程序入口;即T1的中断服务程序入口MOVTH0,#38H;重装初值CPLP1.01;P1.1取反RETI,ORG0100H;主程序从这里开始MAIN:MOVSP,#50HCLREA;关闭总中断MOVTMOD,#03HMOVTL0,#9CHMOVTH0,#38HSETBET0;允许TF0中断SETBET1;允许TF1中断SETBEA;打开总中断SETBTR0;启动TL0的定时SETBTR1;启动TH0的定时AJMP$;在这里等待中断;-END,补充:软件看门狗。见P100,一、看门狗的作用二、软件看门狗的基本思路:(1)将某个定时器作为看门狗,设定一个定时时间,要求被监控的程序的运行时间小于这个设置值。定时器被设置为高优先级中断。(2)在被监控的程序中设置kickdog程序或叫喂狗程序,也就是重新设定定时初值。这样,如果被监控程序运行正常,则定时器永远不会溢出引起中断(即狗不会叫)(3)如果被监控的程序出错,无法按时喂狗,则定时器溢出(狗叫),引起中断,使系统重新开始工作。,三、看门狗程序实例假定用T0作为看门狗,定时时间16ms。ORG0000HLJMPMAINORG000BHLJMPTOPMAIN:MOVSP,#60HMOVPSW,#00HMOVIE,#00HMOVIP,#00H/以上这些语句是模拟硬件复位的情况,MOVTMOD,#01HSETBET0SETBPT0SETBEALOOP:LCALLKICKDOG./这里放被监控的应用程序LJMPLOOPKICKDOG:MOVTH0,#0B1HMOVTL0,#0E0HSETBTR0RET,TOP:POPACCPOPACCCLRAPUSHACCPUSHACCRETI,5.3串行通信,5.3.1MCS-51单片机串行口的结构与控制1.串行口的电路结构与通信过程(1)电路结构如P124的图519所示,主要由接收/发送缓冲寄存器SBUF、接收/发送控制器、串行口控制寄存器SCON、波特率发生器以及串行数据输入(RXD)/输出(TXD)引脚等组成。(2)通信过程见P124的叙述。,2.串行口的控制串行口的控制与管理包括:工作方式选择、中断标志设定、可编程位的设定、波特率的选择等。通过SBUF、SCON、PCON等SFR来实施。(1)串行口发送/接收缓冲寄存器SBUF该寄存器地址为99H,不可位寻址,其实质为两个寄存器(共用一个地址)。一个作为发送缓冲寄存器(只可写),一个作为接收缓冲寄存器(只可读)。另外,SBUF只能与累加器A进行数据传送。,(2)串行口控制寄存器SCON该寄存器的字节地址为98H,可位寻址。SCON格式如图所示。,其各位的含义如下:,SM0、SM1工作方式选择位,共有4中工作方式,SM2多机通信控制位。详细说明后面再讲REN允许接收位,=1时允许,=0时禁止。TB8多机通信中的发送特征位,若=0,代表发送的是数据帧;若=1,代表发送的是地址帧。RB8多机通信中的接收特征位,若=0,代表接收的是数据帧;若=1,代表接收的是地址帧。TI发送中断标志位。=1表示帧发送结束,并请求中断。但具体的置位时机随工作方式不同而变化。在方式0下,发送完8位即由硬件将TI位置1;在其他方式下,发送停止位即由硬件将TI位置1。RI接收中断标志位。=1表示帧接收终了,并请求中断。在方式0下,接收完8位即由硬件将RI位置1;在其他方式下,接收到停止时位即由硬件将RI位置1。TI、RI都可以供查询,由指令清零。,(3)电源和波特率控制寄存器PCON该寄存器的地址为87H,不可位寻址。PCON格式如图所示。其中只有最高位(D7)SMOD与串行通信有关。SMOD=1时,波特率加倍。,5.3.2串行口的工作方式和波特率,1.串行口的工作方式和多机通信方式概述:由串行口控制寄存器中的SM0和SM1决定串行口的工作方式,而SM2决定多机通信方式。(1)方式0SM0SM1=00特点:实质为同步移位寄存器方式;波特率固定为:fosc/12;每帧为8位数据,没有起始位和停止位;传输时,低位在前,高位在后。数据的输入与输出都从引脚RXD进行,引脚TXD用于输出同步移位脉冲。工作过程与帧格式见:P126.,(2)方式1SM0SM1=01特点:为10位通用异步通信方式;波特率可变,由定时器T1的溢出决定;每帧为10位信息,1位起始位(“低电平0”)、1位停止位(“高电平1”)和8位数据位;传输时,低位在前,高位在后。工作过程与帧格式见:P126、P127.,(3)方式2SM0SM1=10特点:为11位通用异步通信方式;波特率固定,为fosc/32或fosc/64,具体由PCON寄存器的SMOD位决定;当SMOD=0时,为fosc/64,当SMOD=1时,为fosc/32。每帧为11位信息,1位起始位(“0”)、1位停止位(“1”)和9位数据位;其中第9位数据位是可编程位(TB8/RB8)。传输时,低位在前,高位在后。工作过程与帧格式见:127.,(4)方式3SM0SM1=11特点:与方式2基本相同,区别在于:方式3下的波特率是可变的,由定时器T1的溢出决定。,(5)多机通信方式一:多机通信原理串行口控制寄存器SCON中的SM2为多机通信接口控制位。串行口以方式2或3接收时:若SM2为1,则仅当接收到的第9位数据RB8为1时,数据才装入SBUF,置位RI,请求CPU对数据进行处理;当SM2为0时,则接收到一个数据后,不管第9位数据RB2是0还是1,都将数据装入接收缓冲器SBUF并置位中断标志RI,请求CPU处理。利用这一特点,可以实现主机与多个从机之间进行串行通信。多机通信的电路如下图所示。,二:多机通信过程见P128首先将所有从机设置为方式2或3且SM2置为1,使它们处于多机通信状态。当主机要和某一从机通信时,先发送一帧地址信息(其中8位为地址,第9位为1),显然因为SM2=1,且RB1=1,所以所有从机都会接收这一地址帧;并且RI置1请求中断;在中断处理时,将接收到的地址与自己的地址比较,若从机的地址与主机呼叫的地址不符,则维持该从机的SM2=1,使该从机只能接收主机的地址帧;若相符,则将该从机的SM2清零。然后,主机开始发送数据帧(第9位TB8=0),已选中的从机会接收这些数据(因为SM2=0)。而对于,未选中的从机而言,因为自己的SM2=1且接收的RB8=0(因为主机发送的TB8=0),说明现在传送的是数据帧,所以丢掉。在通信完成后,被选中的从机置SM2=1,恢复原来状态。,2.串行通信中的波特率(1)对于方式0,固定为:波特率fosc/12;(2)对于方式2,波特率2SMOCfosc/64;,(3)对于方式1与方式3波特率(2SMOC/32)T1溢出频率;那么T1的溢出频率是多少呢?显然是T1的定时时间的倒数。在MCS51的串行通信中,自动选择T1工作于方式2(8位自动重装初值),假定:初值为x,单片机的晶振为fosc,则:T1的定时时间为:T1=(256-x)12/fosc;所以:T1的溢出频率为:fosc/(12(256-x)所以串行通信方式1、3下:波特率(2SMOC/32)fosc/(12(256-x)2SMOCfosc/384(256-x),5.3.3串行口的应用,1.串行口扩展并行口(方式0的应用)概述:利用51单片机串行口的工作方式0可以将其串口扩展为并行I/O口。这种方法连线简单、扩展数量灵活。(1)扩展成并行输出口。电路见教材P129的图521关键技术:7段LED显示原理;见图7474LS164原理。见图,hgfedcba01.9请计算共阳下09的显示代码!,要求将RAM中20H开始的2个单元的数据由串行口输出显示。,参考程序:MOVR7,#2MOVR0,#20HMOVSCON,#00HDISP0:MOVA,R0;取要显示的数据,1个;单元放1位数据(09)MOVDPTR,#TAB;取代码表首地址MOVCA,A+DPTR;查表获取代码MOVSBUF,AJNBTI,$CLRTIINCR0DJNZR7,DISP0RETTAB:DBC0H,F9H,98H;09的段码,(2)扩展成并行输入口,见教材P130。2.串行口作异步通信接口(方式1的应用)概述:见教材,应用实例:用串行口发送接收带奇偶校验的数据块。系统要求见教材P131.问题分析:关键点1:由于普通ASCII码只用了7位,所以第8位(D7)可以用作奇偶校验。关键点2:波特率计算(设fosc=11.059M)根据方式1下:波特率=2SMOD*T1溢出率/32=1200假设不倍增,则SMOD=0,可计算出:T1的溢出率=32*1200=38400,T1=1/38400让T1工作于模式2,计数初值为X,则T1=(256-X)*12/11.059M,X=256-T1*11.059M/12=256-24=232=E8H即:TH1=TL1=0E8H,关键点3:发送与接收数据的奇偶校验位的生成。关键在于:利用当往A送数据时,CPU自动置P值。即;当A中1的个数为奇数个时,P=1,否则P=0;参考程序如下(假定采用奇校验)A:发送端程序MOVTMOD,#20H;设置T1为模式2MOVTH1,#0E8H;置T1的初值MOVTL1,#0E8HSETBTR1;启动T1MOVSCON,#40H;设置串口工作于方式1MOVPCON,#00H;设置SOMD=0,MOVR0,#20H;要发送的数据块的起始地址MOVR7,#32;要发送的数据块的字节数LOOP:MOVA,R0CALLSPOUTINCR0DJNZR7,LOOPSPOUT:MOVC,PCPLCMOVACC.7,C;将最高位(D7)设置;为奇校验位,即当取到的数中(在A中)1的个数为奇数时,;P=1,取反后C=0,ACC.7=0,所以发送的数据中1的个数为奇数;即当取到的数中(在A中)1的个数为偶数时,P=0,取反后C=1,;ACC.7=1,所以发送的数据中1的个数还是为奇数。,MOVSBUF,AJNBTI,$CLRTIRETB:接收端程序MOVTMOD,#20H;设置T1为模式2MOVTH1,#0E8H;置T1的初值MOVTL1,#0E8HSETBTR1;启动T1MOVPCON,#00H;设置SOMD=0,MOVR0,#20H;存放数据块的起始地址MOVR7,#32;要接收送的数据块的字节数LOOP:CALLSPINJCERRMOVR0,A;将接收的数据存入RAMINCR0DJNZR7,LOOPSPIN:MOVSCON,#50H;01010000串口工作方式1;且REN=1,允许接收JNBRI,$CLRRIMOVA,SBUF;取接收到的一帧数据(8;位),同时置标志P.,MOVC,PCPLC;因为是奇校验,所以接收到的数据中1的个数为奇数,P必然是1,C取反后为0,若C=1,则说明出错了!ANLA,#7FH;屏蔽掉最高位的校验位;低7位为真正的ASCII码RETERR:出错处理程序,3.串行口作多机通信接口,概述:见教材P133(1)多机通信原理与过程见教材P133、134(2)多机通信的软件协议见教材P134,注意:这只是作者自定义的协议!,(3)主机串行通信程序为增加程序的可读性与通用性,串行通信以子程序的方式给出,因此,首先要规定入口参数:R2被寻址的从机的地址;R3主机的命令(00H或01H);R4数据块长度;R0主机要发送的数据块所存放的位置的首地址;R1主机接收的数据块所存放位置的首地址;,主机程序举例:假定主机要向3号从机发送数据块,数据块的首地址为30H,共有16个单元,串行通信的子程序为MS10,则调用方法是:(先设置入口参数,然后调用子程序)MOVR2,#03H;被寻址的从机地址MOVR3,#00H;要求从机接收数据块MOVR4,#10H;数据块长度MOVR0,#30H;主机要发送的数据块的;首地址LCALLMS10;调用串行通信子程序。,假定主机要求从机发送数据给主机,接收的数据放在首地址为20H开始的单元中,则调用串行通信子程序MS10方法是:MOVR2,#03H;被寻址的从机地址MOVR3,#01H;要求从机发送数据块MOVR1,#20H;主机接收的数据块放在;20H开始的单元中LCALLMS10;调用串行通信子程序。,供参考的串行通信子程序如下:MS10:MOVSCON,#11011000B;串行口方式3,;SM0SM1=11,SM2=0,允许接收(REN=1),;TB0=1,首先准备发送的是地址帧。MS11:MOVA,R2;MOVSBUF,A;发送地址帧;JNBRI,$;未接收到从机应答则等待;CLRRI;等到了则清除RIMOVA,SBUF;读取接收到的内容(这;里是被寻址的从机反馈回的地址)XRLA,R2;判断应答的地址是否是主机寻址的地址,异或的结果为0则是,否则不是。,JZMS13;若是,则寻址从机成功,;程序跳转到下一步(发送命令)MS12:SETBTB8MOVSBUF,#0FFH;不同则重新联;络,发送0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年澳洲护理学题目及答案48
- 2025年母婴护理师题目及答案高级
- 2025年内科外科护理题目及答案
- 电容器制造工安全生产能力水平考核试卷含答案
- 印染助剂生产工操作模拟考核试卷含答案
- 城市管理网格员复试能力考核试卷含答案
- 籽晶片制造工岗位设备安全技术规程
- 公司手工地毯图案工现场作业技术规程
- 静电记录头制作工安全实操强化考核试卷含答案
- 光伏组件制造工岗位合规化技术规程
- 医院精神科护理风险评估制度
- 工程款支付担保书范文2024年
- 期中阶段测试卷(试题)2024-2025学年统编版语文五年级上册
- 2024-2030年中国小型发电机行业发展规划及应用趋势预测报告
- 中国太平洋财产保险股份有限公司产品置换服务合同责任保险
- 危地马拉翡翠 分类与命名-编制说明
- 中华民族共同体概论课件专家版6第六讲 五胡入华与中华民族大交融(魏晋南北朝)
- 叶城县临钢矿业开发有限公司30万t-a选矿厂技改工程环评报告
- 群文阅读教学设计有魔力的拟声词(二年级)
- 大学意识形态工作负面清单
- 植保无人机培训课件
评论
0/150
提交评论