Interrupt Service Routines AVR8

\ TIMER_0 example
\
\ provides
\  timer0.tick      -- increasing ticker
\
\ older mcu's may need
\  TCCR0 constant TCCR0B
\  TIMSK constant TIMSK0

variable timer0.tick

: timer0.isr
  1 timer0.tick +!
;

: timer0.init ( preload -- )
   0 timer0.tick !
   TCNT0 c! \ preload
   ['] timer0.isr TIMER0_OVFAddr int!
;

\ some settings for 8bit timer to
\ get 1ms ticks
\ f_cpu  prescaler preload
\  16MHz   64       6
\   8MHz   64     131

: timer0.start
   0 timer0.tick !
   %00000011 TCCR0B c! \ prescaler 64
   %00000001 TIMSK0 c! \ enable overflow interrupt
;

: timer0.stop
  %00000000 TCCR0B c! \ stop timer
  %00000000 TIMSK0 c! \ stop interrupt
;

All interrupts are available for forth interrupts.

int! (and friends) uses the interrupt address from the data sheet as an index, but points to a different address in EEPROM. The index number is always identical to the interrupt number found in the data sheets.

See also

Shells And Upload to deal with the register names.