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

📄 light.asm

📁 nec demo source code
💻 ASM
字号:
;============================================================================
; PROJECT      = 78K0S/KA1+ Low Pin Count - DemoKit-KA1
; MODULE       = light.asm
; DEVICE       = uPD78F9222
; DATE         = 29.07.2005
; ===========================================================================
; Description:  This sample programs plays one of eight predefined lightshows.
;               After the program-start-signal, the program plays the first 
;               lightshow. By pressing button SW1 the next show is selected.
;               Pressing button SW2 restarts the application
;		
; ===========================================================================

;--------------------------------
;-      MACRO   DEFINITION      -
;--------------------------------
PUSH_STACK      MACRO
                PUSH    AX
                PUSH    HL
                PUSH    BC                                                                      
                PUSH    DE
                ENDM
POP_STACK       MACRO
                POP     DE
                POP     BC
                POP     HL
                POP     AX
                ENDM     


;--------------------------------
;-      I/O DEFINE              -
;-------------------------------- 
LED1             EQU     P2.3     
LED2      		 EQU     P13.0     
LED3           	 EQU     P4.5
LED4           	 EQU     P12.3

;--------------------------------
;-      SYMBOL  DECLARATION     -
;--------------------------------
ram_start	EQU	0FE7FH
ram_end		EQU	0FEFFH
stack		EQU	0FEFFH 

;--------------------------------
;-      RAM  DECLARATION       	-
;--------------------------------
DATA	DSEG	at	0FE80H 


Timer80Flag:    DS      1
IntP0Flag:      DS      1
value:			DS		1
number:			DS		1
counter:		DS		1
i:				DS		1
pattern:		DS		1                                 
                         
;--------------------------------
;- VECTOR TABLE                 -
;--------------------------------
INT0	CSEG	at		0000H
		DW		Start
INT1	CSEG	at		001AH
INTTM80:	DW	Inttm80
INT2    CSEG	at      0008H
INTP0:  DW		Intp0

;--------------------------------

		
        				

PROG	CSEG	at      80H

Start:
	DI 
Initial:
	MOV 	PCC,  #0
	MOV     PPCC, #0
	MOV	    IF0,  #00
    MOV 	IF1,  #00
    MOV	    MK0,  #0FFH
    MOV     MK1,  #0FFH 
    MOV  	LSRCM,#01H
    MOV		OSTS, #0
    MOV		WDTM, #70H
    CLR1	TCE80
    MOV		TMC80,#06H
    MOV		CR80, #06H
    CLR1	TMIF80
    CLR1	TMMK80
    MOV		INTM0,#00
    CLR1	PMK0
    CLR1	PMC2.3
    CLR1	PM2.3
    CLR1	PM4.5
    CLR1	PM12.3
    CLR1	LED1
    CLR1	LED2
    CLR1	LED3
    CLR1	LED4
    SET1	LED1
    SET1	LED2
    SET1	LED3
    SET1	LED4
    
    MOVW	AX,   #stack
	MOVW	SP,   AX
	MOVW	HL,   #ram_start
Ram_clear:
	MOV     A,#0
    MOV     [HL],A
   	INCW    HL
    MOVW    AX,HL
    CMPW	AX,#ram_end
    BC      $Ram_clear  
        
    EI
    
Main_loop:
        MOV		A, IntP0Flag
        CMP		A, #00H
        BZ     $Call_show
        MOV		IntP0Flag, #00H
        MOV		A, counter
        CMP		A, #07H
        BZ      $Clear_counter
        INC		counter
        BR		Call_show        
Clear_counter:
        MOV		counter, #00H                
Call_show:
        MOV		A, counter
        CMP		A, #00H
        BZ		$Call_show1
        CMP		A, #01H
        BZ		$Call_show2
        CMP		A, #02H
        BZ		$Call_show3
        CMP		A, #03H
        BZ		$Call_show4
        CMP		A, #04H
        BZ		$Call_show5
        CMP		A, #05H
        BZ		$Call_show6
        CMP		A, #06H
        BZ		$Call_show7
        CMP		A, #07H
        BZ		$Call_show8
        BR		Exit_call_show 
Call_show1:
        CALL	!Show1
        BR		Exit_call_show
Call_show2:
        CALL	!Show2
        BR		Exit_call_show
Call_show3:
        CALL	!Show3
        BR		Exit_call_show
Call_show4:
        CALL	!Show4
        BR		Exit_call_show
Call_show5:
        CALL	!Show5
        BR		Exit_call_show
Call_show6:
        CALL	!Show6
        BR		Exit_call_show
Call_show7:
        CALL	!Show7
        BR		Exit_call_show
Call_show8:
        CALL	!Show8
        BR		Exit_call_show        
Exit_call_show:                 
        BR      Main_loop
;================================
;-	SUB-program	        -
;================================
Wait:
        CALL	!Restart_TM80
Wait_Loop1:
        MOV		A, number
        CMP		A, #00H
        BZ		$Wait_exit
Wait_Loop0:
        MOV		A, Timer80Flag
        CMP		A, #00H
        BZ		$Wait_Loop0
        MOV		Timer80Flag, #00H
        DEC		number
        MOV		A, number
        CMP		A, #00H
        BNZ		$Wait_Loop1        
Wait_exit:                
        RET
;--------------------------------
Restart_TM80:
        MOV  	Timer80Flag, #00H
        CLR1	TCE80
        SET1	TCE80
        
        RET
