单片机原理及其应用第五章

上传人:痛*** 文档编号:167789358 上传时间:2022-11-05 格式:PPT 页数:53 大小:2.21MB
收藏 版权申诉 举报 下载
单片机原理及其应用第五章_第1页
第1页 / 共53页
单片机原理及其应用第五章_第2页
第2页 / 共53页
单片机原理及其应用第五章_第3页
第3页 / 共53页
资源描述:

《单片机原理及其应用第五章》由会员分享,可在线阅读,更多相关《单片机原理及其应用第五章(53页珍藏版)》请在装配图网上搜索。

1、第五章 汇编语言程序设计 第五章第五章 汇编语言程序设计汇编语言程序设计5-1 汇编语言概述汇编语言概述5-2 简单程序设计简单程序设计5-3 分支程序分支程序5-4 循环程序循环程序5-5 查表查表程序程序5-6 子子程序程序第五章 汇编语言程序设计 补充补充 汇编语言源程序的格式 源程序基本上由主程序、子程序、中断服务子程序组成。编制汇编语言源程序根据MCS-51单片机ROM的出厂内部定义,一般按这样的主框架编制:;程序变量定义区1 SDABITP1.3;定义SDA位变量 2 IO EQUP0;定义I/O等值P0口3 ByteCon DATA 30H;定义字节变量ByteCon;程序主体部

2、分4 ORG0000H;程序段从0000H单元开始存放 5 LJMPMAIN;跳到主程MAIN6 ORG0003H;从0003H开始存放程序段7 LJMPINTERUPT1;跳到外部中断0处理子程序第五章 汇编语言程序设计 前言前言 汇编语言源程序的格式8 ORG 0030H ;从0030H开始存放程序段9 MAIN:;主程序标号说明10MOV SP,#30H ;设置堆栈指针,可以大于30H11LCALLINITIATE ;调用初始化子程12 FCY:;控制程序循环标号LCALLSUB ;调用功能子程序13LJMPFCY ;跳到FCY构成循环14ORG xxxx ;以下功能程序的存放地址15

3、INITIATE:;初始化子程序标号16RET ;子程序返回17 SUB:;功能子程序标号18RET ;子程序返回19 INTERUPT1:;外部中断0功能程序20RETI ;中断返回21 TABLE:;表的标号22DB 00H,01H ;表的数据 END ;源程序结束,停止汇编。第五章 汇编语言程序设计 前言前言 汇编语言源程序的格式第13行:把一些符号或变量定义成通俗的符号。第4、6、8、14行:表示程序存储的开始地址。第5行:使CPU在执行程序时,从0000H跳过各中断源的入口地址,主程序以跳转的目标地址作为起始地址开始编写。第6行:中断服务程序的存储地址。第9、12、15、17、19行

4、:为程序语句标号。第10行:设置堆栈指针一般最小设30H,栈区够用还可以增大。第21、22行:为查表指令的表。第五章 汇编语言程序设计 5-1 汇编语言概述汇编语言概述一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试当接到程序设计的任务后,首先对任务进行详尽的分析,搞清楚已知的数据和想要得到的结果,程序应该完成何种的功能。第五章 汇编语言程序设计 4-4 汇编语言程序设计基础汇编语言程序设计基础一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画

5、流程图画流程图 编写程序编写程序 上机调试上机调试 根据实际问题的要求和指令系统的特点,确定解决问题的具体步骤。根据任务要求,对不同的计算方法进行比较,选择最适宜的算法。第五章 汇编语言程序设计 4-4 汇编语言程序设计基础汇编语言程序设计基础一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试将解决问题的具体步骤用一种约定的几何图形、指向线和必要的文字说明描述出来的图形。第五章 汇编语言程序设计 4-4 汇编语言程序设计基础汇编语言程序设计基础一、汇编语言程序设计的一般步骤一、汇编语言程序设计的

