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

📄 adc.bak

📁 nec demo source code
💻 BAK
字号:

;--------------------------------
;-      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 
 
LED_active:     DS      1
LED_duty:       DS      1
toggle:         DS      1
value:          DS      1    
time:           DS      1
result:			DS		1
                                 
                         
;--------------------------------
;- VECTOR TABLE                 -
;--------------------------------
INT0	CSEG	at		0000H
		DW		Start
INT1	CSEG	at		0006H
INTLVI:		DW		Start
INT11	CSEG	at		001AH
INTTM80:	DW		Inttm80

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

OPT      DSEG   at      80H		
OPTION:        DB	10011000b		
        				

PROG	CSEG	at      82H

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	PMC2.3
    CLR1	PM2.3
    CLR1	PM4.5
    CLR1	PM12.3
    SET1	PMC2.0
    SET1	PM2.0
    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  

Ram_initial:  
        MOV     time,#10
        CALL    !Ini_TM80
        
    EI
    
Main_loop: 
        CALL	!AD_convert
        
        MOV		A,result
        ROL		A,1
        ROL		A,1
        AND		A,#03H
        MOV		LED_active,A
        
        MOV		A,result
        AND		A,#03FH
        XCH		A,X
        MOV		A,#040H
        SUB		A,X
        MOV		LED_duty,A
        
        CALL	!Wait            
         
        BR      Main_loop
;================================
;-	SUB-program	        -
;================================
Wait:
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP

        RET
;--------------------------------
AD_convert: 
        MOV		ADS, #00
        SET1	ADCE
        NOP
        NOP
        NOP
        SET1	ADCS
ADLoop:
        BF      ADIF, $ADLoop
        MOV		A, ADCRH
        MOV 	result,A
        CLR1	ADCS
        CLR1	ADCE
        CLR1	ADIF
         
        RET
;--------------------------------
Ini_TM80:
        CLR1  	TCE80
        MOV		TMC80, #06H
        MOV		A, time
        MOV		CR80,  A
        SET1	TCE80
        CLR1	TMIF80
        CLR1	TMMK80
        
        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
        
        CLR1	CY
        MOV		A, toggle
        RORC	A,1
        BC		$Flash_off
        MOV		toggle,#01H
        MOV		A,LED_active
        CMP		A,#00
        BZ      $Set_value_1
        CMP		A,#01H
        BZ      $Set_value_3
        CMP		A,#02H
        BZ      $Set_value_7
        CMP		A,#03H
        BZ      $Set_value_f
        BR		Exit
Flash_off:
        MOV		toggle,#00H
        MOV		A,LED_active
        CMP		A,#00
        BZ      $Set_value_0
        CMP		A,#01H
        BZ      $Set_value_1
        CMP		A,#02H
        BZ      $Set_value_3
        CMP		A,#03H
        BZ      $Set_value_7
        BR		Exit                		        
Set_value_0:
        MOV		value,#00H
        CALL	!Drive_LED
        BR		Exit        
Set_value_1:
        MOV		value,#01H
        CALL	!Drive_LED
        BR		Exit
Set_value_3:
        MOV		value,#03H
        CALL	!Drive_LED
        BR		Exit        
Set_value_7:
        MOV		value,#07H
        CALL	!Drive_LED
        BR		Exit        
Set_value_f:
        MOV		value,#0FH
        CALL	!Drive_LED
        BR		Exit                
Exit: 
        MOV		A,LED_duty
        MOV		time,A
        CALL	!Ini_TM80
                       
        POP_STACK        
        RETI


END
                                                                                       

⌨️ 快捷键说明

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