📄 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 + -