收藏 分享(赏)

第六章监控主程序.ppt

上传人:hyngb9260 文档编号:6086468 上传时间:2019-03-27 格式:PPT 页数:81 大小:859.50KB
下载 相关 举报
第六章监控主程序.ppt_第1页
第1页 / 共81页
第六章监控主程序.ppt_第2页
第2页 / 共81页
第六章监控主程序.ppt_第3页
第3页 / 共81页
第六章监控主程序.ppt_第4页
第4页 / 共81页
第六章监控主程序.ppt_第5页
第5页 / 共81页
点击查看更多>>
资源描述

1、第六章监控主程序的设计,监控程序的任务是接受、分析和执行来自键盘和GP-IB接口的命令。,第六章 监控主程序的设计,监控程序可分为:(1)监控主程序其任务是识别按键、解释命令并获得相应的处理子程序的入口地址。(2)接口管理主程序接受和分析来处GP-IB接口的命令,把控制转到相应的命令处理子程序的入口。(3)命令处理子程序其任务是具体执行命令、完成命令所规定的各项实际动作。,第六章 监控主程序的设计,命令处理子程序随智能仪器不同而异,即使在同一智能仪器中,也随命令不同而异。但监控主程序在不同智能仪器中却有相同的结构和通用的设计方法,本章介绍监控主程序的两种设计方法。6.1 直接分析法6.2 状态

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

3、6-1所示:,一、用选择结构法设计监控主序,一、用选择结构法设计监控主序,若某智能仪器键值K为09是数字键,为AF是命令键,设均为主功能命令,且暂不设主功能标志,分别对应于命令处理子程序1、26,键值暂存于寄存器B中。汇编程序如下:,一、用选择结构法设计监控主序,汇编程序如下:,MOV A, B CLR C SUBB A, #0AH JC DIG CJNE A, #00H, 02H AJMP addr11.1 CJNE A, #01H, 02H,AJMP addr11.2CJNE A, #05H, 02HAJMP addr11.6 DIG: ,一、用选择结构法设计监控主序,一、用选择结构法设计

4、监控主序,其中addr11.1、addr11.2、addr11.6分别为各处理子程序入口地址的低11位。这样转移的范围不超过2K字节。也可用LJMP指令,子程序便可在64K范围内任意安排。,二、用转移表法设计监控主程序,这种方法的核心是建立一张一维的转移表。转移表: 就是顺序登记了各命令处理子程序的入口地址(或转移指令)的数据表格。,二、用转移表法设计监控主程序,a)用子程序入口地址构成的转移表。 b)用转移指令构成的转移表。,对于前例,若用转移表法设计监控主程序,就是根据当前按键的编码,查阅转移表,便可获得相应命令处理子程序的入口。所设计的监控主程序流程如图6-3所示。,二、用转移表法设计监

5、控主程序,二、用转移表法设计监控主程序,对于6-2(a)所示的转移表, 监控主程序如下:MOV DPTR, #TABLMOV A, B ;取键值 CLR CSUBB A, #0AH ;是数字键吗?JC DIGRLC AMOV R3, AMOVC A, A+DPTR,二、用转移表法设计监控主程序,MOV R2,AINC DPTRMOV A,R3MOVC A,A+DPTRMOV DPH,AMOV DPL,R2CLR A JMP A+DPTRTABL:ADSUB1ADSUB2 DIG: ,a)用子程序入口地址构成的转移表,二、用转移表法设计监控主程序,对于图6-2(b)所示的转移表, 监控主程序如下

6、:MOV A,BCLR CSUBB A,#0AHJC DIGRLC AMOV DPTR,#TABLJMP A+DPTR TABL:AJMP addr11.1AJMP addr11.2 DIG: ,b)用转移指令构成的转移表,二、用转移表法设计监控主程序,在一键多义的情况下,一个命令是由一个按键序列所组成,因此对于一键多义的监控程序,首先要判断一个按键序列是否已经构成命令,若已构成合法命令、则执行命令,否则等待新的按键输入。,二、用转移表法设计监控主程序,一键多义的监控程序仍可采用转移表法进行设计,但要用多张转移表,前面几张起着引导作用,最后一张可找到命令处理子程序的入口。,二、用转移表法设计监

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

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

9、些监控程序的特点是命令的识别与处理子程序的执行交织在一起,相互牵连,结构复杂而凌乱无序,不易修改、阅读与调试。当按键较多、复用次数较多时,这一矛盾尤为突出。在一键多义的情况下,用状态变量法设计监控主程序可以克服这些缺点。,6.2 状态变量法一、状态变量法的实质二、状态变量法设计步骤三、设计状态图和状态表的原则与技巧四、用状态变量法设计监控主程序实例,6.2 状态变量法,所谓状态变量法就是将仪器工作的整个过程划分为若干个状态,在任一状态下,每个按键都有一个准确的含义。即状态与按键的每一种组合均应执行一个子程序并变迁到下一个状态(称为次态,用NEXST表示)。这可用一个矩阵来表示,称状态矩阵或状态

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

