单片机流水灯实验

来源:百度知道 编辑:UC知道 时间:2024/05/21 11:43:04
实验代码如下:
START: MOV R0 , #8
MOV A , #0FEH
LOOP: MOV P1 , A
ACALL DELAY
RL A
DJNZ R0 , LOOP
MOV R1 , #8
LOOP1: RR A
MOV P1 , A
ACALL DELAY
DJNZ R1 ,LOOP1
JMP START
DELAY: MOV R7 ,#50
DELAY1: MOV R6 , #100
DELAY2: MOV R5 , #100
DJNZ R5 , $
DJNZ R6 , DELAY2
DJNZ R7 , DELAY1
RET
END
我有点不清楚的是,A的开始值是11111110,左移一位是11111100,可为什么对应的结果是跳到第二个灯亮,而第一灯不亮,有两个0不是有两个亮吗?
谢谢!

RL 是循环左移, A(n+1) <- A(n), A(0) <- A(7)
RR 是循环右移, A(n) <- A(n+1), A(7) <- A(0)

看来是LZ没有完全理解汇编指令,呵呵,这个程序的整个过程,如果是低电平亮的话,让整个过程中,始终只有1个灯亮起,其他都灭

A的开始值是11111110,左移动一位就是11111101,这样的话你的第一个灯为什么要亮呢?肯定不回亮了。