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