Yea I screwed that up here is the timer code
Code:
DEFINE OSC 20
Prefix con $FE ' needed before each command
LcdCls CON $51 ' clear LCD (use PAUSE 5 after)
CursorPS con $45 'Cursor Position
Capture VAR PIR1.2 ' CCP1 capture flag
Overflow VAR PIR1.0 ' Timer1 overflow flag
RPM var word
period var Word
LCD VAR PortC.6 'LCD output
Gate1 Var PortC.1
Gate2 var PortD.1
Gate3 var PortD.2
Gate4 var PortD.3
Gate5 var PortD.6
Gate6 var PortD.7
Gate7 var PortD.5
Gate8 var PortD.4
ADCON0 =0
ADCON1.3=1
ADCON1.2=1
ADCON1.1=1
ADCON1.0=1
TRISE.0=1
TRISE.1=1
CCP1CON = %00000110 ' Enable the CCP1 capture, every 4th rising edge
pause 100
SEROUT2 LCD,84, [Prefix, LcdCls]
low Gate1
Low Gate2
Low Gate3
Low Gate4
Low Gate5
Low Gate6
Low Gate7
Low Gate8
loop:
T1CON = %00100000 ' TMR1 prescale=1:2 Timer OFF
'11 = 1:8 prescale value
'10 = 1:4 prescale value
'01 = 1:2 prescale value '''
'00 = 1:1 prescale value
TMR1H = 0 ' Zero the Timer
TMR1L = 0
capture = 0
Start:
IF capture = 0 Then
'SEROUT2 LCD,84, [Prefix,CursorPS,0,"RPM ",#0, " ", #Period]
goto Start ' Wait here for the first capture
endif
T1CON.0 = 1 ' Start the Timer
capture = 0 ' Reset the capture flag
CaptureLoop:
IF capture = 0 Then
goto CaptureLoop ' Wait here until captured
endif
period.lowbyte = CCPR1L ' Store the captured value in
period.highbyte = CCPR1H ' period variable
'period = period / 2
RPM = 10000
RPM = RPM * RPM ' 100,000,000
RPM = DIV32 period ' 100,000,000 / RevCount
RPM = RPM * 60 ' Per minute
RPM = DIV32 400
RPM = (RPM*5)
'SEROUT2 LCD,84, [Prefix,CursorPS,0,"RPM ",dec5 RPM, " ", #Period]
gosub cleartimer1
GoTo loop ' Do it forever
ClearTimer1:
IF (capture = 0) Then
goto cleartimer1 ' Wait for beginning of next period
endif
TMR1L = 0 ' Clear Timer1 low register
TMR1H = 0 ' Clear Timer1 high register
capture = 0 ' Clear capture flag
overflow = 0 ' Clear overflow flagReturn
return
Bookmarks