📄 led_a1.asm
字号:
;=====================================================================================
;本程序只供学习使用,不得用于商用用途,转载请注明来自"深圳永丰电子"
;
; 欢迎访问深圳永丰电子:http://www.yfmcu.com
; http://bbs.yfmcu.com
; 邮箱:yfmcu@163.com
; Copyright (c) 2008 ShenZhen YFMCU Studio. All Right Reserved.
;====================================================================================
;======================================================================================
; 源文件名:LED_A1.ASM
; 程序名称:简单的跑马灯汇编源程序
; 实现方法:循环点亮8个LED
; 学习目的:1、学习如何实现I/O口输出控制
; 2、程序延时
;======================================================================================
LEDS EQU P0
LED0 EQU P0.0
LED1 EQU P0.1
LED2 EQU P0.2
LED3 EQU P0.3
LED4 EQU P0.4
LED5 EQU P0.5
LED6 EQU P0.6
LED7 EQU P0.7
YFB_ENDATABUS EQU P1.6
;----------------------------------------------------------------
ORG 0000H ;单片机复位地址,不同的单片机复位地址不相同
JMP MAIN
ORG 0003H ;外部中断0
RETI
ORG 000BH ;定时器T0中断
RETI
ORG 0013H ;外部中断1
RETI
ORG 001BH ;定时器T1中断
RETI
ORG 0023H ;串口中断
RETI
ORG 0030H
MAIN: ;主函数入口
CLR YFB_ENDATABUS ;消除LCD对IO口的影响
MOV LEDS,#0FFH ;关闭LED显示
MAIN_LOOP:
CLR LED0 ;打开LED0
MOV A,#100 ;延时100ms
CALL Delay1ms
SETB LED0 ;关闭LED0
CLR LED1 ;打开LED1
MOV A,#100 ;延时100ms
CALL Delay1ms
SETB LED1 ;关闭LED1
CLR LED2 ;打开LED2
MOV A,#100
CALL Delay1ms ;延时100ms
SETB LED2 ;关闭LED2
CLR LED3 ;打开LED3
MOV A,#100 ;延时100ms
CALL Delay1ms
SETB LED3 ;关闭LED3
CLR LED4 ;打开LED4
MOV A,#100 ;延时100ms
CALL Delay1ms
SETB LED4 ;关闭LED4
CLR LED5 ;打开LED5
MOV A,#100
CALL Delay1ms ;延时100ms
SETB LED5 ;关闭LED5
CLR LED6 ;打开LED6
MOV A,#100
CALL Delay1ms ;延时100ms
SETB LED6 ;关闭LED6
CLR LED7 ;打开LED7
MOV A,#100
CALL Delay1ms ;延时100ms
SETB LED7 ;关闭LED7
JMP MAIN_LOOP ;跳转到主循环
;==========================================================================================
; 函数名:Delay1ms
; 函数功能:延时R6*1ms
; 参数:R6,R7
; 返回值:无
; 总机器周期=2000*R6+6
; 其中.RET、CALL各占2个机器周期.
;==========================================================================================
Delay1ms:
MOV R6,A
Delay1ms_Loop0:
MOV A,#0F9H ;1个机器周期
MOV R7,A ;1个机器周期
NOP ;1个机器周期
NOP ;1个机器周期
NOP ;1个机器周期
NOP ;1个机器周期
Delay1ms_Loop1:
NOP ;1个机器周期
NOP ;1个机器周期
NOP ;1个机器周期
NOP ;1个机器周期
NOP ;1个机器周期
NOP ;1个机器周期
DJNZ R7,Delay1ms_Loop1 ;2个机器周期
DJNZ R6,Delay1ms_Loop0 ;2个机器周期
RET
;==========================================================================================
; 函数名:Delay100ms
; 函数功能:延时100*R5ms
; 参数:5,R6,R7
; 返回值:无
; 总机器周期=200 004*R5+6
; 其中.RET、CALL各占2个机器周期.调用延时函数前MOV A,#k占一个周期
; 本函数每次多出6个机器周期,即误差为3us
;==========================================================================================
Delay100ms:
MOV R5,A
Delay100ms_Loop0:
MOV A,#0C8H ;1个机器周期
MOV R6,A ;1个机器周期
Delay100ms_Loop1:
MOV A,#0F9H ;1个机器周期
MOV R7,A ;1个机器周期
Delay100ms_Loop2:
NOP ;1个机器周期
NOP ;1个机器周期
DJNZ R7,Delay100ms_Loop2 ;2个机器周期
DJNZ R6,Delay100ms_Loop1 ;2个机器周期
DJNZ R5,Delay100ms_Loop0 ;2个机器周期
RET ;2个机器周期
;---------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -