Ik ben een timer aan het maken met een pic.
De timer telt af van een ingestelde tijd (max 19min 59 sec) deze tijd is zichtbaar op een 7 segment display 1/2 3digits.
de tijd instellen is al gelukt, door een drukschakelaar 1 maal in te drukken zal de tijd met 1 sec verhogen. Wanneer hij langer ingedrukt word gaat hij automatisch bijtellen.

Mijn vraag is nu hoe kan ik door gebruik te maken van een externe kristal oscillator de ingestelde tijd juist laten aftellen?

DEVICE 16F628A                ;We gebruiken een 16F628A type
CONFIG WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, INTRC_OSC_NOCLKOUT
ALL_DIGITAL TRUE 
'declaratie
trisb = %00000000
trisa = %11000000

dim digit1 as byte
dim digit2 as byte
dim digit3 as byte
dim digit4 as byte
dim delay as word
dim delay1 as word

symbol timebut = porta.7
symbol startbut = porta.6
symbol dots = porta.4 
'initialisatie
digit1 = 0
digit2 = 0
digit3 = 0
digit4 = 0
delay = 0  
while startbut = 0
  high dots
  if timebut = 1 then 
    gosub settime
  endif  
  while timebut = 1 
    inc delay
    if delay = 5000 then
      while timebut = 1
        inc delay1
        if delay1 = 1000 then
          gosub settime
          delay1 = 0
        endif  
        Gosub disp
      wend  
    endif     
    
    gosub disp
  wend
gosub disp     
delay = 0 
wend

disp:      '7segment multiplexen
porta = %11111110
portB = lookup digit1, [$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F]
portb = %00000000
porta = %11111101
portB = lookup digit2, [$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F]
portb = %00000000
porta = %11111011
portB = lookup digit3, [$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F]
portb = %00000000
porta = %11110111
portB = lookup digit4, [$00,$06]
portb = %00000000
return

settime: 'tijd instellen
  inc digit1
  if digit1 =10 then
    digit1 = 0
    inc digit2
    endif
    if digit2 = 6 then
      digit2 =0
      inc digit3
    endif
    if digit3 = 10 then
      digit3 = 0
      inc digit4
    endif 
    if digit4 = 2 then
      digit1 = 0
      digit2 = 0
      digit3 = 0
      digit4 = 0
    endif    
return