用汇编实现流水灯

2019-07-18 13:35发布

本人刚刚接触单片机,各种不会,望前辈指点。
这个代码是实现流水灯的,同样的代码,当在80C52和AT89C52上仿真时,如果有CLR A效果如预期所想,灯从左到右依次闪烁,但没有的话,出现问题了,第一个灯是从D7开始闪烁,更糟糕的是,烧写到AT89S52上时,灯闪都不闪,只有3个灯常亮。为什么呢?
另外,当DB后面为191,223,239,247,251,253,254,253,251,247,239,223,191,7FH且A初值设置成0DH(MOV A,#0DH)不管是在80C52还是AT89C52上仿真时,都没有灯从左到右,再从右到左的流水灯效果,直接是全都不亮,但当A的初值设置成0CH以下时,预期效果又有了。
ORG                0030H

;定义DB数组
TABLE:        DB                 254,253,251,247,239,223,191,7FH;

;给A赋值
START0:        CLR                A
                MOV         A,#07H
                MOV         DPTR,#0030H
START:        MOV                R3,A
                MOVC        A,@A+DPTR
                MOV                P0,#00H
                MOV                A,R3       

;延时0.5s       
DELAY:        MOV         72H,#100
LOOP3:        MOV         71H,#100
LOOP1:        MOV         70H,#22
LOOP0:        DJNZ         70H,LOOP0
              NOP
              DJNZ         71H,LOOP1
             MOV         70H,#46
LOOP2:        DJNZ         70H,LOOP2
              NOP
              DJNZ         72H,LOOP3
              MOV         70H,#48
LOOP4:        DJNZ         70H,LOOP4

;循环部分
                JZ                START0
                DEC         A
                LJMP         START
END

捕获.PNG
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。