单片机循环

来源:百度知道 编辑:UC知道 时间:2024/06/07 20:42:19
org 0000h
ajmp main
main:
mov r5,#0h
loop:call disp

call delay
ajmp loop

disp:mov DPTR,#table
mov a,r5
movc A,@a+DPTR
mov p0,a

dec r5
cjne r5,#-1,dell
mov r5 ,#9
dell: ret

delay: mov r7,#0x0a
LL1: mov r6,#-1
djnz r6,$
djnz r7,LL1
ret
table: db 3fh,06h,5bh,4fh,66h
db 6dh,7dh,07h,7fh,6fh
end

仿真的时候却是0——9一直循环
郁闷
请高手帮下忙
要求是:0 9 8 7 一直循环减但
程序在proteus7中仿真的时候,显示是0 1 2 3 4。。。。9一直循环加,但在Uv2中一步一步测试的时候是0 9 8 7 6 5 4 3 2 1 0 9这样一直循环减 但是改了delay: mov r7,#0x0a
LL1: mov r6,#-1
djnz r6,$
djnz r7,LL1
ret 中的 mov r7,#0x0a为mov r7,#-1后程序在proteus7中仿真的时候结果是想要的结果0 9 8 7 6 5 4 3 2 1 0 9一直循环减,想了很久,不知原因

程序没有毛病,楼主希望得到什么样的结果?
------------------
程序没有毛病,用proteus7中仿真的时候,速度太快了不行。
下面程序,只是把延时时间加大了,仿真就可以了。

org 0000h
ajmp main
main:
mov r5, #0h
loop:
call disp
call delay
ajmp loop

disp:
mov DPTR, #table
mov a, r5
movc A, @a+DPTR
mov p0, a
dec r5
cjne r5, #-1, dell
mov r5 , #9
dell:
ret

delay:
mov r4, #100
mov r7, #0x0a
LL1:
mov r6, #-1
djnz r6, $
djnz r7, LL1
djnz r4, LL1
ret

table:
db 3fh,06h,5bh,4fh,66h
db 6dh,7dh,07h,7fh,6fh
end

程序应该是没有问题的,估计是你在输入字符的时候输入成全角了,有的编译器会出错,把 mov r7,#0x0a 改为:MOV R7,#10 就可以了,估计是编译器不识别或者出错吧!
ORG 0000H
AJMP MAIN
MAIN:
MOV R5,#0H
LOOP:CALL DISP
CALL DELAY
AJMP LOOP
;
DISP:MOV DPTR,#TABLE