单片机原理及其应用第五章PPT讲稿.ppt

上传人:石*** 文档编号:88352328 上传时间:2023-04-25 格式:PPT 页数:53 大小:4.60MB
返回 下载 相关 举报
单片机原理及其应用第五章PPT讲稿.ppt_第1页
第1页 / 共53页
单片机原理及其应用第五章PPT讲稿.ppt_第2页
第2页 / 共53页
点击查看更多>>
资源描述

《单片机原理及其应用第五章PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《单片机原理及其应用第五章PPT讲稿.ppt(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机原理及其应用第五章第1页,共53页,编辑于2022年,星期五补充补充汇编语言源程序的格式源程序基本上由主程序、子程序、中断服务子程序组成。编制汇编语言源程序根据MCS-51单片机ROM的出厂内部定义,一般按这样的主框架编制:;程序变量定义区1 SDABITP1.3;定义SDA位变量 2 IOEQUP0;定义I/O等值P0口3 ByteConDATA30H;定义字节变量ByteCon;程序主体部分4 ORG0000H;程序段从0000H单元开始存放 5 LJMPMAIN;跳到主程MAIN6 ORG0003H;从0003H开始存放程序段7 LJMPINTERUPT1;跳到外部中断0处理子程序

2、第2页,共53页,编辑于2022年,星期五前言前言汇编语言源程序的格式8ORG0030H ;从0030H开始存放程序段9MAIN:;主程序标号说明10 MOV SP,#30H ;设置堆栈指针,可以大于30H11 LCALLINITIATE ;调用初始化子程12 FCY:;控制程序循环标号LCALLSUB ;调用功能子程序13 LJMPFCY ;跳到FCY构成循环14 ORGxxxx ;以下功能程序的存放地址15 INITIATE:;初始化子程序标号16 RET ;子程序返回17 SUB:;功能子程序标号18 RET ;子程序返回19 INTERUPT1:;外部中断0功能程序20 RETI ;中

3、断返回21 TABLE:;表的标号22 DB 00H,01H ;表的数据 END;源程序结束,停止汇编。第3页,共53页,编辑于2022年,星期五前言前言汇编语言源程序的格式第13行:把一些符号或变量定义成通俗的符号。第4、6、8、14行:表示程序存储的开始地址。第5行:使CPU在执行程序时,从0000H跳过各中断源的入口地址,主程序以跳转的目标地址作为起始地址开始编写。第6行:中断服务程序的存储地址。第9、12、15、17、19行:为程序语句标号。第10行:设置堆栈指针一般最小设30H,栈区够用还可以增大。第21、22行:为查表指令的表。第4页,共53页,编辑于2022年,星期五5-1 汇编

4、语言概述汇编语言概述一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试当接到程序设计的任务后,首先对任务进行详尽的分析,搞清楚已知的数据和想要得到的结果,程序应该完成何种的功能。第5页,共53页,编辑于2022年,星期五4-4 汇编语言程序设计基础汇编语言程序设计基础一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试 根据实际问题的要求和指令系统的特点,确定解决问题的具体步骤。根据任务要求,对不同

5、的计算方法进行比较,选择最适宜的算法。第6页,共53页,编辑于2022年,星期五4-4 汇编语言程序设计基础汇编语言程序设计基础一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试将解决问题的具体步骤用一种约定的几何图形、指向线和必要的文字说明描述出来的图形。第7页,共53页,编辑于2022年,星期五4-4 汇编语言程序设计基础汇编语言程序设计基础一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试

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

7、节数。程序所占用的内存字节数。(3)程序的逻辑性、可读性。程序的逻辑性、可读性。(4)程序的兼容性、可扩展性。程序的兼容性、可扩展性。(5)程序的可靠性。程序的可靠性。第10页,共53页,编辑于2022年,星期五三、汇编程序结构按程序的走向可以将程序分成按程序的走向可以将程序分成5种结构:种结构:简单程序简单程序 分支程序分支程序 循环程序循环程序 查表程序查表程序 子程序子程序第11页,共53页,编辑于2022年,星期五简单程序简单程序 简单程序是指一种无分支的顺序执行程序,即CPU从第一条指令开始依次依次执行每一条指令,直到最后一条指令。这种程序虽然比较简单,但也能完成一定的功能,并且往往

8、也是构成复杂程序的基础。拆字程序拼字程序求和程序第12页,共53页,编辑于2022年,星期五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)送R0单元(R1)+(R

9、3)+Cy送R1单元Cy+0送R2单元结束第13页,共53页,编辑于2022年,星期五拆字程序拆字程序例:例:将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位交换将22H内容或

10、#30H累加器A中高低4位交换20H单元的内容送AA与#30H相或后送21H结束第14页,共53页,编辑于2022年,星期五拼字程序拼字程序例:例:将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中内容存入32

