《第4章MCS51单片机汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章MCS51单片机汇编语言程序设计.ppt(46页珍藏版)》请在优知文库上搜索。
1、【学习目的和要求】了解汇编语言程序设计中的顺序结构、分支结构、循环结构程序和子程序的设计方法。掌握代码转换和算术运算程序的基本编程方法和一些常用的子程序段,能正确地使用MCS-51指令编制汇编语言程序。第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计4.1 4.1 汇编语言程序设计方法汇编语言程序设计方法4.2 4.2 代码转换类程序代码转换类程序4.3 4.3 运算类程序运算类程序第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计4.1汇编语言程序设计方法汇编语言程序设计方法汇编语言特点:汇编语言特点:高效、便捷高效、便捷用汇
2、编语言编写一个程序的过程分为用汇编语言编写一个程序的过程分为3 3步:步:(1)分析课题,确定计算方法、运算步骤和顺序,画出流分析课题,确定计算方法、运算步骤和顺序,画出流程图。程图。(2)确定数据,包括工作单元的数量,分配存放单元。确定数据,包括工作单元的数量,分配存放单元。(3)按所使用计算机的指令系统,根据流程图编写汇编语按所使用计算机的指令系统,根据流程图编写汇编语言程序。言程序。顺序程序、分支程序和循环程序,再加上广泛使用的顺序程序、分支程序和循环程序,再加上广泛使用的子程序和中断服务子程序。子程序和中断服务子程序。1 1顺序程序顺序程序 2 2分支程序分支程序 程序中含有转移指令,
3、程序中含有转移指令,无条件分支,有条件分支无条件分支,有条件分支 有条件分支又分为:有条件分支又分为:单分支单分支结构和结构和多分支多分支结构。结构。3 3循环程序循环程序 4 4子程序子程序 5 5中断服务子程序中断服务子程序第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计1、顺序程序、顺序程序顺序程序的特点和设计方法:顺序程序的特点和设计方法:1.结构比较简单,按程序编写顺序依次执行,程结构比较简单,按程序编写顺序依次执行,程序流向不变。序流向不变。2.使用数据传送类指令较多,程序中没有控制转使用数据传送类指令较多,程序中没有控制转移类指令。移类指令。3.
4、可作为复杂程序中的某一组成部分。可作为复杂程序中的某一组成部分。第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计【例例4-1】双字节二进制数求补。双字节二进制数求补。程序说明:对程序说明:对R3(高高8位位)、R2(低低8位位)中的二进制定中的二进制定 点数取反加点数取反加1即可得到其互补数。即可得到其互补数。程序清单:程序清单:BINPL:MOV A,R2 CPL A;低位字节取反;低位字节取反ADD A,#01H;加;加1 MOV R2,A;低位字节补码送;低位字节补码送R2 MOV A,R3 CPL A;高位字节取反;高位字节取反 ADDC A,#00H
5、;加进位;加进位 MOV R3,A ;高位字节补码送;高位字节补码送R3 RET第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计2分支程序分支程序特点是程序中含有转移指令,转移指令有分为特点是程序中含有转移指令,转移指令有分为无条件转移无条件转移和和有条件转移有条件转移,因此分支程序也可分为无条件分支转移程,因此分支程序也可分为无条件分支转移程序和有条件分支转移程序。有条件分支转移程序按结构类序和有条件分支转移程序。有条件分支转移程序按结构类型来分,又分为型来分,又分为单分支转移结构单分支转移结构和和多分支转移结构多分支转移结构。一、分支转移结构一、分支转移结
6、构 1单分支转移结构单分支转移结构 一个入口,两个出口,两者选一。一个入口,两个出口,两者选一。JZJNZCJNEDJNZJNCJBJNBJBC第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计【例例4-2】设变量设变量x存放在存放在VAR单元之中,函数单元之中,函数值值 y存放在存放在FUNC中,按下式给中,按下式给y赋值赋值:0 x,10 x,00 x,1y程序清单:程序清单:VAR EQU 30HFUNC EQU 31HSTART:MOV A,VAR ;取;取xJZ COMP ;为;为0,转,转COMPJNB ACC.7,POSI ;0,转,转POSIMO
7、V A,#0FFH ;0,-1送入送入ASJMP COMPPOSI:MOV A,#01H ;+1送入送入ACOMP:MOV FUNC,AEND2 2多分支转移结构多分支转移结构 程序的判别部分有两个以上的出口流向。程序的判别部分有两个以上的出口流向。常见的两种常见的两种多分支选择指令多分支选择指令:间接转移指令间接转移指令:JMP A+DPTR;:JMP A+DPTR;比较转移指令比较转移指令:CJNE :CJNE A,direct,relA,direct,rel;CJNE CJNE A,#data,relA,#data,rel;CJNE CJNE Rn,#data,relRn,#data,r
8、el;CJNE CJNE Ri,#data,relRi,#data,rel;第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计【例例4-3】32个分支转移程序。根据入口条件转移到个分支转移程序。根据入口条件转移到32个个 目的地址。目的地址。入口入口:(R3)转移目的地址的序号转移目的地址的序号00H-1FH。出口:转移到相应子程序入口。出口:转移到相应子程序入口。程序清单:程序清单:MP:MOV A,R3 ;取序号;取序号RL A ;序号乘;序号乘2 MOV DPTR,#JTAB ;32个子程序个子程序 首地址送首地址送DPTR JMP A+DPTR ;根据序
9、号转移;根据序号转移JTAB:AJMP ROUT00 ;32个子程序首地址个子程序首地址 AJMP ROUT01 AJMP ROUT31 第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计3循环程序循环程序包括:包括:循环初始化、循环处理、循环控制、循环初始化、循环处理、循环控制、循环结束循环结束 计数循环控制结构计数循环控制结构 条件控制结构条件控制结构图4-4 循环程序流程图的两种组织方式第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计【例例4-4】若若Xi均为单字节数,并按均为单字节数,并按i(i=1n)的顺序存放在内部的
10、顺序存放在内部 RAM从从50H开始的单元中,开始的单元中,n放在放在R2中,要求将它中,要求将它们们 的和的和(双字节双字节)放在放在R3、R4中。中。程序清单:程序清单:ADD1:MOV R3,#00H ;清和存储单元;清和存储单元 MOV R4,#00H MOV R2,#n ;置循环计数初值;置循环计数初值MOV R0,#50HLOOP:MOV A,R4 ;取部分和低位;取部分和低位 ADD A,R0 ;与;与Xi相加相加 MOV R4,A INC R0 ;Xi地址加地址加1 CLR A ADDC A,R3 ;低位字节向高位进位;低位字节向高位进位 MOV R3,A DJNZ R2,LO
11、OP;未加完继续重复;未加完继续重复 END入口:入口:Xi存放在从存放在从50H开始的单元;开始的单元;n放在放在R2中。中。出口:和存放于出口:和存放于R3、R4中中第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计【例例4-5】已知已知8051单片机使用的晶振为单片机使用的晶振为6MHz,要求,要求 设计一个软件延时程序,延时时间为设计一个软件延时程序,延时时间为10ms。延时程序的延时时间主要与所用晶振频率和延时程序中的循延时程序的延时时间主要与所用晶振频率和延时程序中的循环次数有关。由晶振频率为环次数有关。由晶振频率为6MHz6MHz可知,一个机器周期
12、为可知,一个机器周期为2 2。入口:入口:(R0)=(R0)=毫秒数;毫秒数;(R1)=1ms(R1)=1ms延时预定值。延时预定值。出口:定时到,退出程序。出口:定时到,退出程序。程序清单:程序清单:ORG 2000H 周期数周期数MOV R0,#0AH ;毫秒数;毫秒数R0 1DL2:MOV R1,#MT ;1ms延时值延时值R1 1DL1:NOP 1NOP 1 DJNZ R1,DL1 ;1ms延时循环延时循环 2 DJNZ R0,DL2 ;10ms延时循环延时循环 2END该延时程序实际上是一个双重循环程序。内循环的预定值MT尚需计算:(1+1+2)2 MT=1000(s)MT=125=
13、7DH用7DH代替程序中的MT,则该程序执行后,能实现10ms的延时。若考虑其他指令的时间因素,则该段延时程序的精确延时时间应为:12 s+(1+2)2 s+(1+1+2)2 s 12510=10062(s)第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计4、子程序设计、子程序设计子程序的特点和设计方法:子程序的特点和设计方法:1.子程序的第一条指令的地址为子程序的入口地址,子程序的第一条指令的地址为子程序的入口地址,该指令前应有标号。该指令前应有标号。2.主程序中用调用指令调用子程序,在子程序末尾用返回指令从子程序主程序中用调用指令调用子程序,在子程序末尾用
14、返回指令从子程序返回到主程序。返回到主程序。3.在子程序的开始,使用压栈指令把需要保护的内容压入堆栈;在返回在子程序的开始,使用压栈指令把需要保护的内容压入堆栈;在返回主程序前,使用弹出指令把堆栈中保护的内容送回原来的寄存器或存储主程序前,使用弹出指令把堆栈中保护的内容送回原来的寄存器或存储单元中。单元中。4.在子程序中尽量使用相对转移指令,以便子程序放在内存的任何区域在子程序中尽量使用相对转移指令,以便子程序放在内存的任何区域都能被主程序调用。都能被主程序调用。5.子程序的入口参数由主程序通过相关的工作寄存器、特殊功能寄存器、子程序的入口参数由主程序通过相关的工作寄存器、特殊功能寄存器、片内
15、片内RAM或堆栈等传递给子程序;子程序的出口参数由子程序通过相或堆栈等传递给子程序;子程序的出口参数由子程序通过相关的工作寄存器、特殊功能寄存器、片内关的工作寄存器、特殊功能寄存器、片内RAM或堆栈等传递给主程序。或堆栈等传递给主程序。第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计【例例4-6】用程序实现用程序实现 ,设,设a、b、c分别存于内部分别存于内部RAM 的的30H、31H、32H 单元。单元。22bac主程序清单:主程序清单:STAR:MOV A,30H ACALL SQR;调用查表子程序;调用查表子程序 MOV R1,A;暂存暂存R1中中 MO
16、V A,31H ACALL SQR ;调查表子程序;调查表子程序 ADD A,R1;平方和存;平方和存A中中 MOV 32H,A SJMP$;等待;等待子程序清单:子程序清单:SQR:INC A ;加;加RET占的一个字节占的一个字节 MOVC A,A+PC ;查平方表;查平方表 RETTAB:DB 0,1,4,9,16 DB 25,36,49,64,81 END 子程序入口条件:子程序入口条件:(A)=待查表的数。待查表的数。出口条件:出口条件:(A)=平方值。平方值。第四章第四章 MCS-51MCS-51单片机汇编语言程序设计单片机汇编语言程序设计4.2代码转换类程序代码转换类程序(1)双字节二进制数转换成双字节二进制数转换成BCD数。数。转换方法:转换方法:因为因为 所以将二进制数从最高位逐次左移入所以将二进制数从最高位逐次左移入BCD码寄存器的最低位,并且每次都码寄存器的最低位,并且每次都实现实现 的运算。共循环的运算。共循环16次,由次,由R7控制。控制。0141520114152.220.aaaaaaaia 2.入口:入口:R3R2(16位无符号二进制整数位无符号二进制整数