6、一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试 经过上述各步骤后,解决问题的思路已经非常清楚,所以接下来就可以按流程图的顺序对每一个功能框选用合适的指令编写出汇编语言程序。第五章 汇编语言程序设计 4-4 汇编语言程序设计基础汇编语言程序设计基础一、一、汇编语言程序设计的一般步骤汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试在应用程序的设计中,几乎没有一个程序只经过一次编写就完全成功的,所以必须经过上机调试。第五章 汇编语言程序设计 二、评价程序质量的标准二、评价程序质量的

7、标准 (1)程序的执行时间。程序的执行时间。(2)程序所占用的内存字节数。程序所占用的内存字节数。(3)程序的逻辑性、可读性。程序的逻辑性、可读性。(4)程序的兼容性、可扩展性。程序的兼容性、可扩展性。(5)程序的可靠性。程序的可靠性。第五章 汇编语言程序设计 三、汇编程序结构 按程序的走向可以将程序分成按程序的走向可以将程序分成5种结构:种结构:简单程序简单程序 分支程序分支程序 循环程序循环程序 查表程序查表程序 子程序子程序第五章 汇编语言程序设计 简单程序简单程序 简单程序是指一种无分支的顺序执行程序,即CPU从第一条指令开始依次依次执行每一条指令,直到最后一条指令。这种程序虽然比较简

8、单,但也能完成一定的功能,并且往往也是构成复杂程序的基础。拆字程序 拼字程序 求和程序 第五章 汇编语言程序设计 ORG 1000HMOV A,R0ADD A,R2MOV R0,AMOV A,R1ADDC A,R3MOV R1,AMOV A,#0ADDC A,#0MOV R2,ASJMP$END求和程序求和程序 例:例:设2个16位二进制数分别存于R1R0和R3R2中,求二者的和,并将和存于R2R1R0。解解:分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试(R0)+(R2)送R0单元;(R1)+(R3)+Cy送R1单元;Cy+0送R2单元开始(R0)+(R2)

9、送R0单元(R1)+(R3)+Cy送R1单元Cy+0送R2单元结束第五章 汇编语言程序设计 拆字程序拆字程序 例:例:将20H单元中存放的一个两位的BCD拆开并转换成ASCII码,然后存入21H 和22H单元。解解:分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试22H21H20H89H38H39H拆开BCD码,然后分别或#30H即可。ORG 1000HMOV R0,#22HMOV R0,#0MOV A,20H XCHD A,R0ORL 22H,#30HSWAP AORL A,#30HMOV 21H,ASJMP$END开始将22H清零将A、22H中低4位交换将2

10、2H内容或#30H累加器A中高低4位交换20H单元的内容送AA与#30H相或后送21H结束第五章 汇编语言程序设计 拼字程序拼字程序 例:例:将30H和31H单元中存放的2个一字节BCD码组合成一个2位的BCD码存入32H单元,31H单元中的数为低4位。解解:分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试32H31H30H04H07H47H将30H单元的高4与低4交换,再与31H单元相或 MOV A,30HSWAP AORL A,31HMOV 32H,ASJMP$开始将30H单元的内容送A将A中高、低4位交换将A中内容与31H单元内容相或将A中内容存入32H单

11、元结束第五章 汇编语言程序设计 进制转换程序进制转换程序 例:例:将内部RAM的20H单元中的8位无符号二进制数转换为3位BCD码,并将结果存放在FIRST(百位)和SECOND(十位、个位)两单元中。解解:分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试22H21H十位、个位百位先除以100,取出百位;再除以10位,取出十位和个位。FIRST DATA 22HSECOND DATA 21HORG 1000HHBCD:MOV A,20HMOV B,#100DIV ABMOV FIRST,AMOV A,BMOV B,#10DIV ABSWAP AORL A,BMO

