应用程序设计技术.docx

上传人:李医生 文档编号:8619734 上传时间:2020-12-07 格式:DOCX 页数:7 大小:83.46KB
返回 下载 相关 举报
应用程序设计技术.docx_第1页
第1页 / 共7页
应用程序设计技术.docx_第2页
第2页 / 共7页
应用程序设计技术.docx_第3页
第3页 / 共7页
应用程序设计技术.docx_第4页
第4页 / 共7页
应用程序设计技术.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《应用程序设计技术.docx》由会员分享,可在线阅读,更多相关《应用程序设计技术.docx(7页珍藏版)》请在三一文库上搜索。

1、第八章应用程序设计技术8 1系统应用程序设计应包含哪些内容? 为什么说可靠性设计和运行管理设计也是系统应用程序设计的重要组成部分?答: 单片机应用系统中, 应用程序设计内容主要有功能性设计、可靠性设计和运行管理设计。(1)功能性设计功能性设计是应用程序设计的主干内容,是满足应用系统运行功能的程序设计内容。它包括运行结构设计和任务模块设计。(2)可靠性设计可靠性设计是应用程序设计中十分重要的一环,是系统安全可靠运行的保证。应用程序中的可靠性设计与系统的可靠性等级有关。可靠性等级越高,可靠性设计投入就越大。(3)运行管理设计运行管理设计是指应用程序中用于某些非系统功能要求的特殊操作。目前主要是低功

2、耗的运行管理, 随着 MCU 技术的发展, 会出现许多新的运行管理要求, 诸如 ISP 的相关管理、固化软件的管理等。8 2单片机应用系统中有哪几种常见的系统程序结构?答 : 单片机应用系统的多种应用状态、应用模式,相应会有多种多样的系统程序结构。这些程序结构大致有 :以键盘管理为中心的键操作结构,无外部操作的自主运行程序结构和基于RTOS 任务管理的嵌入式结构。8 3什么是实时多任务操作系统(RTOS)?在 RTOS 中如何保证任务运行的实时性?答 : (1)实时多任务操作系统 (RTOS)RTOS 是植人单片机应用系统中的一个背景程序,用户的应用程序是运行在RTOS 中的一些任务模块。 R

3、TOS 根据各个任务的要求,进行资源管理、消息管理、任务调度、异常处理等工作。(2)在 RTOS 中要保证任务运行的实时性在 RTOS 支持的系统中,每个任务都有一个优先级,RTOS 根据各个任务的优先级进行动态切换,以保证任务的实时性要求。84什么是汇编语言程序设计中的编辑与汇编? 常用 80C51 的编辑软件是什么? 为什么要对源文件进行汇编? 源文件中的伪指令起什么作用?答 : 应用程序设计时,在进入程序调试前,应完成源程序的编写和汇编,这就是调试前的编辑与汇编工作。汇编语言源程序由许多汇编语句组成,它的文件扩展名为ASM 。通常采用QE 或 PE编辑软件来编写汇编语言源程序。在80C5

4、1 中,对源程序迸行汇编的软件工具为MASM 一51。伪指令为汇编控制命令,为源程序汇编操作提供所需要的数据信息,只在源程序中使用。如上述源程序GAMPLE ASM 中用于地址定位的ORG 和汇编终止标记END 等。815子程序能否独立运行? 子程序怎样才能运行? 通常怎样调试一个子程序?答: (1)子程序的运行子程序是不能独立运行的。子程序只能在调用状态下运行。(2) 子程序的调试1由于子程序只能在调用状态下运行,因此,可在程序入口处设置一子程序调用指令,而子返回后设置一循环指令即可。如下所示,用伪指令ORG 将程序定位在某一指令空间,例如 1000H 。ORG1000HMOVR0,#FRQ

