|
|
Box |
Le Built-in Routines
parte 1
|
Per le informazioni riferite a questo argomento e per compilare i programmi è stata usata la
vers. 5.01 di mikroBasic Pro for PIC.
Altre versioni del compilatore potrebbero avere comportamenti diversi o non funzionare. |
|
|
Le Built-in Routines sono procedure o funzioni predefinite, contenute all'interno del compilatore, che risultano molto utili nella programmazione. Esse, normalmente, non fanno parte di una libreria e, nella maggior parte, sono procedure cosiddette "inline", cioè non vere procedure, ma che vengono tradotte direttamente, nel punto di chiamata, in una o poche linee di codice assembly. In questo modo, non vanno ad influire sul limite del numero max di chiamate annidate nello stack, come succederebbe per una normale sub-procedura.
Inc
Prototipo: sub procedure Inc(dim byref par as longint)
Questa procedura incrementa (aumenta) di 1, il valore contenuto nel parametro par.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
alfa = 6
Inc(alfa) 'alfa vale 7
beta = Inc(alfa) 'alfa e beta adesso valgono 8
|
In questo esempio, il valore della variabile alfa viene aumentato di 1 e poi, il suddetto valore, viene ulteriormente aumentato di 1 prima di essere copiato nella variabile beta. |
|
Dec
Prototipo: sub procedure Dec(dim byref par as longint)
Questa procedura decrementa (diminuisce) di 1, il valore contenuto nel parametro par.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
alfa = 6
beta = Dec(alfa) 'alfa e beta adesso valgono 5
|
In questo esempio, il valore della variabile alfa viene diminuito di 1 e poi, il suddetto valore, viene copiato nella variabile beta. |
|
Delay_us
Prototipo: sub procedure Delay_us(const time_in_us as longword)
Crea un ritardo software con durata, in microsecondi, stabilita dal parametro time_in_us (una costante). Il campo delle costanti applicabili dipende dalla frequenza dell'oscillatore.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
Delay_us(300) ' Pausa di 300 microsecondi
|
Viene generato un ritardo di 0,0003 secondi. |
|
Delay_ms
Prototipo: sub procedure Delay_ms(const time_in_ms as longword)
Crea un ritardo software con durata, in millisecondi, stabilita dal parametro time_in_ms (una costante). Il campo delle costanti applicabili dipende dalla frequenza dell'oscillatore.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
Delay_ms(500) ' Pausa di 500 millisecondi
|
Viene generato un ritardo di 0,5 secondi. |
|
Vdelay_ms
Prototipo: sub procedure Vdelay_ms(dim time_in_ms as word)
Crea un ritardo software con durata, in millisecondi, stabilita dal parametro time_in_ms (una variabile). Il ritardo generato non ha una precisione come il ritardo creato da Delay_ms.
Questa non è una procedura "inline" ma una vera procedura di libreria. |
pause = 1000
' ...
Vdelay_ms(pause) ' pausa di circa 1 secondo
|
Viene generato un ritardo di circa 1000 millisecondi (1 secondo). |
|
VDelay_Advanced_ms
Prototipo: sub procedure VDelay_Advanced_ms(dim time_ms, Current_Fosc_kHz as word)
Crea un ritardo software con durata, in millisecondi, stabilita dal parametro time_ms per una frequenza di oscillatore (in kHz) indicata dal parametro Current_Fosc_kHz. Il ritardo generato non ha una precisione come il ritardo creato da Delay_ms.
Questa non è una procedura "inline" ma una vera procedura di libreria. |
pause = 1000
fosc = 10000
' genera una pausa di circa 1 secondo per
' una frequenza di oscillatore di 10 MHz
VDelay_Advanced_ms(pause, fosc)
|
Viene generato un ritardo di circa 1 secondo per una frequenza di 10000 kHz. |
|
Delay_Cyc
Prototipo: sub procedure Delay_Cyc(dim Cycles_div_by_10 as byte)
Crea un ritardo basato sul clock della MCU. Il ritardo sarà, in cicli di clock MCU, 10 volte il valore del parametro Cycles_div_by_10. Il valore di Cycles_div_by_10 deve essere compreso tra 2 e 257.
Questa non è una procedura "inline" ma una vera procedura di libreria. |
Delay_Cyc(10) ' pausa 100 cicli MCU
|
Viene generato un ritardo di 100 cicli di clock. |
|
Chr
Prototipo: sub function Chr(dim code as byte) as char
Questa funzione fornisce, come risultato, il carattere associato al numero (codice ASCII) contenuto nel parametro code.
I numeri da 0 a 31 sono i codici ASCII dei caratteri non stampabili.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
c = Chr(10) 'restituisce il car. linefeed
|
La variabile c riceve il carattere di avanzamento linea (non stampabile). |
|
Ord
Prototipo: sub function Ord(const character as char) as byte
Questa funzione restituisce il codice ASCII associato al carattere contenuto nel parametro character.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
c = Ord("A") ' restituisce 65
|
Restituisce il codice ASCII del carattere "A" ("a" maiuscolo). |
|
SetBit
Prototipo: sub procedure SetBit(dim byref register as word, dim rbit as word)
Questa funzione imposta a 1 il bit, specificato dal parametro rbit, nel registro, specificato dal parametro register. Il parametro rbit deve essere una variabile o un numero con valore da 0 a 7.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
SetBit(PORTB, 2) ' Setta RB2
|
Questa istruzione è uguale a: PORTB.2 = 1 . |
|
ClearBit
Prototipo: sub procedure ClearBit(dim byref register as word, dim rbit as word)
Questa funzione imposta a 0 il bit, specificato dal parametro rbit, nel registro, specificato dal parametro register. Il parametro rbit deve essere una variabile o un numero con valore da 0 a 7.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
ClearBit(PORTC, 3) ' Azzera RC3
|
Questa istruzione è uguale a: PORTC.3 = 0 . |
|
TestBit
Prototipo: sub function TestBit(dim register, rbit as word) as word
Questa funzione controlla il valore del bit, specificato dal parametro rbit, nel registro, specificato dal parametro register. Se il valore trovato è 1, allora la funzione ritornerà 1 come risultato, altrimenti ritornerà 0. Il parametro rbit deve essere una variabile o un numero con valore da 0 a 7.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
flag = TestBit(PORTD, 2) ' flag = 1 se RD2 è settato,
' altrimenti flag = 0
|
Questa istruzione è uguale a:
if PORTD.2 = 1 then
flag = 1
else
flag = 0
end if |
|
Lo
Prototipo: sub function Lo(dim number as longint) as byte
Questa funzione restituisce il byte meno significativo (bits da 0 a 7) del valore contenuto in number.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
a = Lo(0x01AC30F4) ' Restituisce 0xF4
|
Il valore della variabile a sarà 0xF4
(cioè, estrae questo byte evidenziato 0x01AC30F4) |
|
Hi
Prototipo: sub function Hi(dim number as longint) as byte
Questa funzione restituisce il secondo byte (bits da 8 a 15) del valore contenuto in number.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
a = Hi(0x01AC30F4) ' Restituisce 0x30
|
Il valore della variabile a sarà 0x30
(cioè, estrae questo byte evidenziato 0x01AC30F4). |
|
Higher
Prototipo: sub function Higher(dim number as longint) as byte
Questa funzione restituisce il terzo byte (bits da 16 a 23) del valore contenuto in number.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
a = Higher(0x01AC30F4) ' Restituisce 0xAC
|
Il valore della variabile a sarà 0xAC
(cioè, estrae questo byte evidenziato 0x01AC30F4). |
|
Highest
Prototipo: sub function Highest(dim number as longint) as byte
Questa funzione restituisce il byte più significativo (bits da 24 a 31) del valore contenuto in number.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
a = Highest(0x01AC30F4) ' Restituisce 0x01
|
Il valore della variabile a sarà 0x01
(cioè, estrae questo byte evidenziato 0x01AC30F4). |
|
Clock_Khz
Prototipo: sub function Clock_Khz() as word
Questa funzione restituisce il clock in kiloHertz del dispositivo, arrotondato all'intero più vicino.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
clk = Clock_Khz()
|
Il valore della variabile clk sarà quello del clock, in kHz, impostato nel progetto. |
|
Clock_Mhz
Prototipo: sub function Clock_Mhz() as byte
Questa funzione restituisce il clock in MegaHertz del dispositivo, arrotondato all'intero più vicino.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
clk = Clock_Mhz()
|
Il valore della variabile clk sarà quello del clock, in MHz, impostato nel progetto. |
|
Get_Fosc_kHz
Prototipo: sub function Get_Fosc_kHz() as longint
Questa funzione restituisce il clock in kiloHertz del dispositivo, arrotondato all'intero più vicino.
Questa non è una funzione "inline" ma una vera funzione di libreria. |
clk = Get_Fosc_kHz()
|
Il valore della variabile clk sarà quello del clock, in kHz, impostato nel progetto. |
|
Swap
Prototipo: sub function Swap(dim arg as byte) as byte
Scambia il nibble alto(bits <7..4>) con il nibble basso(bits <3..0>) del parametro arg.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
PORTB = 0xF0
PORTA = Swap(PORTB) ' PORTA = PORTB = 0x0F
beta = 0x3D
PORTD = Swap(beta) ' PORTD = beta = 0xD3
|
Su PORTB vengono scambiati i nibbles e copiato il risultato su PORTA.
Nella variabile beta vengono scambiati i nibbles e copiato il risultato su PORTD. |
|
Reset
Prototipo: sub procedure Reset()
Questa procedura è uguale all'istruzione assembly Reset. Funziona solo con la serie P18.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
Reset ' Resetta il PIC
|
Ricomincia l'esecuzione del programma dall'inizio. |
|
ClrWdt
Prototipo: sub procedure ClrWdt()
Questa procedura è uguale all'istruzione assembly clrwdt.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
ClrWdt 'Azzera il WDT del PIC
|
Azzera il Watch Dog Timer del PIC. |
|
Sleep
Prototipo: procedure Sleep()
Questa procedura è uguale all'istruzione assembly sleep.
Questa è una procedura "inline" e il codice assembly verrà generato nel punto della chiamata. |
sleep 'Pone il PIC in modo Sleep
|
Pone il PIC nel modo sleep (addormentato) a basso consumo. |
|
SizeOf
Prototipo: sub function SizeOf(dim variable_name as string[100]) as word
Questa funzione restituisce la dimensione (in numero di byte occupati in memoria), di variable_name. |
structure TStruct
dim FieldA as byte ' 1 byte
dim FieldB as word ' 2 bytes
end structure ' total 3 bytes
dim SomeVar as TStruct
dim SomeOtherVar as word
main:
someOtherVar = SizeOf(SomeVar) ' SomeOtherVar = 3
end.
|
La variabile someOtherVar riceve il numero di bytes che occupa in memoria la variabile SomeVar, di tipo TStruct.
In questo caso sono 3 bytes. |
|
Bibliografia:
Manuale mikroBasic PRO
Ultima modifica
|
|