第4章 程序设计(广西大学).ppt

上传人:bao****ty 文档编号:143839289 上传时间:2020-09-02 格式:PPT 页数:78 大小:512.50KB
返回 下载 相关 举报
第4章 程序设计(广西大学).ppt_第1页
第1页 / 共78页
第4章 程序设计(广西大学).ppt_第2页
第2页 / 共78页
第4章 程序设计(广西大学).ppt_第3页
第3页 / 共78页
第4章 程序设计(广西大学).ppt_第4页
第4页 / 共78页
第4章 程序设计(广西大学).ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《第4章 程序设计(广西大学).ppt》由会员分享,可在线阅读,更多相关《第4章 程序设计(广西大学).ppt(78页珍藏版)》请在金锄头文库上搜索。

1、第4章 程序设计, 教学目标介绍单片机汇编程序设计方法介绍单片机汇编程序常用结构及设计方法介绍典型智能仪表单片机系统应用软件设计 介绍目前流行的MCS-51单片机高级语言C51 学习要求熟悉单片机编程的步骤、方法和技巧 掌握单片机汇编程序的常用结构及设计方法 掌握典型汇编语言应用程序的编制 了解单片机高级程序设计语言C51,单片机系统设计由硬件设计和软件设计两部分组成,后者就是设计程序、编制表格,以指挥单片机完成用户交付的任务。本章介绍MCS-51单片机汇编语言程序设计的基本步骤、方法和技巧,并在最后简单地介绍了C51高级程序设计。,4.1编程的步骤、方法和技巧,单片机常用于工业测控装置和智能

2、仪表等,这些应用场所往往对实时性提出了要求。使用汇编语言设计程序,虽然比高级语言烦琐,但它能最充分地发挥指令系统的功能与效率,获得最简练的目标程序,能满足实时性要求。用汇编语言设计单片机应用程序往往要经历以下几个步骤: (1)软件任务分析; (2)数据类型和数据结构规划; (3)资源分配; (4)编程与调试。,4.1.1软件任务分析,软件任务分析是为软件设计作一个总体规划。从功能来看,软件可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量、计算、显示、打印、输出控制和通信等;另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。这两类软件的

3、设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切。监控软件着眼全局,逻辑严密。,软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入、输出定义)。在为各执行模块进行定义时,将要牵涉到的数据结构和数据类型的问题也一并规划好。 各执行模块规划好后,就可以规划监控程序了。首先根据系统功能和键盘设置选择一种最合适的监控程序结构。相对来讲,执行模块任务明确单纯,比较容易编程。而监控程序较易出问题。,任务分析的另一个内容是如何安排监控软件和各执行模块。整个系统软件可分为后台程序和前台程序。后台程序指主程序及其调用的子程序,这类程序对实时性要求不是很高,延误几十

4、毫秒甚至几百毫秒也没关系,故通常将监控程序(键盘管理程序)、显示程序和打印程序等与操作者打交道的程序放在后台程序中来执行。而前台程序安排一些实时性要求较高的内容,如定时系统和外部中断。在一些特殊场合,也可以将全部程序均安排在前台,后台为踏步等待循环或睡眠状态。,4.1.2数据类型和数据结构规划,前面的软件任务分析只是一个粗糙的分析和大体上的安排,还不能开始编程。 为了避免系统中各个执行模块之间的脱节现象,就必须严格规定好各个接口条件,即各接口参数的数据结构和数据类型。 从数据类型上来分类,可分为逻辑型和数值型,但通常将逻辑型数据归到软件标志中去考虑。而将数据类型分类理解为数值类型分类。数值类型

5、可分为定点数和浮点数。,如果一个参数的变化范围有限,就可用定点数来表示,以简化程序设计和加快运行速度;当参数的变化范围太宽时,只好采用浮点数来表示。 如果某参数是一系列有序数据的集合,如采样信号系列,则不光有数据类型问题,还有一个数据存放格式问题,即数据结构问题。在单片机应用系统中,数据结构比较简单,大多采用线性结构,这样有利于数据处理。由于受RAM空间的限制,队列结构广泛采用环行队列结构,为此应规划好两样东西:队列区域和队尾(首)指针,并计算出总共需要的RAM字节数。对于数组,一般采用顺序存放的格式。这样就可以用简单的下标运算来访问数组中的任何一个元素。,4.1.3资源分配,完成数据类型和数

