16F877A measuring RPM. I have the timer style and PULSIN versions working fine. However my timer style of code is very slow. I toggle an output and on the scope I get 14 hz at 5000 rpm (4 counts/rev) when using the timer code. When I use the Pulsin I get 55 hz. Any ideas why its slower? I was under the impression the timer version would be alot faster than the Pulsin.




Code:
DEFINE OSC 20
RPM             var     word
Period          var     Word
HRPM            var     word
LRPM            var     word      
RPM_Total       VAR     Word
LCD             VAR     PortC.6    'LCD output  
RPMInput        var     PortC.2
Gate1           Var     PortC.1
Prefix          con      $FE             ' needed before each command
LcdCls          CON      $51             ' clear LCD (use PAUSE 5 after)
CursorPS        con      $45             'Cursor Position

pause 100
SEROUT2 LCD,84, [Prefix, LcdCls]

Include "modedefs.bas"	' Mode definitions for Serout

Low Gate1

OPTION_REG.7 = 0 'Pull Ups enabled
INTCON.7=0
ADCON0.0 =0
ADCON1 =7

Loop: 
If RPMInput = 0 then
  Pulsin RPMInput, 0, LRPM
  PULSIN RPMInput, 1, HRPM
  RPM_Total = HRPM + LRPM 
  RPM = 1000
  RPM = RPM * RPM
  RPM = DIV32 RPM_Total   ' 1,000,000 / Pulse_Total
  RPM = RPM * 60            ' Per minute
  RPM = Div32 8            ' 4 pulses per rev
endif

toggle  gate1

goto loop
Code:
DEFINE OSC 20
RPM             var     word
Period          var     Word
HRPM            var     word
LRPM            var     word      
RPM_Total       VAR     Word
LCD             VAR     PortC.6    'LCD output  
RPMInput        var     PortC.2
Gate1           Var     PortC.1
Prefix          con      $FE             ' needed before each command
LcdCls          CON      $51             ' clear LCD (use PAUSE 5 after)
CursorPS        con      $45             'Cursor Position

pause 100
SEROUT2 LCD,84, [Prefix, LcdCls]

Include "modedefs.bas"	' Mode definitions for Serout

Low Gate1

OPTION_REG.7 = 0 'Pull Ups enabled
INTCON.7=0
ADCON0.0 =0
ADCON1 =7

Loop: 
If RPMInput = 0 then
  Pulsin RPMInput, 0, LRPM
  PULSIN RPMInput, 1, HRPM
  RPM_Total = HRPM + LRPM 
  RPM = 1000
  RPM = RPM * RPM
  RPM = DIV32 RPM_Total   ' 1,000,000 / Pulse_Total
  RPM = RPM * 60            ' Per minute
  RPM = Div32 8            ' 4 pulses per rev
endif

toggle  gate1

goto loop