Hi Henrik,

All good so far - Step 2 complete.
I have the leds blinking and have modified the code to display Frequency (averaged over a ten cycle loop) on the LCD as follows:

Code:
' Define LCD registers and bits
Define	LCD_DREG	PORTC
Define	LCD_DBIT	0
Define	LCD_RSREG	PORTA
Define	LCD_RSBIT	5
Define	LCD_EREG	PORTC
Define	LCD_EBIT	4
Define	LCD_BITS	4
Define	LCD_LINES	2


CMCON0 = %00000111		' Disable comparators
ANSEL = %00000000		' Set PORTA as digital I/O
TRISC = 0               ' Set PORTC as output
TRISA.1 = 0             ' Make TOCKI input
OPTION_REG.0 = 0        ' Prescaler 1:1
OPTION_REG.1 = 0        ' 
OPTION_REG.2 = 0        '
OPTION_REG.3 = 1        ' Prescaler assigned to WDT
OPTION_REG.4 = 0        ' Increment on low-to-high transition
OPTION_REG.5 = 1        ' Clock on T0CKI-pin
OPTION_REG.6 = 0        '
OPTION_REG.7 = 1        '

OSCCON = %01110101      ' Set clock frequency to 8MHz
define OSC  8


' Included the interrupt system
INCLUDE "DT_INTS-14.bas"
INCLUDE "ReEnterPBP.bas"

' When compiling for the 16F684 DT-Ints tells us to add these variables so we do that
wsave VAR BYTE $20 SYSTEM
wsave1 VAR BYTE $A0 SYSTEM

TMR1_Reload CON 45536           ' Reload value for ~100Hz interrupt frequency at 8MHz, prescaler 1:1

TMR1_Temp VAR WORD              ' Temporary variable use for reloading the timer
IntCount VAR BYTE               ' Keep track of number of interrupts
oldCount VAR BYTE
newCount VAR BYTE
Frequency VAR WORD
UpdateDisplay VAR BIT

LED1 VAR PortA.0
LED2 VAR PortA.1

ASM
INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
        INT_Handler   TMR1_INT,  _ISR,   PBP,  yes
    endm
    INT_CREATE            ; Creates the interrupt processor
ENDASM

T1CON.0 = 1                       ' Start TMR1
@   INT_ENABLE  TMR1_INT  ; Enable Timer 1 Interrupts

Main:
'    Toggle LED1
'    Pause 1000
'    Goto Main

    if intCount = 0 then
        LCDOUT $FE, $02, "NewCount: ", #newCount, "  "
        LCDOUT $FE, $C0
        LCDOUT "Frequency: ", #Frequency, "   "
        Frequency = 0
    endif
Goto Main
 
' This is the interrupt routine for the TMR1 interrupt.
ISR:
    T1CON.0 = 0                         ' Stop timer
    TMR1_Temp.HighByte = TMR1H          ' Get current "time"
    TMR1_Temp.LOWBYTE = TMR1L
    TMR1_Temp = TMR1_Temp + TMR1_Reload ' Add reload value to get correct interval
    TMR1H = TMR1_Temp.HIGHBYTE          ' Move result back to timer 
    TMR1L = TMR1_Temp.LOWBYTE
    newCount =  TMR0 - oldCount
    oldCount = TMR0
    T1CON.0 = 1                         ' Start timer
    IntCount = INtCount + 1             ' Increment interrupt counter
    Frequency = Frequency + newCount
    If IntCount = 9 THEN
        Frequency = Frequency/10
        IntCount = 0
    ENDIF
@ INT_RETURN
OK, I appreciate that the Frequency readout isn't really the true frequency but I just wanted to prove the averaging routine.

Onwards and upwards... What's next?

Cheers
Barry
VK2XBP