12、V SECOND,ASJMP$开始将20H单元的内容送A将A除以100将A中内容存入FIRSTBA,再将A除以10结束将A、B合成后存入SECOND第五章 汇编语言程序设计 分支程序分支程序 分支程序就是条件分支程序,即根据不同的条件执行不同的程序段。在编写分支程序时,关键是如何判断分支的条件。在MCS-51中可以直接用来判断分支条件的指令不是很多,只有累加器为零(或不为零)、比较条件转移指令CJNE等,但它还提供位条件转移指令,如JC,JB等。把这些指令结合在一起使用,就可以完成各种各样的条件判断,如正负判断、溢出判断、大小判断等。分段函数 符号函数 比较大小 第五章 汇编语言程序设计 例:

13、例:两个无符号数分别存于ONE和TWO单元,试比较它们的大小,将较大者存人MAX单元。若两数相等则任存入一个即可。解解:分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试比较大小:简单分支程序比较大小:简单分支程序MOV A,ONECJNEA,TWO,NEXT1NEXT1:JC NEXT2 MOV MAX,ONESJMP$NEXT2:MOV MAX,TWO SJMP$返回返回开始将ONE单元的内容送A结束A TWO将TWO单元内容送MAX单元YN将ONE单元内容送MAX单元第五章 汇编语言程序设计 例:例:设变量X存放于VAR单元,函数值Y存放在FUNC单元。试按

14、照下式的要求给Y赋值。解解:Y=分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试符号函数符号函数010001XXXVARDATA30HFUNCDATA31H MOV A,VAR JZ COMP JNB ACC.7,POSI MOV A,#0FFH SJMP COMPPOSI:MOV A,#1COMP:MOV FUNC,A SJMP$开始将VAR单元的内容送A结束A=0?将0送FUNC单元A 0?将1送FUNC单元将-1送FUNC单元YNYN第五章 汇编语言程序设计 例:例:设变量X存放于VAR单元,函数值Y存放在FUNC单元。试按照下式的要求给Y赋值。解解:Y=

15、分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试分段函数分段函数MOV A,VARCJNEA,#10,NEXT1NEXT1:JC NEXT2 MOV R0,#1CJNE A,#21,NEXT3NEXT3:JNC NEXT4 MOV R0,#0 SJMP NEXT4NEXT2:MOV R0,#0FFHNEXT4:MOV FUNC,R0 SJMP$10110200201XXX开始将VAR单元的内容送A结束A 20?将0送FUNC单元A 1 0?将-1送FUNC单元将1送FUNC单元YYNN第五章 汇编语言程序设计 多重分支程序设计多重分支程序设计散转法散转法 根据某

16、种输入或运算的结果转向各个处理程序称为散转多分支,即散转程序。(1)利用转移指令表实现转移利用转移指令表实现转移 将转移到不同程序的转移指令列成表格,判断条件后查表,执行表中的转移指令。【例】【功能】某菜单有9项。根据输入数码转去执行相应的子程序。即输入“1”,执行子程序1;输入“2”,执行子程序2;依次类推。第五章 汇编语言程序设计【分析】用直接转移指令组成一个转移表,然后把菜单号读入累加器(A),转移表首地址放入DPTR中,利用JMP A+DPTR实现散转。【入口参数】(R3)=存输入键盘码19。【出口参数】转移到相应的子程序入口。ORG 0030HKEY_JMP:MOV DPTR,#PR

17、GTBL;子程序入口首地址送DPTR MOV A,R3;把键盘输入缓冲区内容送累加器(A)DEC A;由于输入数码为19,因此需减1 MOV B,#03H第五章 汇编语言程序设计 MUL AB ;由于长跳转指令LJMP占用3B,;各子程序入口地址相距3B JMP A+DPTR;根据输入码,执行相应的子程序 ORG 2000H ;程序入口地址表PRGTBL:LJMP NO1 LJMP NO2 LJMP NO3 LJMP NO4 LJMP NO5 LJMP NO6 LJMP NO7 LJMP NO8 LJMP NO9 END第五章 汇编语言程序设计(2)利用转向地址表实现转移利用转向地址表实现转移

