第4章 MCS-51单片机汇编程序设计.ppt
《第4章 MCS-51单片机汇编程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章 MCS-51单片机汇编程序设计.ppt(146页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第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、,占用存储空间小,运行速度快,因此汇编语言能编写出最优秀的程序。(2)使用汇编语言编程比使用高级语言困难。因为汇编语言是面向计算机的语言,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。(3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能直接管理和控制硬件设备。(4)汇编语言缺乏通用型,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。第4章 MCS-51单片机汇编程序设计2汇编语言程序设计的特点汇编语言程序设计的特点所谓程序设计就是编写计算机程序。汇编语言程序设计就是使用汇编指令来编写计算机程序。在进行单片机的汇编语言程序设计时请注意
3、以下要点:(1)在程序中要对数据的存放、寄存器和工作单元的使用等做出具体安排。(2)设计人员必须对所使用的单片机的硬件结构有较为详细的了解,特别是对各类寄存器、端口、定时器/计数器、中断等内容更应了如指掌,以便在程序设计中熟练使用。第4章 MCS-51单片机汇编程序设计4.1.2 MCS-51汇编语言伪指令汇编语言伪指令计算机一般都配备汇编语言,每一条语句就是一条指令,命令CPU执行一定的操作,完成规定的功能。但是用汇编语言编写的源程序,计算机不能直接执行,因为计算机只认识机器指令(二进制编码)。因此必须把汇编语言源程序通过汇编程序翻译成机器语言程序(称为目标程序),计算机才能执行,这个翻译过
4、程称为汇编。汇编程序对用汇编语言写的源程序进行汇编时,还要提供一些汇编用的控制指令,例如要指定程序或数据存放的起始地址;要给一些连续存放的数据确定单元等。但是,这些指令在汇编时并不产生目标代码,不影响程序的执行,所以称为伪指令。常用的伪指令有下列几种:第4章 MCS-51单片机汇编程序设计1ORG(Origin,起点,起点)ORG伪指令总是出现在每段源程序或数据块的开始,它指明此语句后面的程序或数据块的起始地址。其一般格式为ORGnn(绝对地址或标号)在汇编时由nn确定此语句后面第一条指令(或第一个数据)的地址。该段源程序(或数据块)就连续存放在以后的地址内,直到遇到另一个ORGnn语句为止。
5、第4章 MCS-51单片机汇编程序设计例例4-1 ORG 8000HMOV R0,#50HMOV A,R4ADD A,R0MOVR3,AORG伪指令说明其后面源程序的目标代码在存储器中存放的起始地址是8000H,即:第4章 MCS-51单片机汇编程序设计第4章 MCS-51单片机汇编程序设计2DB(Define Byte,定义字节,定义字节)一般格式为标号:DB字节常数或字符或表达式其中,标号区段可有可无;字节常数或字符是指一个字节数据,或用逗号分开的字节串,或用引号括起来的ASCII码字符串(一个ASCII字符相当于一个字节)。此伪指令的功能是把字节常数或字节串存入内存连续单元中。第4章 M
6、CS-51单片机汇编程序设计例例4-2ORG9000HDATA1:DB73H,01H,90HDATA2:DB02H伪指令ORG9000H指定了标号DATA1的地址为9000H,伪指令DB指定了数据73H,01H、90H顺序地存放在从9000H开始的单元中,DATA2也是一个标号,它的地址与前一条伪指令DB连续,为9003H,因此数据02H存放在9003H单元中,即:第4章 MCS-51单片机汇编程序设计第4章 MCS-51单片机汇编程序设计3DW(Dwfine Word,定义一个字,定义一个字)一般格式为标号码DW字或字符串DW伪指令的功能与DB相似,其区别在于DB用以定义一个字节,而DW用以
7、定义一个字(规定为两个字节,即16位二进制数),故DW主要用来定义地址。存放时一个字需两个单元。例如:ORG0100HDW2389H,75H0100H0103H单元中分别存放23H、89H、00H和75H。第4章 MCS-51单片机汇编程序设计4EQU(Equate,等值,等值)一般格式为标号EQU操作数EQU伪指令的功能是将操作数赋予标号,使两边的两个量等值。例如:AREAEQU1000H给标号AREA赋值为1000H,STKEQUAREA相当于STK=AREA。若AREA已赋值为1000H,则STK也为1000H。使用EQU伪指令给一个标号赋值后,这个标号在整个源程序中的值是固定的。也就是
8、说,在一个源程序中,任何一个标号只能赋值一次。第4章 MCS-51单片机汇编程序设计5END(汇编结束汇编结束)一般格式为标号:END地址或标号其中标号以及操作数字段的地址或标号不是必要的。END伪指令是一个结束标志,用来指示汇编语言源程序段在此结束。因此,在一个源程序中只允许出现一个END语句,并且它必须放在整个程序(包括伪指令)的最后面,是源程序模块的最后一个语句。如果END语句出现在中间,则汇编程序将不汇编END后面的语句。第4章 MCS-51单片机汇编程序设计例例4-3ORG8400HPRG0EQU8450HPRG1EQU80HPRG2EQUB0HMOVA,R2MOVDPTR,#TBJ
9、3MOVCA,A+DPTRJMPA+DPTRTBJ3:DWPRG0DBPRG1DBPRG2END第4章 MCS-51单片机汇编程序设计上述程序中伪指令规定:程序存放在8400H开始的单元中,字节数据放在标号地址TBJ3开始的单元中,与程序区紧连着。标号PRG0赋值为8450H,PRG1赋值为80H,PRG2赋值为B0H。第4章 MCS-51单片机汇编程序设计4.1.3 汇编语言的程序设计汇编语言的程序设计1编制程序的步骤编制程序的步骤1)任务分析首先要对单片机应用系统所要完成的任务进行分析,明确系统的设计要求、功能要求和技术指标,然后还要对系统的硬件资源和工作环境进行分析,确定硬件系统资源。第
10、4章 MCS-51单片机汇编程序设计2)算法优化算法优化算法是解决问题的具体方法。一个应用系统经过分析、研究后,利用严密的数学方法或数学模型来描述,从而将一个实际的问题转化成计算机进行处理的问题。同一个问题的算法可以多样,结果也可能不尽相同,所以应对各种算法进行分析比较,并进行合理的优化。第4章 MCS-51单片机汇编程序设计3)程序总体构思程序总体构思经过任务分析、算法优化后,就可以进行程序的总体构思,确定程序的结构和数据形式,并考虑资源的分配和参数的计算等。根据总体构思编制程序流程图。程序流程图可以分为总体流程图和局部流程图。总体流程图侧重反映程序的逻辑结构和各程序模块之间的相互关系。局部
11、流程图反映程序模块的具体实施细节。在此基础上,一般还应编制一个资源分配表,包括数据结构和形式、参数计算、通信协议、各自程序的入口和出口说明等。第4章 MCS-51单片机汇编程序设计4)编制源程序根据所用计算机的指令系统,按照已编制的程序框图用汇编语言编制出源程序。5)上机调试将编制出的程序在计算机上调试,直至实现预定的功能。第4章 MCS-51单片机汇编程序设计2编制程序的方法和技巧编制程序的方法和技巧1)采用模块化设计计算机应用系统一般由多个模块组成,其中包括一个主程序和多个子程序模块。每一个模块都完成一个明确的任务,实现某个具体的功能,如发送、延时、显示等。采用模块化程序设计方法,就是将任
12、务细化,分别设计具有能完成具体单一任务的独立程序并分别调试,最后将这些模块程序装配成整体程序并进行联调。第4章 MCS-51单片机汇编程序设计模块化程序设计把一个功能复杂的程序划分成若干个单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,有利于修改,提高了程序的可读性,通用性较强,使程序的结构一目了然。所以进行程序设计学习时,一开始就要建立程序模块化的设计思想。第4章 MCS-51单片机汇编程序设计2)采用循环结构和子程序循环结构和子程序可减少程序容量,节省程序存储空间,提高程序代码利用效率。对于多重循环,要注意各重循环的初值和循环结束的条件,避免出现程序无休止循环的“死循环”现
13、象。对于通用的子程序,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈保护现场,并要特别注意堆栈操作的压入和弹出的顺序。对于中断处理子程序,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。这是由于在中断处理过程中难免对标志位产生影响,而中断处理结束返回主程序时可能会遇到以中断前的状态标志为依据的条件转移指令,如果标志位被破坏,则整个程序就乱了。第4章 MCS-51单片机汇编程序设计4.2 程序设计的基本结构及常用子程序程序设计的基本结构及常用子程序一般把程序结构分为3种形式,即顺序结构、分支结构和循环结构。下面介绍这3种结构程序设计的基本方法。4.2.1
14、顺序程序结构顺序程序结构顺序程序结构是指计算机按指令在存储器中存放的先后次序来执行程序,除非用特殊指令让它跳转。第4章 MCS-51单片机汇编程序设计例例4-4编写1+2的程序。首先用ADDA,Rn指令,该指令是将寄存器Rn中的数与累加器A中的数相加,结果存于A中,这就要求先将1和2分别送到A中和寄存器Rn中,而Rn有4组,每组有8个单元R0R7。首先要知道Rn在哪组,默认值(不设定值)是第0组,在同一个程序中,同组中的Rn不能重复使用,不然会数据出错,唯独A可反复使用,不出问题。明确了这些后,可写出程序如下:第4章 MCS-51单片机汇编程序设计ORG0000H;首地址MOVR2,#02;(
15、R2)=02HMOVA,#01;(A)=01HADDA,R2;(A)=(A)+(R2)=03HEND;程序结束标志,必不可少的程序到此编写完成,然后在仿真软件中调试、验证,若不对,反复修改程序,直到完全正确为止。该程序若用ADDA,direct指令编程时,可写出如下程序:第4章 MCS-51单片机汇编程序设计ORG0000HMOV30H,#02;(30H)=02HMOVA,#01;(A)=01HADDA,30H;(A)=(A)+(30H)=03HEND该程序若用ADDA,#data指令编程时,可写出如下程序:ORG0000HMOVA,#01;(A)=01HADDA,#02;(A)=(A)+02
16、H=03HEND第4章 MCS-51单片机汇编程序设计从以上例子可见,同一个程序有多种编写方法,思路不同编出来的程序不同,但结果都一样。我们认为最后一个程序较好。以上加法程序是最简单的形式,加法有多种:无进位加法、进位加法、有符号加法、无符号加法,还有浮点数的加法、单字节加法、双字节加法、多字节加法,等等。一般编写程序时,编成通用的程序。在调用通用程序之前,先判断是哪一种类型,再调相应的子程序。如以上1+2的程序也可以这样编写:先将加数和被加数分别送入40H、41H单元,加完后和送入42H单元。它的完整程序是:第4章 MCS-51单片机汇编程序设计ORG0000HMOV40H,#01HMOV4
17、1H,#02HAD1:MOVR0,#40H;设R0为数据指针MOVA,R0;取N1INCR0;修改指针ADDA,R0;N1+N2INCR0MOVR0,A;存结果流程图如图4-1所示。第4章 MCS-51单片机汇编程序设计图4-1单字节加法程序流程图第4章 MCS-51单片机汇编程序设计例例4-5将两个半字节数合并成一个1字节数。设片内RAM50H,51H单元各存放1个8位二进制数,要求取出两个单元中的低半字节,合并成一个字节后,存入52H单元(50H单元的内容为86H,51H单元的内容为73H,结果52H单元的内容为63H),程序流程图如图4-2所示。程序如下:ORG0000HSTART:MO
18、V R1,#50H;(R1)=50HMOV A,R1;(A)=(R1)=(50H)=86HANL A,#0FH;取第一个半字节,(A)=06H第4章 MCS-51单片机汇编程序设计SWAP A;(A)=60HINC R1;(R1)=51HXCHA,R1;取第二字节,(A)=73H(51H)=60HANLA,#0FH;取第二个半字节,(A)=03HORL A,R1;拼字,(A)=63HINCR1MOV R1,A;存放结果END此例相反的过程是将字节拆开分成两个半字节,例如将50H单元中的内容拆开后分别送51H、52H单元中。第4章 MCS-51单片机汇编程序设计图4-2半字节处理程序流程图第4章
19、 MCS-51单片机汇编程序设计4.2.2 分支程序结构分支程序结构在处理实际事务中,只用简单程序设计的方法是不够的。因为大部分程序总包含有判断、比较等情况,并根据判断、比较的结果转向不同的分支。下面举两个分支程序的例子。例例4-6两个无符号数比较大小。设在两个连续外部RAM单元ST1(8040H)和ST2(8041H)中存放两个不带符号的二进制数,找出其中的大数存入ST3(8042H)单元中。程序流程图如图4-3所示。第4章 MCS-51单片机汇编程序设计图4-3例4-6程序流程图第4章 MCS-51单片机汇编程序设计程序如下:ORG8000HST1EQU8040HSTART1:CLRC;进
20、位位清0MOVDPTR,#ST1;设数据指针MOVXA,DPTR;取第一数MOVR2,A;暂存R2INCDPTRMOVXA,DTPR;取第二个数MOV R3,A;暂存SUBBA,R2;两数比较第4章 MCS-51单片机汇编程序设计MOV A,R3JNCBIG0MOVA,R2;第一数大BIG0:INCDPTRMOVXDPTR,A;存大数SJMP$第4章 MCS-51单片机汇编程序设计上面程序中,用减法指令SUBB来比较两数的大小。由于这是一条带借位的减法指令,在执行该指令前,先把进位位清0。用减法指令通过借位(CY)的状态判断两数的大小,是两个无符号数比较大小时常用的方法。设两数X,Y,当XY时
21、,XY无借位(CY)产生;反之借位为1,表示XY。用减法指令比较大小,会破坏累加器中的内容,故做减法前先保存累加器中的内容。执行JNC指令后,形成了分支。执行SJMP指令后,实现程序的转移。第4章 MCS-51单片机汇编程序设计例例4-7将ASCII码表的ASCII码转换为十六进制数,如果ASCII码不能转换成十六进制数,用户标志位置1。由ASCII码表可知,30H39H为09的ASCII码,41H46H为AF的ASCII码。在这一范围内的ASCII码减30H或37H就可以获得对应的十六进制数。设ASCII码放在累加器A中,转换结果放回A中。程序流程图如图4-4所示。第4章 MCS-51单片机
22、汇编程序设计图4-4ASCII码转换为十六进制数程序流程图第4章 MCS-51单片机汇编程序设计程序如下:ORG0000HSTART:CLRC;CY清0SUBBA,#30H;A=(A)30HCYJCNASC;(A)0,不是十六进制数CJNEA,#0AH,MM;(A)与0AH比较大小MM:JCASC;0(A)09H)CJNEA,#10H,NN;(A)与10H比较大小NN:JC ASC;(A)0,不需转换 CPLA;A求反ADDA,#1;A加1SETB ACC.7;保存符号NCH:SJMP NCH分支程序在实际使用中用处很大,除了用于比较数的大小之外,常用于控制子程序的转移。第4章 MCS-51单
23、片机汇编程序设计4.2.3 循环程序结构循环程序结构在程序设计中,只有简单程序和分支程序是不够的。因为简单程序的每条指令只执行一次,而分支程序则根据条件的不同,会跳过一些指令,执行另一些指令。它们的特点是,每一条指令至多执行一次。在处理实际事务时,有时会遇到多次重复处理的问题,用循环程序的方法来解决就比较合适。循环程序中的某些指令可以反复执行多次。采用循环程序,使程序缩短,节省存储单元。重复次数越多,循环程序的优越性就越明显。但是程序的执行时间并不节省。由于要有循环准备、结束判断等指令,速度要比简单程序稍慢些。第4章 MCS-51单片机汇编程序设计1循环程序的组成部分循环程序的组成部分循环程序
24、一般由5部分组成:(1)初始化部分:为循环程序做准备。如:设置循环次数计数器的初值,地址指针置初值,为循环变量赋初值等。(2)处理部分:为反复执行的程序段,是循环程序的实体。(3)修改部分:每执行一次循环体后,对指针作一次修改,使指针指向下一个数据所在位置,为进入下一轮处理做准备。第4章 MCS-51单片机汇编程序设计(4)控制部分:根据循环次数计数器的状态或循环条件,检查循环是否能继续进行,若循环次数到或循环条件不满足,应控制退出循环,否则继续循环。通常(2)、(3)、(4)部分又称为循环体。(5)结束部分:分析及存放执行结果。第4章 MCS-51单片机汇编程序设计2循环程序的结构形式循环程
25、序的结构形式循环程序有如下两种形式:(1)先进入处理部分,再控制循环。即至少执行一次循环体。如图4-5(a)所示。(2)先控制循环,后进入处理部分。即先根据判断结果,控制循环的执行与否,有时可以不进入循环体就退出循环程序,如图4-5(b)所示。第4章 MCS-51单片机汇编程序设计图4-5循环程序流程图第4章 MCS-51单片机汇编程序设计循环结构的程序,不论是先处理后判断,还是先判断后处理,其关键是控制循环的次数。根据需要解决问题的实际情况,对循环次数的控制有多种。循环次数已知,用计数器来控制循环;循环次数未知,可以按条件控制循环。第4章 MCS-51单片机汇编程序设计3循环程序的分类循环程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 MCS-51单片机汇编程序设计 MCS 51 单片机 汇编程序 设计
限制150内