Code: Select all
program FREQCNT2
include "DSPIC_aditional_string_library"
dim F_out1, F_out2 as dWord
data_available as boolean
lcd_txt as string[16]
sub procedure Timer1Int org $1A ' interrupt at 1s
IFS0 = IFS0 and $FFF7 ' Clear TMR1IF
T2CON.15 = 0 ' Stop Timer2/3
W10 = TMR2 ' Save Timer2/3
W11 = TMR3HLD
TMR3HLD = 0 ' Clear Timer2/3
TMR2 = 0
T2CON.15 = 1 ' Start Timer2/3
F_out1 = (W11 << 16) or W10
F_out1 = F_out1 << 5
T4CON.15 = 0 ' Stop Timer4/5
W10 = TMR4 ' Save Timer4/5
W11 = TMR5HLD
TMR5HLD = 0 ' Clear Timer4/5
TMR4 = 0
T4CON.15 = 1 ' Start Timer4/5
F_out2 = (W11 << 16) or W10
F_out2 = F_out2 << 5
data_available = True
end sub
main:
AD1PCFG = 0xFFFF
RPINR3 = 8 ' Channel 1 input on RP8
RPINR4 = 9 ' Channel 2 input on RP9
data_available = False
T2CON = $000A ' 32 bit Timer2/3 , External clock from pin T2CK (on the rising edge) , prescaler 1as1
TMR3 = 0
TMR2 = 0
T4CON = $000A ' 32 bit Timer4/5 , External clock from pin T4CK (on the rising edge) , prescaler 1as1
TMR4 = 0
TMR5 = 0
T1CON = $0010 ' Timer1 ON, internal clock FCY, prescaler 1 as 64
TMR1 = 0
PR1 = 62500 ' interrupt at 0.25sec
IPC0 = IPC0 or $1000 ' Interrupt priority level = 1
IFS0 = IFS0 and $FFF7 ' Clear TMR1IF
IEC0 = IEC0 or $0008 ' Enable Timer1 interrupts
T1CON.15 = 1 ' Start Timer1
T2CON.15 = 1 ' Start Timer2
T4CON.15 = 1 ' Start Timer4
Lcd_Init(PORTB, 7,6,5,4, PORTB, 2,1,3)
Lcd_Cmd(LCD_CURSOR_OFF)
Lcd_Cmd(LCD_CLEAR)
while true
if data_available then
data_available = False
LongWord2StrWithZeros(F_out1,lcd_txt)
lcd_txt[0] = "1"
lcd_txt[1] = ":"
Str_Cat(lcd_txt," Hz")
Lcd_Out(1,1,lcd_txt) ' Display Channel 1
LongWord2StrWithZeros(F_out2,lcd_txt)
lcd_txt[0] = "2"
lcd_txt[1] = ":"
Str_Cat(lcd_txt," Hz")
Lcd_Out(2,1,lcd_txt) ' Display Channel 2
end if
wend
end.