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

📄 jiaobanqi.asm

📁 带LED显示
💻 ASM
📖 第 1 页 / 共 3 页
字号:

;*******************************************************************************
CHIP	SN8P2602B			; Select the CHIP
//{{SONIX_CODE_OPTION
	.Code_Option	LVD		LVD_M		; 2.0V Reset Enable LVD24 bit of PFLAG for 2.4V Low Voltage Indicator
	.Code_Option	Reset_Pin	P15
	.Code_Option	Watch_Dog	Enable
	.Code_Option	High_Clk	4M_X'tal	; Crystal/Resonator: 2Mhz~10Mhz
	.Code_Option	Fcpu		#3     ; Fcpu = Fosc/8
	.Code_Option	Security	Enable
	.Code_Option	Noise_Filter	Enable
//}}SONIX_CODE_OPTION


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

;-------------------------------------------------------------------------------
.nolist							; do not list the macro file

	INCLUDESTD	MACRO1.H
	INCLUDESTD	MACRO2.H
	INCLUDESTD	MACRO3.H

.list							; Enable the listing function

;-------------------------------------------------------------------------------
;			Variables Definition
;-------------------------------------------------------------------------------
.DATA
        ORG    0H
        PFLAGBUF                DS       1          ;PSW SAVE TEMP
        ACCBUF                  DS       1          ;ACC SAVE TEMP
        FLAG                    DS       1          ;PROGRAM STATUS 

             OVERLOAD_FLAG      EQU     FLAG.1      ;OVER LOADING FLAG
             OUTPUT_PAUSE       EQU     FLAG.2      ;OUTPUT STOP
             TIME_T             EQU     FLAG.3      ;5MS FLAG
             TRIGGLE_FLAG       EQU     FLAG.4      ;TIRGGLE OR NOT
;;             DISP_FLAG          EQU     FLAG.5      ;MODE LED DISPLAY OR NOT
            
        FLAG2                   DS       1
             KEY_FLAG_1         EQU     FLAG2.0      ;SW1 RELEASE OR NOT 
             KEY_FLAG_2         EQU     FLAG2.1      ;SW2 RELEASE OR NOT
             KEY_FLAG_3         EQU     FLAG2.2      ;SW3 RELEASE OR NOT
	     KEY_FLAG_4         EQU	FLAG2.3      ;SW4 RELEASE OR NOT
             KEY_FLAG_5         EQU     FLAG2.4      ;SW5 RELEASE OR NOT
             KEY_FLAG_6         EQU     FLAG2.5      ;SW6 RELEASE OR NOT
        QUDOU_BUFF              DS       1          ;KEY DEBOUNCE BUFFER
        MODE_FLAG               DS       1          ;MODE FLAG
             MODE1              EQU     MODE_FLAG.0
             MODE2              EQU     MODE_FLAG.1
             MODE3              EQU     MODE_FLAG.2
	     MODE4		EQU     MODE_FLAG.3
             MODE5              EQU     MODE_FLAG.4

        MODE_STATUS             DS       1         ;SMALL MODE FOR MODE1 TO MODE5
        TIME_MS                 DS       1         ;TIME MILLION SECOND COUNTER
        TIME_SEC                DS       1         ;TIME SECOND COUNTER
        R_SPEED                 DS       1         ;SPEED SELECT REGISTER
        MODE3_CIRCLE            DS       1         ;MODE3 RUN 2 CIRCLE
        DELAY_BUFF              DS       1         ;BT TRIGGLE PULSE TIME
        DELAY_BUFF2             DS       1         ;OVERLOAD DETECT DELAY
        DELAY_BUFF3             DS       1         ;DELAY FOR KEY DEBOUNCE
        R_SLEPTIME              DS       1         ;AC POWER OFF DELAY RESET
;-------------------------------------------------------------------------------
;			I/O DEFINITION
;-------------------------------------------------------------------------------
;                       INPUT
;-------------------------------------------------------------------------------
       KEY_SW1                 EQU      FP54
       KEY_SW2                 EQU      FP56
       KEY_SW3                 EQU      FP11
       KEY_SW4		       EQU	FP53
       KEY_SW5                 EQU      FP50
       KEY_SW6                 EQU      FP15	
       INPUT_50HZ              EQU      FP00
;       OVER_LOAD               EQU      FP13

;-------------------------------------------------------------------------------
;                      OUTPUT
;-------------------------------------------------------------------------------
   
       LED_L1                 EQU      FP55
       LED_L2                 EQU      FP57
       LED_L3                 EQU      FP10
       LED_L4		      EQU      FP52
       LED_L5                 EQU      FP51
       LED_L6                 EQU      FP13    
       BT_TRIGGLE             EQU      FP12
