⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led_a1.asm

📁 简单51程序
💻 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 + -