Programmare in mikroBasic
 
  Box pubblicitario
Elementi del linguaggio mikroBasic (1)

Sommario

Se avete avuto esperienze di programmazione precedenti, troverete che scrivere programmi in mikroBasic è molto facile. Queste note vi aiuteranno ad imparare la sintassi del BASIC, con orientamento specifico alla programmazione dei microcontroller PIC.

Per le informazioni riferite a questo argomento e per compilare i programmi è stata usata la vers. 5.01 di mikroBasic Pro.
Altre versioni del compilatore potrebbero avere comportamenti diversi o non funzionare.

Identificatori (identifiers)

Per identificatore, si intende un nome che, di solito, si assegna ad una variabile, costante, procedura, ecc.

identificatori validi:

Messaggio
temperatura_T4
MAX_min
volt2corrente
VERDE3
_Led_rosso
_wend

Può avere qualunque lunghezza e può contenere solo le lettere da a a z, da A a Z, il carattere di sottolineatura '_' e le cifre da 0 a 9.

L'unica restrizione è che il primo carattere deve essere una lettera o una sottolineatura e, quindi, non può cominciare con un numero.

identificatori non validi:

5Messag    'numero iniziale
34879BCD   'numero iniziale
de_$_      'no caratteri speciali
intcon     'nome di registro
wend       'parola chiave

Come identificatore, non si possono usare i nomi delle parole chiave e delle variabili predefinite di mikroBasic.

Il mikroBasic non ha la sensibilità dei caratteri (come nel linguaggio C), perciò Pluto, pluTO, e pLuTo, rappresentano lo stesso identificatore.

Commenti

I commenti sono parti di testo usate per annotare un programma.
I commenti sono per l'uso soltanto del programmatore; sono isolati dal testo originale prima di essere analizzato.

' Qualunque testo tra un apostrofo e la fine della linea
' costituisce un commento. Può occupare una linea soltanto.

Usare l'apostrofo per generare un commento.
I commenti a più linee non sono permessi in mikroBasic; ogni linea dovrà avere l'apostrofo iniziale.

Etichette (Labels)

Le etichette marcano un punto di riferimento per le istruzioni goto e gosub.
Non serve nessuna dichiarazione speciale di etichetta in mikroBasic.
Il nome dell'etichetta deve essere un'identificatore valido.

Etichetta:
    istruzioni
    ...

Marcare l'istruzione desiderata con l'etichetta e due punti.

Le istruzioni con etichetta, e le istruzioni goto/gosub devono stare sullo stesso blocco di programma.
Non marcare con la stessa etichetta più di una istruzione in un blocco.
Nota: L'etichetta main: marca il punto di entrata di un programma e deve essere presente nel modulo principale di ogni progetto.

ciclo:
    Beep
goto ciclo

Qui c'è un esempio di un ciclo infinito che chiama ripetutamente la procedura Beep.

Simboli (Symbols)

I Simboli vi permettono di creare semplici pseudonimi (alias) o macro senza parametri.
Potete sostituire qualunque sequenza di codice con un solo pseudonimo di identificatore.
I Simboli, quando propriamente usati, possono aumentare la leggibilità del codice e la reusabilità.
I Simboli devono essere dichiarati all'inizio del modulo, subito dopo il nome di modulo e la (opzionale) clausola include.

Un Simbolo è dichiarato come:
 
symbol macro4 = codice

Qui, macro4 deve essere un'identificatore valido.
Il codice può essere qualunque sequenza di codice (costanti letterali, assegnamenti, chiamate di funzione, ecc).

symbol MASSIMO = 216       'alias per val. num.
symbol REGISTRO = PORTC    'alias per registro
symbol RIT10 = Delayms(10) 'alias per chiam. proc.
dim conto as byte          'alcune variabili
'...
main:
if conto > MASSIMO then
    conto = 0
    REGISTRO.1 = 0
    RIT10
end if

Usando un Simbolo in un programma non si consuma memoria RAM.
Il compilatore sostituisce semplicemente ogni istanza di ogni Simbolo con l'appropriata sequenza di codice della dichiarazione.

Costanti letterali