5、NM;结果缓冲区首址入R0LCALLSMPNM;调用 SMPNM 子程序SJMP$;子程序返回后原地循环SMPNM: MOVTMOD, # 55 H;SMPNM 子程序,详见SMPNM 子程序;清单,其中省去了;MOVR0,#FRQNM指令CLRAMOVR0,TL0RET8 6子程序调用和返回时,堆栈起什么作用? 如何利用堆栈特性实现中断程序中的散转操作 ?答: (1)子程序调用和返回时堆栈的作用通常,在调用子程序时,调用指令的下一条指令地址自动进栈(低位在先,高位在后);子程序返回时,地址自动弹出,形成子程序返回地址。一般子程序的调用过程如题图8-1(a)所示。题图 8-1(2) 利用堆栈特

6、性实现中断程序中的散转操作子程序中压栈的程序转移原理 :在子程序返回前将转移地址进行入栈操作,就可以实现子程序的任意转移操作。主程序调用某ABC 子程序时,如调用指令的下一条标号为MADD 的指令地址( MADDL)入栈保护。执行完ABC 子程序后,栈中地址弹出,程序返回到主程序MADD 处。如果在执行子程序ABC 中,将某个子程序的入口地址XYZ压入堆栈,如题图8-K(b)所示。当ABC 子程序返回时,堆栈中弹出的地址是XYZ 。这时 ABC 子程序不会返回主程序,而是转向XYZ 子程序。只有执行完XYZ 子程序,在子程序返回指令RET 操作下,弹出 MADDH 、 MADDL ,程序才返回

7、MADD 处。多中断源的散转操作:利用上述的程序转移原理可以实现多中断源的散转操作。将散转的入口地址ADDiL 、ADDiH依次压入堆栈,随后执行子程序返回指令,程序就会转移到入口地址。不同的中断源输入,转移到不同的入口处,实现了多中断源的散转。如题图8-2所示。2题图 8-2例如:请按书图8-21设计一个中断散转程序。设K0K3为 INT1 的扩展中断源,中断源的中断服务程序为INK0INK3 ,相应的入口地址是ADD0H 、 ADD3H 、 ADD3L 。中断散转程序设计:主程序 MKEY4:HADDEQU2FH;散转入口地址高8 位存放单元ADDHEQUl0H; 散转入口地址高8 位AD

8、D0LEQU00H;INK0散转入口地址低8 位ADDlLEQU40H;INKl散转入口地址低8 位ADD2LEQU80H;INK2散转入口地址低8 位ADD3LEQU0C0H;INK3 散转入口地址低8 位ORG0050H;INTl中断源扩展主程序入口地址给定MKEY4:MOVHADD, # ADDH;INK0INK3散转入口地址高8 位入;HADDSETBEA;开 CPU 中断SETBEX1;开 INTl 中断SJMP$;等待中断INTl 中断服务程序ORG0013H;INTl中断入口地址LJMPIKEY4ORG0060H;INTl中断服务程序地址给定IKEY4: ORLP1, # 0FH

9、;置 Pl.0 一 P1.3 为输入方式MOVA, P1;中断源查询,读入Pl 口状态JBACC.0,KEY1;不是 K0 按下,查 KlMOVA,#ADD0L;是 K0 按下, ADD0L 入 AAJMPKEYJMP;散转操作KEY1: JBACC.1,KEY2; 不是 Kl 按下,查区 K2MOVA,#ADDlL;是 Kl 按下, ADDlL入 AAJMPKEYJMP;散转操作KEY2: JBACC.2,KEY3;不是 K2按下,查 K3MOVA,#ADD2L;是 K2 按下, ADD2L 入 AAJMPKEYJMP;散转操作KEYS: JBACC.3,KEY0;不是 K3按下,转入中断返

10、回MOVA,#ADD3L;是 K3 按下, ADD3L 入 AKEYJMP: PUSHACC;中断散转 ADDiL 、ADDiH入堆栈3PUSHHADDRET; 子程序返回,程序转至ADDiL 、 ADDiH处KEYNO:RETI中断散转与返回程序ORGADDH 、 ADD0L;INK0 入口地址INK0:;INK0中断服务程序RETIORGADDH, ADDIL;INKl入口地址INK1:;INKl中断服务程序RETIORGADDH.ADD2L;INK2 入口地址INK2:;INK2中断服务程序RETIORGADDH,ADD3L;INK3 入口地址INK3:;INK3 中断服务程序RETI8