11、式。,一、状态变量法的实质,一、状态变量法的实质,表中“*”号表示各无意义按键的集合。这一状态表明确规定了仪器在每个状态下接受各种按键时所应进行的实际动作,也规定了状态的变迁,因而是监控程序的“大纲”。,一、状态变量法的实质,用状态变量法设计监控主程序是将仪器工作的整个过程划分为若干个“状态”,在任一状态下,每个按键都有一个确定的含义,即执行另一个子程序且变迁到另一个状态(次态),把这种状态与按键对应关系的组合列成一张表 状态表,存入存储器中。仪器现在所处的状态即现态专门用一个存储单元来记忆,监控主程序就根据现态和当前按键这两个关键字查阅状态表,便可确定按键的确切含义。,二、状态变量法设计步骤

12、,下面举例来说明设计步骤。设某电压频率计的键盘安排如图6-6所示。,二、状态变量法设计步骤,其中F、T、TA-B及V键规定了仪器的测量功能,SET键规定数字键09及小数点键作输入常数或自诊断用,GATE键规定数字键作闸门时间或电压量程用。若按OFS键奇数次,则进入偏移工作方式,按OFS键偶数次,为正常工作方式,按CHS键改变常数符号,负数为负偏移方式,正数为正偏移方式。,第一步画出键盘状态图,本例可设计成如图6-7的键盘状态图。,二、状态变量法设计步骤,二、状态变量法设计步骤,二、状态变量法设计步骤,第二步画出与状态图对应的状态表1、先画符号形式的状态表,如表6-3所示。,二、状态变量法设计步

13、骤,在符号形式状态表中,各按键是用符号表示的,显然这是不能存到存贮器的,必须用键码代替。在键盘接口中已经可以获得键码了,但为了压缩状态表,通常对按键进行重新编码,将键码分为FNKY和NUMB两个部分:对于数字键,令FNKY=1,对于命令键,令NUMB=0。列出表6-4所示的键码表。,2、画出机器码形式的状态表。,二、状态变量法设计步骤,2、画出机器码形式的状态表。这样我们便可以把符号形式的状态表转换为机器码形式的状态表,如表6-5。,二、状态变量法设计步骤,2、画出机器码形式的状态表。,二、状态变量法设计步骤,二、状态变量法设计步骤,第三步 编写程序 1.画出程序流程图 本例流程图如图6-8所

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

15、键,就应该把最后一行的NEXST和SUB取出来用。,二、状态变量法设计步骤,2、用汇编语言来编写程序。,三、设计状态图和状态表的原则与技巧,设计状态图和状态表是用状态变量法设计监控主程序的关键技术,下面讨论设计状态图和状态表的一些原则与技巧。,三、设计状态图和状态表的原则与技巧,1.在一个状态每个按键只能有一个含义;所有按键中只要有一个按键具有两个含义,就必须设立两个状态加以区别。如图6-9中的1态和2态不能合并。,三、设计状态图和状态表的原则与技巧,2.若在两个或两个以上状态中所有按键含义都相同,则不论它们由何态、何键迁移而来,均可合并。如图6-10所示,三、设计状态图和状态表的原则与技巧,

16、3.状态变量法与标志的结合应用虽然单独利用状态变量法能设计各种智能仪器的监控程序,但有时以状态表为主体结合采用其它一些编程技术能有效地提高程序质量。如图6-7中使用标志配合,否则相应部分必须改成图6-11所示。,三、设计状态图和状态表的原则与技巧,三、设计状态图和状态表的原则与技巧,4.状态变量法与转移表的结合使用先用状态变量法区分多义键,在键的意义子集确定后,再用转移表法分支到确定的处理子程序。如图6-7中,在状态3,各数字键起着命令键的作用,但在状态图中仅用一根流线(状态表内列一项)表示,另用一张转移表根据数字键的NUMB值进行分支,这样效果较好。,三、设计状态图和状态表的原则与技巧,5.

17、不稳态0态的设立不仅如前所述避免了不必要的两次按键,而且大大减少了状态间流线的互连,也就大大精简了状态表。如图6-12所示,设了不稳定态后流线大大减少。,三、设计状态图和状态表的原则与技巧,6.状态图必须具有循环性。7.状态表的安排和查找。状态表的每个记录包含ST、FNKYT、NEXST、SUB四个数据项。由于状态表是按ST递增次序排列的,所以ST可以不出现,而 FNKYT在满足表示范围的情况下,位数越少越好。,三、设计状态图和状态表的原则与技巧,下面讨论对NEXST、SUB两项的处理: (1)NEXST项的处理有两种方法可供处理NEXST项:a)把下态子表首址放入记录,每次只 要查找子表,速

