;由于软件延时需要计算代码执行的时间,所以近似1秒。
ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV P1,#0FFH MOV A,#0FEHLOOP: MOV P1,A LCALL TIMEER RL A SJMP LOOPTIMEER: MOV R5,#08HLOOP1: MOV R6,#0FAHLOOP2: MOV R7,#0FAHLOOP3: 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 0100HMAIN: 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 0100HMAIN: MOV R0,#20 ;软计数器计数次数 MOV TMOD,#10H ;定时器1方式1 MOV P1,#0FFH ;熄灭所有LED MOV A,#0FEH ;点亮第一个LED MOV TH1,#3CH MOV TL1,#0B0H ;定时器赋初值 SETBIT1 ;外中断1采用下降沿触发 SETBEX1 ;允许外部中断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: RETIINT1_INT: MOV A,#0FFH ;按键按下,LED熄灭 MOV P1,A ;灯改变 CPL TR1 ;定时器改变开关状态 MOV A,#0FEH ;点亮第一个LED RETI ;中断返回