6、据结构的规划后,便可开始分配系统的资源了。在微机测控系统中,往往需要定时检测某个物理参数,或按一定的时间间隔来进行某种控制等。这种定时的获得常采用定时/计数器,它还可以对某种事件进行计数,然后根据计数结果来进行控制;单片机在及时处理实时测、控中的许多随机的参数和信息、对外界异步事件包括故障的处理常使用中断,在任务分析时一般要将定时/计数器和中断源等资源分配好。ROM资源用来存放程序和表格,这也是明显的。系统资源ROM、RAM、定时/计数器、中断源等。因此,资源分配的主要工作是RAM资源的分配。片外RAM的容量比片内RAM大,通常用来存放大批量的数据,如采样数据系列。真正需要认真考虑的是片内RA

7、M的分配。,片内RAM指00H7FH单元。这128个字节的功能并不完全相同,分配时应注意充分发挥各自的特长,做到物尽其用。 00H1FH这32个字节可以作为工作寄存器,其中00H0FH用来作为0区、1区工作寄存器。在一般的应用系统中,后台程序用0区工作寄存器,前台程序用1区工作寄存器。如果有高级中断,则高级中断可用2区工作寄存器(10H17H)。如果前台程序中不使用工作寄存器,则系统只需0区工作寄存器。未作为工作寄存器的其它单元便可以转为其它目的使用了。系统上电复位时,自动定义0区为工作寄存器,1区为堆栈,并向2区、3区延伸。如果前台程序要用1区、2区作为工作寄存器,就应将堆栈空间重新规划 。

8、,在工作寄存器的8个单元中,R0和R1具有指针功能,是编程的重要角色,应充分发挥其作用,尽量避免用来做其它事情。 20H2FH这16个字节具有位寻址功能,用来存放各种软件标志、逻辑变量、位输入信息、位输出信息副本、状态变量、逻辑运算的中间结果等。当这些项目安排好后,保留一两个字节备用,剩下的单元才可改作其它用途。 30H7FH为一般通用寄存器,只能存入整字节信息。通常用来存放各种参数、指针、中间结果,或用作数据缓冲区。也常将堆栈安排在片内RAM的高端,如68H7FH。,如果将系统的各种开销安排后,所剩单元很少,这往往不是好的兆头。应该留有足够的余地,因为现在还处于规划阶段,随着软件设计的发展进

9、程,几乎都会出现新的资源要求。如果在规划阶段资源已经很紧张,建议修改硬件设计,增加RAM资源。 RAM资源规划好后,应列出一张RAM资源的详细分配清单,作为编程依据。,4.1.4编程与调试,上述各项准备工作都完成后,就可以开始编程了。软件设计有两种方法:一种是自上而下,逐步细化;一种是自下而上,先设计出每一个具体的模块(子程序),然后再慢慢扩大,最后组成一个系统。两种方法各有优缺点。 单片机由于本身没有开发能力,故编程均在各种类型的开发系统上进行。基本过程是相同的:用编辑软件编辑出源程序,再用编译软件生成目标代码,如果源程序中有语法错误则返回编辑过程,修改源程序后再继续编译,直到通过这一关。然

10、后对程序进行测试,纠正测试中发现的错误。接着就在开发系统上仿真运行,试运行中将会发现不少设计错误(不是语法错误),再从头修改源程序,如此反复直到基本成功,就可以投入实际环境中使用。,4.2汇编语言源程序的编辑和汇编,用助记符和标号地址编写的程序称为汇编语言源程序;而将助记符翻译成机器码以及将标号地址换算成实际地址的工作都由计算机通过一种称为汇编程序的软件完成,这种翻译和换算的过程一般就称为汇编。,4.2.1汇编语言源程序的格式,一般来讲,汇编语言源程序由四部分组成,即标号、操作码、操作数和注释。每两个部分之间要用分隔符隔开,而每一部分内部不采用分割符。可以采用的分割符有:空格“ ”、冒号“:”

11、、分号“;”,空格的数目可以不止一个。 汇编语言源程序的一般形式为: 标号:操作码 操作数 ;注释 方括号 在实际程序中并不书写,也不输入到计算机里,只是表示方括号内的项是任选项,此项可有可无,若不需要时,在某一行可以不包括此项。故对每一行源程序来说,只有操作码是必不可少的,其余三部分都可视情况而定。,汇编程序只处理分号“;”以前的字符,对于注释部分,计算机在汇编时不予处理。注释部分便于程序的使用者更好地理解程序的功能,有助于程序的交流使用。软件工作者从一开始就要养成写好注释的良好习惯。 对于有些指令,操作数不止一个,有两个甚至三个,在输入计算机时,各操作数之间要用逗号作分割符。,一、标号 标

