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                ;中断返回