Parole chiave,
istruzioni minime,
comandi del PBASIC e
loro uso in un
programma
(in ordine alfabetico)
Vello Bruno
1
Istruzioni per l’uso
I comandi che sono essenziali vengono
evidenziati da uno sfondo verde; quelli
scritti in giallo non sono da considerarsi
(per ora); lo sfondo bicolore giallo-grigio
riguarda i comandi utili agli studenti di V
ITI per la comunicazione ad infrarossi.
Per ogni chiarimento … prima pensateci,
poi chiedete.
Vello Bruno
2
BRANCH: è un’istruzione di salto condizionato.
BRANCH offset, [ indirizzo0, indirizzo1, …indirizzo N]
Va all’indirizzo specificato da “offset” (se compreso nell’elenco). “Offset” è una variabile / costante che
specifica a quale indirizzo della lista andare (0-N).
Gli indirizzi sono etichette (di subroutines) che specificano dove andare.
Esempio:
BRANCH Muovi, [pianissimo, piano, medio, veloce]
Nella variabile “Muovi” ci sarà un valore compreso tra 0 e 3.
In caso contrario l’istruzione non avrà effetto e il controllo va alla riga successiva
Vello Bruno
3
BUTTON: è un comando che fa saltare il
programma all’indirizzo dato se il pulsante a
rimbalzo è nella condizione di premuto.
BUTTON pin, downstate, delay, rate, workspace, targetstate, label
Il pulsante a rimbalzo, permette l’auto ripetizione e salta all’indirizzo se il pulsante è nella condizione
di premuto.
Pin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..15.
Downstate è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..1.
Delay è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..255.
Rate è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..255.
Workspace è una variatile di tipo byte o word.
Targetstate è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..1.
Label è un’etichetta valida per saltare nella situazione data da un pulsante premuto.
Esempio:
Se il pulsante non è premuto ….
Vello Bruno
4
COUNT: invia cicli ad un pin per un dato
tempo (0 - 125 kHz, assumendo il duty cycle
al 50% ).
COUNT pin, period, result
Pin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..15.
Period è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo
0..65535.
Result è una costante, espressione o variabile di tipo bit, nibble, byte o word.
Vello Bruno
5
CR: (carriage return) : è un carattere di
controllo e manda a capo lo scritto (se c’è tra
le virgolette).
Esempio:
DEBUG CR “CIAO”
Rispetto alla riga precedente, il CIAO sarà scritto sotto
Vello Bruno
6
CRSRXY : manda lo scritto successivo in un
punto della “finestra di DEBUG” (d’ora in poi
chiamata finestra (di lettura)) determinato
dalle coordinate XY, dove X è la colonna e Y è
la riga. Questo permette di sovrascrivere i dati
nuovi sulla posizione dei dati vecchi
Esempio:
CRSRXY, 0 , 3,
DO
“P5 = “, BIN!, IN5,
“
P7 = “, BIN1 IN7
Pause 50
LOOP
(non considerare per ora altri comandi presenti!)
Vello Bruno
7
DATA : è un’ISTRUZIONE e serve per salvare
nella EEPROM una stringa di dati.
DATA { pointer} DATA {@ location,} { WORD} { data}{( size)} {, { WORD} { data}{( size)}...}
Memorizza dei dati nella EEPROM prima di caricare il programma PBASIC.
Pointer è il nome di una costante o variabile di tipo bit, nibble, byte o word, opzionale e indefinita
alla quale è assegnato il valore della prima locazione di memoria in cui il dato è scritto which is
assigned the value of the first memory location in which data is written.
Location è una costante, espressione o variabile di tipo bit, nibble, byte or word opzionale che
indica la prima locazione di memoria in cui il dato deve essere scritto.
Word è un “interruttore” opzionale che fa memorizzare il dato in due distinti byte.
Data è una costante o espressione che deve essere scritta in memoria.
SIZE è una costante opzionale che descrive il numero di byte, definiti o indefiniti, di dati da
scrivere/conservare in memoria.
Se DATA non è specificato allora viene riservato uno spazio dati indefinito e se DATA è
specificato allora vengono scritti in memoria bytes di dati nello spazio pari a DATA.
Vello Bruno
8
Occorre sapere che ogni movimento del robot nel basic è effettuato dando una singola
lettera di codice, che richiama una subroutine (traduci come “programma che dipende da…):
F per avanti; B per indietro; L per gira a sinistra; R per gira a destra. Quindi movimenti
complessi possono essere facilmente descritti da una sequenza di lettere, che termineranno
con la Q di”quit”.
Esempio:
DATA
“FLFFRBLBBQ”
Ogni lettera è memorizzata in un byte della EEPROM iniziando dall’indirizzo 0 (a meno che noi
vogliamo iniziare a memorizzare altrove).
Associata a questa istruzione avremo (la rivedremo) l’istruzione READ, che legge nella
EEPROM ed estrae i dati memorizzati finché il programma gira.
Questi dati possono essere letti dentro un “loop” come questo:
DO
READ indirizzo, istruzione
indirizzo= indirizzo+ 1
‘blocco di comandi Pbasic qui non scritti.
LOOP
Vello Bruno
9
DEBUG : fa apparire nella finestra del PC
la scritta che viene posta tra apici.
DEBUG outputdata {, outputdata...}
Outputdata è unastringa di testo, constante o una variabile di tipo bit, nibble, byte o word.
Se non sono specificate formati con cui mostrare i dati, DEBUG mostra per default caratteri
ascii senza spazi o a capo, col valore a seguire
Esempio:
DEBUG CR, “Hello, this is a message from your Boe-Bot,”
DEBUG CR, “What’s 7 x 11?”
DEBUG CR, “The answer is:”
DEBUG DEC 7 * 11 (DEC è un formato che dice di mostrere valori decimali)
Il programma si scriverà così (nella slide seguente):
Vello Bruno
10
Questa è la finestra che appare nel PC
Vello Bruno
11
Nella finestra di DEBUG allora apparirà quanto segue:
Vello Bruno
12
DEBUGIN: è un COMANDO che manda il
valore, da te immesso nella finestra del
pannello di trasmissione (come prima si era
visto nel pannello di lettura), nella variabile
opportunamente scelta.
Esempio:
Supponiamo che la variabile sia pulseWidth. Il programma deve allora contenere una
dichiarazione per questa variabile:
pulseWidth VAR Word
Il comando DEBUGIN è usato quindi per catturare il valore decimale che tu scrivi nel pannello di
trasmissione e lo immette nella variabile pulseWidth.
DEBUGIN
DEC
pulseWidth
Questo valore immesso ora può essere usato dal programma.
Vello Bruno
13
DEC : è una parola-chiave che permette di
mostrare un valore decimale nella finestra.
Esempio:
DEBUG CR, “What’s 7 x 11?”
DEBUG CR, “The answer is:”
DEBUG DEC 7 * 11
La finestra ora mostrerà due righe, quella della domanda e quella della risposta col valore
numerico 77 sulla stessa linea (non c’era il CR!).
Avevamo già visto queste tre righe, ma avevo chiesto di ignorare i comandi non in spiegazione..
Ora si nota (in grassetto) la parola DEC.
Vello Bruno
14
DO...WHILE: è un’ISTRUZIONE che permette
di compiere un loop finché sussiste una
certa condizione, smettendo il loop al
cessare della condizione.
Esempio:
DO
duration = duration + 1
WHILE duration <=2000
Ovviamente prima si era dichiarato un valore iniziale della variabile duration e la condizione per
continuare il loop è che tale variabile contenga un valore minore o uguale a 2000.
Quando tale valore viene superato, cessa il loop e si passa all’istruzione successiva.
Vello Bruno
15
DO … LOOP : è un COMANDO usato in
differenti circostanze.
Vediamo di seguito le possibilità offerte da questo comando, considerando gli esempi posti per
apprenderne l’uso nelle diverse necessità.
A prima vista può apparire indifferente l’uso dell’una o dell’altra forma, ma con la pratica se ne
capirà l’utilità della diversificazione.
Vello Bruno
16
DO … LOOP UNTIL (condizione): continua il
loop finché non diventa vera una certa
condizione inizialmente falsa.
Esempio:
DO
READ address, instruction
address= address+1
‘blocco di comandi Pbasic qui non scritti.
LOOP UNTIL INSTRUCTION = “Q”
Vello Bruno
17
DO WHILE (condizione) … LOOP invece
continua il loop finché resta vera una certa
condizione inizialmente vera.
Esempio:
Vello Bruno
18
DTMFOUT: genera toni telefonici DTMF
DTMFOUT pin, { ontime, offtime,}[ key{, key...}]
Pin is a constant, expression or a bit, nibble, byte or word variable in the range
0..15.
Ontime and offtime are constants, expressions or bit, nibble, byte or word variables
in the range 0..65535.
Key is a constant, expression or a bit, nibble, byte or word variable in the range
0..15.
Vello Bruno
19
ELSE : è un’ISTRUZIONE che fa compiere
una scelta al processo della situazione in
corso. Viene eseguita la parte di programma
che segue l’ELSE se risulta falsa la
condizione posta con l’istruzione IF (si vedrà in
seguito).
Esempio:
IF IN5 = 0 THEN ‘blocco di comandi Pbasic qui non scritti.
ELSE ‘blocco di comandi Pbasic qui non scritti.
ENDIF
Vello Bruno
20
ELSEIF: se occorre nidificare diversi IF, ogni
volta occorre mettere questa istruzione.
Esempio:
IF numero=0 THEN vai di qui
ELSEIF numero>5 THEN vai di là
ELSEIF numero <3 AND >4 THEN non andare
……..
,,,,,,,,,
Vello Bruno
21
END: termina il programma
Vello Bruno
22
ENDIF: da mettere alla fine di ogni
nidificazione di IF
Esempio:
IF numero=0 THEN vai di qui
ELSEIF numero>5 THEN vai di là
ELSEIF numero <3 AND >4 THEN non andare
ENDIF
ENDIF
ENDIF
Vello Bruno
23
FOR … NEXT: crea un ciclo ripetitivo che
esegue le linee di programma poste tra FOR
e NEXT, incrementando o decrementando
una variabile in accordo col valore “stepVal”
(in pratica è un “passo”, che se non
specificato vale 1) finché il valore della
variabile giunge all’ultimo valore.
FOR variabile = valore iniziale to valore finale { stepVal} …NEXT
Variabile è un bit, nibble, byte o word di variabile usata come contatore.
Quando il valore della variabile raggiunge la fine, il ciclo FOR . . . NEXT ferma la sua esecuzione
ed il programma torna all’istruzione che segue il NEXT.
Se il valore iniziale è più grande del valore finale, PBASIC2 interpreta il “passo” stepVal come
negativo, così come quando viene usato un valore negativo per “stepValue”..
Vello Bruno
24
FREQOUT: genera una o due onde
sinusoidali di specificata frequenza (da 0 a
32767 Hz).
FREQOUT pin, milliseconds, freq1 {, freq2}
Pin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo of 0..15.
Milliseconds è una costante, espressione o variabile di tipo bit, nibble, byte o word.
Freq1 e freq2 sono costanti, espressioni o variabili di tipo bit, nibble, byte o word nell’intervallo
0..32767 rappresentanti le corrispondenti frequenze.
Vello Bruno
25
GOSUB: carica l’indirizzo della prossima
istruzione dopo GOSUB, quindi va al punto
del programma specificato dalla
Etichetta_di_indirizzo.
GOSUB Etichetta_di_indirizzo
Viene quindi svolta una “subroutine” (piccolo sottoprogramma), che terminerà con la seguente
istruzione: RETURN
Return fa tornare indietro dalla “subroutine”, appena svolta, al punto del programma
immediatamente successivo all’ultimo salto fatto col GOSUB.
Vello Bruno
26
GOTO: va al punto, nel programma,
specificato da una Etichetta_di_indirizzo.
GOTO Etichetta_di_indirizzo
Etichetta_di_indirizzo è un’etichetta che specifica dove andare.
Vello Bruno
27
HIGH: pone lo specificato pin di uscita a
livello alto (scrive 1 nei corrispondenti bit di
entrambi i DIRS e OUTS).
HIGH pin
Pin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..15
DIR è
OUT è
Vello Bruno
28
IF...THEN: valuta la condizione e, se risulta
vera, va al punto del programma marcato con
l’etichetta di indirizzo (o esegue il/i comando/i).
IF condizione THEN etichetta di indirizzo (comando)
La condizione è uno”statement” , come “x=7” che può essere valutata come vera o falsa.
L’ etichetta di indirizzo è un’etichetta (nome) che specifica dove andare nel caso che la condizione
sia vera.
Vello Bruno
29
LOOKDOWN: scrive(?)/legge(?) il valore
specificato da value e lo confronta con i
valori che seguono tramite l’operatore
logico seguente (ponendolo?) nell’apposita
variabile
LOOKDOWN value, {??,} [ value0, value1,... valueN], variable
Value è una costante, espressione o variabile di tipo bit, nibble, byte or word.
?? è =, <>, >, <, <=, =>. (= è per default).
Value0, value1, etc. sono costanti, espressioni o variabili di tipo bit, nibble, byte or word.
Variable è una variabile di tipo bit, nibble, byte o word.
Vello Bruno
30
LOOKUP: legge il valore specificato da index
e lo carica in una variabile
LOOKUP index, [ value0, value1,... valueN], variable
Index è una costante, espressione, o una variabile di tipo bit, nibble, byte o word.
Value0, value1, etc. sono delle costanti, espressioni, o variabili di tipo bit, nibble, byte o word.
Variable è una variabile di tipo bit, nibble, byte o word.
Se “index” eccede il più alto valore della lista, la variabile è ininfluente.
Nella lista possono essere inclusi un massimo di 256 valori.
Vello Bruno
31
LOW: Pone il “pin” di uscita a livello basso
(messo a 1 dal corrispondente bit del DIRS e
a 0 dal corrispondente bit del OUTS)
LOW pin
Pin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..15.
Vello Bruno
32
NAP: addormenta il programma per un
piccolo periodo. Il consumo di corrente è
ridotto a 50 uA.
NAP period
END
Period è una constante, expressione oppure una variabile di tipo bit, nibble, byte o word
nell’intervallo 0..7 della durata ciascuno di 18ms.
Il programma dorme finché c’è alimentazione o il PC è connesso. Il consumo di corrente
è ridotto approssimativamente a 50 uA
Vello Bruno
33
PAUSE: Esecuzione di una pausa per 0–
65535 millisecondi
PAUSE milliseconds
Milliseconds è una constant,e expressione oppure una variabile di tipo bit, nibble, byte o word
nell’intervallo 0..65535.
Vello Bruno
34
PULSIN: Misura un impulso in ingresso
(risoluzione di 2 µs).
PULSIN pin, state, variable
Pin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo
0..15
State è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo
0..1.
Variable è una variabile di tipo bit, nibble, byte o word.
Le misure vengono effettuate con 2µs di intervallo e le istruzioni vogliono un intervallo di
uscita di 0.13107 secondi.
Vello Bruno
35
PULSOUT: Output emette un impulso di
durata determinata che inverte il valore in
un pin per un certo tempo (risoluzione di 2
µs).
PULSOUT pin, period
Pin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..15
Period è una costante, un’espressione o un bit, nibble, byte o word.
Variable nell’intervallo 0..65535 rappresenta la larghezza dell’impulso in unità di 2 µs.
Vello Bruno
36
PWM: Output PWM, then return pin to input.
This can be used to output analog voltages (05V) using a capacitor and resistor.
PWM pin, duty, cycles.
Pin is a constant, expression or a bit, nibble, byte or word variable in the range 0..15.
Duty is a constant, expression or a bit, nibble, byte or word variable in the range 0..255.
Cycles is a constant, expression or a bit, nibble, byte or word variable in the range 0..255
representing the number of 1ms cycles to output.
Vello Bruno
37
RANDOM: genera un numero pseudorandom (random = casuale).
RANDOM variable
Variable è una variabile di tipo byte o word nell’intervallo 0..65535.
Vello Bruno
38
RCTIME: misura il tempo di carica/scarica di
un ramo. Può essere usato per misurare dei
potenziometri.
RCTIME pin, state, variable
Pin is a constant, expression or a bit, nibble, byte or word variable in the range 0..15.
State is a constant, expression or a bit, nibble, byte or word variable in the range 0..1
Variable is a bit, nibble, byte or word variable.
Vello Bruno
39
READ: read legge un byte nella EEPROM e
lo pone in una variabile.
READ location, variable
Location è una constante, expressione o una variabile di tipo bit, nibble, byte o word
nell’intervallo 0..2047.
Variable è una variabile di tipo bit, nibble, byte o word.
Vello Bruno
40
RETURN: fa terminare una subroutine
Esempio:
sottoprogrammamio:
IF a=b
THEN scrivisonouguali
ELSE scrivisonodiversi
RETURN
Il nome del sottoprogramma è strettamente legato al comando RETURN
Vello Bruno
41
SHIFTIN: Sposta i bit dentro un registro a scorrimento parallelo/seriale.
SHIFTIN dpin, cpin, mode, [result{\ bits} { , result{\ bits}... }]
Dpin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..15
che specifica il pin dei dati.
Cpin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..15
xhe specifica il pin del clock.
Mode è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..4
che specifica l’ordine dei bit ed la modalità del clock. 0 o MSBPRE = prima lo msb, pre-clock,
1 o LSBPRE = prima lo lsb, pre-clock, 2 or MSBPOST = prima lo msb post-clock, 3 or
LSBPOST = prima lo lsb, post-clock.
Result is a bit, nibble, byte or word variable where the received data is stored.
Bits is a constant, expression or a bit, nibble, byte or word variable in the range 1..16
specifying the number of bits to receive in result. The default is 8.
Vello Bruno
42
SHIFTOUT: sposta i bit fuori dal registro a
scorrimento seriale/parallelo.
SHIFTOUT dpin, cpin, mode, [ data{\ bits} {, data{\ bits}... }]
Dpin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo
0..15 che specifica il pin dei dati (data).
Cpin una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..15
che specifica il pin del clock.
Mode è una costante, symbolo, expressione o variabile di tipo bit, nibble, byte or word
nell’intervallo 0..1 che specifica l’ordine dei bit.
0 o LSBFIRST = prima il bit meno significativo (less significative bit),
1 o MSBFIRST = prima il bit più significativo (most …).
Data è una costante, espressione o variabile di tipo bit, nibble, byte o word contenente i dati
da mandare fuori.
Bits è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 1..16
che specifica il numero di bit di dati d mandare. Il valore di default è 8.
Vello Bruno
43
SELECT…CASE…ENDSELECT
Vello Bruno
44
SERIN: serial input with optional qualifiers,
time-out, and flow control. If qualifiers are given, then the
instruction will wait until they are received before filling variables or continuing to the
next instruction. If a time-out value is given, then the instruction will abort after receiving
nothing for a given amount of time. Baud rates of 300 - 50,000 are possible (0 - 19,200
with flow control). Data received must be N81 (no parity, 8 data bits, 1 stop bit) or E71
(even parity, 7 data bits, 1 stop bit).
SERIN rpin{\ fpin}, baudmode, { plabel,} { timeout, tlabel,}
[inputdata]
Rpin is a constant, expression or a bit, nibble, byte or word variable in the range 0..15.
Fpin is a constant, expression or a bit, nibble, byte or word variable in the range 0..15.
Baudmode is a constant, expression or a bit, nibble, byte or word variable in the range
0..65535.
Plabel is a label to jump to in case of a parity error.
Timeout is a constant, expression or a bit, nibble, byte or word variable in the range 0..65535
representing the number of milliseconds to wait for an incoming message.
Vello Bruno
45
SERIN (segue)
Tlabel is a label to jump to in case of a timeout.
Inputdata is a set of constants, expressions and variable names separated by
commas and optionally proceeded by the formatters available in the DEBUG
command, except the ASC and REP formatters.
Inputdata is a set of constants, expressions and variable names separated by
commas and optionally proceeded by the formatters available in the DEBUG
command, except the ASC and REP formatters.
Vello Bruno
46
SEROUT: Send data serially with optional
byte pacing and flow control. If a pace value is given,
then the instruction will insert a specified delay between each byte sent (pacing is
not available with flow control). Baud rates of 300 - 50,000 are possible (0 - 19,200
with flow control). Data is sent as N81 (no parity, 8 data bits, 1 stop bit) or E71 (even
parity, 7 data bits, 1 stop bit)
SEROUT tpin{\ fpin}, baudmode, { pace,} { timeout, tlabel,}
[outputdata]
Tpin is a constant, expression or a bit, nibble, byte or word variable in the range 0..16.
Fpin is a constant, expression or a bit, nibble, byte or word variable in the range 0..15.
MANCA UN PEZZO
Vello Bruno
47
SLEEP: dorme” da 1 a 65535 secondi
SLEEP seconds
Seconds è una costante, espressione oppure una variabile di tipo bit, nibble, byte o word,
nell’intervallo 0..65535, che specifica il numero di secondi di addormentamento.
Il consumo di corrente è ridotto approssimativamente a 50 µA.
Vello Bruno
48
STOP: termina l’esecuzione del programma
Evita al Basic Stamp l’esecuzione di qualunque istruzione successiva finché viene resettato il
sistema.
Le seguenti azioni resettano il Basic Stamp:
1) Premere il bottone di RESET sulla basetta
2) Mettere il pin RES basso e rilasciarlo ad alto
3) Caricare un nuovo programma
4) Disconnettere l’alimentazione.
STOP è diverso da END per due motivi:
1) STOP non necessita di porre il Basic Stamp in modo “bassa potenza”. Il Basic Stamp pilota
carrente come se fosse attivato un programma con istruzioni
2) Non succede che le uscite “cadano (?glitch)” come dopo che un programma ha avuto END
come comando.
Vello Bruno
49
TOGGLE: inverte lo stato del pin.
TOGGLE pin
Pin è una costante, espressione o variabile di tipo bit, nibble, byte o word nell’intervallo 0..15
Vello Bruno
50
XOUT: generate X-10 powerline control
codes. For use with TW523 or TW513
powerline interface module.
XOUT mpin, zpin, [ house\ keyorcommand{\ cycles} {, house\ keyorcommand{\
cycles}... }]
Mpin is a constant, expression or a bit, nibble, byte or word variable in the range 0..15
specifying the modulation pin.
Zpin is a constant, expression or a bit, nibble, byte or word variable in the range 0..15
specifying the zerocrossing pin.
House is a constant, expression or a bit, nibble, byte or word variable in the range
0..15 specifying the house code A..P respectively.
Keycommand is a constant, expression or a bit, nibble, byte or word variable in the
range 0..15 specifying keys 1..16 respectively or is one of the commands shown for
X-10 light control in the BASIC Stamp Manual. These commands include lights on,
off, dim and bright.
Cycles is a constant, expression or a bit, nibble, byte or word variable in the range
2..65535 specifying the number of cycles to send. (Default is 2).
Vello Bruno
51