?? gcq4.asm
字號:
LIST P=PIC16F54,R=DEC
;*************************************
PORTA EQU 5
PORTB EQU 6
START27 EQU 27
START28 EQU 28 ;延時數值
START29 EQU 29 ;延時數值
START30 EQU 30 ;延時數值
START31 EQU 31 ;延時數值
PIC54C EQU 1FFH
;*********************************
ORG PIC54C
GOTO MA
;*********************************
ORG 0
;*********************************
MA MOVLW 40 ;1:32
OPTION
CLRF PORTA ;初始IO口
CLRF PORTB
MOVLW 0
TRIS PORTA ;設置RA為輸出
MOVLW 01111111
TRIS PORTB ;設置RB為輸出
MA1 BTFSS PORTB,0 ;掃描ACC端口,
GOTO MA1 ;"0"轉到主程序
;--------------------
LOOP
BTFSS PORTB,0 ;掃描ACC端口,
GOTO MIN ;"0"轉到主程序
;------------------------
;"1"轉點動
POINT
BTFSS PORTB,1 ;點動升按鍵是否按下
GOTO LOOP
POINT1
CALL DEY ;是!按鍵5MS消抖后確認
CALL DEY
CALL DEY
CALL DEY
CALL DEY
BTFSS PORTB,1 ;確認點動升按鍵已按下
goto LOOP
BSF PORTA,0 ;"1"輸出
CALL DELK ;延時1S,是為消除電感反峰電動勢所需時間
POINT2
BTFSC PORTB,1 ;判斷點動升按鍵是否松開
GOTO POINT2
CALL DELY ;是!進入延時子程序
POINT3
BTFSC PORTB,1 ;判斷所有按鍵是否全松開
GOTO POINT3
BTFSC PORTB,2
GOTO POINT3
CALL DELK ;是!延時1S后,返回,1S是為消除電感反峰電動勢
CLRF PORTA
GOTO MA
;---- ---------------------
MIN
BTFSS PORTB,3 ;掃描正觸發端口
GOTO LOOP ;重復掃描
BSF PORTA,2 ;"1"執行關第一扇窗
NOP
CALL DEL
MIN1 ;執行關第2扇窗
CLRF PORTA
BSF PORTA,3
NOP
CALL DEL ;轉延時8S
MIN2 ;執行關第3扇窗
CLRF PORTA
BSF PORTA,1
NOP
CALL DEL
MIN3 ;執行關第4扇窗
CLRF PORTA
BSF PORTA,0
NOP
CALL DEL
BTFSS PORTB,7 ; 判斷警告聲端口
GOTO LOOP ; 回主程序
CALL DELK ;"有聲"繼續延時40S后熄
CALL DELK
CALL DELK
CALL DELK
CALL DELK
CALL DELK
CALL DELK
CALL DELK
CALL DELK
CALL DELK
CLRF PORTB
CLRF PORTA
GOTO MA ;返回主程序
;-------------------------------------------------
DELK
;BSF PORTB,6 ;3S子程序
MOVLW 10
MOVWF START31
LPK
CLRWDT
;BTFSC PORTB,4
;GOTO LPK3
MOVLW 0FH
MOVWF START30
LPK1
CLRWDT
;BTFSC PORTB,4
;GOTO LPK3
MOVLW 0FFH
MOVWF START29
LPK2
CLRWDT
DECFSZ START29,1
GOTO LPK2
DECFSZ START30,1
GOTO LPK1
DECFSZ START31,1
GOTO LPK
LPK3
CLRF PORTA
CLRF PORTB
RETLW 0
;-----------------------
DEL ;順序關窗延時8S子程序
MOVLW 30
MOVWF START31
LP
CLRWDT
BTFSC PORTB,4 ;掃描堵轉按鍵
GOTO LP6
MOVLW 0FFH
MOVWF START30
LP1
CLRWDT
BTFSC PORTB,4
GOTO LP6
MOVLW 0FFH
MOVWF START29
LP2
CLRWDT
BTFSC PORTB,4
GOTO LP6
DECFSZ START29,1
GOTO LP2
DECFSZ START30,1
GOTO LP1
DECFSZ START31,1
GOTO LP
BSF PORTB,7 ;蜂鈴器開始報警并一直持續
LP6
CLRF PORTA
BTFSC PORTB,4 ;掃描堵轉按鍵
GOTO LP6
CLRF PORTA
RETLW 0
;-----------------------
DELY
MOVLW 5
MOVWF START31
LOP
CLRWDT
;BTFSC PORTB,4 ;掃描big堵轉信號
;GOTO LOP5 ;是,清端口
;CALL DEY ;延時100ns后
;BTFSC PORTB,6 ;繼續掃描simll堵轉信號
;GOTO LOP5 ;是, 反轉
CALL DEY ;按鍵消抖
CALL DEY
CALL DEY
CALL DEY
BTFSS PORTB,1 ;掃描點動按扭
GOTO LOP1
GOTO LOP5 ;點動8S廷時子程序
;BTFSC PORTB,2 ;掃描點動按扭
;GOTO LOP3
LOP1
MOVLW 0FFH
MOVWF START30
LOP2
CLRWDT
MOVLW 0FFH
MOVWF START29
LOP3
CLRWDT
DECFSZ START29,1
GOTO LOP3
DECFSZ START30,1
GOTO LOP2
DECFSZ START31,1
GOTO LOP
LOP5
CLRF PORTA
CLRF PORTB
RETLW 0
;---------------------------------
DEY ;端口延時子程序
MOVLW 0FFH
MOVWF START28
SET_KEY
DECFSZ START28,1
GOTO SET_KEY
RETLW 0
;---------------------------------
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -