[单片机原理及接口技术(余锡存)]第4章.ppt

[单片机原理及接口技术(余锡存)]第4章.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例 11 根据工作寄存器R0 内容的不同, 使程序转入相应的分支。  (R0)=0 对应的分支程序标号为PR0;  (R0)=1 对应的分支程序标号为PR1;   (R0)=N 对应的分支程序标号为PRN。 … 程序如下:  LP0: MOV DPTR, #TAB ; 取表头地址 MOV A, R0  ADD A, R0 ; R0内容乘以2 JNC LP1 ; 无进位转移 INC DPH ; 加进位位 LP1: JMP @A+DPTR; 跳至散转表中相应位置  TAB: AJMP PR0 AJMP PR1  AJMP PRN … … 本例程序仅适用于散转表首地址 TAB和处理程序入口地址 PR0, PR1, …, PRN在同一个 2 KB范围的存储区内的情形。若超出 2 KB范围可在分支程序入口处安排一条长跳转指令, 可采用如下程序: MOV DPTR, #TAB MOV A, R0  MOV B, #03H ; 长跳转指令占 3 个字节 MUL AB XCH A, B ADD A, DPH MOV DPH, A XCH A, B JMP @A+DPTR; 跳至散转表中相应的位置  TAB: LJMP PR0; 跳至不同的分支 LJMP PR1  LJMP PRN … … 4.2.5 子程序和参数传递 一、 子程序的概念 通常把这些基本操作功能编制为程序段作为独立的子程序, 以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令, 当程序执行到调用指令, 就转到子程序中完成规定的操作, 并返回到原来的程序继 续执行下去。 二、 子程序的调用 调用子程序的指令有“ACALL”和“LCALL”, 执行调用指令时, 先将程序地址指针PC改变(“ACALL”加 2, “LCALL”加 3), 然后 PC值压入堆栈, 用新的地址值代替。执行返回指令时, 再将 PC值弹出。  子程序调用中, 主程序应先把有关的参数存入约定的位置, 子程序在执行时, 可以从约定的位置取得参数, 当子程序执行完, 将得到的结果再存入约定的位置, 返回主程序后, 主程序可以从这些约定的位置上取得需要的结果, 这就是参数的传递。 例12 把内部RAM某一单元中一个字节的十六进制数转换成两位ASCII码, 结果存放在内部RAM的连续两个单元中。 假设一个字节的十六进制数在内部 RAM 40H单元, 而结果存入 50H#, 51H单元, 可以用堆栈进行参数传递, 程序如下: MAIN: MOV R1, #50H ; R1 为存结果的指针 MOV A, 40H ; A为需转换的十六进制数 SWAP A ; 先转换高位半字 PUSH ACC ; 压栈 LCALL HEASC ; 调用将低半字节的内容转换; 成ASCII码子程序HEASC POP ACC MOV @R1, A ; 存高半字节转换结果 INC R1 PUSH 40H LCALL HEASC POP ACC MOV @R1, A ; 存低半字节转换结果 END HEASC: MOV R0, SP  DEC R0 DEC R0 ; R0 指向十六进制数参数地址 XCH A, @R0 ; 取被转换参数 ANL A, #0FH ; 保留低半字节 ADD A, #2 ; 修改 A值 MOVC

文档评论(0)

jz6501 + 关注
内容提供者

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

1亿VIP精品文档

相关文档