11、H单元结束第15页,共53页,编辑于2022年,星期五进制转换程序进制转换程序例:例:将内部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

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

13、第17页,共53页,编辑于2022年,星期五例:例:两个无符号数分别存于ONE和TWO单元,试比较它们的大小,将较大者存人MAX单元。若两数相等则任存入一个即可。解解:分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试比较大小:简单分支程序比较大小:简单分支程序MOVA,ONECJNEA,TWO,NEXT1NEXT1:JCNEXT2MOVMAX,ONESJMP$NEXT2:MOVMAX,TWOSJMP$返回返回开始将ONE单元的内容送A结束ATWO将TWO单元内容送MAX单元YN将ONE单元内容送MAX单元第18页,共53页,编辑于2022年,星期五例:例:设变量

14、X存放于VAR单元,函数值Y存放在FUNC单元。试按照下式的要求给Y赋值。解解:Y=分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试符号函数符号函数VARDATA30HFUNCDATA31HMOVA,VARJZCOMPJNBACC.7,POSIMOV A,#0FFHSJMPCOMPPOSI:MOVA,#1COMP:MOVFUNC,ASJMP$开始将VAR单元的内容送A结束A=0?将0送FUNC单元A0?将1送FUNC单元将-1送FUNC单元YNYN第19页,共53页,编辑于2022年,星期五例:例:设变量X存放于VAR单元,函数值Y存放在FUNC单元。试按照下式

15、的要求给Y赋值。解解:Y=分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试分段函数分段函数MOVA,VARCJNEA,#10,NEXT1NEXT1:JCNEXT2MOVR0,#1CJNEA,#21,NEXT3NEXT3:JNCNEXT4MOVR0,#0SJMPNEXT4NEXT2:MOVR0,#0FFHNEXT4:MOVFUNC,R0SJMP$开始将VAR单元的内容送A结束A20?将0送FUNC单元A10?将-1送FUNC单元将1送FUNC单元YYNN第20页,共53页,编辑于2022年,星期五多重分支程序设计多重分支程序设计散转法散转法根据某种输入或运算的结果

16、转向各个处理程序称为散转多分支,即散转程序。(1)利用转移指令表实现转移利用转移指令表实现转移将转移到不同程序的转移指令列成表格,判断条件后查表,执行表中的转移指令。【例】【功能】某菜单有9项。根据输入数码转去执行相应的子程序。即输入“1”,执行子程序1;输入“2”,执行子程序2;依次类推。第21页,共53页,编辑于2022年,星期五【分析】用直接转移指令组成一个转移表,然后把菜单号读入累加器(A),转移表首地址放入DPTR中,利用JMPA+DPTR实现散转。【入口参数】(R3)=存输入键盘码19。【出口参数】转移到相应的子程序入口。ORG0030HKEY_JMP:MOVDPTR,#PRGTB

17、L;子程序入口首地址送DPTRMOVA,R3;把键盘输入缓冲区内容送累加器(A)DECA;由于输入数码为19,因此需减1MOVB,#03H第22页,共53页,编辑于2022年,星期五MULAB;由于长跳转指令LJMP占用3B,;各子程序入口地址相距3BJMPA+DPTR;根据输入码,执行相应的子程序ORG2000H;程序入口地址表PRGTBL:LJMPNO1LJMPNO2LJMP NO3LJMP NO4LJMPNO5LJMP NO6LJMP NO7LJMP NO8LJMP NO9END第23页,共53页,编辑于2022年,星期五(2)利用转向地址表实现转移利用转向地址表实现转移这种方法将转移地

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

19、220HPR2EQU0330HORG0030HKEY_JMP:MOVDPTR,#TABMOVA,R3ADDA,R3;(A)(R3)*2JNCNADDINCDPH;(R3*2)256第25页,共53页,编辑于2022年,星期五NADD:MOVR3,AMOVCA,A+DPTRXCHA,R3;转移地址高8位INCAMOVCA,A+DPTRMOVDPL,A;转移地址低8位MOVDPH,R3CLRAJMPA+DPTRTAB:DWPR0,PR1,PR2,PRnPR0:处理程序0PR1:处理程序1PRn:处理程序nEND第26页,共53页,编辑于2022年,星期五(3)利用地址偏移量表实现散转利用地址偏移量

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

