单片机汇编语言让数码管显示0到9
答案:1 悬赏:70 手机版
解决时间 2021-03-21 23:16
- 提问者网友:刺鸟
- 2021-03-21 14:01
单片机汇编语言让数码管显示0到9
最佳答案
- 五星知识达人网友:鸠书
- 2021-03-21 14:59
ORG 00H
LJMP MAIN
ORG 30H
MAIN:
MOV DPTR, #TABLE
MOV R7, #10
MOV A, #0
LOOP:
LCALL DISPLAY
LCALL DELAY
INC A
DJNZ R7, LOOP
LJMP MAIN
DISPLAY:
PUSH ACC
MOVC A, @A+DPTR
MOV P1, A
POP ACC
RET
DELAY:
DL1:DJNZ R6, DL1
DL2:DJNZ R6, DL2
DJNZ R7, DL1
RET
TABLE:
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH
END
再试试看。
追问谢谢,我知道了,MOV DPTR,#TABLE
放到main函数里就信啦,不过这是为什么呢?追答哦,程序中,R7 用重复了。
改换一个,即可。
我的习惯:
R567,用于循环延时。
R234,用于主程序的循环控制。
和你的用法,有些不同。追问MOV DPTR,#TABLE
放到main函数里和放外面与什么区别吗?
是不是完成一个循环后再重新跳到main函数时,由于MOV DPTR,#TABLE在main函数外面,没有被执行,查表是依旧从上一个循环截至处查表?
说的我自己都绕了。追答你原来,是把 MOV D...,放在 MAIN 前面。
这样,他就不会被执行。
复位后,首先就跳转到 MAIN;
后来循环时,也是从 MAIN 循环。
那么,放在 MAIN 前面的 MOV D...,从开始,就没有执行过。
而且,永远不会执行。
LJMP MAIN
ORG 30H
MAIN:
MOV DPTR, #TABLE
MOV R7, #10
MOV A, #0
LOOP:
LCALL DISPLAY
LCALL DELAY
INC A
DJNZ R7, LOOP
LJMP MAIN
DISPLAY:
PUSH ACC
MOVC A, @A+DPTR
MOV P1, A
POP ACC
RET
DELAY:
DL1:DJNZ R6, DL1
DL2:DJNZ R6, DL2
DJNZ R7, DL1
RET
TABLE:
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH
END
再试试看。
追问谢谢,我知道了,MOV DPTR,#TABLE
放到main函数里就信啦,不过这是为什么呢?追答哦,程序中,R7 用重复了。
改换一个,即可。
我的习惯:
R567,用于循环延时。
R234,用于主程序的循环控制。
和你的用法,有些不同。追问MOV DPTR,#TABLE
放到main函数里和放外面与什么区别吗?
是不是完成一个循环后再重新跳到main函数时,由于MOV DPTR,#TABLE在main函数外面,没有被执行,查表是依旧从上一个循环截至处查表?
说的我自己都绕了。追答你原来,是把 MOV D...,放在 MAIN 前面。
这样,他就不会被执行。
复位后,首先就跳转到 MAIN;
后来循环时,也是从 MAIN 循环。
那么,放在 MAIN 前面的 MOV D...,从开始,就没有执行过。
而且,永远不会执行。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