18、度快,但占用内存空间多。b)把状态序号放入记录,占用内存少, 但每次都要查总表,速度慢。,三、设计状态图和状态表的原则与技巧,较好的方法是把状态用序号装入状态表,另设一张索引表,既可缩小存贮空间,又可提高查找速度。如图6-13所示:,三、设计状态图和状态表的原则与技巧,(2)SUB项的处理有两种方法可供处理SUB项:a)把子程序入口地址直接记入状态表。b)把子程序号数记入状态表,另用一张转移表登记子程序的入口地址。哪种方法好,应根据具体情况分析。,三、设计状态图和状态表的原则与技巧,(3)为节省内存,FNKYT、NEXST、SUB三项应组装起来。如图6-14所示状态表内的记录:,四、用状态变量

19、法设计监控主程序实例,试按图6-7所示的键盘状态图要求设计仪器的监控主程序,状态表已列于表6-5,但为节省空间,对该表作进一步处理,把FNKYT和NEXST两项组装成一个字节,如“0”态子表的第一个记录这两项组装后结果如图6-15所示。,四、用状态变量法设计监控主程序实例,图6-16所示为对子程序两种处理方法的状态表。,四、用状态变量法设计监控主程序实例,我们选取6-16 b)的状态表为加快查找速度,又设计了一张索引表,如图6-17所示。,四、用状态变量法设计监控主程序实例,下面的监控主程序首先根据现态PREST查找索引表,获得子表首地址,然后由此开始,根据键码逐个记录查找状态表,可以实现按键

20、的功能定义。,四、用状态变量法设计监控主程序实例,程序清单如下:MOV A , B ;取按键信息CLR CSUBB A , #0BH ;判断按键是功能键还是数字键JC DIG ;为数字键,转DIGSUBB A , #03H ;判断是否为主功能键JNC NMFN ;非主功能键,转NMFNSETB FO ;置主功能标志位FO为1 NMFN:ACALL FUN ;调用功能键处理子程序AJMP START,四、用状态变量法设计监控主程序实例,DIG:MOV 30H ,#01H ;FNKY值放在30H单元中MOV 31H ,B ;NUMB值放在31H单元中 START:MOV DPTR , #PREST

21、MOVX A , DPTR ;取得现态CLR C RLC A ;(A)2 TAB0:MOV R3,AMOV DPTR , #0080H ;查索引表MOVC A , A+DPTR ;取得子表首址低字节MOV R2 , A ;暂存于R2,四、用状态变量法设计监控主程序实例,MOV A,R3INC AMOVC A , A+DPTR ;取高位地址MOV DPH,AMOV DPL , R2 ;DPTR指到子表的首址 TAB1:CLR AMOVC A , A+DPTR ;取出记录的第一字节MOV B,APUSH DPLPUSH DPH,四、用状态变量法设计监控主程序实例,RL ASWAP AANL A ,

22、 #0FH ;(A)=FNKYTJZ OK ;FNKYT=0 查到子表的最后一个记录MOV 04H , A ;(04H)FNKYTMOV DPTR,#MFNKYMOVX A , DPTR ;(A)= FNKY,取得当前;按键读数的FNKYCJNE A , 04H , NEXT ;FNKYFNKYT, 转,四、用状态变量法设计监控主程序实例,OK:MOV A , B ;查找成功,记录的第一个;字节回送AANL A , #07H ;取出下态MOV DPTR,#PRESTMOVX DPTR , A ;下态送PREST单元POP DPH ;调用SUBPOP DPLINC DPTRCLR AMOVC A

23、,A+DPTR,MOV R2,ACLR AINC DPTRMOVC A,A+DPTRMOV DPH,AMOV DPL,R2CLR AJMP A+DPTR ;转处理子程序 CHOST:MOV DPTR , #PREST ;现态是否为0MOVX A,DPTRJNZ TAB2 ;现态不为0,转AJMP TAB0 ;现态为0,再查一次状态表,TAB2:AJMP SCAN ;等待新命令或查询MAINFN NEXT:POP DPH ;转下一条子表记录,;一条记录占用3个字节POP DPLINC DPTRINC DPTRINC DPTRAJMP TAB1 FUN: MOV A,B ;功能键处理子程序CLR

24、CSUBB A,#09HMOV 30H,AMOV 31H,#00HRET,四、用状态变量法设计监控主程序实例,注意:按上述方法处理,各处理子程序后面用指令LJMP CHOST回到本程序的CHOST处,判断现态是否为0。 总之,状态变量法设计键盘监控程序具有下列优点:(1)应用一张状态表,统一处理任何一组按键状态的组合,使复杂的按键序列的编译过程变得简洁、直观、容易优化,设计的程序易懂、易读。,四、用状态变量法设计监控主程序实例,(2)翻译、解释按键序列与执行子程序完全分离,因此键盘监控程序的设计不受其它程序的影响,可单独进行,避免两者纠缠交叉。,四、用状态变量法设计监控主程序实例,(3)若仪器功能发生改变,监控程序的结构不变,仅需改变状态表。(4)设计任务越复杂,按键复用次数越多,此方法的效率越高。对于复杂的仪器仅是状态表规模大些,监控程序的设计方法完全一样。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 通信信息 > 监控

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报