51单片机单片机P1口跑马灯的汇编语言编程和口跑马灯的汇编语言编程和protues仿真仿真
用软件技术器实现1秒间隔LED循环点亮;三层循环计数实现1秒延时,250*250*8=0.5秒 ;由于软件延时需要计
算代码执行的时间,所以近似1秒。
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