18、 这种方法将转移地址列成表格,将表格的内容作为转移的目标地址。【例】【功能】根据R3(0n)的内容转向对应的程序;处理程序的入口符号地址分别为PR0PRn(n256)【分析】将PR0 PRn入口地址(16位地址)列在表格中,故每一项占两个单元;PRn在表中的偏移量为2n,因此将R3的内容乘“2”即得PRn在表中的偏移地址;从偏移地址2n和2n+1两个单元分别取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP A+DPTR指令(A先清零)即转移到PRn入口执行。第五章 汇编语言程序设计【入口参数】(R3)=0n 转移。【出口参数】转移到相应的子程序入口。PR0EQU0110HPR1EQ

19、U0220HPR2EQU0330HORG0030HKEY_JMP:MOVDPTR,#TAB MOVA,R3ADDA,R3;(A)(R3)*2JNCNADDINCDPH;(R3*2)256第五章 汇编语言程序设计 NADD:MOV R3,A MOVC A,A+DPTR XCHA,R3 ;转移地址高8位 INCA MOVC A,A+DPTR MOVDPL,A;转移地址低8位 MOVDPH,R3 CLRA JMPA+DPTR TAB:DW PR0,PR1,PR2,PRn PR0:处理程序0 PR1:处理程序1 PRn:处理程序n END第五章 汇编语言程序设计(3)利用地址偏移量表实现散转利用地址偏

20、移量表实现散转 这种方法将转移目标地址与表首地址差列表,作为转移目标地址。【例】【功能】有5个按键 0,1,2,3,4,根据按下的键转向不同的处理程序,分别为PR0,PR1,PR2,PR3,PR4。【分析】汇编时,利用了伪指令的数学计算功能,标首地址加上处理程序与标首地址差即可转到处理程序。【入口参数】(B)=转向程序号(键盘编码)。【出口参数】转移到相应的子程序入口。第五章 汇编语言程序设计 ORG0030HKEY_JMP:MOVA,BMOVDPTR,#TABMOVC A,A+DPTRJMPA+DPTR TAB:DBPR0-TABDBPR1-TABDBPR2-TABDBPR3-TABDBPR

21、4-TAB PR0:处理程序0 PR1:处理程序1 PR2:处理程序2 PR3:处理程序3 PR4:处理程序4END第五章 汇编语言程序设计 循环程序循环程序 一、循环程序的应用场合一、循环程序的应用场合二、循环程序的组成二、循环程序的组成三、循环程序举例三、循环程序举例字符串长度 求最大值 数组清0 第五章 汇编语言程序设计 循环程序循环程序 一、循环程序的应用场合一、循环程序的应用场合分段函数 符号函数 比较大小 在程序执行时,往往同样的一组操作要重复许多次。当然可以采用简单程序,重复使用同样的指令来完成,但若使用循环程序,重复执行同一条指令许多次来完成重复操作,就可大大减化程序。例如:例

22、如:要使00H7FH单元的内容清0。方法1:用128条赋值指令完成。方法2:只用一条赋值指令,并使之执行128次,每次执行时操作数亦作每次执行时操作数亦作相应的变化相应的变化以完成规定的操作。方法1:MOV 00H,#0 MOV 01H,#0 MOV 7FH,#0方法2:MOV R0,#128 CLR AUP:MOV R0,A DJNZ R0,UP SJMP$第五章 汇编语言程序设计 循环程序循环程序 一、循环程序的应用场合一、循环程序的应用场合二、循环程序的组成二、循环程序的组成循环程序一般由四部分组成:置循环初值置循环初值 循环体循环体 循环修改部分循环修改部分 循环控制部分循环控制部分确

23、定循环开始时的状态,如使得工作单元清0,计数器置初值等。要求重复执行的部分。每循环一次就要需要修改一次初值,以便在一定情况下,能结束循环。根据循环结束条件,判断是否结束循环 流流 程程 图图第五章 汇编语言程序设计 循环程序循环程序 图 1 图 2 置初值循环体循环修改循环控制 置初值循环体循环修改循环控制退出循环第五章 汇编语言程序设计 例:使00H-7FH单元清0。数组清数组清0分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试7FH00H00H00H00H用MOV R0,A 做循环主体,修改R0的值,可以将0送入00H7FH单元中。MOV R0,#128 C

