list p=16f690 ; list directive to define processor
#include <P16F690.inc> ; processor specific variable definitions
errorlevel -302 ; Turn off banking message
; known tested (good) code
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
CBLOCK 0x020
endc
#define _.8VOLT 0x28
#define _1VOLT 0x33
#define _2VOLT 0x66
#define _2_5VOLT 0x7F
#define _3VOLT 0x99
#define _4VOLT 0xCC
ORG 0x000 ; processor reset vector
goto init ; go to beginning of program
ORG 0x004 ; interrupt vector location
init:
bsf STATUS,RP0 ; select Register Page 1
movlw 0xFF
movwf TRISA ; Make PortA all input
clrf TRISC ; Make PortC all output
movlw 0x10 ; A2D Clock Fosc/8
movwf ADCON1
bcf STATUS,RP0 ; back to Register Page 0
bcf STATUS,RP0 ; address Register Page 2
bsf STATUS,RP1
movlw 0xFF ; we want all Port A pins Analog
movwf ANSEL
bcf STATUS,RP0 ; address Register Page 0
bcf STATUS,RP1
clrf ADCON0
movlw 0x01
movwf ADCON0 ; configure A2D for Channel 0
MainLoop:
call adcdelay ;delay to charge cap
bsf ADCON0,GO ; start conversion
btfss ADCON0,GO ; this bit will change to zero when the conversion is complete
goto $-1
movf ADRESH,w ; Copy the display to the LEDs
movwf PORTC
goto MainLoop
movlw _1VOLT
subwf ADRESH, w
BNC LessThan1V ; Branch if less than 1V
movf ADRESH,w ; Copy the display to the LEDs
movlw _2VOLT
subwf ADRESH, w
BNC LessThan2V ; Branch if Between 1V and 2V
movf ADRESH,w ; Copy the display to the LEDs
movlw _2_5VOLT
subwf ADRESH, w
BNC LessThan2_5V ; Branch if Between 2V and 2.5V
movf ADRESH,w ; Copy the display to the LEDs
movlw _3VOLT
subwf ADRESH, w
BNC LessThan3V ; Branch if Between 2.5V and 3V
movf ADRESH,w ; Copy the display to the LEDs
movlw _4VOLT
subwf ADRESH, w
BNC LessThan4V ; Branch if Between 3V and 4V
movf ADRESH,w ; Copy the display to the LEDs
movlw _.8VOLT
subwf ADRESH, w
BNC LessThan.8V ; Branch if Between 3V and 4V
goto MainLoop
LessThan.8V:
bsf PORTC,0
return
LessThan1V:
bsf PORTC,1
return
LessThan2V:
bsf PORTC,2 ; lights led thats in volt range
return
LessThan2_5V:
bsf PORTC,3
return
LessThan3V:
bsf PORTC,4
return
LessThan4V:
bsf PORTC,5
return
adcdelay:
nop ;1 cycle
return ;4 cycles (including call)
end