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

📄 fan84.asm

📁 pic 16f8 based fan controller, include source code and sch
💻 ASM
字号:
	
	LIST    P=PIC16F84A,R=HEX  
;------------------------------------------------
;-------  BATHROOM VEN & FAN TIMER          -----  
;
;  V1.3 : ADD TIMER1 ,FOR REBOUND        
;
;  WHEN LIGHT ON, FAN1 ON, FAN2 OFF
;  WHEN LIGHT OFF,STATUS0 TURN ALL OFF 1MIN LATER 
;  IN CASE STATUS1-4 TURN ALL ON FOR
;         30-60 -120-180 MINUTES
;
;
;-------  2001/9/16 PHILIP SUN  COPYRIGHT   -----
;------------------------------------------------
	__CONFIG	H'3FF7'
;                                 
;       DEFINE RAM
;
RTCC    EQU     01      ;EXT OSC COUNTER , CONNECT TO 60 Hz AC
PA      EQU     05      ;PORT A FOR INPUT
PB      EQU     06      ;PORT B FOR OUT 
SECD    EQU     0C      ;    
MINS    EQU     0D      ;
PBB     EQU     0E      ;PB BACKUP
TIMER1  EQU     0F

;       DEFINE VAR
Hz	EQU	D'60'	;60 Hz AC POWER
;
;
;       DEFINE BIT
;
LIGHT   EQU     0       ;RA,0 LIGHT INPUT 0=LIGHT, 1=DARK
S0      EQU     0       ;RB,0 OUTPUT GREEN LED
S1      EQU     1       ;RB,1 OUTPUT YELLOW LED
S2      EQU     2       ;RB,2 OUTPUT ORANGE LED
S3      EQU     3       ;RB,3 OUTPUT RED LED
FAN1    EQU     4       ;RB,4 OUTPUT FOR RELAY
FAN2    EQU     5       ;RB,5 OUTPUT FOR RELAY
S4      EQU     6       ;RB,6 FALG 
;
;
;--------------------------------------------------------------------------
;---------------------------------------------------------------------------
	ORG     000     
	GOTO    START
CDOWN:  CLRWDT          ;RESET WATCHDOG TIMER
        BTFSS   PBB,FAN2
        GOTO    CDOWN1
        MOVLW   D'30'
        SUBWF   RTCC,0
        SKPZ
        GOTO    CDOWN1
        MOVLW   B'00110000'
        MOVWF   PB
        RETLW   0
CDOWN1: MOVLW   Hz
	SUBWF   RTCC,0  ;IS RTCC=60 ? (AC 60 Hz)
	SKPZ
	RETLW   0       ;NO
        CLRF    RTCC    ;YES
        BTFSS   PBB,FAN2
        GOTO    CDOWN2
        MOVF    PBB,0
        MOVWF   PB
CDOWN2: DECFSZ  SECD,1  ;IS SECD=0 ?
	RETLW   0       ;NO
	MOVLW   D'60'   ;YES, SET SECD=60 
	MOVWF   SECD
        BTFSS   PBB,FAN2 ;IF FAN2 ON COUNTDOWN
	RETLW   0
        DECF    MINS,1  ;YES, MINS=MINS-1
        SKPNZ
        GOTO    TIMEOUT
        MOVLW   D'30'
        SUBWF   MINS,0
        SKPNZ   
        GOTO    M30
        MOVLW   D'60'
        SUBWF   MINS,0
        SKPNZ   
        GOTO    M60
        MOVLW   D'120'
        SUBWF   MINS,0
        SKPNZ   
        GOTO    M120
        RETLW   0
M30:    BCF     PBB,S1
        BSF     PBB,S0
     	RETLW   0
M60:    BCF     PBB,S2
        BSF     PBB,S1
     	RETLW   0
M120:   BCF     PBB,S3
        BSF     PBB,S2
     	RETLW   0

TIMEOUT:BTFSS   PBB,FAN2 ;IS TIMER SET FOR FANS TO TURN OFF ?
	RETLW   0       ;NO, NOBODY SET THE TIMER, SO, FORGET IT 
        MOVLW   B'01000000' ;YES, LET'S TURN IT OFF
        MOVWF   PB
        MOVWF   PBB
	RETLW   0
;---------------------------------------------------
        NOP