24、LR AUP:DEC R0MOV R0,ACJNE R0,#00H,UP SJMP$开始给R0赋128、A清0A送R0R0减1结束R0=00H?YN第五章 汇编语言程序设计 数组清数组清0思考:如下程序能使00H7FH单元清0吗?为什么?MOV R0,#0 MOV R7,#128CLR AUP:MOV R0,AINC R0 DJNZ R7,UP SJMP$第五章 汇编语言程序设计 例:内存中以STRING开始的区域有若干个字符和数字,一般称为一个字符串,最末一个字符为$,试统计这些字符数字的数目,结果存人NUM单元 字符串长度字符串长度分析命题分析命题确定算法确定算法画流程图画流程图编写程序编

25、写程序上机调试上机调试NUM DATA 2DHSTRING DATA 21HORG 0030H CLRA MOV R0,#STRINGLOOP:CJNE R0,#24H,NEXT SJMP COMP NEXT:INC AINC R0 SJMP LOOPCOMP:INC A MOV NUM,A SJMP$开始给R0赋21H、A清0A加1,并送2DH单元A加1R0加1结束 R0=24H?YN第五章 汇编语言程序设计 例:从外部RAM中BLOCK单元开始有一个无符号数数据块,其长度存于LEN单元,试求出数据块中最大的数,并存入MAX单元。求最大值求最大值分析命题分析命题确定算法确定算法画流程图画流程

26、图编写程序编写程序上机调试上机调试 LEN DATA 30H MAX DATA 31HBLOCK DATA 0100HORG 0400H FMAX:MOV DPTR,#BLOCKDEC LENMOVX A,DPTRLOOP:CLRCMOV B,AINC DPTRMOVX A,DPTRSUBBA,BJNCNEXTMOVA,BSJMPNEXT1NEXT:ADDA,BNEXT1:DJNZLEN,LOOPMOVMAX,ASJMP$END 开始给DPTR赋BLOCK,LEN-1,取出第一个数A与下一个RAM内容相减结束Cy=0?YNLEN减1A-BLEN=0?A送MAX单元NY恢复A第五章 汇编语言程序

27、设计 多重循环程序设计多重循环程序设计【例1】【功能】设计一个延时10ms的程序。【分析】延时程序的延时主要与所用晶振和延时程序中的循环次数 有关。已知AT89C51单片机使用的晶振为12MHz,则可知一个机器周期T为1us。【入口参数】(R0)=毫秒数,(R1)=1ms延时预定值。【出口参数】定时到,退出程序。ORG2000H 指令机器周期数1MOV R0,#0AH ;毫秒数R0 12DL2:MOV R1,#MT ;1ms延时值R1 13DL1:NOP 14NOP 15DJNZ R1,DL1 ;1ms延时循环 26DJNZ R0,DL2 ;10ms延时循环 2第五章 汇编语言程序设计 循环程

28、序设计循环程序设计该延时程序是一个双重循环程序,内循环1ms延时的预定值MT需计算:(1+1+2)1TMT=1000T MT=250=0FAH用0FAH代替程序中的MT,则该程序执行后,能实现10ms的延时。若考虑第1、2、6行延时参数配置指令的时间因素,则该段延时程序的精确延时时间计算式为:11+(1+2)110+(1+1+2)125010=10.031ms第五章 汇编语言程序设计 多重循环程序设计多重循环程序设计【例例2 2】将内存一串单字节无符号数升序排序(将内存一串单字节无符号数升序排序(冒泡法冒泡法)。)。分析命题并确定算法分析命题并确定算法:每次取相邻单元的两个数比较,决定是否需要

