Conventies
Conventies; afspraken met betrekking tot de code. Eentje is er al genoemd: het aangeven van het type PIC dat gebruikt wordt. De Programming Editor doet het (ook) zelf, als niets opgegeven is; hij gaat uit van de aangesloten PIC.
Naamgeving
Aangezien de laatste versie Microchip/PICAXE PICs nogal wat mogelijkheden hebben per pootje (zie het
referentie plaatje), is het een goede gewoonte om de commando's te gebruiken met een PORT.PIN notatie. In geval van de 08M2 lijkt dat (en is het) een tikkie overdreven, maar de PICAXE-40X2 heeft maar liefst vier poorten (A, B C en D), dus dan is het zo gek niet.
Kortom, het eerste programma wordt dus:
; connect physical pin 3 to L1, L2, or L3
; set picaxe type
#picaxe 08m2
main:
high C.4 ; switch pin 3 high
pause 1000 ; wait for 1 second
low C.4 ; switch pin 3 low
pause 1000 ; wait for 1 second
goto main
Programmeren
Aan de hand van voorbeelden staan hieronder een paar programmeer principes uitgewerkt. Hopelijk wordt het potentieel van de PICAXE PICs duidelijk. De
referentie staat natuurlijk online.
Symbols
Bij het gebruik van PICs met veel pootjes wordt het steeds lastiger om te onthouden welk in- of uitvoer apparaat gekoppeld is aan welk pootje. Dan is het gebruik van symbols makkelijk. Zo kun je de output C.4 in bovenstaand test programma vervangen door het symbol "LED", of "rode_LED", of "lampje".
; connect physical pin 3 to L1, L2, or L3
; set picaxe type
#picaxe 08m2
symbol LED = C.4 ; define LED connected to C.4
main:
high LED ; switch on LED
wait 1 ; wait for 1 second
low LED ; switch LED off
wait 1 ; wait for 1 second
goto main ; loop forever
In plaats van pause gebruik ik hier wait. Pause telt in milliseconden, wait in hele seconden. Pause accepteert waarden tussen 1 en 65535, wait verwacht input tussen 1 en 65.
Loops
Loops, of lussen, zijn herhalende stukjes programma. Bovenstaand voorbeeld is een programma, dat altijd maar doorgaat, dankzij het "goto main" als laatste commando. Hordes programmeurs zijn tegen goto-commando's, bovendien wordt "goto" niet door alle programmeertalen herkend. Bovendien is een "goto" altijd op te vangen met een andere constructie.
In bovenstaand voorbeeld is het een loop. Daarnaast ga ik een teller gebruiken - nog een toepassing van SYMBOL, maar nu om een variabele te definiëren (LED was een constante):
; connect physical pin 3 to L1, L2, or L3
symbol counter = b1 ; define the variable b1 as "counter"
symbol LED = C.4 ; define pin 3 with the name "LED"
; set picaxe type
#picaxe 08m2
main:
for counter = 1 to 5 ; start a for...next loop
high LED ; switch pin 3 high
pause 500 ; wait for 0.5 second
low LED ; switch pin 3 low
pause 500 ; wait for 0.5 second
next counter ; end of for...next loop
end ‘ end program
Dit programma zal dus de LED vijf keer laten "flashen" en is dan beëindigd. Dat is niet erg spectaculair... als je wilt laten zien wat je kan met zo'n PIC en iemand reageert niet snel genoeg, dan is het alweer voorbij. Je moet de PIC dan opnieuw opstarten, en bij een PICAXE-08M2 betekent dat: spanning eraf en weer opnieuw aansluiten.
Dat kan anders!
Input
Er zitten een aantal schakelaar op het AXE091 prototype bord. Ik ga ervoor zorgen, dat de PIC de LED vijf keer laat flashen nadat de schakelaar ingedrukt is. Om dit voor elkaar te krijgen, sluit ik ingang C.1 (pootje 6) aan op schakelaar SW3. Ingang C.3 (pootje 6) - groene draad. De gele draad is (nog steeds) uitgang C.4 (pootje 3).
Groene draad gaat aan connector met opschrift SW3; de gele is (nog steeds) verbonden met L1:
Het programma wordt vervolgens:
; connect physical pin 3 to L1, L2, or L3
; connect physical pin 6 to SW1, SW2, or SW3
symbol counter = b1 ; define the variable b1 as "counter"
symbol LED = C.4 ; define pin 3 with the name "LED"
symbol KEY = pinC.1 ; define pin 6 with the name "KEY"
; set picaxe type
#picaxe 08m2
main: ; main loop
if KEY = 1 then flash ; 1 means high (Vcc)
goto main
flash:
for counter = 1 to 5 ; start a for...next loop
high LED ; switch pin 4 high
pause 500 ; wait for 0.5 second
low LED ; switch pin 4 low
pause 500 ; wait for 0.5 second
next counter ; end of for...next loop
goto main ; done - wait for next key
En dit is het resltaat:
Wordt vervolgd met analoge input.