21、DBPR4-TABPR0:处理程序0PR1:处理程序1PR2:处理程序2PR3:处理程序3PR4:处理程序4END第28页,共53页,编辑于2022年,星期五循环程序循环程序一、循环程序的应用场合一、循环程序的应用场合二、循环程序的组成二、循环程序的组成三、循环程序举例三、循环程序举例字符串长度求最大值数组清0第29页,共53页,编辑于2022年,星期五循环程序循环程序一、循环程序的应用场合一、循环程序的应用场合分段函数符号函数比较大小 在程序执行时,往往同样的一组操作要重复许多次。当然可以采用简单程序,重复使用同样的指令来完成,但若使用循环程序,重复执行同一条指令许多次来完成重复操作,就可大

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$第30页,共53页,编辑于2022年,星期五循环程序循环程序一、循环程序的应用场合一、循环程序的应用场合二、循环程序的组成二、循环程序的组成循环程序一般由四部分组成:置循环初值置循环初值 循环体循环体 循环修改部分循环

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

24、AUP:DEC R0MOV R0,ACJNE R0,#00H,UP SJMP$开始给R0赋128、A清0A送R0R0减1结束R0=00H?YN第33页,共53页,编辑于2022年,星期五数组清数组清0思考:如下程序能使00H7FH单元清0吗?为什么?MOVR0,#0MOVR7,#128CLRAUP:MOVR0,AINCR0DJNZR7,UPSJMP$第34页,共53页,编辑于2022年,星期五例:内存中以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第35页,共53页,编辑于2022年,星期五例:从外部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

27、恢复A第36页,共53页,编辑于2022年,星期五多重循环程序设计多重循环程序设计【例1】【功能】设计一个延时10ms的程序。【分析】延时程序的延时主要与所用晶振和延时程序中的循环次数有关。已知AT89C51单片机使用的晶振为12MHz,则可知一个机器周期T为1us。【入口参数】(R0)=毫秒数,(R1)=1ms延时预定值。【出口参数】定时到,退出程序。ORG2000H指令机器周期数1MOVR0,#0AH;毫秒数R012DL2:MOVR1,#MT;1ms延时值R113DL1:NOP14NOP15DJNZR1,DL1;1ms延时循环26DJNZR0,DL2;10ms延时循环2第37页,共53页,

28、编辑于2022年,星期五循环程序设计循环程序设计该延时程序是一个双重循环程序,内循环1ms延时的预定值MT需计算:(1+1+2)1TMT=1000TMT=250=0FAH用0FAH代替程序中的MT,则该程序执行后,能实现10ms的延时。若考虑第1、2、6行延时参数配置指令的时间因素,则该段延时程序的精确延时时间计算式为:11+(1+2)110+(1+1+2)125010=10.031ms第38页,共53页,编辑于2022年,星期五多重循环程序设计多重循环程序设计【例例2 2】将内存一串单字节无符号数升序排序(将内存一串单字节无符号数升序排序(冒泡法冒泡法)。)。分析命题并确定算法分析命题并确定

29、算法:每次取相邻单元的两个数比较,决定是否需要交换数据位置。第一次循环,比较N-1次,取到数据表中最大值。第二次循环,比较N-2次,取到次大值。第N-1次循环:比较一次,排序结束。内循环控制内循环控制?循环工作循环工作循环结束循环结束外循环控制外循环控制?内循环初始化内循环初始化开始开始外外循环初始化循环初始化第39页,共53页,编辑于2022年,星期五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;内循环次数

30、内循环次数 MOVMOV R0 R0,#TAB#TAB;设数据指针设数据指针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 AUNEXUN

31、EX:DJNZ R3 DJNZ R3,LOOP2LOOP2;内循环结束?内循环结束?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第40页,共53页,编辑于2022年,星期五5-5 5-5 查表程序查表程序例例5-19 一个十六进制数存放在一个十六进制数存放在HEX单元的低四位,将其转换成单元的低四位,将其转换成AS

32、CII码并送码并送回回HEX单元。单元。编程:编程:ORG 0100H HEX EQU 30HHEXASC:MOV A,HEX ANL A,#00001111B ADD A,#3 ;变址调整变址调整 MOVC A,A+PC MOV HEX,A ;2字节字节 RET ;1字节字节ASCTAB:DB30H,3lH,32H,33H DB34H,35H,36H,37H DB38H,39H,41H,42H DB43H,44H,45H,46H END 第41页,共53页,编辑于2022年,星期五子程序子程序一、子程序的应用场合一、子程序的应用场合二、子程序的优缺点二、子程序的优缺点三、编制子程序注意事项三

33、、编制子程序注意事项四、子程序举例四、子程序举例第42页,共53页,编辑于2022年,星期五2.2.参数传递参数传递入口参数:调用子程序之前,需要传给子程序的参数。入口参数:调用子程序之前,需要传给子程序的参数。出口参数:子程序送回调用程序的结果参数。出口参数:子程序送回调用程序的结果参数。(1)(1)子程序无须传递参数子程序无须传递参数如:延时子程序如:延时子程序 第43页,共53页,编辑于2022年,星期五例例5-24 双字节求补子程序双字节求补子程序CPLD。解解 入口参数:入口参数:(R7R6)=16位数位数 出口参数:出口参数:(R7R6)=求补后的求补后的16位数位数 CPLD:M