;--------------------------------------------------------------------------------
;                   CONSTANT DEFINE 
;--------------------------------------------------------------------------------
       _TIME_19000           EQU      #248     ;SPEED 0 
       _TIME_18300           EQU      #211     ;SPEED 1
       _TIME_17100           EQU      #151     ;SPEED 2
       _TIME_15200           EQU      #111     ;SPEED 3
       _TIME_13300           EQU      #83      ;SPEED 4
       _TIME_10000           EQU      #57      ;SPEED 5
       _TIME_9500            EQU      #53      ;SPEED 6
    
;--------------------------------------------------------------------------------
       _SPD_19000           EQU      #01H      ;SPEED 0 
       _SPD_18300           EQU      #02H      ;SPEED 1
       _SPD_17100           EQU      #04H      ;SPEED 2
       _SPD_15200           EQU      #08H      ;SPEED 3
       _SPD_13300           EQU      #10H      ;SPEED 4
       _SPD_10000           EQU      #20H      ;SPEED 5
       _SPD_9500            EQU      #40H      ;SPEED 6
;--------------------------------------------------------------------------------
       _TIME_MS               EQU      #200     ;200*5MS=1S
       _CIRCLE_M3             EQU      #2       ;MODE 3 RUN 2 CIRCLE
       _DEBOUNCE_TIME         EQU      #100     ;KEY DEBOUNCE TIME (100MS)
       _DLY_BUFF              EQU      #35      ;DELAY TIME FOR TIRGGLE PULSE
       _DLY_BUFF2             EQU      #80      ;DELAY TIME FOR DECTTING OVERLOAD
       _DLY_BUFF3             EQU      #60      ;DELAY FOR KEY DEBOUNCE
       _SLEP_DLY              EQU      #5       ;AC POWER OFF DELAY RESET
;-------------------------------------------------------------------------------
;			Code section
;-------------------------------------------------------------------------------

.CODE

	ORG	0
        NOP
        NOP
	jmp	Reset1				;Reset vector
						;Address 4 to 7 are reserved
	ORG	8
        NOP
        NOP
	jmp	Isr				;Interrupt vector

	ORG	20h
;-------------------------------------------------------------------------------
;			Program reset section
;-------------------------------------------------------------------------------

Reset1:  
 
	mov	A,#7Fh				;Initial stack pointer and
   	b0mov	STKP,A				;disable global interrupt
    	b0mov	PFLAG,#00h			;pflag = x,x,x,x,x,c,dc,z
    	call 	SysInit	                        ;System initial
	call 	ClrRAM                          ;Clear RAM

        MOV     A,_DLY_BUFF
        B0MOV   DELAY_BUFF,A 
        MOV     A,_DLY_BUFF2
        B0MOV   DELAY_BUFF2,A 

        MOV     A,#255
        B0MOV   R_SPEED,A
        MOV     A,#0FFH
        B0MOV   FLAG2,A
     

        B0BSET  FP00IEN
        B0BSET  FGIE
       

;-------------------------------------------------------------------------------
;			Main routine
;-------------------------------------------------------------------------------
Main:  
        MOV     A,#5AH
        B0MOV   WDTR,A
        CALL    KEY_SCAN
        CALL    DISPLAY
;        CALL    DETECT_LOAD
        CALL    RUN_MODE
        CALL    F_DELAY
        JMP     MAIN
;------------------------------------------------------------------------------
KEY_SCAN:
        B0BTS0  KEY_FLAG_1
        JMP     KEY_EXIT1
        B0BTS0  KEY_FLAG_2
        JMP     KEY_EXIT2
        B0BTS0  KEY_FLAG_3
        JMP     KEY_EXIT3
        B0BTS0  KEY_FLAG_4
        JMP     KEY_EXIT4
        B0BTS0  KEY_FLAG_5
        JMP     KEY_EXIT5
        B0BTS0  KEY_FLAG_6
        JMP     KEY_EXIT6

;----------------------------------------
        B0BTS0  KEY_SW1
        JMP     KEY_NEXT1
        DECMS   QUDOU_BUFF
        JMP     KEY_RET
        B0BTS0  KEY_SW1
        JMP     KEY_NEXT1

        B0BSET  KEY_FLAG_1
        MOV     A,_DEBOUNCE_TIME
        B0MOV   QUDOU_BUFF,A
 
        B0BTS0    MODE1                               ;0N/OFF
        B0BCLR    OUTPUT_PAUSE
        B0BTS1    MODE1
        B0BSET    OUTPUT_PAUSE
 

        MOV     A,#00000001B                                     ;KEY_SW1 SERVICE
        B0MOV   MODE_FLAG,A
        MOV     A,#5
        B0MOV   TIME_SEC,A
        MOV     A,_TIME_MS
        B0MOV   TIME_MS,A
        MOV     A,#1
        B0MOV   MODE_STATUS,A
        B0BCLR  OVERLOAD_FLAG

        B0BTS1  OUTPUT_PAUSE                                     ;CLOSE DISPLAY
        CLR     MODE_FLAG
        JMP     KEY_RET

