单片机原理及接口技术 第4v章.pptVIP

  • 1
  • 0
  • 约 68页
  • 2016-11-29 发布于湖南
  • 举报
单片机原理及接口技术 第4v章

例 21 将(R4R5R6R7)除以(R2R3), 商放在(R6R7)中, 余数放在(R4R5)中。 NDIV: MOV A, R5 ; 判商是否产生溢出 CLR C SUBB A, R3 MOV A, R4 SUBB A, R2 JNC NDIV1 ; 溢出, 转溢出处理 MOV B, #16; 无溢出, 执行除法 NDIV2: CLR C ; 被除数左移一位, 低位送 0 MOV A, R7 RLC A MOV R7, A MOV A, R6 RLC A MOV R6, A MOV A, R5 RLC A MOV R5, A XCH A, R4 RLC A XCH A, R4 MOV F0, C ; 保护移出的最高位 CLR C SUBB A, R3 ; 部分余数与除数比较 MOV R1, A MOV A, R4 SUBB A, R2 JB F0, NDIV3; 移出的高位为 1, 肯定够减 JC NDIV4 ; 否则, (Cy) = 0才够减 NDIV3: MOV R4, A ; 回送减法结果 MOV A, R1 MOV R5, A INC R7 ; 商上1 NDIV4: DJNZ B, NDIV2; 循环次数减 1 ,若不为零则循环 CLR F0 ; 正常执行无溢出 F0 = 0 RET NDIV1: SETB F0 ; 溢出F0=1 RET 例 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值弹出。  子程序调用中, 主程序应先把有关的参数存入约定的位置, 子程序在执行时, 可以从约定的位置取得参数, 当子程序执行完, 将得到的结果再存入约定的位置, 返回主程序后, 主程序可以从这些约定的位置上取得需要的结果, 这就是参

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档