Le costanti letterali rappresentano valori fissi, numerici o di caratteri, che si assegnano a variabili, costanti simboliche ed espressioni.
Il tipo di dati di una costante è dedotto dal compilatore, usando come indizi, il valore numerico ed il formato usato nel codice sorgente.

decimale
  5
  -51
  +45
  625
  -3492

esadecimale
  $8F         ' = 143
  $6C82       ' = 27778
  0x8F        ' = 143
  0x6C82      ' = 27778

binario
  %10011      ' = 19
  %01011100   ' = 92

Valori interi

I valori interi possono essere rappresentati in notazione decimale, esadecimale, o binaria. (vedi numerazione binaria)

In notazione decimale, i numeri sono rappresentati come sequenza di cifre (senza virgole, spazi, o punti), con prefisso facoltativo, l'operatore + o -, per indicare il segno. Il valore predefinito è positivo (238 sono equivalenti a +238).

Il prefisso "dollaro" ($) o il prefisso 0x indicano un numero esadecimale.

Il prefisso "percento" (%) indica un numero binario.

virgola mobile

0.       ' = 0.0
-2.15    ' = -2.15
25.95e7  ' = 25.95 * 10^7
4e-4     ' = 4.0 * 10^-4
7E+10    ' = 7.0 * 10^10
.08E24   ' = 0.08 * 10^24

 

Valori a virgola mobile (float)

Un valore a virgola mobile consiste di:
- Intero Decimale
- Punto Decimale
- Frazione Decimale
- e oppure E ed un esponente intero con segno (opzionale)

Possiamo omettere il numero intero decimale o la frazione decimale (ma non entrambi). Le costanti float negative sono prese come costanti positive con il prefisso costituito dall'operatore meno (-) unario.

Le costanti a virgola mobile in mikroBasic sono limitate nella gamma da ±1.17549435082E-38 .. ±6.80564774407E38.

caratteri

dim alfa as byte
dim beta as char
...
alfa = "W"
beta = "7"

Costante Carattere

La costante letterale carattere, è un carattere del set di codici ASCII esteso, chiuso tra virgolette. La costante letterale carattere può essere assegnata alle variabili di tipo byte e di tipo char alle quali sarà assegnato il valore del codice ASCII del carattere. Inoltre, possiamo assegnare la costante letterale carattere ad una variabile di tipo stringa.

stringhe

"Ciao Mondo!" 'messaggio,
              'lung. 11 caratteri
			   
"  "          'due spazi,
              'lung. 2 caratteri
			   
"H"           'lettera,
              'lung. 1 carattere
			   
""            'stringa nulla,
              'lung. 0 caratteri

Costante Stringa

La costante letterale stringa è una sequenza di max 255 caratteri del set di codici ASCII esteso, chiuso dalle virgolette.
La lunghezza della costante letterale stringa è il numero di caratteri che essa consiste. La stringa è immagazzinata internamente come sequenza di caratteri più un carattere null finale (ASCII zero). Questo carattere finale non conta per la lunghezza totale della stringa. La costante letterale stringa con niente fra le virgolette (stringa nulla) è immagazzinata come singolo carattere nullo. Possiamo assegnare la costante letterale stringa ad una variabile stringa o ad una matrice di char.

Le virgolette non possono essere una parte della costante letterale stringa.
Possiamo usare la funzione incorporata Chr per stampare le virgolette: Chr (34).

Dichiarare una variabile o una costante

La variabile è un oggetto il cui valore può essere cambiato durante l'esecuzione del programma.
Vedere anche Cos'è una variabile? per avere una panoramica più ampia.

dim i as byte
dim kaPpa, _L_5 as byte
dim conta_tempo, tempo as word
dim testo as string[5]
dim num as longint
dim lista as byte[5]
dim caratt as char
dim bEdu as float

Dichiarare una variabile

La sintassi di mikroBasic per la dichiarazione di una variabile è:

dim lista_identificatori as tipo

lista_identificatori è una lista di identificatori validi, delimitata da virgole.

tipo può essere qualunque tipo di dati.

'Uso della direttiva absolute

dim i as byte absolute 0x20

dim txt as string[5] absolute 0x21

dim bEdu as float absolute 0x132

Allocare una variabile ad un indirizzo predefinito

Per allocare una variabile ad un indirizzo di nostra scelta, bisogna usare la direttiva absolute:

dim nome_variabile as tipo absolute indirizzo

nome_variabile è un identificatore valido.
tipo può essere qualunque tipo di dati.
indirizzo è l'indirizzo della locazione di memoria dove vogliamo allocare la variabile.

module mod3

dim pw as byte external
dim urk as word

Usare il modificatore "external" per indicare che il valore e il posto della variabile si trova nel codice sorgente di un modulo separato.

Costanti simboliche

'costante con tipo
const MAX as longint = 10000

'costante senza tipo,
'verrà assegnato un tipo word
const MIN = 1000

'verrà assegnato un tipo char
const ENNE = "n"

'verrà assegnato un tipo string
const MSG = "Ciao"

'indicazione tipo obbligatoria
const LATO as byte[3] = (21,58,4)

Dichiarare una costante

La costante è un dato il cui valore non può essere cambiato durante l'esecuzione del programma. Usando una costante in un programma, non si consuma memoria RAM. Le costanti possono essere usate in ogni espressione, ma non possono essere assegnate ad un nuovo valore.
Le costanti sono dichiarate nella parte di dichiarazione del programma o procedura. Possiamo dichiarare qualunque numero di costanti dopo la parola chiave const:
const nome_costante [ as tipo ] = valore
Ogni costante è dichiarata sotto un unico nome_costante il quale deve essere un identificatore valido. E' tradizione scrivere i nomi di costanti in maiuscolo. La costante richiede di specificare un valore, che è una costante letterale adatta per il tipo di dato. Il tipo è opzionale; in assenza di tipo, il compilatore assegna "il più piccolo" dei tipi che può accomodare valore.

Nota: Non possiamo omettere il tipo, se dichiariamo una costante matrice (array).

Costanti Globali e predefinite

Per facilitare la programmazione, mikroBasic implementa un certo numero di variabili globali e costanti predefinite.
Tutti i registri SFR del PIC sono dichiarati implicitamente come variabili globali di tipo byte e sono visibili nell'intero progetto. Nel generare un progetto, mikroBasic includerà un’appropriato file, contenente le dichiarazioni dei registri SFR disponibili e delle costanti.

nomi di registri e bit
nel datasheet
...
TRISB - INTCON - GIE - RB5
PORTD - TMR2 - INTF - ...
...

Gli identificatori sono tutti in maiuscolo, identico alla nomenclatura nei datasheets di Microchip.
Per l'insieme completo delle variabili globali e costanti predefinite, cercate la cartella "Defs" nella vostra cartella d'installazione di mikroBasic e leggete il file col nome del pic che volete usare.

PI      = 3.1415926
PI_HALF = 1.5707963
TWO_PI  = 6.2831853
E       = 2.7182818

Anche alcune costanti matematiche sono già predefinite all'interno del linguaggio.

program Prova

dim beta as byte

main:
    trisB = 0
    portB = 0
    beta = %10000001 '129 decimale
    portB = beta     'portB = %10000001
    delay_ms(1000)   'ritardo 1 sec.
    portB = TRUE     'portB = %11111111
    beta = portB     'beta = %11111111
    delay_ms(1000)
    portB = FALSE    'portB = %00000000
    delay_ms(1000)
    portB.7 = beta.3 'portB = %10000000
    delay_ms(1000)
    goto main
End.

Programmino di prova

mikroBasic contiene le costanti predefinite TRUE e FALSE.

Contrariamente a quello che si potrebbe pensare, la costante TRUE non vale 1, bensì 255 (%11111111).

La costante FALSE vale 0 (%00000000).

Questo semplice programmino visualizzerà su portB, tramite 8 LED, il valore di TRUE e di FALSE.
Potete fare copia/incolla e provarlo.

Vedremo il passaggio di valori tra SFR e GPR (portB, beta).

Si potrà anche vedere il passaggio di semplici bit tra variabili (portB.7, beta.3). PortB.7 corrisponde a RB7 nel PIC.

Nella figura sottostante si può vedere una animazione della simulazione del programmino.
L'istruzione evidenziata in blu, è quella che verrà eseguita subito dopo.

   

 

 

Elementi del linguaggio (2)

Bibliografia:
Manuale mikroBasic PRO

Ultima modifica