单片机高手看一下下面这个程序!

来源:百度知道 编辑:UC知道 时间:2024/06/27 11:11:58
org 0000h
ljmp main
org 0100h
main: mov r1,#0
mov dptr,#tab
loop: mov a,r1
movc a,@a+dptr
mov p1,a
acall delay
acall delay
acall delay
acall delay
cjne r1,#6, main
inc r1
ajmp loop
tab: db 07fh,0fh,03h,00h,03h,0fh,07h

delay: mov r7,#255
d1: mov r6,#255
d2: djnz r6,d2
djnz r7,d1
ret
end

这个程序做跑马灯实验的时候为什么只有P1.0的灯亮呢!好像有这样一个规律,如果不是用循环结构的话,就可以实现我编程的意愿.例如下面的程序能实现!我想让上面的程序去实现下面这个程序的目的,请高手指出我的上面这个程序出错在什么地方.谢谢!!

org 0000h
ljmp main
org 0100h
main: mov p1,#07fh
acall delay
acall delay
acall delay
mov p1,#0fh
acall delay
mov p1,#00h
acall delay
acall delay
acall delay

mov p1,#03h
acall delay
mov p1,#

你的程序有点小错误!
CJNE R1,#6,MAIN
INC R1
AJMP LOOP
这个地方出了毛病,因为CJNE为不相等转移指令,所以呢,程序运行到它的时候都会转到MAIN ,然后R1又重新负值:0
所以程序不会运行到INC R1指令,也不会运行,AJMP LOOP 指令,所以,你实验的时候总是循环把数值7FH给P1口输出! 也就是说只有第一只灯亮!
本人认为这部分应该改为:
CJNE R1,#6,LOOP
INC R1
AJMP MAIN
试试看吧!!!!!

cjne r1,#6, main
这句话有问题,设计的思路好象不对
org 0000h
ljmp main
org 0100h
main: mov r1,#0
mov dptr,#tab
loop: mov a,r1
movc a,@a+dptr
mov p1,a
acall delay
acall delay
acall delay
acall delay
inc r1
cjne r1,#6,aa
ljmp main
aa:ajmp loop
tab: db 07fh,0fh,03h,00h,03h,0fh,07h

delay: mov r7,#255
d1: mov r6,#255
d2: djnz r6,d2
djnz r7,d1
ret
end
用这个试试