;==================================================
START   BSF     3,5     ;F84
        MOVLW   B'00010001'  ;PA,4 AS INPUT FOR SAFE
	MOVWF   PA      ;ONLY PA,0 AS LIGHT INPUT
	BCF     3,5     ;F84
	MOVLW   0
	MOVWF   PA
	BSF     3,5     ;F84
	MOVLW   B'00000000'
	MOVWF   PB      ;ALL PB ARE OUTPUT
	BCF     3,5     ;F84
        MOVLW   B'01000000'       ;SET S0=1 , OTHERS=0 
	MOVWF   PB
	BSF     3,5     ;F84
	MOVLW   B'00111111'
	MOVWF   1       ;RTCC EXT, WATCH DOG, FOSC 1:128
	BCF     3,5     ;F84
        CLRF    RTCC
        MOVLW   B'01000000'
        MOVWF   PBB
START1  CALL    CDOWN
	BTFSC   PA,LIGHT   ;IF LIGHT IS ON GOTO L_ON
	GOTO    START1     ;STILL IN DARK
L_ON    DECF    TIMER1,1   ;A LITTER TIME DELAY TO
        SKPZ               ;GET RIDE OF BOUNDS     
        GOTO    L_ON
        BSF     PBB,FAN1    ;OK, LIGHT IS ON
        BCF     PBB,FAN2    ;TURN FAN1 ON , FAN2 OFF
        MOVF    PBB,0
        MOVWF   PB
ON1     CALL    CDOWN
	BTFSS   PA,LIGHT   ;IS LIGHT OFF
        GOTO    ON1        ;LIGHT STILL ON
ON2     DECF    TIMER1,1
        SKPZ
        GOTO    ON2       ;
        BTFSS   PA,LIGHT  ;STILL OFF ?
        GOTO    ON1
ON_OFF  MOVLW   3       ;SET SECOND=3 ,COUNTDOWN
	MOVWF   SECD
	CLRF    RTCC    ;RESET RTCC
ON_OFF1 CALL    CDOWN
	MOVLW   D'60'
	SUBWF	SECD,0
	SKPZ            ;IF SECD=60, THEN IT'S LIGHT OFF
	GOTO    ON_OFF2 ; IF NO
L_OFF   BSF     PB,FAN1 ;LIGHT OFF , SET TIMER 
	BSF     PB,FAN2
        MOVF    PB,0
        MOVWF   PBB
	MOVLW   D'60'   ;YES, SET SECD=60 
	MOVWF   SECD
        BTFSS   PB,S4   ;IF S4=1 TURN SET 1 MIN
        GOTO    NOFF4   ;IF S4=0 CHECK IF S0=1
        MOVLW   D'1'    ;S4=0, SO, SET 1 MINS  
	MOVWF   MINS
	GOTO    START1
NOFF4   BTFSS   PB,S0
        GOTO    NOFF1   
        MOVLW   D'30'   ;IF S0=1 SET 30 MINS  
	MOVWF   MINS
	GOTO    START1
NOFF1   BTFSS   PB,S1
	GOTO    NOFF2   
        MOVLW   D'60'   ;IF S1=1 SET 60 MINS  
	MOVWF   MINS
	GOTO    START1
NOFF2   BTFSS   PB,S2
	GOTO    NOFF3   
        MOVLW   D'120'
	MOVWF   MINS
	GOTO    START1
NOFF3   MOVLW   D'180'
	MOVWF   MINS
	GOTO    START1
ON_OFF2 BTFSC   PA,LIGHT   ;IS IT ON AGAIN WITHIN 3 SECOND
	GOTO    ON_OFF1 ;NO, BE PATIENT
        CLRF    RTCC    ;MAKE SURE PBB IS UPDATE
        BTFSS   PB,S4   ;YES, STEP THE STATUS TO NEXT 
        GOTO    NS4
        BCF     PB,S4
        BSF     PB,S0
	GOTO    ON1
NS4     BTFSS   PB,S0
        GOTO    NS0
        BCF     PB,S0
        BSF     PB,S1
	GOTO    ON1
NS0     BTFSS   PB,S1
	GOTO    NS1
	BCF     PB,S1
	BSF     PB,S2
	GOTO    ON1
NS1     BTFSS   PB,S2
	GOTO    NS2
	BCF     PB,S2
	BSF     PB,S3
	GOTO    ON1
NS2     BCF     PB,S3
        BSF     PB,S4
	GOTO    ON1
	END
;===========================================


    





⌨️ 快捷键说明

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