; Tiny Headlight Leveling Controller for VW GOLF mk4 ; January 2003 Rhodanthe ; ; ------------------------------------------------------------ ; GP0(Input) Foot brake ; GP1(Input) Headlight SW (Low beam) ; GP2(Input) Speed pulse ; GP3(!MCLR) -------- ; GP4(Output) Relay control ; GP5(Input) Enable/Disable SW ; ------------------------------------------------------------ STAGPIO EQU 010H ; GPIO STASPED EQU 011H ; Speed pulse STAPREV EQU 012H ; Previous speed pulse STASIGN EQU 013H ; Output signal (Relay) CNTSTAU EQU 014H ; State hold (Upper) CNTSTAL EQU 015H ; (Lower) CNTWDTM EQU 016H ; Watchdog timer reset TMPWORK EQU 017H ; Temporary ; ------------------------------------------------------------ LIST P=12C509A #INCLUDE "P12C509A.INC" ORG 0 ; Initialize --------------------------------- INIT: MOVWF OSCCAL MOVLW B'00101111' ; GP(**543210) TRIS GPIO ; (**IOIIII) CLRWDT MOVLW B'10011111' ; WDT(1:128) OPTION BCF GPIO,4 CLRF STASPED CLRF STAPREV CLRF STASIGN CLRF CNTSTAU CLRF CNTSTAL MOVLW 8 MOVWF CNTWDTM CLRWDT ; Main routine ------------------------------- MAIN: MOVF GPIO,W MOVWF TMPWORK NOP MOVLW B'00100111' ANDWF TMPWORK,W MOVWF STAGPIO CLRW BTFSC STAGPIO,2 MOVLW 1 MOVWF STASPED CALL WAIT ; check GP0,1 and 5 ---------- MOVF STAGPIO,W MOVWF TMPWORK MOVLW B'00100011' ANDWF TMPWORK,W BTFSS STATUS,Z GOTO _CLEAR ; check Speed pulse ---------- MOVF STASPED,W XORWF STAPREV,W BTFSS STATUS,Z GOTO _CLEAR ; count CNTSTAx -------------- DECFSZ CNTSTAL,F GOTO _SFSPD INCF CNTSTAU,F MOVLW 1 BTFSC CNTSTAU,3 MOVWF STASIGN GOTO _SFSPD _CLEAR: ; clear count&state ---------- CLRF STASIGN CLRF CNTSTAU CLRF CNTSTAL _SFSPD: ; shift STASPED -> STAPREV --- MOVF STASPED,W MOVWF STAPREV BTFSS STASIGN,0 GOTO _OUTLO BSF GPIO,4 NOP GOTO _CKWDT _OUTLO: BCF GPIO,4 NOP _CKWDT: ; check WDT counter ---------- CALL WAIT DECFSZ CNTWDTM,F GOTO MAIN CLRWDT MOVLW 8 ; 1.8*2*8+x MOVWF CNTWDTM ; approx. 29ms GOTO MAIN ; Wait (approx. 1.8msec) --------------------- WAIT: MOVLW 0C8H MOVWF TMPWORK _LOOP: NOP NOP NOP NOP NOP NOP DECFSZ TMPWORK,F GOTO _LOOP RETLW 0 ; ------------------------------------------------------------ END