list p=16F676 ; list directive to define processor
#include <p16F676.inc> ; processor specific variable definitions
errorlevel -302 ; suppress message 302 from list file
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
;**********************************************************************
RESET CODE 0x0000
DC1 EQU 25
DC2 EQU 26
DC3 EQU 27
DC4 EQU 28
RPM EQU 29
;
#DEFINE OUTA PORTC,2 ;PIN 8
#DEFINE OUTB PORTC,1 ;PIN 9
#DEFINE OUTC PORTC,0 ;PIN 10
#DEFINE OUTD PORTA,2 ;PIN 11
#DEFINE SWITCH PORTA,5 ;PIN 2
#DEFINE INPUT PORTC,4 ;PIN 6
#DEFINE POT PORTC,3 ;PIN 7
ORG 0X00
BSF STATUS, RP0
BCF OPTION_REG,7
BCF STATUS,RP0
CLRF PORTC
CLRF PORTA
BSF STATUS, RP0
MOVLW b'00111000' ;RA<5:3> input
MOVWF TRISC
MOVLW b'00111000' ;RC<2:0> output
MOVWF TRISA
MOVLW 0X30
MOVWF WPUA
MOVLW 0X00
MOVWF VRCON
BCF STATUS, RP0
MOVLW 0X00
MOVWF CMCON
BCF STATUS,RP0
MOVLW b'00011101' ;left justified, ref VDD, AN7 analog input, AD on
MOVWF ADCON0
BSF STATUS, RP0
MOVLW b'00010000' ;FOSC/8
MOVWF ADCON1
MOVLW b'10000000' ;AN7 analog input
MOVWF ANSEL
BCF STATUS,RP0
START
LLL
BTFSC SWITCH
GOTO LLL
BTFSC INPUT
GOTO LLL
CALL FFAA
CALL FFCC
CALL FFBB
CALL FFDD
GOTO LLL
FFAA
BSF OUTA
CALL AAA
CALL DLYCADC
BCF OUTA
RETURN
FFCC
BSF OUTC
CALL AAA
CALL DLYCADC
BCF OUTC
RETURN
FFBB
BSF OUTB
CALL AAA
CALL DLYCADC
BCF OUTB
RETURN
FFDD
BSF OUTD
CALL AAA
CALL DLYCADC
BCF OUTD
RETURN
AAA
CALL TAD ;23 MCS DELAY
BCF STATUS,RP0
BSF ADCON0,GO
NOP
BTFSC ADCON0,GO
GOTO $-1
MOVF ADRESH,W
MOVWF RPM
COMF RPM,1
MOVF RPM,W
MOVWF DC2
RETURN
DLYCADC
CALL DELAY
DECFSZ DC2,1
GOTO DLYCADC
RETURN
DELAY
MOVLW 0X03
MOVWF DC1
DLY1
NOP
DECFSZ DC1,1
GOTO DLY1
RETURN
TAD
MOVLW 0X01
MOVWF DC3
MOVLW 0X04
MOVWF DC4
GOTO DLY2
RETURN
DLY2
DECFSZ DC4,1
GOTO DLY2
DECFSZ DC3,1
GOTO DLY2
RETURN
END