Vous êtes sur la page 1sur 5

;*************************************************** ;*************************************************** ;*** SOFTWARE FOR WATER SOFTNER ;*************************************************** ;*** VER 0.

1 LAST UPDATE 09/12/96 **** ;*************************************************** ;*************************************************** ; FOR 12C508 @ 4MHz WDOG ON LIST P=12C508,F=INHX8M

****

;IMMEDIATE EQUATES PERIOD EQU 010H ;LENGTH OF TIME AT FREQ LOW_FREQ EQU 0FFH ;653 Hz HIGH_FREQ EQU 040H ;2577Hz DIFFERENCE EQU LOW_FREQ - HIGH_FREQ PERIOD_50HZ EQU 00 ;approx 5 secs of 50hz INADD EQU 00 RTCC EQU 01 PC EQU 02 STATUS EQU 03 FSR EQU 04 CAL EQU 05 GPIO EQU 06 ;BIT DEFINITIONS #DEFINE LED1 #DEFINE DRIVE #DEFINE TEST_IN #DEFINE #DEFINE C Z STATUS,0 STATUS,2

GPIO,04 GPIO,00 GPIO,03

;RED LED ;TRANSISTOR DRIVE OUTPUT ;COIL TEST INPUT

COUNT COUNT1 COUNT2 COUNT3 TEMP

EQU EQU EQU EQU EQU

07H 08H 09H 0AH 0BH

;GENERAL RAM LOCATIONS

ORG MOVWF GOTO

00 CAL CLDSTT ;LOAD CAL VALUE INTO CAL REG

;***************************************************** ; SUBROUTINES ;*****************************************************

LONG_DELAY ;LONG DELAY TO LET THINGS SETTLE AFTER POWER UP MOVLW 000H GOTO DELAY0 SHORT_DELAY ;APPROX. 65mS DELAY MOVLW DELAY0 MOVWF CLRF DELAY1 CLRWDT DECFSZ GOTO DECFSZ GOTO RETLW

FOR PULSING LED 040H COUNT COUNT1 COUNT1 DELAY1 COUNT DELAY1 0FFH

;DELAY USED IN 50HZ ROUTINE DELAY_50HZ MOVLW 0AH MOVWF COUNT1 DELAY50 MOVLW 0F8H MOVWF COUNT DELAY51 CLRWDT DECFSZ COUNT GOTO DELAY51 DECFSZ COUNT1 GOTO DELAY50 RETLW 0FFH

COIL_ERROR ;LED WILL STAY ON FOR 2 SECS UNTIL WDOG ;RESETS THE PIC BCF LED1 BTFSS TEST_IN GOTO COIL_ERROR RETLW 0FFH

;PULSE LED P_LED

BCF CALL CALL BSF RETLW

LED1 SHORT_DELAY COIL_ERROR LED1 0FFH

;TEST COIL

;ADD THE BUZZER ROUTINE IF REQUIRED ;TO SIGNAL AN ERROR IN THE COIL BEEP RETLW 0FFH

CLDSTT CALL LONG_DELAY ;LET THE POWER SUPPLY SETTLE

;WE SET THE TIMING INTERVAL UP HERE SETUP MOVLW MOVWF TRIS CALL ING MOVLW R OF LOOPS MOVWF (APPROX 1 MIN) 026H COUNT3 ;WE USE THIS COUNTER TO COUNT THE NUMBE ;WE DO BEFORE GOING TO THE 50HZ LOOP B'00001000' GPIO GPIO P_LED ;ONLY GP3 IS AN INPUT

;PULSE THE LED TO SHOW THAT WE ARE WORK

;THIS ROUTINE WILL GENERATE THE SWEPT TONE ;IT ONLY SWEEPS UP IN FREQUENCE THEN ROLLS ;OVER AND STARTS AGAIN ;LOW_FREQ DEFINES THE START FREQ AND WE DEC ;ONE FROM THIS VALUE TO GET A SHORTER PERIOD ;AND SO A HIGHER FREQ ;THE VALUE OF DIFFERENCE SETS THE UPPER FREQ ;AND EQUALS THE LOW_FREQ - THE HIGH_FREQ ;RUN SWEEP ROUTINE SWEEP CLRWDT

MOVLW MOVWF MOVLW MOVWF SWEEP0 MOVLW MOVWF SWEEP1 MOVFW MOVWF BSF SWEEP2 DECFSZ GOTO MOVFW MOVWF BCF CLRWDT SWEEP3 DECFSZ GOTO SWEEP4 DECFSZ GOTO DECF DECFSZ GOTO

LOW_FREQ COUNT DIFFERENCE COUNT1 PERIOD COUNT2 COUNT TEMP DRIVE TEMP SWEEP2 COUNT TEMP DRIVE TEMP SWEEP3

COUNT2 SWEEP1 COUNT COUNT1 SWEEP0

;PERIOD OF TONE

;THIS WILL INC THE FREQ ;DIFF BETWEEN MIN AND MAX FREQ

;IF WE GET HERE THEN WE ARE FINISHED THE UP SWEEP ;SO PULSE LED TO SHOW THAT WE ARE STILL WORKING CALL P_LED DECFSZ COUNT3 ;NUMBER OF TIMES TO LOOP ROUND GOTO SWEEP ;BEFORE WE GO TO 50HZ LOOP ;APPROX 2 MINS ;IF WE GET HERE THEN RUN AT 50Hz THEN RESTART FIFTY_HZ MOVLW PERIOD_50HZ MOVWF TEMP FH0 BSF DRIVE CLRWDT CALL DELAY_50HZ BCF DRIVE CLRWDT CALL DELAY_50HZ DECFSZ TEMP GOTO FH0 GOTO SETUP

END

Vous aimerez peut-être aussi