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

第三讲微机系统应用程序设计汇编语言编程精要.ppt

第三讲微机系统应用程序设计汇编语言编程精要.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 微机系统应用程序设计 以上程序执行MOV Rn,#data指令的时间为1,DJNZ指令2,NOP指令1,所以,内循环延迟时间:1+1+2×248=498,外循环延迟时间:1+(内环延时+2)×200=100.001ms。 对于需要更长时间的延时,可采用更多重的嵌套循环来实现,这种软件延时方法不需要增加硬件,且变化灵活,故常被采用。它的缺点是延时过程中CPU被占用,而且系统中的中断服务会影响定时的精度,所以不宜设计太长的延时程序。 以上分别论述了3种基本结构程序设计的方法。在解决复杂的实际问题时,往往存在着相互的嵌套,无论程序如何复杂,都能分解成3种基本结构的组合,所以只要掌握了3种基本结构的设计方法,任何复杂的程序都可以顺利编制成功。 第3章 微机系统应用程序设计 4.子程序结构程序设计 在一个程序中,将反复出现的程序段编制成一个个独立的程序段,存放在内存中,这些完成某一特定任务可被重复调用的独立程序段被称为子程序。在前面所举的例子中,已有一些程序段是以带有RET指令的子程序形式出现的。使用子程序,需要强调注意两个问题,即子程序中参数传递和现场保护的问题。 子程序的设计及其调用 1.子程序概念 通常把这些基本操作功能编制为程序段作为独立的子程序, 以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令, 当程序执行到调用指令, 就转到子程序中完成规定的操作, 并返回到原来的程序继续执行下去。如图3-7所示。 2. 子程序的调用 所谓调用子程序,暂时中断主程序的执行,而转到子程序的入口地址去执行子程序。 调用子程序应注意: (1)子程序占用的存储单元和寄存器。 (2)参数的传递。 (3)保护现场和恢复现场。 (4)嵌套调用与递归调用。如图3-9所示。 调用子程序的指令有“ACALL”和“LCALL”, 执行调用指令时, 先将程序地址指针PC改变(“ACALL”加 2, “LCALL”加 3), 然后 PC值压入堆栈, 用新的地址值代替。执行返回指令时, 再将 PC值弹出。  图3-7 子程序的调用与返回 RET LCALL SUB SUB 图3-8 子程序的嵌套调用与返回 LCALL A RET RET LCALL B 子程序A 子程序B 子程序调用中, 主程序应先把有关的参数存入约定的位置, 子程序在执行时, 可以从约定的位置取得参数;当子程序执行完, 将得到的结果再存入约定的位置, 返回主程序后, 主程序可以从这些约定的位置上取得需要的结果, 这就是参数的传递。 参数的传递的方法: 1. 利用累加器或寄存器 2. 利用存储器 3. 利用堆栈 保护现场和恢复现场:子程序执行过程中,常常要用到一些通用单元,如R0~R7,A,DPTR,PSW等。 保护现场:子程序要用到这些单元,因此把主程序中这些单元内容保存起来,通常用压栈操作。 恢复现场:执行完子程序返回主程序后,要恢复这些单元内容,通常用出栈操作。 第3章 微机系统应用程序设计 由于堆栈操作是“先入后出”,因此,先压入堆栈的参数应后弹出,才能保证恢复原来的状态。例如: SUBROU: PUSH A PUSH PSW PUSH DPL PUSH DPH … POP DPH POP DPL POP PSW POP A 2.子程序设计举例 例 编程实现F=X2 +Y2,设X,Y,F分别存于内部RAM的DTA,DTB,DTC单元中。 DTA EQU 30H DTB EQU 31H DTC EQU 32H 程序清单: ORG 0100H START: MOV A, DTA ACALL SQR MOV R1, A ;A X ;求X平方 ;暂存于R1 MOV DTC,A MOV A, DTB ACALL SQR ADD A, R1 SJMP $ SQR: MOV DPTR, #TAB MOVC A, @A+DPTR RET TAB: DB 0,1,4,9,16,25,36,49,64,81 END ORG 1000H ;A Y ;求Y平方 ;求平方和 ;存入DTC单元 ;查表子程序 在这种方式中,要把所要传送的参数存放在累加器A或工作寄存器R0~R7中。这就要在调用子程序之前,在主程序中将子程序所需要的参数送入累加器A或指定的工作寄存器中。而在子程序执行时,将参数从指定单元中取出,执行运算

文档评论(0)

宝贝计划 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档