单片机汇编语言 多分支程序的应用~ 急急急·~

单片机汇编语言 多分支程序的应用~ 急急急·~,第1张

看到这个题目,恍如隔世。

当年在大学里面,用的是个什么牌子的实验箱,实验程序,就是这个题目。

想不到,多年后,还有人问这样的问题。

翻开笔记,整理了一下程序,如下。

现在楼主要求使用proteus仿真,本人尚未测试,LED输出的部分,软件、硬件都需要重新设计。

=====================

2.多路分支程序

根据A中内容(来自20H单元)进行多路分支的程序如下:

ORG0000H

MOV20H, #0 每次实验,这里可以改为0、1、2和3

-----------------------------------

MOV A, 20H取预置数据

MOV DPTR, #J_TAB 散转表起始地址

RL A A 乘以 2

JMP @A+DPTR散转指令

------------------------------- 多路分支结构----

J_TAB: 散转表

AJMP P1

AJMP P2

AJMP P3

AJMP P4

P1:

MOV 20H, #0C0H "0"字的7段码

LJMP DISPLAY

P2:

MOV 20H, #0F9H "1"字的7段码

LJMP DISPLAY

P3:

MOV 20H, #0A4H "2"字的7段码

LJMP DISPLAY

P4:

MOV 20H, #0B0H "3"字的7段码

----------------------------------------------

DISPLAY:循环显示程序

MOV A, 20H 取来7段码

MOV R0, #22H 显示器段地址

MOV R1, #21H 显示器位地址

MOVX @R0, A将7段码输出

MOV A, #01H 最"右"边的位发光

D_LOOP:

MOVX @R1, A

MOV R2, #20H 准备延时

LCALL DELAY 调用延时子程序

RL A 左移显示的位

SJMP D_LOOP无穷循环

----------------------------------------------

DELAY: 延时子程序

PUSH 02H

DL0: PUSH 02H

DL1: PUSH 02H

DJNZ R2, $

POP 02H

DJNZ R2, DL1

POP 02H

DJNZ R2, DL0

POP 02H

DJNZ R2, DELAY

RET

----------------------------------------------

用散转表 直接用LJMP指令组成转移表.由于LJMP是3字节的指令,在组成指令转移表时,当执行JMP @A+DPTR指令时,可能出现DPTR低8位向高8位的进位,用加法指令对DPTR直接修改来实现. 程序如下: ORG 0000H PJ2: MOV DPTR,#TAB2 CLR C MOV R5,#0 MOV A,R6 RLC A R6*2 JNC AD1 INC R5 有进位,高8位加1 AD1: ADD A,R6 R6*3 JNC AD2 INC R5 有进位,高8位加1 AD2: MOV A,R5 ADD A,DPH DPTR高8位调整 MOV A,R6 JMP @A+DPTR 得散转地址 TAB2: LJMB LOP0 LJMP LOP1 …… LJMP LOPn END 用AJMP组成的散转表为二字节一项,而用LJMP组成的散转表则为三字节一项,根据R6中的内容或乘2,或乘3得每一处理程序的入口地址表指针. 应该不难理解吧,耐心点看


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11152456.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存