For those interested...
I finally got this going after a lot of trouble trying to run with a 20MHz crystal. For some reason, my board layout didn't lend itself well to this higher speed. I ended up just using the internal oscillator at 4 Mhz.
In any case, below is my initial "rough" code that works for now. I'm able to record an input pulse train from around 0.25Hz to about 4 or 5Hz with good accuracy (for what I need). I was able to transmit the data to Hyperterminal on my PC via a MAX232 connected to the hardware serial port on the PIC. I still have more work to do, but please feel free to comment and offer suggestions.


------------------------------------------------------------
Include "modedefs.bas" ' Mode definitions for Serout

'Define OSC 20 ' Calibrate Oscilator for 20Mhz Crystal

@ DEVICE PIC16F627, INTRC_OSC_CLKOUT
'Use internal clock at 4Mhz
'DEFINE HSER_RCSTA 90h
'DEFINE HSER_TXSTA 24h
'DEFINE HSER_SPBRG 25 ' 9600 Bauds
'DEFINE HSER_CLOERR 1

DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 103 ' 2400 Bauds
DEFINE HSER_CLOERR 1


TRISB=%00001011 'Set RB0,RB1 and RB3 as inputs
T1CON=%00000000 'Timer1, 1:1 pre-scale, Timer1 Off
INTCON=%10010000 'Set RB0 as Interupt

Convert con $EA60 'Set convert constant at 60,000 for HR calculation

HRin var PORTB.0 'Heart rate signal
BPMCOMout var PORTB.2 'Serial data out
BPMCOMin var PORTB.1 'Serial data in
StartGo var PORTB.3 'Start calculating HR
Led var PORTB.4 'LED Pulse Indicator

Timer var Word 'Millisecond Timer for HR Calculation
SendTimer var Word 'Timer for when to transmit results
HeartRate var word 'Calculated Heart Rate result

Timer=0
SendTimer=0
HeartRate=0
TMR1H = $FC 'Pre-Set Timer1 to 64536 to get 1ms per
TMR1L = $18 'overflow flag.

On Interrupt goto HRCalc

While StartGo = 0 'Wait for Start Button before proceding
Wend

T1CON.0=1 'Start Timer1

MainProcedure:
If PIR1.0 then 'Check for timer1 overflow, ie. 1000us
T1CON.0=0 'Stop Timer1 while we're messing with it
PIR1.0=0 'Clear timer1 overflow flag.
TMR1H = $FC 'Reset timer1 high byte to start value
TMR1L = $18 'Reset timer1 low byte to start value
T1CON.0=1 'Restart timer1
Timer = Timer+1 'Increment ms timer by 1ms.
SendTimer = SendTimer+1 'Increment timer for sending data by 1ms
If (Led) and (Timer>=150) Then Low LED 'Turn off LED after 150ms
EndIf
Goto MainProcedure 'Repeat until Heart Rate Pulse received

Disable
HRCalc:
High Led 'Turn LED on
If (Timer<>0) Then
HeartRate = convert / Timer 'calculate HR
Endif
Timer=0 'reset Timer variable
INTCON.1=0
If SendTimer>=4000 Then 'check SendTimer variable for elapsed time
HSEROUT [Dec HeartRate,10] 'Send data via RS232
SendTimer=0 'and reset SendTimer variable
Endif
'Eventually - setup an array to calculate an average HR
Resume

Enable

End
--------------------------------------------------------------------------

Thanks,
Nick