34、OV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A ADDC A,#0 MOV R7,A RET (2)(2)用累加器和工作寄存器传递参数用累加器和工作寄存器传递参数 第44页,共53页,编辑于2022年,星期五例例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

35、,#0 MOV R0,A DJNZ R7,NEXT RET(3)(3)通过操作数地址传递参数通过操作数地址传递参数 第45页,共53页,编辑于2022年,星期五例例5-26 在在HEX单元存放两个十六进制数,将它们分别转换单元存放两个十六进制数,将它们分别转换 成成ASC码并存入码并存入ASC和和ASC+1单元。单元。解解 由于要进行两次转换,故可调用查表子程序完成。由于要进行两次转换,故可调用查表子程序完成。主程序:主程序:MAIN:PUSH HEX;取被转换数取被转换数 LCALLHASC;转入子程序转入子程序*PC POP ASC;ASCLASC MOVA,HEX;取被转换数取被转换数

36、SWAPA;处理高四位处理高四位 PUSHACC LCALL HASC ;转子程序转子程序 POPASC+1;ASCH ASC+1 (4)(4)通过堆栈传递参数通过堆栈传递参数 第46页,共53页,编辑于2022年,星期五子程序:子程序:HASC:DEC SP DEC SP ;修改修改SP指向指向HEX POP ACC ;弹出弹出HEX ANL A,#0FH ;屏蔽高四位屏蔽高四位 。ADD A,#5 ;变址调整变址调整 MOVCA,A+PC ;查表查表 PUSHACC ;结果入栈结果入栈 (2字节字节)INCSP ;(1字节字节)INC SP ;修改修改SP指向断点位置指向断点位置(1字节字

37、节)RET ;(1字节字节)ASCTAB:DB 0 1 2.72.7 DB 8 9 A.F 第47页,共53页,编辑于2022年,星期五例:十翻二子程序的现场保护。例:十翻二子程序的现场保护。BCDCB:PUSH ACC;ACCACC不能简写为不能简写为A A PUSH PSW PUSH DPL ;保护现场保护现场 PUSH DPH POP DPH POP DPL POP PSW;恢复现场恢复现场 POP ACC RET 3.3.现场保护现场保护推入与弹出的顺序应按推入与弹出的顺序应按“先进后出先进后出”,或,或“后进先出后进先出”的顺序,才的顺序,才能保证现场的恢复。能保证现场的恢复。第48

38、页,共53页,编辑于2022年,星期五 调用子程序时,主程序的断点将自动入栈;转子程调用子程序时,主程序的断点将自动入栈;转子程序后,现场的保护都要占用堆栈工作单元,尤其多序后,现场的保护都要占用堆栈工作单元,尤其多重转子或子程序嵌套,需要重转子或子程序嵌套,需要使栈区有一定的深度使栈区有一定的深度。由于由于MCS-51的堆栈是由的堆栈是由spsp指针组织的内部指针组织的内部RAM区,仅区,仅有有128个地址空间个地址空间,堆栈并非越深越好,深度要恰当。堆栈并非越深越好,深度要恰当。4.4.设置堆栈设置堆栈第49页,共53页,编辑于2022年,星期五子程序子程序例:求两个无符号数据块的最大值。

39、数据块的首地址为BLOCK1和BLOCK2,每个数据块的第一个字节都存放数据块的长度,设长度都不为0,结果存入MAX单元。主程序:MOVR1,#BLOCK1ACALLFMAXMOVTEM,AMOVR1,#BLOCK2ACALLFMAXCJNEA,TEM,NEXTNEXT:JNCNEXTlMOVA,TEMNEXT1:MOVMAX,ASJMP$TEMDATA20H子程序:FMAX:MOVA,R1MOVR2,ACLRALOOP:INCR1CLRCSUBBA,R1JNCNEXTMOVA,R1SJMPNEXT1NEXT:ADDA,R1NEXT1:DJNZR2,LOOPRET第50页,共53页,编辑于2022年,星期五子程序子程序例:每1秒使A中的内容左移一位。(晶振频率:6MHz)主程序:MOVA,#01HUP:RLAACALLD1sSJMPUP子程序:D1s:MOVR7,#10D1s2:MOVR6,#100D1s1:MOVR5,#250DJNZR5,$DJNZR6,D1s1DJNZR7,D1s2RET第51页,共53页,编辑于2022年,星期五5.6.3 子程序的调用及嵌套子程序的调用及嵌套 1子程序调用子程序调用第52页,共53页,编辑于2022年,星期五2子程序嵌套子程序嵌套断点入栈断点出栈第53页,共53页,编辑于2022年,星期五

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

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