# timer0_isr_interval

timer0 isr interval

Author | Joep Suijs, Copyright © 2008..2022 Joep Suijs
Adapted-by | Rob Hamerling, Rob Jansen
Compiler | 2.5r6

Description

    Fixed interval isr with support for non-blocking delays.
    .
    The setup of this library is straight-forward. First you define the interval
    of the interrupt you want. With a higher value, more interrupts are generated.
    This gives a higher resolution of your delay, but also puts a high background
    load on your PIC. Be carefull if you go beyond 1000 (1kHz). The lowest possible
    rate depends on the clock frequency you use and is 77 with an 16f877 on 20 MHz.
    .
       const TIMER0_ISR_RATE = 1000  -- 1 kHz isr rate
    .
    Next, you need to specify the number of slots. A slot is used to store the
    end-time of a delay-period so you need one slot for each concurrent delay.
    .
       const DELAY_SLOTS = 2         -- support 2 delays at the same time
    .
    Now, include the library and call its init function:
    .
       include timer0_isr_interval
       timer0_isr_init()             -- init timer0 isr
    .
    Now we are ready to use the delay functions. To demonstrate its use, we take
    two LEDs and let them blink at their own interval:
    .
       forever loop
          if (check_delay(0)) then
             set_delay(0, 409)        -- 409 ticks on delay-slot 0
             led = !led
          end if
          if (check_delay(1)) then
             set_delay(1, 619)        -- 619 ticks on delay-slot 1
             led2 = !led2
          end if
       end loop

Dependencies

No dependency found

## Summary

### Global variables/contants

- `var word internal_isr_counter`
- `var word isr_countdown[DELAY_SLOTS]`
- `var byte timer0_load`

### Procedures

- `timer0_isr_init()`
- `set_delay(byte in slot, word in ticks)`
- `ISR()`

### Functions

- `isr_counter'get() return word`
- `check_delay(byte in slot) return bit`

## API details

### Global variables/contants

- `var word internal_isr_counter`

  No documentation found

- `var word isr_countdown[DELAY_SLOTS]`

  No documentation found

- `var byte timer0_load`

  No documentation found

### Procedures

- `timer0_isr_init()`

  No documentation found

- `set_delay(byte in slot, word in ticks)`

  No documentation found

- `ISR()`

  No documentation found

### Functions

- `isr_counter'get() return word`

  No documentation found

- `check_delay(byte in slot) return bit`

  No documentation found

## Related samples

Here are the list of samples which use this library:

12f617 | 12f617_tasks.jal
16f648a | 16f648a_timer0_interval.jal
16f690 | 16f690_timer0_isr_interval.jal
16f723 | 16f723_timer0_interval.jal
16f73 | 16f73_timer0_interval.jal
16f877 | 16f877_timer0_interval.jal
16f877a | 16f877a_timer0_interval.jal
16f88 | 16f88_timer0_interval.jal
18f14k50 | 18f14k50_timer0_interval.jal
18f2450 | 18f2450_timer0_interval.jal
18f2520 | 18f2520_timer0_interval.jal
18f2550 | 18f2550_timer0_interval.jal
18f2620 | 18f2620_timer0_interval.jal
18f452 | 18f452_timer0_interval.jal
18f4550 | 18f4550_timer0_interval.jal
18f4620 | 18f4620_timer0_interval.jal
18f67j50 | 18f67j50_timer0_interval.jal