




已阅读5页,还剩141页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 4章 MCS-51单片机汇编程序设计第 4章 MCS-51单片机汇编程序设计4.1 汇编语言程序设计概述 4.2 程序设计的基本结构及常用子程序4.3 编程及开发环境本章小结练习与思考题第 4章 MCS-51单片机汇编程序设计4.1 汇编语言程序设计概述4.1.1 汇编语言以及汇编语言程序设计特点1汇编语言的特点以助记符标识指令的程序设计语言,就是计算机的汇编语言,一条指令就是汇编语言的一条语句。其特点如下: 第 4章 MCS-51单片机汇编程序设计(1) 助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优秀的程序。(2) 使用汇编语言编程比使用高级语言困难。因为汇编语言是面向计算机的语言,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。(3) 汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能直接管理和控制硬件设备。(4) 汇编语言缺乏通用型,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。 第 4章 MCS-51单片机汇编程序设计2汇编语言程序设计的特点所谓程序设计就是编写计算机程序。汇编语言程序设计就是使用汇编指令来编写计算机程序。在进行单片机的汇编语言程序设计时请注意以下要点:(1) 在程序中要对数据的存放、寄存器和工作单元的使用等做出具体安排。(2) 设计人员必须对所使用的单片机的硬件结构有较为详细的了解,特别是对各类寄存器、端口、定时器 /计数器、中断等内容更应了如指掌,以便在程序设计中熟练使用。 第 4章 MCS-51单片机汇编程序设计4.1.2 MCS-51汇编语言伪指令计算机一般都配备汇编语言,每一条语句就是一条指令,命令 CPU执行一定的操作,完成规定的功能。但是用汇编语言编写的源程序,计算机不能直接执行,因为计算机只认识机器指令 (二进制编码 )。因此必须把汇编语言源程序通过汇编程序翻译成机器语言程序 (称为目标程序 ),计算机才能执行,这个翻译过程称为汇编。汇编程序对用汇编语言写的源程序进行汇编时,还要提供一些汇编用的控制指令,例如要指定程序或数据存放的起始地址;要给一些连续存放的数据确定单元等。但是,这些指令在汇编时并不产生目标代码,不影响程序的执行,所以称为伪指令。常用的伪指令有下列几种: 第 4章 MCS-51单片机汇编程序设计1 ORG(Origin,起点 )ORG伪指令总是出现在每段源程序或数据块的开始,它指明此语句后面的程序或数据块的起始地址。其一般格式为ORG nn (绝对地址或标号 )在汇编时由 nn确定此语句后面第一条指令 (或第一个数据 )的地址。该段源程序 (或数据块 )就连续存放在以后的地址内,直到遇到另一个 ORG nn语句为止。 第 4章 MCS-51单片机汇编程序设计例 4-1 ORG 8000HMOV R0, #50HMOV A , R4ADD A , R0MOV R3 , AORG伪指令说明其后面源程序的目标代码在存储器中存放的起始地址是 8000H,即:第 4章 MCS-51单片机汇编程序设计第 4章 MCS-51单片机汇编程序设计2 DB(Define Byte,定义字节 )一般格式为标号: DB 字节常数或字符或表达式其中,标号区段可有可无;字节常数或字符是指一个字节数据,或用逗号分开的字节串,或用引号括起来的 ASCII码字符串 (一个 ASCII字符相当于一个字节 )。此伪指令的功能是把字节常数或字节串存入内存连续单元中。 第 4章 MCS-51单片机汇编程序设计例 4-2ORG 9000HDATA1: DB 73H, 01H, 90HDATA2: DB 02H伪指令 ORG 9000H指定了标号 DATA1的地址为 9000H,伪指令 DB指定了数据 73H, 01H、 90H顺序地存放在从9000H开始的单元中, DATA2也是一个标号,它的地址与前一条伪指令 DB连续,为 9003H,因此数据 02H存放在 9003H单元中,即:第 4章 MCS-51单片机汇编程序设计第 4章 MCS-51单片机汇编程序设计3 DW(Dwfine Word ,定义一个字 )一般格式为标号码 DW 字或字符串DW伪指令的功能与 DB相似,其区别在于 DB用以定义一个字节,而 DW用以定义一个字 (规定为两个字节,即 16位二进制数 ),故 DW主要用来定义地址。存放时一个字需两个单元。例如:ORG 0100HDW 2389H, 75H0100H 0103H单元中分别存放 23H、 89H、 00H和75H。 第 4章 MCS-51单片机汇编程序设计4 EQU(Equate,等值 )一般格式为标号 EQU 操作数EQU伪指令的功能是将操作数赋予标号,使两边的两个量等值。例如:AREA EQU 1000H给标号 AREA赋值为 1000H,STK EQU AREA相当于 STK = AREA。若 AREA已赋值为 1000H,则 STK也为 1000H。使用 EQU伪指令给一个标号赋值后,这个标号在整个源程序中的值是固定的。也就是说,在一个源程序中,任何一个标号只能赋值一次。 第 4章 MCS-51单片机汇编程序设计5 END(汇编结束 )一般格式为标号: END 地址或标号 其中标号以及操作数字段的地址或标号不是必要的。END伪指令是一个结束标志,用来指示汇编语言源程序段在此结束。因此,在一个源程序中只允许出现一个END语句,并且它必须放在整个程序 (包括伪指令 )的最后面,是源程序模块的最后一个语句。如果 END语句出现在中间,则汇编程序将不汇编 END后面的语句。第 4章 MCS-51单片机汇编程序设计例 4-3ORG 8400HPRG0 EQU 8450HPRG1 EQU 80HPRG2 EQU B0HMOV A, R2MOV DPTR, #TBJ3 MOVC A, A+DPTRJMP A+DPTRTBJ3: DW PRG0 DB PRG1DB PRG2END第 4章 MCS-51单片机汇编程序设计上述程序中伪指令规定:程序存放在 8400H开始的单元中,字节数据放在标号地址 TBJ3开始的单元中,与程序区紧连着。标号 PRG0赋值为 8450H, PRG1赋值为 80H, PRG2赋值为 B0H。第 4章 MCS-51单片机汇编程序设计4.1.3 汇编语言的程序设计1编制程序的步骤1) 任务分析首先要对单片机应用系统所要完成的任务进行分析,明确系统的设计要求、功能要求和技术指标,然后还要对系统的硬件资源和工作环境进行分析,确定硬件系统资源。 第 4章 MCS-51单片机汇编程序设计2) 算法优化算法是解决问题的具体方法。一个应用系统经过分析、研究后,利用严密的数学方法或数学模型来描述,从而将一个实际的问题转化成计算机进行处理的问题。同一个问题的算法可以多样,结果也可能不尽相同,所以应对各种算法进行分析比较,并进行合理的优化。 第 4章 MCS-51单片机汇编程序设计3) 程序总体构思经过任务分析、算法优化后,就可以进行程序的总体构思,确定程序的结构和数据形式,并考虑资源的分配和参数的计算等。根据总体构思编制程序流程图。程序流程图可以分为总体流程图和局部流程图。总体流程图侧重反映程序的逻辑结构和各程序模块之间的相互关系。局部流程图反映程序模块的具体实施细节。在此基础上,一般还应编制一个资源分配表,包括数据结构和形式、参数计算、通信协议、各自程序的入口和出口说明等。 第 4章 MCS-51单片机汇编程序设计4) 编制源程序根据所用计算机的指令系统,按照已编制的程序框图用汇编语言编制出源程序。5) 上机调试将编制出的程序在计算机上调试,直至实现预定的功能。 第 4章 MCS-51单片机汇编程序设计2编制程序的方法和技巧1) 采用模块化设计计算机应用系统一般由多个模块组成,其中包括一个主程序和多个子程序模块。每一个模块都完成一个明确的任务,实现某个具体的功能,如发送、延时、显示等。采用模块化程序设计方法,就是将任务细化,分别设计具有能完成具体单一任务的独立程序并分别调试,最后将这些模块程序装配成整体程序并进行联调。 第 4章 MCS-51单片机汇编程序设计模块化程序设计把一个功能复杂的程序划分成若干个单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,有利于修改,提高了程序的可读性,通用性较强,使程序的结构一目了然。所以进行程序设计学习时,一开始就要建立程序模块化的设计思想。 第 4章 MCS-51单片机汇编程序设计2) 采用循环结构和子程序循环结构和子程序可减少程序容量,节省程序存储空间,提高程序代码利用效率。对于多重循环,要注意各重循环的初值和循环结束的条件,避免出现程序无休止循环的 “死循环 ”现象。对于通用的子程序,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈保护现场,并要特别注意堆栈操作的压入和弹出的顺序。对于中断处理子程序,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。这是由于在中断处理过程中难免对标志位产生影响,而中断处理结束返回主程序时可能会遇到以中断前的状态标志为依据的条件转移指令,如果标志位被破坏,则整个程序就乱了。 第 4章 MCS-51单片机汇编程序设计4.2 程序设计的基本结构及常用子程序一般把程序结构分为 3种形式,即顺序结构、分支结构和循环结构。下面介绍这 3种结构程序设计的基本方法。4.2.1 顺序程序结构顺序程序结构是指计算机按指令在存储器中存放的先后次序来执行程序,除非用特殊指令让它跳转。 第 4章 MCS-51单片机汇编程序设计例 4-4 编写 1 + 2的程序。首先用 ADD A, Rn指令,该指令是将寄存器 Rn中的数与累加器 A中的数相加,结果存于 A中,这就要求先将 1和 2分别送到 A中和寄存器 Rn中,而 Rn有 4组,每组有 8个单元R0 R7。首先要知道 Rn在哪组,默认值 (不设定值 )是第 0组,在同一个程序中,同组中的 Rn不能重复使用,不然会数据出错,唯独 A可反复使用,不出问题。明确了这些后,可写出程序如下: 第 4章 MCS-51单片机汇编程序设计ORG 0000H ;首地址MOV R2 , #02 ; (R2)=02HMOV A , #01 ; (A)=01HADD A , R2 ; (A)=(A)+(R2)=03HEND ;程序结束标志,必不可少的程序到此编写完成,然后在仿真软件中调试、验证,若不对,反复修改程序,直到完全正确为止。该程序若用 ADD A, direct指令编程时,可写出如下程序: 第 4章 MCS-51单片机汇编程序设计ORG 0000HMOV 30H , #02 ; (30H)=02HMOV A , #01 ; (A)=01HADD A , 30H ; (A)=(A)+(30H)=03HEND该程序若用 ADD A, #data指令编程时,可写出如下程序: ORG 0000HMOV A , #01 ; (A)=01HADD A , #02 ; (A)=(A)+02H=03HEND第 4章 MCS-51单片机汇编程序设计从以上例子可见,同一个程序有多种编写方法,思路不同编出来的程序不同,但结果都一样。我们认为最后一个程序较好。以上加法程序是最简单的形式,加法有多种:无进位加法、进位加法、有符号加法、无符号加法,还有浮点数的加法、单字节加法、双字节加法、多字节加法,等等。一般编写程序时,编成通用的程序。在调用通用程序之前,先判断是哪一种类型,再调相应的子程序。如以上 1+2的程序也可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论