29、交换数据位置。第一次循环,比较N-1次,取到数据表中最大值。第二次循环,比较N-2次,取到次大值。第N-1次循环:比较一次,排序结束。内循环控制内循环控制?循环工作循环工作循环结束循环结束外循环控制外循环控制?内循环初始化内循环初始化开始开始外外循环初始化循环初始化第五章 汇编语言程序设计 SORTSORT:MOV MOV A A,#N-1#N-1;N N个数据排序个数据排序 MOVMOV R4 R4,A A;外循环次数外循环次数LOOP1LOOP1:MOV MOV A A,R4R4 MOV MOV R3 R3,A A;内循环次数内循环次数 MOVMOV R0 R0,#TAB#TAB;设数据指

30、针设数据指针LOOP2LOOP2:MOV MOV A A,R0R0;取第取第n n个数个数 MOVMOV B B,A A ;第;第n n个数放入个数放入B B INC INC R0 R0 MOV MOV A A,R0R0;取第;取第n+1n+1个数个数 CJNE A CJNE A,B B,L1L1;比较比较L1L1:JNC JNC UNEX UNEX;ABAB,不交换不交换 DECDEC R0 R0;否则交换数据否则交换数据 XCHXCH A A,R0R0 INC INC R0 R0 MOV MOV R0 R0,A AUNEXUNEX:DJNZ R3 DJNZ R3,LOOP2LOOP2;内循

31、环结束?内循环结束?DJNZ R4DJNZ R4,LOOP1LOOP1;外循环结束?外循环结束?RETRETR3R31=0?B(R0)A (R0+1)循环结束循环结束外循环次数外循环次数R4R4R41=0?内循环次数内循环次数R3表首表首TABR0开始开始A BA B?(R0)(R0+1)R0)(R0+1)R0 R0+1R0 R0+1Y YN N第五章 汇编语言程序设计 5-5 5-5 查表程序查表程序例例5-19 一个十六进制数存放在一个十六进制数存放在HEX单元的低四位,将其转换成单元的低四位,将其转换成ASCII码并送码并送回回HEX单元。单元。编程:编程:ORG 0100H HEX E

32、QU 30HHEXASC:MOV A,HEX ANL A,#00001111B ADD A,#3 ;变址调整变址调整 MOVC A,A+PC MOV HEX,A ;2字节字节 RET ;1字节字节ASCTAB:DB 30H,3lH,32H,33H DB34H,35H,36H,37H DB38H,39H,41H,42H DB43H,44H,45H,46H END 第五章 汇编语言程序设计 子程序子程序 一、子程序的应用场合一、子程序的应用场合二、子程序的优缺点二、子程序的优缺点三、编制子程序注意事项三、编制子程序注意事项四、子程序举例四、子程序举例第五章 汇编语言程序设计 2.2.参数传递参数传

33、递入口参数:调用子程序之前,需要传给子程序的参数。入口参数:调用子程序之前,需要传给子程序的参数。出口参数:子程序送回调用程序的结果参数。出口参数:子程序送回调用程序的结果参数。(1)(1)子程序无须传递参数子程序无须传递参数如:延时子程序如:延时子程序 第五章 汇编语言程序设计 例例5-24 双字节求补子程序双字节求补子程序CPLD。解解 入口参数:入口参数:(R7R6)=16位数位数 出口参数:出口参数:(R7R6)=求补后的求补后的16位数位数 CPLD:MOV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A ADDC A,#0 MOV R7,A

34、RET (2)(2)用累加器和工作寄存器传递参数用累加器和工作寄存器传递参数 第五章 汇编语言程序设计 例例5-25 n字节求补子程序。字节求补子程序。解解 入口参数:入口参数:(R0)=求补数低字节指针,求补数低字节指针,(R7)=n-1 出口参数:出口参数:(R0)=求补后的高字节指针求补后的高字节指针 CPLN:MOV A,R0 CPL A ADD A,#1 MOVR0,A NEXT:INC R0 MOV A,R0 CPL A ADDC A,#0 MOV R0,A DJNZ R7,NEXT RET(3)(3)通过操作数地址传递参数通过操作数地址传递参数 第五章 汇编语言程序设计 例例5-

