ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV P1,#0FFH
MOV A,#0FEH
LOOP: MOV P1,A
LCALL TIMEER
RL A
SJMP LOOP
TIMEER: MOV R5,#08H
LOOP1: MOV R6,#0FAH
LOOP2: MOV R7,#0FAH
LOOP3: DJNZ R7,LOOP3
DJNZ R6,LOOP2
DJNZ R5,LOOP1
RET
END
;跑马灯程序2
;定时/计数器1控制1秒间隔LED循环点亮
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1_INT
ORG 0100H
MAIN: MOV R0,#20 ;软计数器
MOV TMOD,#10H ;定时器1方式1
MOV P1,#0FFH ;熄灭所有LED
MOV A,#0FEH ;点亮第一个LED
MOV TH1,#3CH
MOV TL1,#0B0H ;赋初值
SETB ET1
SETB EA ;开中断
SETB TR1 ;启动定时器
SJMP $ ;等待中断
T1_INT: MOV TH1,#3CH
MOV TL1,#0B0H ;赋初值
DEC R0 ;软计数
CJNE R0,#00H,LP
RL A ;灯移位
MOV P1,A ;灯改变
MOV R0,#20 ;软计数器初值
LP: RETI
;跑马灯程序3
;定时/计数器1控制1秒间隔LED循环点亮
;外部中断1控制按键按下跑马灯启动或者停止
ORG 0000H
LJMP MAIN
ORG 0013H
LJMP INT1_INT ;外部中断服务程序,按键触发
ORG 001BH
LJMP T1_INT ;定时器中断,1秒中断一次
ORG 0100H
MAIN: MOV R0,#20 ;软计数器计数次数
MOV TMOD,#10H ;定时器1方式1
MOV P1,#0FFH ;熄灭所有LED
MOV A,#0FEH ;点亮第一个LED
MOV TH1,#3CH
MOV TL1,#0B0H ;定时器赋初值
SETB IT1 ;外中断1采用下降沿触发
SETB EX1 ;允许外部中断1
SETB ET1 ;允许定时器中断
SETB EA ;开中断
SETB TR1 ;启动定时器1
SJMP $ ;等待中断
T1_INT: MOV TH1,#3CH
MOV TL1,#0B0H ;定时器赋初值
DEC R0 ;软计数
CJNE R0,#00H,LP ;判断计数次数是否达到,是则跳转
RL A ;灯移位
MOV P1,A ;灯改变
MOV R0,#20 ;软计数器初值
LP: RETI
INT1_INT: MOV A,#0FFH ;按键按下,LED熄灭
MOV P1,A ;灯改变
CPL TR1 ;定时器改变开关状态
MOV A,#0FEH ;点亮第一个LED
RETI ;中断返回