;----------------------------------------
KEY_NEXT1:
        B0BTS0  KEY_SW2
        JMP     KEY_NEXT2
        DECMS   QUDOU_BUFF
        JMP     KEY_RET
        B0BTS0  KEY_SW2
        JMP     KEY_NEXT2

        B0BSET  KEY_FLAG_2
        MOV     A,_DEBOUNCE_TIME
        B0MOV   QUDOU_BUFF,A

        B0BTS0    MODE2                               ;0N/OFF
        B0BCLR    OUTPUT_PAUSE
        B0BTS1    MODE2
        B0BSET    OUTPUT_PAUSE

        MOV     A,#00000010B                                 
        MOV     MODE_FLAG,A                                      ;KEY_SW2 SERVICE
        MOV     A,#10
        B0MOV   TIME_SEC,A
        MOV       A,_TIME_MS
        B0MOV     TIME_MS,A
        MOV     A,#1
        B0MOV   MODE_STATUS,A
        B0BCLR  OVERLOAD_FLAG

        B0BTS1  OUTPUT_PAUSE                                     ;CLOSE DISPLAY
        CLR     MODE_FLAG
        JMP     KEY_RET
;----------------------------------------
KEY_NEXT2:
        B0BTS0  KEY_SW3
        JMP     KEY_NEXT3
        DECMS   QUDOU_BUFF
        JMP     KEY_RET
        B0BTS0  KEY_SW3
        JMP     KEY_NEXT3

        B0BSET  KEY_FLAG_3
        MOV     A,_DEBOUNCE_TIME
        B0MOV   QUDOU_BUFF,A

        B0BTS0    MODE3                               ;0N/OFF
        B0BCLR    OUTPUT_PAUSE
        B0BTS1    MODE3
        B0BSET    OUTPUT_PAUSE
               
        MOV     A,#00000100B              ;KEY_SW3 SERVICE                     
        MOV     MODE_FLAG,A
        MOV     A,#3
        B0MOV   TIME_SEC,A
        MOV       A,_TIME_MS
        B0MOV     TIME_MS,A
        MOV     A,#1
        B0MOV   MODE_STATUS,A
        MOV     A,_CIRCLE_M3
        B0MOV   MODE3_CIRCLE,A
        B0BCLR  OVERLOAD_FLAG

        B0BTS1  OUTPUT_PAUSE                                     ;CLOSE DISPLAY
        CLR  MODE_FLAG

        JMP     KEY_RET
;----------------------------------------
KEY_NEXT3:
        B0BTS0  KEY_SW4
        JMP     KEY_NEXT4
        DECMS   QUDOU_BUFF
        JMP     KEY_RET
        B0BTS0  KEY_SW4
        JMP     KEY_NEXT4

        B0BSET  KEY_FLAG_4
        MOV     A,_DEBOUNCE_TIME
        B0MOV   QUDOU_BUFF,A

        B0BTS0    MODE4                               ;0N/OFF
        B0BCLR    OUTPUT_PAUSE
        B0BTS1    MODE4
        B0BSET    OUTPUT_PAUSE
               
        MOV     A,#00001000B              ;KEY_SW4 SERVICE                     
        MOV     MODE_FLAG,A

        B0BCLR  OVERLOAD_FLAG

        B0BTS1  OUTPUT_PAUSE                                     ;CLOSE DISPLAY
        CLR     MODE_FLAG

        JMP     KEY_RET


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

KEY_NEXT4:

        B0BTS0  KEY_SW5
        JMP     KEY_NEXT5
        DECMS   QUDOU_BUFF
        JMP     KEY_RET
        B0BTS0  KEY_SW5
        JMP     KEY_NEXT5

        MOV     A,_DEBOUNCE_TIME
        B0MOV   QUDOU_BUFF,A
        B0BSET  KEY_FLAG_5           
  
;;        B0BTS0    MODE5                               ;0N/OFF
;;        B0BCLR    OUTPUT_PAUSE
;;        B0BTS1    MODE5
        B0BSET    OUTPUT_PAUSE

        MOV     A,#00010000B                          ;KEY_SW5 SERVICE        
        B0MOV     MODE_FLAG,A

        B0BCLR  OVERLOAD_FLAG

;;        B0BTS1  OUTPUT_PAUSE                           ;CLOSE DISPLAY
;;        CLR     MODE_FLAG

        JMP     KEY_RET

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

KEY_NEXT5:

        B0BTS0  KEY_SW6
        JMP     KEY_RET
        DECMS   QUDOU_BUFF
        JMP     KEY_RET
        B0BTS0  KEY_SW6
        JMP     KEY_RET                               ;OFF

        MOV     A,_DEBOUNCE_TIME
        B0MOV   QUDOU_BUFF,A
        B0BSET  KEY_FLAG_6 

        MOV       A,MODE_FLAG    ///
        XOR       A,#0           ///
        B0BTS1    FZ             ///
        B0BSET    LED_L6         ///
        B0BCLR  OUTPUT_PAUSE
        CLR     MODE_FLAG
        JMP     KEY_RET     


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

⌨️ 快捷键说明

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