12、号由8个或8个以下的字母数字构成,第一个必须是字母。另外还允许使用一个下横线符号“ ”。其它的符号都不允许在标号中使用。此外,系统中保留使用的字符或字符组不能用作标号,以免引起混淆。如各种特殊功能寄存器名、各个位地址记忆符、各种伪指令等都不能用作标号。 以下是一些合法的标号:A1,LOOP等。 以下的字符串不能用作标号:4G,F-G,DB,EQU(后两种为保留字)。 标号不是每一行都必须要有,而只是在需要时才使用。,二、操作数 对于立即数#data来说,使用时,一般都在#后面跟一个具体的数。这个数可以是二进制数,应以字母“B”作为结束,如#10010011B;也可以是十六进制数,则以字母“H”

13、结尾,如88H,但若最高位为AF之中的字母,则前面还要加一个数字“0”,如#0ABH。如果这个0忘了加上,汇编程序将认为所写的是一个编号。如果数字的最后没有结束字母,则认为是十进制数,如#10。 立即数的data也可以用定义过的标号来代替,这种定义要用到伪指令EQU等。 对于直接地址direct来说,在实际使用时,也可以有多种选择:,1.二进制数,十进制数或十六进制数,如:MOV A,30H等; 2.标号地址,如:MOV A,SUM等,SUM应该在程序中某处加以定义; 3.带加减的表达式,如:MOV A,SUM+9,SUM为已定义的符号地址; 4.特殊功能寄存器名,如:MOV A,SP等。 对

14、于偏移量rel,除了可以采用上面提到的各种数值、标号地址以及表达式之外,还可以采用一个专门的符号“$”,它表示相对转移指令所在的地址,例如: LJMP$ 这条指令实际上是一条自身跳转的死循环。在实际编程时,凡是指令中用到地址的地方(rel,addr11,addr16)都用标号地址代替实际地址,而将复杂的地址运算交给汇编程序完成。,4.2.2伪指令,每种汇编语言都会定义若干伪指令,用来对汇编过程进行某种控制,或对符号、标号赋值。伪指令和指令是完全不同的。在汇编过程中,由于伪指令并不执行可执行的目的代码,因而大部分伪指令甚至不会影响存储器中的内容。对不同版本的汇编语言,伪指令的符号和含义可能不同,

15、但基本的用法是相似的。下面就介绍一些常用的伪指令。,一、ORG(汇编起始命令) 其功能是规定下面的目标程序的起始地址,指令格式为: 标号:ORGaddr16 其中括号内是任选项,可以没有,例如: ORG1000H LAB:MOVA,#3H 即,规定了标号LAB所在的起始地址为1000H,第一条指令就从1000H开始存放。 一般在一个汇编语言源程序的开始,都用一条ORG伪指令来规定程序存放的起始位置,故称为汇编起始命令。,二、END(汇编结束命令) END是汇编语言源程序的结束标志,在END以后所写的指令,汇编程序都不予处理。一个源程序只能有一个END命令。在同时包含有主程序和子程序的系统中,也

16、只能有一个END命令,并存放到所有指令的最后,否则,就有一部分指令不能被汇编。其格式为: 标号:END 三、EQU(等值命令) 其功能是将一个数或者特定的汇编符号赋予规定的符号名称,其格式为: 字符名称 EQU数或汇编符号 例如: INPEQUP1 MOVA,INP 这里将INP等值为汇编符号P1,在指令中INP就可以代替P1来使用。,四、DATA(数据地址赋值命令) 其功能是将数据地址或代码地址赋予规定的字符名称,其格式为: 字符名称DATA表达式 DATA伪指令的功能和EQU有些相似,使用时要注意它们的差别: (1)EQU伪指令定义的符号必须先定义后使用,而DATA伪指令的符号可以先使用后定义; (2)用EQU伪指令可以把一个汇编符号赋给一个字符名称,而DATA伪指令则不能。 (3)DATA伪指令可将一个表达式的值赋给一个字符名称,所定义的字符名称也可以出现在表达式中,而用EQU定义的字符则不能这样使用。 (4)DATA伪指令常在程序中用来定义数据地址。,五、DB(定义字节指令) 其功能是从规定的地址

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号