;-------------------------------------------------------------------------------
;16F684_blink
;
;Led knipperlicht
;
; interne oscillator op 4MHz
; interne MCLR
;-------------------------------------------------------------------------------
include 16f684

pragma target clock    4_000_000       ;oscillator frequency
pragma target OSC      INTOSC_NOCLKOUT ;interne oscillator/osc pinnen beiden IO
pragma target WDT      disabled        ;no watchdog
pragma target MCLR     internal        ;reset internally

enable_digital_io()    ;alle pinnen digitale IO

;LED is via voorschakelweerstand aangesloten op pin A0
alias   led      is pin_A0
pin_A0_direction =  output
led = off
;-------------------------------------------------------------------------------
;instellingen voor Timer0
;-------------------------------------------------------------------------------
const byte Timer0Reload = 0x06
const byte TimerCounterReload = 250
var byte TimerCounter = TimerCounterReload


INTCON_T0IE     = high  ;interrupt!
OPTION_REG_T0CS = low   ;Timer0 timer mode
OPTION_REG_PSA  = low   ;prescaler op Timer0
;reset alle prescaler bits en zet daarna de prescaler op 011 (=/16)
OPTION_REG = (OPTION_REG & 0xF8) | 0x03
TMR0       = Timer0Reload

var bit TimePassed = low

INTCON_GIE = high        ;enable interrupts


;-------------------------------------------------------------------------------
;INTERRUPT PROCEDURE
;-------------------------------------------------------------------------------
procedure Timer0Interrupt is
    pragma interrupt
    if(INTCON_T0IF)then
      ;T0IF is geset, 4 ms zijn verlopen
      TMR0 = Timer0Reload       ;herlaad Timer0
      INTCON_T0IF = low         ;reset Timer0 interrupt vlag
      ;laat dit 250 keer gebeuren voor 1 seconde
      TimerCounter = TimerCounter - 1
      if(TimerCounter == 0)then
        TimerCounter = TimerCounterReload       ;herlaad de teller
        TimePassed = high                       ;Meldt dat de tijd verstreken is
      end if
    end if
end procedure



;-------------------------------------------------------------------------------
forever loop
  if(TimePassed)then
    ;1 seconde is verstreken
    TimePassed = low        ;wis de vlag
    Led = !Led              ;zet de led aan of uit
  end if
  ;hier tijd voor andere zaken uit te voeren
  ;...
end loop
;-------------------------------------------------------------------------------