11、 7请叙述中断程序设计的一般格式。在什么情况下,中断服务中要设资源保护指令 PUSH PSW? 通常该指令设在何处 ?答:(1)中断程序设计的一般格式中断程序一般都包含有两个部分, 即主程序中的中断初始化和实现中断操作任务的中断服务程序,如题图 8-3 所示。题图 8-3在主程序中任何地点都可设置中断初始化, 但只有在中断初始化开中断之后, 有中断源请求中断时才响应中断,将程序立即转移到该中断源的入口地址处,进入中断服务操作。中断服务操作结束后,程序又返回到主程序的中断出口处,继续执行原来被中断的主程序。(2)中断服务中资源保护指令的设置由于中断响应是对主程序的随机插入性操作,在主程序断点前后

12、资源必须连续使用,若该资源会被中断服务程序占用时,必须将主程序中的该资源压入堆栈保护,待中断返回前退出堆栈。例如 :如题图 8-4 所示,设计一个循环点亮 L4L7 的主程序,每次点亮的时间由 data 给定。在主程序起始处设置 INT0 、 INTl中断初始化。在中断服务程序中分制点亮L0 和 Ll 片刻,其时间题图 8-44由常数 data0、 datal 给定。主程序清单如下:dataEQUHdata0EQUHdatalEQUHORG0050HMLEDI: ORLPl,#0F3HMOVIE,#85HDIS:CLRP1.4MOVR7,#dtatLCALLDELAYSETBP14CLRPl.

13、5MOVR7,#dtatLCALLDELAYSETBPl.5CLRP1.6MOVR7,#dtalLCALLDELAYSETBP1.6CLRP1.7MOVR7,#dtatLCALLDELAYSETBP1.7AJMPDISDELAY: MOVR6,#0FFHDL1:MOVR5,#0FFHDL0:DJNZR5,DL0DJNZR6,DL1DJNZR7, DELAYRET INT0 中断服务程序 :ORG0003HLJMPK0L0K0L0:PUSHPSWMOVPSW,#18HCLRPl.0MOVR7,#data0LCALLDELAYSETBPl.0POPPSWRETI;延时时间常数; 熄灭所有 LED;

14、开 CPU 及 INT0 、 INTl 中断;点亮 L4;点亮 L5;点亮 L6;点亮 L7;延时子程序,延时常数预装在R7 中;INT0 中断入口地址;INT0 中断转移;PSW 保护进栈;改变使用的寄存器组,保护主程序中的; 寄存器;点亮 L0,延时片刻后熄灭;恢复主程序中的寄存器组5INTl 中断服务程序 :ORG0013H;INTl 中断入口地址LJMPK1L1;INTl 中断转移K1L1: PUSHPSW;PSW 保护进栈MOVPSW,#18H;改变使用的寄存器组,保护主程序中的;寄存器CLRPl.0;点 0 亮 Ll ,延时片刻后熄灭MOVR7,#datalLCALLDELAYSE

15、TBPl.0POPPSW;恢复主程序中的寄存器组RETI(3) 资源保护指令 (PUSH PSW) 的位置通常资源保护指令 (PUSH PSW) 设在中断服务程序开始之处,在中断返回之前再从堆栈中弹出来。8 8在子程序及中断服务程序中能否随意设置压栈指令PUSH? 子程序及中断服务程序中设置压栈指令后,返回前如果没有出栈指令会出现什么情况?答 : 正常情况下, 中断服务程序中压入堆栈的数据在中断返回前必须如数退出,即设置了几条压栈指令 PUSH ,必须也设置几条出栈指令 POP,以保证断点地址在堆栈顶部,中断返回时能准确返回到中断响应的断点处。如果压入和弹出的个数不等, 即有的压栈指令没有对应的出栈指令,将会改变子程序和中断服务程序的返回地址。 如果有意识地利用这一特牲, 可以在子程序和中断服务中实现程序的转移,详细情况请见 86 题。6

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1