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