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