单片机跑马灯汇编程序与仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机P1口跑马灯的汇编语言编程和protues仿真
;跑马灯程序1
;用软件技术器实现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 I T1 ;外中断1采用下降沿触发
SETB E X1 ;允许外部中断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 ;中断返回
Protues仿真电路图
欢迎访问艾依河里的鱼的博客