
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV SP,#2FH
MOV A,#0FEH
LOOP:MOV P2,A
LCALL DELAY
LCALL DELAY
LCALL DELAY
RR A
RR A
LJMP LOOP
DELAY:MOV R7,#250
LP1: MOV R6,#200
LP0:NOP
NOP
DJNZ R6,LP0
DJNZ R7,LP1
RET
END
其中的指令我明白,但整个串联起来就不清楚了。
比如向累加器A中置入0FEH,即11111110B能令最后一位LED点亮,但为什么是0FEH而不是FEH啊?
ORG 0000H ;程序起始地址
LJMP MAIN ;初始跳转到主程序
ORG 0030H ;主程序开始地址
MAIN: MOV SP,#2FH ;堆栈初始地址设定为0x2F
MOV A,#0FEH ;对A 赋值
LOOP:MOV P2,A ;乎晌P2口输出寄存器A中数据
LCALL DELAY ;延时
LCALL DELAY
LCALL DELAY
RR A ;循环右移一位
RR A ;循环灶顷睁右移一位
LJMP LOOP ;跳转到loop, 实现跑马灯操作
DELAY:MOV R7,#250 ;延时程序
LP1: MOV R6,#200
LP0:NOP
NOP
DJNZ R6,LP0
DJNZ R7,LP1
RET
END
关于0FEH而隐岁不是FEH, 汇编中规定,首位为字母的字节,前边必须加0, 如果是数字,就没有必要,例如:21H, 就没必要一定要写为021H.