Code:
ASM
__config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__config _CONFIG2, _WRT_OFF & _PLLEN_OFF & _LVP_OFF & _STVREN_OFF & _BORV_25
ENDASM
DEFINE OSC 8
DEFINE INTHAND Tmr1Int
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 20h '9600 baud rate, BRGH=1
DEFINE HSER_BAUD 9600
'DEFINE HSER_SPBRG 12
DEFINE HSER_CLROERR 1
DEFINE ADC_BITS 8 ' Set number of bits in result (8, 10 or 12)
DEFINE ADC_CLOCK 3 ' Set clock source (rc = 3)
DEFINE ADC_SAMPLEUS 50 ' Set sampling time in microseconds
OSCCON= %01110000
flag1 var byte' bank0
t_flag var flag1.0
t_counter var byte
over var word
an_1 var byte
an_2 var byte
an_3 var byte
clear
GOTO Init ' jump over interrupt routine
ASM
Tmr1Int
; retfie auto-restores w, status, bsr, fsr and pclath
bcf T1CON,TMR1ON ; stop timer 1
bcf PIR1,TMR1IF ; clear over flow flag
movlw 0xBF ; load timer for 16,535 * 8 prescaler interrupt on 16 bit timer
movwf TMR1H ; load high byte
movlw 0x69
movwf TMR1L ; load low byte
bsf T1CON,TMR1ON ; re-enable timer 1
movlw 0x01
bsf _flag1,0 ;xorwf PORTB,f ; toggle RB0
retfie ; Return from interrupt
ENDASM
Init:
APFCON0=%00100000
APFCON1=%00000001
WPUB=%11000000
BAUDCON=%00010000
PORTB = 0
TRISB = %110001000
trisa = %11111100
adcon0 = %00001001
adcon1 = %11110000
CM1CON0.7=0
CM2CON0.7=0
CPSCON0=0
CPSCON1=0
daccon0=0
ANSELA = %00011100 ' all digital. A/D disabled
ANSELB = %01000000
PIR1 = 0 ' clear TMR1 int flag
PIE1 = %00000001 ' TMR1 int enabled
INTCON = %11000000 ' global & peripheral ints enabled
T1CON = %00110001 ' TMR1 1:8 prescale, timer1 on
Main:
if t_flag then
t_counter=t_counter+1
t_flag=0
endif
' HSEROUT ["Timer overflowed ",#over," times",13,10," ",#an_1," ",#an_2," ",#an_3,13,10]
if t_counter=20 then
t_counter=0
over=over+1
HSEROUT ["Timer overflowed ",#over," times",13,10," ",#an_1," ",#an_2," ",#an_3,13,10]
endif
' ADCIN 2,AN_1
' ADCIN 3,AN_2
' ADCIN 4,AN_3
GOTO Main
END
Ioannis
Bookmarks