第六章监控主程序_第1页
第六章监控主程序_第2页
第六章监控主程序_第3页
第六章监控主程序_第4页
第六章监控主程序_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

第六章监控主程序第一页,共八十一页,编辑于2023年,星期五监控程序的任务是接受、分析和执行来自键盘和GP-IB接口的命令。第六章监控主程序的设计第二页,共八十一页,编辑于2023年,星期五监控程序可分为:(1)监控主程序其任务是识别按键、解释命令并获得相应的处理子程序的入口地址。(2)接口管理主程序接受和分析来处GP-IB接口的命令,把控制转到相应的命令处理子程序的入口。(3)命令处理子程序其任务是具体执行命令、完成命令所规定的各项实际动作。第六章监控主程序的设计第三页,共八十一页,编辑于2023年,星期五

命令处理子程序随智能仪器不同而异,即使在同一智能仪器中,也随命令不同而异。但监控主程序在不同智能仪器中却有相同的结构和通用的设计方法,本章介绍监控主程序的两种设计方法。6.1直接分析法

6.2状态变量法第六章监控主程序的设计第四页,共八十一页,编辑于2023年,星期五6.1直接分析法

所谓直接分析法,就是只需根据当前按键的编码,把控制直接分支到相应的处理子程序的入口,而无需知道在此之前的按键情况。这种方法适用于一键一义的情况。具体设计时可用选择结构,也可用转移表。第五页,共八十一页,编辑于2023年,星期五一、用选择结构法设计监控主序这种方法适用于比较简单的场合。在单片机应用系统中,键盘接口提供了被按键读数,即有键按下时CPU可得到被按键的读数(即键值),监控主程序根据键读数把控制转到相应的处理子程序入口。第六页,共八十一页,编辑于2023年,星期五一、用选择结构法设计监控主序按键数字键命令键主功能命令非主功能命令通常智能仪器键盘上按键分两大类:用选择结构法设计的监控主程序的流程图如图6-1所示:第七页,共八十一页,编辑于2023年,星期五一、用选择结构法设计监控主序

第八页,共八十一页,编辑于2023年,星期五一、用选择结构法设计监控主序若某智能仪器键值K为0~9是数字键,为A~F是命令键,设均为主功能命令,且暂不设主功能标志,分别对应于命令处理子程序1、2…6,键值暂存于寄存器B中。汇编程序如下:第九页,共八十一页,编辑于2023年,星期五一、用选择结构法设计监控主序汇编程序如下:MOVA,BCLRCSUBBA,#0AHJCDIGCJNEA,#00H,02HAJMPaddr11.1CJNEA,#01H,02H第十页,共八十一页,编辑于2023年,星期五AJMPaddr11.2……CJNEA,#05H,02HAJMPaddr11.6DIG:……一、用选择结构法设计监控主序第十一页,共八十一页,编辑于2023年,星期五一、用选择结构法设计监控主序

其中addr11.1、addr11.2、……、addr11.6分别为各处理子程序入口地址的低11位。这样转移的范围不超过2K字节。也可用LJMP指令,子程序便可在64K范围内任意安排。第十二页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序

这种方法的核心是建立一张一维的转移表。转移表:就是顺序登记了各命令处理子程序的入口地址(或转移指令)的数据表格。第十三页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序a)用子程序入口地址构成的转移表。b)用转移指令构成的转移表。第十四页,共八十一页,编辑于2023年,星期五对于前例,若用转移表法设计监控主程序,就是根据当前按键的编码,查阅转移表,便可获得相应命令处理子程序的入口。所设计的监控主程序流程如图6-3所示。二、用转移表法设计监控主程序第十五页,共八十一页,编辑于2023年,星期五第十六页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序对于6-2(a)所示的转移表,监控主程序如下:

MOVDPTR,#TABLMOVA,B;取键值CLRCSUBBA,#0AH;是数字键吗?JCDIGRLCAMOVR3,AMOVCA,@A+DPTR第十七页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序MOVR2,AINCDPTRMOVA,R3MOVCA,@A+DPTRMOVDPH,AMOVDPL,R2CLRAJMP@A+DPTRTABL:ADSUB1ADSUB2┇DIG:┅┅a)用子程序入口地址构成的转移表第十八页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序对于图6-2(b)所示的转移表,监控主程序如下:MOVA,BCLRCSUBBA,#0AHJCDIGRLCAMOVDPTR,#TABLJMP@A+DPTRTABL:AJMPaddr11.1AJMPaddr11.2┇DIG:┅┅b)用转移指令构成的转移表第十九页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序

