Dank je wel allemaal voor de reacties!
Na veel gevloek en zoekwerk heb ik een testprogramma opgesteld en na wat testwerk werkt dit! ik kan het nog steeds bijna niet geloven.
Om de pic te laten reageren op de knoppen volstond dit magische zinnetje:
CMCON = 7 Hier de broncode:
program eenvoudige_teller
'gemaakt voor de PIC16F627
'DOEL: programma voor een muntenteller
'FUNCTIES: 4 knoppen die tellen, led's voor de output
'PORTA bevat de knoppen, PORTB bevat de led's
'*******************************************************************************
' ***ALGEMEEN***
'*******************************************************************************
symbol plus2 = PORTA.1 'de eerste knop wordt gedefinieerd
symbol plus1 = PORTA.0 'de tweede knop wordt gedefinieerd
symbol min1 = PORTA.2 'de derde knop wordt gedefinieerd
symbol min2 = PORTA.3 'de vierde knop wordt gedefinieerd
symbol led1 = PORTB.0
symbol led2 = PORTB.1
symbol led3 = PORTB.2
symbol led4 = PORTB.3
symbol led5 = PORTB.4
symbol led6 = PORTB.5
dim munt as byte
dim controlebit1, opteller1 as byte
dim controlebit2, opteller2 as byte
dim controlebit3, afteller1 as byte
dim controlebit4, afteller2 as byte
'*******************************************************************************
' ***BODY***
'*******************************************************************************
config:
TRISA = %11111111 'poorten A en B worden geconfigureerd
TRISB = %00000000 ' 1 = ingang, 0 = uitgang
CMCON = 7 'iets dat moet, ?waarom? iets met porta
munt = 0 'var van de munten worden op nul gezet
teller: 'label om het begin aan te duiden
opteller1 = 0
opteller2 = 0
afteller1 = 0
afteller2 = 0
'*******************************************************************************
'hier begint het tel gedeelte
'*******************************************************************************
if (controlebit1 = 0) and (plus1 = 1) then
opteller1 = 1
end if
controlebit1 = plus1
if (opteller1 = 1) then
Inc(munt)
end if
'*******************************************************************************
if (controlebit2 = 0) and (plus2 = 1) then
opteller2 = 1
end if
controlebit2 = plus2
if (opteller2 = 1) then
munt = munt + 2
end if
'*******************************************************************************
if (controlebit3 = 0) and (min1 = 1) then
afteller1 = 1
end if
controlebit3 = min1
if (afteller1 = 1) then
Dec(munt)
end if
'*******************************************************************************
if (controlebit4 = 0) and (min2 = 1) then
afteller2 = 1
end if
controlebit4 = min2
if (afteller2 = 1) then
munt = munt - 2
end if
'*******************************************************************************
'hier begint het output gedeelte
'*******************************************************************************
select case munt
case 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
case 1
Led1 = 1
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
case 2
Led1 = 1
Led2 = 1
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
case 3
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 0
Led5 = 0
Led6 = 0
case 4
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 0
Led6 = 0
case 5
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 0
case 6
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 1
case else
munt = 0
end select
goto teller
end.
Het doet exaxt wat het hoort te doen, en ik hoop dat het mensen die ook net beginnen met mikrocontrollers kan helpen.
Opm: dit is geschreven in mikroBasic
Nu moet ik dit zien te verwerken in mijn echte programma, iemand hints om 1) mikroBasic duidelijk te maken dat ik met het intern kristal wil werken en 2) om een 20x4 lcd aan te sturen?
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
CMCON = 7 is bekend.
Dit onder andere, wordt in Proton PIC Basic ingesteld door de bekende ALL_DIGITAL = TRUE.