;---------------------------------
Drive_LED:
        MOV		A, value
        ROR		A,1
        ROR		A,1
        ROR		A,1
        RORC	A,1
        BNC		$LED1_off
        CLR1	LED1
        BR		Next1
LED1_off:
        SET1	LED1
Next1:        
        MOV		A, value
        ROR		A,1
        ROR		A,1
        RORC	A,1
        BNC		$LED2_off
        CLR1	LED2
        BR		Next2
LED2_off:
        SET1	LED2
Next2:        
        MOV		A, value
        ROR		A,1
        RORC	A,1
        BNC		$LED3_off
        CLR1	LED3
        BR		Next3
LED3_off:
        SET1	LED3
Next3:        
        MOV		A, value
        RORC	A,1
        BNC		$LED4_off
        CLR1	LED4
        BR		Next4
LED4_off:
        SET1	LED4
Next4:        
        RET
;---------------------------------        
Inttm80:
        PUSH_STACK
        
        MOV 	Timer80Flag, #01H
        	                       
        POP_STACK        
        RETI        
;----------------------------------------
Intp0:
      PUSH_STACK
      
      MOV		IntP0Flag, #01H
      
      POP_STACK        
      RETI
;-----------------------------------------  
Show1:
	 MOV	pattern, #01H
	 MOV	value, #01H
	 CALL	!Drive_LED
	 MOV	i, #00H
Show1_loop1:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROL	A, 1
     MOV	pattern, A
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show1_loop1
     
     MOV	i, #00H
Show1_loop2:
     MOV	value, #08H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     MOV	value, #00H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show1_loop2
	 
	 MOV	pattern, #08H
	 MOV	i, #00H
Show1_loop3:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROR	A, 1
     MOV	pattern, A
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show1_loop3
	 
     MOV	i, #00H
Show1_loop4:
     MOV	value, #01H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     MOV	value, #00H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show1_loop4
	  
     RET
;----------------------------------------- 
Show2:
	 MOV	pattern, #01H
	 MOV	value, #01H
	 CALL	!Drive_LED
	 MOV	i, #00H
Show2_loop1:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROL	A, 1
     ADD	A, #01H
     MOV	pattern, A
     MOV	number, #02H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show2_loop1
     
	 MOV	pattern, #08H
	 MOV	i, #00H
Show2_loop2:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROR	A, 1
     ADD	A, #08H
     MOV	pattern, A
     MOV	number, #02H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show2_loop2
	 
     RET 
;---------------------------------------   
Show3:
	 MOV	i, #00H
Show3_loop1:
     MOV	value, #09H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     MOV	value, #00H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show3_loop1
     	 
     MOV	i, #00H
Show3_loop2:
     MOV	value, #06H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     MOV	value, #00H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show3_loop2
     
     RET 
;------------------------------------------   
Show4:
	 MOV	pattern, #01H
	 MOV	value, #01H
	 CALL	!Drive_LED
	 MOV	i, #00H
Show4_loop1:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROL	A, 1
     MOV	pattern, A
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show4_loop1

	 MOV	pattern, #08H
	 MOV	i, #00H
Show4_loop2:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROR	A, 1
     MOV	pattern, A
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show4_loop2

     RET
;---------------------------------------------    
Show5:
	 MOV	pattern, #01H
	 MOV	value, #01H
	 CALL	!Drive_LED
	 MOV	i, #00H
Show5_loop1:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROL	A, 1
     ADD	A, #01H
     MOV	pattern, A
     MOV	number, #02H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show5_loop1

	 MOV	pattern, #0fH
	 MOV	i, #00H
Show5_loop2:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROL	A, 1
     MOV	pattern, A
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show5_loop2

	 MOV	pattern, #0F0H
	 MOV	value, #0F0H
	 CALL	!Drive_LED
	 MOV	i, #00H
Show5_loop3:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROR	A, 1
     MOV	pattern, A
     MOV	number, #02H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show5_loop3

	 MOV	pattern, #0fH
	 MOV	i, #00H
Show5_loop4:
	 MOV	A, pattern
     MOV	value, A
     CALL   !Drive_LED
     MOV	A, pattern
     ROR	A, 1
     MOV	pattern, A
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #04H
     BNZ 	$Show5_loop4

     RET
;--------------------------------------------    
Show6:
     MOV	value, #05H
     CALL   !Drive_LED
     MOV	number, #03H
     CALL	!Wait
     MOV	value, #0AH
     CALL   !Drive_LED
     MOV	number, #03H
     CALL	!Wait
     
     RET 
;-----------------------------------------   
Show7:
     MOV	value, #09H
     CALL   !Drive_LED
     MOV	number, #02H
     CALL	!Wait
     MOV	value, #06H
     CALL   !Drive_LED
     MOV	number, #02H
     CALL	!Wait

     RET 
;---------------------------------------   
Show8:
	 MOV	i, #00H
Show8_loop1:
     MOV	value, #0CH
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     MOV	value, #00H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #06H
     BNZ 	$Show8_loop1
     	 
     MOV	i, #00H
Show8_loop2:
     MOV	value, #03H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     MOV	value, #00H
     CALL   !Drive_LED
     MOV	number, #01H
     CALL	!Wait
     INC	i
	 MOV	A, i    
     CMP 	A, #06H
     BNZ 	$Show8_loop2

     RET    

END
                                                                                       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -