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

📄 gcq4.asm

📁 我以前做的汽车电动门窗关闭器
💻 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 + -