Programmare in mikroBasic PRO
 
  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  

 
Privacy Policy Cookie Policy