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

📄 allfunc.asm

📁 nec demo source code
💻 ASM
字号:
;--------------------------------
;-      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 
 
value:          DS      1                      
IntP0Flag:	DS	1                      
Timer80Flag:	DS	1
number:		DS	1
i:		DS	1
                                 
                         
;--------------------------------
;- VECTOR TABLE                 -
;--------------------------------
INT0	CSEG	at		0000H
		DW		Start

INT11	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  	LSRCM,#01H
    MOV		OSTS, #0
    MOV		WDTM, #70H
    CLR1	PMC2.3
    CLR1	PM2.3
    CLR1	PM4.5
    CLR1	PM12.3
    MOV		ADS, #00
    SET1	PMC2.0
    SET1	PM2.0
    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  
    
    CALL	!Ini_TM80
    CALL	!Ini_Intp0    
    EI
    
Main_loop:
		CALL	!AD_convert
        CMP		IntP0Flag, #00H
        BZ		$Call_show0
        CMP		IntP0Flag, #01H
        BZ		$Call_show1
        CMP		IntP0Flag, #02H
        BZ		$Call_show2
        CMP		IntP0Flag, #03H
        BZ		$Call_show3
        BR		Main_loop
	
Call_show0:
        CALL	!Show0
        BR		Exit_call_show
Call_show1:
        CALL	!Show1
        BR		Exit_call_show
Call_show2:
        CALL	!Show2
        BR		Exit_call_show
Call_show3:
        CALL	!Show3
Exit_call_show:	
		BR      Main_loop 
;----------------------------------------
AD_convert: 
        SET1	ADCE
        NOP
        NOP
        NOP
        NOP
        NOP
        SET1	ADCS
ADLoop:
        BF      ADIF, $ADLoop
        MOV		A, ADCRH
        MOV		CR80,  A
        CLR1	ADCS
        CLR1	ADCE
        CLR1	ADIF
         
        RET
;-------------------------------------------
Ini_TM80:
        CLR1  	TCE80
        MOV		TMC80, #06H
        MOV		CR80,  #00H
        CLR1	TMIF80
        CLR1	TMMK80
        
        RET
;-------------------------------------------
Ini_Intp0:
  		MOV		INTM0,#00
    	CLR1	PMK0
    	
    	RET
;-------------------------------------------
Intp0:
     	PUSH_STACK
      
      	INC		IntP0Flag
     	CMP		IntP0Flag, #04H
     	BNZ		$Intp0_exit
     	MOV		IntP0Flag, #00H     	 
Intp0_exit:      
    	 POP_STACK        
    	 RETI
;-----------------------------------------  
Inttm80:
		PUSH_STACK
        
        MOV 	Timer80Flag, #01H
        	                       
        POP_STACK
 		RETI		
;-------------------------------------------
Restart_TM80:
        CLR1	TCE80
        MOV  	Timer80Flag, #00H
        SET1	TCE80
        
        RET
;------------------------------------------
Wait:
        CALL	!Restart_TM80
Wait_Loop1:
        CMP		number, #00H
        BZ		$Wait_exit
Wait_Loop0:
        CMP		Timer80Flag, #00H
        BZ		$Wait_Loop0
        MOV		Timer80Flag, #00H
        DEC		number
        CMP		number, #00H
        BNZ		$Wait_Loop1        
Wait_exit:                
        RET
;--------------------------------------------
Drive_LED:
        MOV		A, value
        AND		A, #08H
        CMP		A, #08H
        BNZ		$LED1_off
        CLR1	LED1
        BR		Next1
LED1_off:
        SET1	LED1
Next1:        
        MOV		A, value
        AND		A, #04H
        CMP		A, #04H
        BNZ		$LED2_off
        CLR1	LED2
        BR		Next2
LED2_off:
        SET1	LED2
Next2:        
        MOV		A, value
        AND		A, #02H
        CMP		A, #02H
        BNZ		$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
;-----------------------------------------
Show0:
	 MOV	value, #01H
	 CALL	!Drive_LED
	 MOV	i, #00H
Show0_loop1:
     CALL   !Drive_LED
     MOV	A, value
     ROL	A, 1
     ADD	A, #01H
     MOV	value, A
     MOV	number, #02H
     CALL	!Wait
     INC	i    
     CMP 	i, #04H
     BNZ 	$Show0_loop1
     
	 MOV	value, #08H
	 MOV	i, #00H
Show0_loop2:
     CALL   !Drive_LED
     MOV	A, value
     ROR	A, 1
     ADD	A, #08H
     MOV	value, A
     MOV	number, #02H
     CALL	!Wait
     INC	i   
     CMP 	i, #04H
     BNZ 	$Show0_loop2
	 
     RET 
;---------------------------------------   
Show1:
	 MOV	i, #00H
Show1_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   
     CMP 	i, #04H
     BNZ 	$Show1_loop1
     	 
     MOV	i, #00H
Show1_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    
     CMP 	i, #04H
     BNZ 	$Show1_loop2
     
     RET 
;------------------------------------------  
Show2:
     MOV	value, #05H
     CALL   !Drive_LED
     MOV	number, #03H
     CALL	!Wait
     MOV	value, #0AH
     CALL   !Drive_LED
     MOV	number, #03H
     CALL	!Wait
     
     RET 
;-----------------------------------------  
Show3:
	 MOV	i, #00H
Show3_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   
     CMP 	i, #04H
     BNZ 	$Show3_loop1
     	 
     MOV	i, #00H
Show3_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  
     CMP 	i, #04H
     BNZ 	$Show3_loop2

     RET 
;------------------------------------------	
	
END

⌨️ 快捷键说明

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