在一键多义的情况下,一个命令是由一个按键序列所组成,因此对于一键多义的监控程序,首先要判断一个按键序列是否已经构成命令,若已构成合法命令、则执行命令,否则等待新的按键输入。第二十页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序

一键多义的监控程序仍可采用转移表法进行设计,但要用多张转移表,前面几张起着引导作用,最后一张可找到命令处理子程序的入口。第二十一页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序例:某电压频率计面板上有A、B、C、D、GATE、SET、OFS、RESET等八个键、按RESET键使仪器初始化并启动测量,初始化后直接按A或B、C、D键,分别进行测频或测周期、测时间间隔、测电压等,按GATE键后再按A或B、C、D键,则输入一个常数(偏移),若按奇数次OFS键,进入偏移工作方式,按偶数次OFS键,则为正常工作方式。第二十二页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序采用转移表法所设计的监控程序如图6-4。该程序内包含了三张转移表。GATE、SET键分别把控制引向转移表2与3,以区别A、B、C、D键的三种含义。每执行完一个命令,微处理器继续扫描键盘,等待新的命令输入。第二十三页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序第二十四页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序

以查询方式处理键盘接口的方法在智能仪器中有时会遇到困难。因为在智能仪器中,当接到某些命令后,通常要反复执行这些命令,直到接收新的主功能命令为止,这样微处理器就无时间询问并扫描键盘。这时宜采用中断方式处理键盘接口较好。第二十五页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序此外,智能仪器监控程序具有实时性,一旦出现按键中断后,通常应该作废正在进行的一次测量;当中断服务程序完成后,重新启动一次测量,而不回到程序中断点处恢复原来进行的测量—多半是一次错误的测量。考虑到这些因素。上例监控程序可设计成图6-5所示的形式。第二十六页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序第二十七页,共八十一页,编辑于2023年,星期五二、用转移表法设计监控主程序

上述这些监控程序的特点是命令的识别与处理子程序的执行交织在一起,相互牵连,结构复杂而凌乱无序,不易修改、阅读与调试。当按键较多、复用次数较多时,这一矛盾尤为突出。在一键多义的情况下,用状态变量法设计监控主程序可以克服这些缺点。第二十八页,共八十一页,编辑于2023年,星期五

6.2状态变量法一、状态变量法的实质二、状态变量法设计步骤三、设计状态图和状态表的原则与技巧四、用状态变量法设计监控主程序实例第二十九页,共八十一页,编辑于2023年,星期五6.2状态变量法所谓状态变量法就是将仪器工作的整个过程划分为若干个状态,在任一状态下,每个按键都有一个准确的含义。即状态与按键的每一种组合均应执行一个子程序并变迁到下一个状态(称为次态,用NEXST表示)。这可用一个矩阵来表示,称状态矩阵或状态表,如表6-1所示:第三十页,共八十一页,编辑于2023年,星期五一、状态变量法的实质

按键状态K1K2…KnST0SUB01NEXST01SUB02NEXST02…SUB0nNEXST0nST1SUB11NEXST11SUB12NEXST12…SUB1nNEXST1n…………………STmSUBm1NEXSTm1SUBm2NEXSTm2SUBmnNEXSTmn第三十一页,共八十一页,编辑于2023年,星期五一、状态变量法的实质这样智能仪器内部CPU只要记住仪器当前的状态即现态,当有键入时,根据当前按键和现态这两个关键字查阅状态表,便可确定按键的含义,这就是状态变量法的实质。第三十二页,共八十一页,编辑于2023年,星期五一、状态变量法的实质上述状态表中表示仪器有n个按键、m+1个状态。若在STi(0≤i≤m)态按Kj(1≤j≤n)键,则将执行SUBi子程序(i为子程序号数或首址),并变迁到NEXSTr态(0≤r≤m)。第三十三页,共八十一页,编辑于2023年,星期五一、状态变量法的实质表6-1是一个稀疏矩阵,若直接利用则占用内存量大,程序运行速度也慢。因而必须进行压缩,将那些无效组合集中起来进行处理,稍微改变排列,就成为表6-2所示形式。第三十四页,共八十一页,编辑于2023年,星期五一、状态变量法的实质第三十五页,共八十一页,编辑于2023年,星期五一、状态变量法的实质

表中“*”号表示各无意义按键的集合。这一状态表明确规定了仪器在每个状态下接受各种按键时所应进行的实际动作,也规定了状态的变迁,因而是监控程序的“大纲”。第三十六页,共八十一页,编辑于2023年,星期五一、状态变量法的实质

用状态变量法设计监控主程序是将仪器工作的整个过程划分为若干个“状态”,在任一状态下,每个按键都有一个确定的含义,即执行另一个子程序且变迁到另一个状态(次态),把这种状态与按键对应关系的组合列成一张表状态表,存入存储器中。仪器现在所处的状态即现态专门用一个存储单元来记忆,监控主程序就根据现态和当前按键这两个关键字查阅状态表,便可确定按键的确切含义。第三十七页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤下面举例来说明设计步骤。设某电压频率计的键盘安排如图6-6所示。第三十八页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤其中F、T、TA-B及V键规定了仪器的测量功能,SET键规定数字键0~9及小数点键作输入常数或自诊断用,GATE键规定数字键作闸门时间或电压量程用。若按OFS键奇数次,则进入偏移工作方式,按OFS键偶数次,为正常工作方式,按CHS键改变常数符号,负数为负偏移方式,正数为正偏移方式。第三十九页,共八十一页,编辑于2023年,星期五第一步画出键盘状态图,本例可设计成如图6-7的键盘状态图。二、状态变量法设计步骤第四十页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤第四十一页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤第二步画出与状态图对应的状态表1、先画符号形式的状态表,如表6-3所示。第四十二页,共八十一页,编辑于2023年,星期五1DIGCHSSETRESET*11350780602DIGRESET*5509603DIGRESET*34010004RESET*546115*00状态按键次态子程序0FTTA-BVSETGATEOFS*5555125512340050第四十三页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤在符号形式状态表中,各按键是用符号表示的,显然这是不能存到存贮器的,必须用键码代替。在键盘接口中已经可以获得键码了,但为了压缩状态表,通常对按键进行重新编码,将键码分为FNKY和NUMB两个部分:对于数字键,令FNKY=1,对于命令键,令NUMB=0。列出表6-4所示的键码表。2、画出机器码形式的状态表。第四十四页,共八十一页,编辑于2023年,星期五键名键码FNKYNUMB键名键码FNKYNUMB0123456789000102030405060708090101010101010101010100010203040506070809·FTTA-BVSETGATEOFSCHSRESET0A0B0C0D0E0F101112130102030405060708090A0A000000000000000000第四十五页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤2、画出机器码形式的状态表。这样我们便可以把符号形式的状态表转换为机器码形式的状态表,如表6-5。第四十六页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤2、画出机器码形式的状态表。STFNKYTNEXSTSUB00203040506070800050505050102050501020304000005001010906010103070800第四十七页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤STFNKYTNEXSTSUB10A00050006002010A000505000906003010A0003040010000040A00050406115000000第四十八页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤第三步编写程序1.画出程序流程图本例流程图如图6-8所示:第四十九页,共八十一页,编辑于2023年,星期五第五十页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤说明:

(1)为了避免不必要的两次按键,通常将“0”态设计成不稳定态。程序中当判明取来的NEXST为“0”时,就自动再查一次状态表,便可脱离“0”,迁移到另一个状态。第五十一页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤(2)若输入的是主功能命令键,则把相应的标志置入MAINFN单元,并连续执行其测量程序,若输入的是非主功能命令键,则当完成中断服务程序后,或等待,或恢复原来的测量功能。第五十二页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤(3)状态表中每一栏的最后一行用“*”号(符号形式)或00(16进制数形式)表示各无意义按键的集合,所以在程序中如本栏查完了,还找不到FNKYT=FNKY,则该按键一定为无意义的按键,就应该把最后一行的NEXST和SUB取出来用。第五十三页,共八十一页,编辑于2023年,星期五二、状态变量法设计步骤2、用汇编语言来编写程序。第五十四页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧

设计状态图和状态表是用状态变量法设计监控主程序的关键技术,下面讨论设计状态图和状态表的一些原则与技巧。

第五十五页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧1.在一个状态每个按键只能有一个含义;所有按键中只要有一个按键具有两个含义,就必须设立两个状态加以区别。如图6-9中的1态和2态不能合并。第五十六页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧2.若在两个或两个以上状态中所有按键含义都相同,则不论它们由何态、何键迁移而来,均可合并。如图6-10所示第五十七页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧3.状态变量法与标志的结合应用虽然单独利用状态变量法能设计各种智能仪器的监控程序,但有时以状态表为主体结合采用其它一些编程技术能有效地提高程序质量。如图6-7中使用标志配合,否则相应部分必须改成图6-11所示。第五十八页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧第五十九页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧

4.状态变量法与转移表的结合使用先用状态变量法区分多义键,在键的意义子集确定后,再用转移表法分支到确定的处理子程序。如图6-7中,在状态3,各数字键起着命令键的作用,但在状态图中仅用一根流线(状态表内列一项)表示,另用一张转移表根据数字键的NUMB值进行分支,这样效果较好。

第六十页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧5.不稳态0态的设立不仅如前所述避免了不必要的两次按键,而且大大减少了状态间流线的互连,也就大大精简了状态表。如图6-12所示,设了不稳定态后流线大大减少。第六十一页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧6.状态图必须具有循环性。

7.状态表的安排和查找。状态表的每个记录包含ST、FNKYT、NEXST、SUB四个数据项。由于状态表是按ST递增次序排列的,所以ST可以不出现,而FNKYT在满足表示范围的情况下,位数越少越好。第六十二页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧下面讨论对NEXST、SUB两项的处理:(1)NEXST项的处理有两种方法可供处理NEXST项:a)把下态子表首址放入记录,每次只要查找子表,速度快,但占用内存空间多。b)把状态序号放入记录,占用内存少,但每次都要查总表,速度慢。第六十三页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧较好的方法是把状态用序号装入状态表,另设一张索引表,既可缩小存贮空间,又可提高查找速度。如图6-13所示:第六十四页,共八十一页,编辑于2023年,星期五第六十五页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧(2)SUB项的处理有两种方法可供处理SUB项:a)把子程序入口地址直接记入状态表。b)把子程序号数记入状态表,另用一张转移表登记子程序的入口地址。哪种方法好,应根据具体情况分析。

第六十六页,共八十一页,编辑于2023年,星期五三、设计状态图和状态表的原则与技巧(3)为节省内存,FNKYT、NEXST、SUB三项应组装起来。如图6-14所示状态表内的记录:第六十七页,共八十一页,编辑于2023年,星期五四、用状态变量法设计监控主程序实例试按图6-7所示的键盘状态图要求设计仪器的监控主程序,状态表已列于表6-5,但为节省空间,对该表作进一步处理,把FNKYT和NEXST两项组装成一个字节,如“0”态子表的第一个记录这两项组装后结果如图6-15所示。第六十八页,共八十一页,编辑于2023年,星期五四、用状态变量法设计监控主程序实例图6-16所示为对子程序两种处理方法的状态表。第六十九页,共八十一页,编辑于2023年,星期五四、用状态变量法设计监控主程序实例我们选取6-16b)的状态表为加快查找速度,又设计了一张索引表,如图6-17所示。第七十页,共八十一页,编辑于2023年,星期五四、用状态变量法设计监控主程序实例下面的监控主程序首先根据现态PREST查找索引表,获得子表首地址,然后由此开始,根据键码逐个记录查找状态表,可以实现按键的功能定义。第七十一页,共八十一页,编辑于2023年,星期五四、用状态变量法设计监控主程序实例程序清单如下:MOVA,B ;取按键信息CLRCSUBBA,#0BH ;判断按键是功能键还是数字键JCDIG ;为数字键,转DIGSUBBA,#03H;判断是否为主功能键JNCNMFN ;非主功能键,转NMFNSETBFO;置主功能标志位FO为1NMFN:ACALLFUN ;调用功能键处理子程序AJMPSTART第七十二页,共八十一页,编辑于2023年,星期五四、用状态变量法设计监控主程序实例DIG:MOV30H,#01H;FNKY值放在30H单元中MOV31H,B;NUMB值放在31H单元中START:MOVDPTR,#PRESTMOVXA,@DPTR;取得现态CLRCRLCA;(A)×2TAB0:MOVR3,AMOVDPTR,#0080H ;查索引表MOVCA,@A+DPTR ;取得子表首址低字节MOVR2,A ;暂存于R2第七十三页,共八十一页,编辑于2023年,星期五四、用状态变量法设计监控主程序实例MOVA,R3INCAMOVCA,@A+DPTR ;取高位地址MOVDPH,AMOVDPL,R2 ;DPTR指到子表的首址TAB1:CLRAMOVCA,@A+DPTR ;取出记录的第一字节MOVB,APUSHDPLPUSHDPH第七十四页,共八十一页,编辑于2023年,星期五四、用状态变量法设计监控主程序实例RLASWAPAANLA,#0FH ;(A)=FNKYTJZOK;FNKYT=0查到子表的最后一个记录MOV04H,A ;(04H)←FNKYTMOVDPTR,#MFNKYMOVXA,@DPTR;(A)=FNKY,取得当前;按键读数的FNKYCJNEA,04H,NEXT ;FNKY≠FNKYT,转第七十五页,共八十一页,编辑于2023年,星期五四、用状态变量法设计监控主程序实例OK:MOVA,B ;查找成功,记录的第一个;字节回送AANLA,#07H;取出下态MOVDPTR,#PRESTMOVX@DPTR,A ;下态送PREST单元POPDPH ;调用SUBPOPD

温馨提示

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

评论

0/150

提交评论