网站大量收购独家精品文档,联系QQ:2885784924

单片机的程序设计--.ppt

  1. 1、本文档共82页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机的程序设计--.ppt

4.5 子程序设计 4.5.1 子程序设计方法 4.5.2 子程序设计实例 4.5.1 子程序设计方法 子程序是指完成某一专门任务并能被其他程序反复调用的程序段。调用子程序的程序称为主程序或调用程序。使用子程序的过程称为调用子程序。子程序执行完后返回主程序的过程称为子程序返回。 主程序和子程序是相对的,同一程序既可以作为另一程序的子程序,也可以有自己的子程序。也就是说,子程序是允许嵌套的,嵌套深度和堆栈区的大小有关。 采用子程序能使整个程序结构简单,缩短程序设计时间,减少对存储空间的占用。 4.5.1 子程序设计方法 子程序的特点和设计方法 子程序具有通用性和独立性,以满足所有调用程序实现资源共享。 子程序的第一条指令的地址称为子程序的入口地址,该指令前应有标号。 合理地确定子程序的参数传递方式:入口参数是子程序需要的原始参数,由主程序通过相关的工作寄存器、特殊功能寄存器、片内RAM或堆栈等传送给子程序;出口参数是根据入口参数执行子程序后获得的结果,由子程序通过相关的工作寄存器、特殊功能寄存器、片内RAM或堆栈等传递给主程序。 在主程序中可以用调用指令调用子程序,在子程序末尾用RET返回指令从子程序返回主程序。 4.5.1 子程序设计方法 根据需要保护现场和恢复现场。在子程序的开始,使用压栈指令把需要保护的内容压入堆栈;在返回主程序前,使用弹出指令把堆栈中保护的内容送回原来的存储单元中。 子程序中有可能要使用累加器A或工作寄存器,在子程序使用它们之前,把它们中可能存有的主程序的中间结果保存起来,这一过程称为保护现场。在子程序执行完并将返回主程序之前,再将这些中间结果取出,送回到累加器A或原来的工作寄存器中,这一过程称为恢复现场。 子程序中应尽量使用相对转移指令而不使用其他转移指令,以便子程序放在内存的任何区域都能被主程序调用。 要正确地设置堆栈指针,以避免堆栈区与工作寄存器或其他存储单元发生冲突。 4.5.1 子程序设计方法 传送子程序参数的方法。 利用寄存器或片内RAM传送参数。可以把入口参数存放到寄存器或片内RAM中传送给子程序,也可以把出口参数存放到寄存器或片内RAM中传送给主程序。 利用寄存器传送参数的地址。把存放入口参数的地址通过寄存器传送给子程序,子程序根据寄存器中存放入口参数的地址便可找到入口参数并对它们进行相应操作;出口参数的地址也可通过寄存器传送给主程序。 利用堆栈传送参数。可以用压栈指令PUSH把入口参数压入堆栈传送给子程序,也可以使用压栈指令PUSH把出口参数压入堆栈传送给主程序。 4.5.2 子程序设计实例 【例10】 将片内RAM区20H~24H单元中的一位十六进制数转换成ASCII码,并分别存放到片内RAM区30H~34H单元中。 解:ASCII码是有一定规律的编码,如十六进制数的0~9的ASCII码为该数值加上30H,分别为30H~39H;十六进制数的A~F的ASCII码为该数值加上37H,分别为41H~46H。 4.5.2 子程序设计实例 地址 机器码 程序 注释 ORG 0000H 0000H 02 01 00 LJMP MAIN ORG 0100H 0100H 7C 05 MAIN: MOV R4,#05H ;数据块的长度 0102H 78 20 MOV R0,#20H ;存放十六进制数首地址 0104H 79 30 MOV R1,#30H ;存放ASCII码首地址 0106H E6 LP1: MOV A,@R0 ;取十六进制数 0107H 12 01 50 LCALL HAC ;调用代码转换程序 010AH F7 MOV @R1,A ;存放ASCII码 010BH 08 INC R0 010CH 09 INC R1 010DH DC F7 DJNZ R4,LP1 010FH 80 FE SJMP $ 主程序: 4.5.2 子程序设计实例 地址 机器码 程序 注释 ;程序名:HAC ;功能:十六进制数转换成ASCII码 ;入口参数:A存放要转换的十六进制数 ;出口参数:A存放转换后的ASCII码 ;占用资源:PSW ORG 0150H ;子程序从地址0150H开始存放 0150H C0 D0 HAC: PUSH PSW ;保护现场 0152H 54 0F ANL A,#0FH ;屏蔽掉高4位 0154H C0 E0 PUSH ACC ; 0156H C3 CLR C ; 0157H 94 0A SUBB A,#0AH ;比较A中内容的大小 0159H D0 E0 POP ACC 015BH 40 02 JC LP2 ;(A)<10时,转移 015DH 24 07 ADD A,#07H 015FH 2

文档评论(0)

cai + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档