35、26 在在HEX单元存放两个十六进制数,将它们分别转换单元存放两个十六进制数,将它们分别转换 成成ASC码并存入码并存入ASC和和ASC+1单元。单元。解解 由于要进行两次转换,故可调用查表子程序完成。由于要进行两次转换,故可调用查表子程序完成。主程序:主程序:MAIN:PUSH HEX;取被转换数取被转换数 LCALLHASC;转入子程序转入子程序*PC POP ASC;ASCLASC MOVA,HEX;取被转换数取被转换数 SWAP A;处理高四位处理高四位 PUSHACC LCALLHASC ;转子程序转子程序 POPASC+1;ASCH ASC+1 (4)(4)通过堆栈传递参数通过堆栈

36、传递参数 第五章 汇编语言程序设计 子程序:子程序:HASC:DEC SP DEC SP ;修改修改SP指向指向HEX POP ACC ;弹出弹出HEX ANL A,#0FH ;屏蔽高四位屏蔽高四位 。ADD A,#5 ;变址调整变址调整 MOVCA,A+PC ;查表查表 PUSHACC ;结果入栈结果入栈 (2字节字节)INC SP ;(1字节字节)INC SP ;修改修改SP指向断点位置指向断点位置(1字节字节)RET ;(1字节字节)ASCTAB:DB 0 1 2.72.7 DB 8 9 A.F *PCH*PCLHEXSP+3SP+2SP+1SP第五章 汇编语言程序设计 例:十翻二子程序

37、的现场保护。例:十翻二子程序的现场保护。BCDCB:PUSH ACC;ACCACC不能简写为不能简写为A A PUSH PSW PUSH DPL ;保护现场保护现场 PUSH DPH POP DPH POP DPL POP PSW;恢复现场恢复现场 POP ACC RET 3.3.现场保护现场保护推入与弹出的顺序应按推入与弹出的顺序应按“先进后出先进后出”,或,或“后进先出后进先出”的顺的顺序,才能保证现场的恢复。序,才能保证现场的恢复。第五章 汇编语言程序设计 调用子程序时,主程序的断点将自动入栈;调用子程序时,主程序的断点将自动入栈;转子程序后,现场的保护都要占用堆栈工作单元,转子程序后,

38、现场的保护都要占用堆栈工作单元,尤其多重转子或子程序嵌套,需要尤其多重转子或子程序嵌套,需要使栈区有一定使栈区有一定的深度的深度。由于。由于MCS-51的堆栈是由的堆栈是由spsp指针组织的指针组织的内部内部RAM区,仅有区,仅有128个地址空间个地址空间,堆栈并非越堆栈并非越深越好,深度要恰当。深越好,深度要恰当。4.4.设置堆栈设置堆栈第五章 汇编语言程序设计 子程序子程序 例:求两个无符号数据块的最大值。数据块的首地址为BLOCK1和BLOCK2,每个数据块的第一个字节都存放数据块的长度,设长度都不为0,结果存入MAX单元。主程序:MOV R1,#BLOCK1ACALL FMAXMOVT

39、EM,AMOV R1,#BLOCK2ACALL FMAXCJNE A,TEM,NEXTNEXT:JNC NEXTlMOV A,TEMNEXT1:MOV MAX,ASJMP$TEMDATA 20H子程序:FMAX:MOV A,R1 MOV R2,ACLRALOOP:INC R1CLR C SUBB A,R1JNC NEXTMOV A,R1SJMP NEXT1NEXT:ADD A,R1NEXT1:DJNZ R2,LOOPRET第五章 汇编语言程序设计 子程序子程序 例:每1秒使A中的内容左移一位。(晶振频率:6MHz)主程序:MOV A,#01HUP:RL A ACALL D1s SJMP UP子程序:D1s:MOV R7,#10D1s2:MOV R6,#100D1s1:MOV R5,#250 DJNZ R5,$DJNZ R6,D1s1 DJNZ R7,D1s2 RET第五章 汇编语言程序设计 5.6.3 子程序的调用及嵌套子程序的调用及嵌套 1子程序调用子程序调用 第五章 汇编语言程序设计 2子程序嵌套子程序嵌套 断点入栈 断点出栈

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!