Picaxe - notazioni sul linguaggio e uso della memoria

Transcript

Picaxe - notazioni sul linguaggio e uso della memoria
Picaxe - notazioni sul linguaggio e uso della memoria
-1-
Il linguaggio del picaxe prevede, oltre alle istruzioni vere e proprie, altre parti del linguaggio utili e spesso
indispensabili per la comprensione del programma e per la sua esecuzione quali le ‘etichette’ e i commenti.
Etichette:
Sono dei nomi scelti dall’utente per contrassegnare una riga di istruzioni dove il programma deve saltare in
seguito all’uso di un ‘goto’, un ‘gosub’ o di un altro comando. Le etichette possono essere qualsiasi parola
che non sia una parola chiave già usata dal linguaggio di programmazione (vedi lista parole in fondo a
questa sezione) e possono contenere cifre ma devono iniziare sempre con una lettera (e non una cifra) e
devono essere seguite dai due punti (:). Il compiler non è ‘case sensitive’ perciò è indifferente scriver con le
maiuscole e poi richiamare le etichette con le maiuscole e viceversa.
ES.
main:
high 1 ‘ manda a 1 output 1
goto main ‘ vai alla linea indicata con main
Sono spesso usati gli spazi, i tab e le linee vuote per avere un programma chiaro, pulito e semplice da
leggere. Per convenzione si pongono le etichette nella parte sinistra dello schermo e tutti gli altri comandi
vanno indentati (incolonnati) con il comando ‘tab’ della tastiera.
Commenti:
I commenti sono usati per aggiungere informazioni al programma ad esempio per spiegare la funzione di
istruzioni in una certa parte del programma. Sono completamente ignorati dal compiler e devono essere
preceduti da un apostrofo (‘) oppure dal punto e virgola (;) o dalla dicitura REM e continuano fino alla fine
della riga. ES. high 0 ‘ manda a 1 output 0
pause 1000
; delay di 1 secondo
low 0
REM manda a 0 output 0
il software usa anche valori numerici ad esempio i valori assunti dalle variabili; essi sono detti ‘costanti’
Costanti:
Sono i numeri usati all’interno del programma; il software supporta gli interi da 0 a 65535.
Le costanti possono esser dichiarate in quattro modi differenti: decimale, esadecimale, binario e ASCII
DECIMALE
ESADECIMALE (hex)
BINARIO
ASCII
senza nessun prefisso
ES.
100
‘ 100 decimale
preceduto da ($) o (0x)
ES.
0x 64
‘ 64 hex
preceduto da (%)
ES.
% 01001101
‘ byte binario
incluso tra (“)
ES.
“A”
‘ “A” ASCII (65)
ES.
“Ciao”
‘ “Ciao” ASCII equivalente a “C”,“I”,“A”,“O”
ES.
B1 = B0 ^ $AA ‘ xor tra la variabile B0 e AA hex
Rinominamento di costanti e variabili:
Tramite l’istruzione ‘symbol’ è possibile dare un nome diverso, scelto dall’utente, ad una variabile o ad una
costante ad esempio per ricordarne la funzione all’interno del programma. I nomi assegnati devono essere
seguiti dal segno = e poi dal nome della variabile o dal valore della costante. Come le etichette i nomi dati
possono essere qualsiasi parola che non sia una parola chiave già usata dal linguaggio di programmazione
(vedi lista parole in fondo a questa sezione) e possono contenere cifre ma devono iniziare sempre con una
lettera (e non una cifra). L’uso di questa istruzione non incrementa la lunghezza del programma.
ES.
symbol LED_BLU = 3
symbol DELAY = b0
let DELAY = 200
mainloop:
high LED_BLU
pause DELAY
low LED_BLU
pause DELAY
goto mainloop
10 / 2 0 0 8
‘
‘
‘
‘
‘
‘
‘
‘
‘
led blu è output3
rinomina b0 in DELAY
carica la variabile con il valore 200
inizio programma e fine dei settagli e dei symbol
manda a 1 output 7
delay di 0.2 secondi
manda a 0 output 7
delay di 0.2 secondi
torna all inizio
Memoria e uso variabili:
-2-
Le variabili usate dal sistema picaxe si classificano in diversi tipi: variabili per uso generico (general
purpose), variabili di memorizzazione (storage), variabili matematiche (mathematics), variabili aventi
funzione speciale (special function), variabili di sistema (system) e variabili scratchpad.
• variabili per uso generico
Queste variabili sono usate per memorizzare temporaneamente un dato e sono usate nei calcoli matematici
o direttamente dalle istruzioni. Sono, insieme a quelle di memorizzazione, quelle con funzione speciale e
quelle di scratcpad, delle variabili memorizzate nella RAM (cioè quando viene staccata l’alimentazione o il
microcontrollore viene resettato esse perdono tutto il dato). In ogni microcontrollore sono presenti 14 (o più)
variabili per uso generico ciascuna in grado di contenere un numero intero da 0 a 255. Esse possono essere
combinate in modo che 2 variabili formino una variabile più grande detta wordvariabile in grado di
memorizzare un numero da 0 a 65535. Le wordvariabili sono formate in questo modo:
w0 = b1 : b0
w1 = b3 : b2
w2 = b5 : b4
w3 = b7 : b6
ecc...
Inoltre le prime due variabili possono essere ‘spezzate’ in 8 bit ognuna ricavati in questo modo:
b0 = bit7: bit6: bit5: bit4: bit3: bit2: bit1: bit0
b1 = bit15: bit14: bit13: bit12: bit11: bit10: bit9: bit8
ecc...
Se non controllate, variabili e wordvariabili, possono ‘sforare’ (overflow) cioè dopo aver assunto il valore
massimo tornare a 0 e far ripartire il valore da lì (quindi ad esempio 254 + 3 = 1 e 2 – 3 = 255) Le variabili hanno
nome b0, b1, b2,... fino a b13 (nel caso in cui siano 14) mentre le wordvariabili hanno nome w0,w1,w2,... fino
a w7 (sono la metà delle variabili) e i bit bit0,bit1,bit2,...
Wordvariabili,variabili e bit possono essere usate all’interno dello stesso programma senza problemi
ricordandosi però che se si modifica un bit viene modificato anche il valore della variabile di cui fa parte e la
stessa cosa vale tra variabile e wordvariabile perciò conviene non usare variabili di cui sono già stati usati i
bit e wordvariabili di cui sono già state usate la variabili che le formano. Quando wordvariabili,variabili e bit
vengono usati vengono richiamati semplicemente con il loro nome (cioè w1, b3, bit8,... ecc). tutte la variabili
di questo tipo vengono resettate a 0 ad ogni avvio di programma.
Questa tabella indica con esattezza il numero e il nome di variabili e wordvariabili disponibili in ogni chip:
08M
14M
20M
18A
18X
18X1
18X2
28A
28X
28X1
28X2
10 / 2 0 0 8
Bytes
14
14
14
14
14
14
14
14
14
28
48
Bit Name
bit0-15
bit0-15
bit0-15
bit0-15
bit0-15
bit0-15
bit0-15
bit0-15
bit0-15
bit0-31
bit0-31
Byte Name
b0-13
b0-13
b0-13
b0-13
b0-13
b0-13
b0-13
b0-13
b0-13
b0-27
b0-47
Word Name
w0-6
w0-6
w0-6
w0-6
w0-6
w0-6
w0-6
w0-6
w0-6
w0-13
w0-23
• variabili di memorizzazione
-3-
Sono ulteriori variabili dove salvare i dati temporaneamente durante lo svolgimento del programma e non
possono essere usate nei calcoli matematici ma solo per salvare e prelevare i valori con l’uso delle istruzioni
‘peek’ e ‘poke’. Il numero di locazioni usabili per salvare le variabili varia da picaxe a picaxe come da tabella:
PICAXE-08M
PICAXE-14M,20M
PICAXE-18
PICAXE-18A
PICAXE-18X
PICAXE-28A
PICAXE-28X, 40X
PICAXE-28X1, 40X1
PICAXE-28X2, 40X2
48
48
48
48
96
48
112
95
200
da 80 a 127 ($50 a $7F)
da 80 a 127 ($50 a $7F)
da 80 a 127 ($50 a $7F)
da 80 a 127 ($50 a $7F)
da 80 a 127 ($50 a $7F), 192 a 239 ($C0 a $EF)
da 80 a 127 ($50 a $7F)
da 80 a 127 ($50 a $7F), 192 a 255 ($C0 a $FF)
da 80 a 126 ($50 a $7E), 192 a 239 ($C0 a $EF)
da 57 a 255 ($39 a $FF)
• variabili aventi funzione speciale
Ogni tipo di picaxe ha particolari variabili con funzione speciale (detti SFR); nel picaxe 08M:
- pins = input \ output port
costituito dai pin
x : x : x : pin4 : pin3 : pin2 : pin1 : x
- dirs = data direction register
costituito dai pin
x : x : x : dir4 : x : dir2 : dir1 : x
- infra = altro nome di b13, usato con il comando infrain2
Nel picaxe 14M,18X,18A sono:
- pins
= input port quando si legge il valore del port costituito da x : x : x : pin4 : pin3 : pin2 : pin1 : pin0
(mentre per 20M è costituito da pin7 : pin6 : pin5 : pin4 : pin3 : pin2 : pin1 : pin0)
(mentre per 18X e 18A è costituito da pin7 : pin6 : x : x : x : pin2 : pin1 : pin0)
- (out)pins = output port quando si scrive nel port costituito da outpin5 fino a outpin0
(per 20M,18A e 18X è costituito da outpin7 : outpin6 : outpin5 : outpin4 : outpin3 : outpin2 : outpin1 : pin0)
- infra
= altro nome di una variabile qualsiasi usata con il comando infrain
Anche gli altri chip hanno SFR che però non sono qui riportati.
• variabili matematiche
I microcontrollori picaxe supportano gli interi positivi da 0 a 65535. i calcoli possono essere eseguiti anche su
byte (0-255) ma se il risultato è superiore a 255 si ha un overflow. I calcoli matematici sono eseguiti da sinistra a
destra senza priorità di * e / su - e +. Per vedere quali operazioni sono supportate consultare il comando ‘let’.
• variabili di sistema e scratchpad
Sono supportate solo sulle versioni più recenti, le X1 e X2; le scratchpad sono variabili di memoria per dati
come gli array mentre quelle di sistema sono usate per particolari funzioni hardware (i2c,timer,hserptr,...)
10 / 2 0 0 8