Built-in Routines
The mikroBasic PRO for dsPIC30/33 and PIC24 compiler provides a set of useful built-in utility functions. Built-in functions do not have any special requirements. You can use them in any part of your project.
The Delay_us
and Delay_ms
routines are implemented as “inline”; i.e. code is generated in the place of a call, so the call doesn’t count against the nested call limit.
The Vdelay_ms
, Vdelay_advanced_ms
, Delay_Cyc
, Delay_Cyc_Long
, Get_Fosc_kHz
and Get_Fosc_Per_Cyc
are actual Basic routines. Their sources can be found in the __Lib_Delays.mbas
file located in the Uses
folder of the compiler.
Besides these, there are also Digital Signal Processing (DSP) routines. Please follow DSP Built-in Routines link for more information.
Lo
Prototype |
sub function Lo(dim number as longint) as byte |
---|---|
Description |
Function returns the lowest byte of This is an “inline” routine; code is generated in the place of the call, so the call doesn’t count against the nested call limit. |
Parameters |
|
Returns |
Lowest 8 bits (byte) of |
Requires |
Arguments must be variable of scalar type (i.e. Arithmetic Types and Pointers). |
Example |
d = 0x12345678 tmp = Lo(d) ' Equals 0x78 Lo(d) = 0xAA ' d equals 0x123456AA |
Notes |
None. |
Hi
Prototype |
sub function Hi(dim number as longint) as byte |
---|---|
Description |
Function returns next to the lowest byte of This is an “inline” routine; code is generated in the place of the call, so the call doesn’t count against the nested call limit. |
Parameters |
|
Returns |
Returns next to the lowest byte of |
Requires |
Arguments must be variable of scalar type (i.e. Arithmetic Types and Pointers). |
Example |
d = 0x12345678 tmp = Hi(d) ' Equals 0x56 Hi(d) = 0xAA ' d equals 0x1234AA78 |
Notes |
None. |
Higher
Prototype |
sub function Higher(dim number as longint) as byte |
---|---|
Description |
Function returns next to the highest byte of This is an “inline” routine; code is generated in the place of the call, so the call doesn’t count against the nested call limit. |
Parameters |
|
Returns |
Returns next to the highest byte of |
Requires |
Arguments must be variable of scalar type (i.e. Arithmetic Types and Pointers). |
Example |
d = 0x12345678 tmp = Higher(d) ' Equals 0x34 Higher(d) = 0xAA ' d equals 0x12AA5678 |
Notes |
None. |
Highest
Prototype |
sub function Highest(dim number as longint) as byte |
---|---|
Description |
Function returns the highest byte of This is an “inline” routine; code is generated in the place of the call, so the call doesn’t count against the nested call limit. |
Parameters |
|
Returns |
Returns the highest byte of |
Requires |
Arguments must be variable of scalar type (i.e. Arithmetic Types and Pointers). |
Example |
d = 0x12345678 tmp = Highest(d) ' Equals 0x12 Highest(d) = 0xAA ' d equals 0xAA345678 |
Notes |
None. |
LoWord
Prototype |
sub function LoWord(dim val as longint) as word |
---|---|
Description |
The function returns low word of Parameters :
|
Parameters |
number
|
Returns |
Low word of |
Requires |
Nothing. |
Example |
d = 0x12345678 tmp = LoWord(d) ' Equals 0x5678 LoWord(d) = 0xAAAA ' d equals 0x1234AAAA |
Notes |
None. |
HiWord
Prototype |
sub function HiWord(dim val as longint) as word |
---|---|
Description |
The function returns high word of Parameters :
|
Parameters |
number
|
Returns |
High word of |
Requires |
Nothing. |
Example |
d = 0x12345678 tmp = HiWord(d) ' Equals 0x1234 HiWord(d) = 0xAAAA ' d equals 0xAAAA5678 |
Notes |
None. |
Inc
Prototype |
sub procedure Inc(dim byref par as longint) |
---|---|
Description |
Increases parameter |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
p = 4 Inc(p) ' p is now 5 |
Notes |
None. |
Dec
Prototype |
sub procedure Dec(dim byref par as longint) |
---|---|
Description |
Decreases parameter |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
p = 4 Dec(p) ' p is now 3 |
Notes |
None. |
Chr
Prototype |
sub function Chr(dim code_ as byte) as char |
---|---|
Description |
Function returns a character associated with the specified character This is an “inline” routine; the code is generated in the place of the call. |
Parameters |
|
Returns |
Returns a character associated with the specified character |
Requires |
Nothing. |
Example |
c = Chr(10) ' returns the linefeed character |
Notes |
None. |
Ord
Prototype |
sub function Ord(dim character as char) as byte |
---|---|
Description |
Function returns ASCII code of the This is an “inline” routine; the code is generated in the place of the call. |
Parameters |
|
Returns |
ASCII code of the |
Requires |
Nothing. |
Example |
c = Ord("A") ' returns 65 |
Notes |
None. |
SetBit
Prototype |
sub procedure SetBit(dim byref register_ as word, dim rbit as byte) |
---|---|
Description |
Function sets the bit This is an “inline” routine; the code is generated in the place of the call. |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
SetBit(PORTB, 2) ' Set RB2 |
Notes |
None. |
ClearBit
Prototype |
sub procedure ClearBit(dim byref register_ as word, dim rbit as byte) |
---|---|
Description |
Function clears the bit This is an “inline” routine; code is generated in the place of the call, so the call doesn’t count against the nested call limit. |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
ClearBit(PORTC, 7) ' Clear RC7 |
Notes |
None. |
TestBit
Prototype |
sub function TestBit(dim register_, rbit as byte) as byte |
---|---|
Description |
Function tests if the bit This is an “inline” routine; code is generated in the place of the call, so the call doesn’t count against the nested call limit. |
Parameters |
|
Returns |
If the bit is set, returns 1, otherwise returns 0. |
Requires |
Nothing. |
Example |
flag = TestBit(PORTE, 2) ' 1 if RE2 is set, otherwise 0 |
Notes |
None. |
Delay_us
Prototype |
sub procedure Delay_us(const time_in_us as longword) |
---|---|
Description |
Creates a software delay in duration of This is an “inline” routine; the code is generated in the place of the call, so the call doesn’t count against the nested call limit. |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
Delay_us(1000) ' One millisecond pause |
Notes |
None. |
Delay_ms
Prototype |
sub procedure Delay_ms(const time_in_ms as longword) |
---|---|
Description |
Creates a software delay in duration of This is an “inline” routine; the code is generated in the place of the call, so the call doesn’t count against the nested call limit. |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
Delay_ms(1000) ' One second pause |
Notes |
For generating delays with variable as input parameter use the Vdelay_ms routine. |
VDelay_ms
Prototype |
sub procedure Vdelay_ms(dim time_in_ms as word) |
---|---|
Description |
Creates a software delay in duration of |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
pause = 1000 ' ... Vdelay_ms(pause) ' ~ one second pause |
Notes |
None. |
VDelay_advanced_ms
Prototype |
sub procedure VDelay_advanced_ms(dim time_ms, Current_Fosc_kHz as word) |
---|---|
Description |
Creates a software delay in duration of Note that |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
pause = 1000 fosc = 10000 VDelay_advanced_ms(pause, fosc) ' Generates approximately one second pause, for a oscillator frequency of 10 MHz |
Notes |
None. |
Delay_Cyc
Prototype |
sub procedure Delay_Cyc(dim x, y as word) |
---|---|
Description |
Creates a delay based on MCU clock. Delay lasts for |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
Delay_Cyc(1, 10) ' 1x16384 + 10 = 16394 cycles pause |
Notes |
|
Delay_Cyc_Long
Prototype |
sub procedure Delay_Cyc_Long(dim CycNo as word) |
---|---|
Description |
Creates a delay based on MCU clock. Delay lasts for |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
Delay_Cyc_Long(16384) ' 16384 cycles pause |
Notes |
|
Clock_kHz
Prototype |
sub function Clock_kHz() as longint |
---|---|
Description |
Returns device clock in kHz, rounded to the nearest integer. This is an “inline” routine; the code is generated in the place of the call. |
Parameters |
None. |
Returns |
Device clock in kHz, rounded to the nearest integer. |
Requires |
Nothing. |
Example |
clk = Clock_kHz() |
Notes |
None. |
Clock_MHz
Prototype |
sub function Clock_MHz() as word |
---|---|
Description |
Returns device clock in MHz, rounded to the nearest integer. This is an “inline” routine; the code is generated in the place of the call. |
Parameters |
None. |
Returns |
Device clock in MHz, rounded to the nearest integer. |
Requires |
Nothing. |
Example |
clk = Clock_MHz() |
Notes |
None. |
Get_Fosc_kHz
Prototype |
sub function Get_Fosc_kHz() as longint |
---|---|
Description |
Function returns device clock in kHz, rounded to the nearest integer. |
Parameters |
None. |
Returns |
Device clock in kHz. |
Requires |
Nothing. |
Example |
clk = Get_Fosc_kHz() |
Notes |
|
Get_Fosc_Per_Cyc
Prototype |
sub function Get_Fosc_Per_Cyc() as word |
---|---|
Description |
Function returns device's clock per cycle, rounded to the nearest integer. Note that |
Parameters |
None. |
Returns |
Device's clock per cycle, rounded to the nearest integer. |
Requires |
Nothing. |
Example |
dim clk_per_cyc as word ... clk_per_cyc = Get_Fosc_Per_Cyc() |
Notes |
None. |
Reset
Prototype |
sub procedure Reset() |
---|---|
Description |
This procedure is equal to assembler instruction reset. |
Parameters |
None. |
Returns |
Nothing. |
Requires |
Nothing. |
Example |
Reset() ' Resets the MCU |
Notes |
None. |
ClrWdt
Prototype |
sub procedure ClrWdt() |
---|---|
Description |
This procedure is equal to assembler instruction |
Parameters |
None. |
Returns |
Nothing. |
Requires |
Nothing. |
Example |
ClrWdt() ' Clears WDT |
Notes |
None. |
DisableContextSaving
Prototype |
sub procedure DisableContextSaving() |
---|---|
Description |
Use the |
Parameters |
None. |
Returns |
Nothing. |
Requires |
This routine must be called from main. |
Example |
DisableContextSaving() ' instruct the compiler not to automatically perform context-switching |
Notes |
None. |
SetFuncCall
Prototype |
sub procedure SetFuncCall(dim FuncName as string) |
---|---|
Description |
If the linker encounters an indirect function call (by a pointer to function), it assumes that any routine whose address was taken anywhere in the program can be called at that point if it's prototype matches the pointer declaration. Use the SetFuncCall directive within routine body to instruct the linker which routines can be called indirectly from that routine :
Routines specified in the Thus, placing |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example: |
sub procedure first(p, q as byte) ... SetFuncCall(second) ' let linker know that we will call the routine 'second' ... end sub |
Notes |
The |
SetOrg
Prototype |
sub procedure SetOrg(dim RoutineName as string, dim address as longint) |
---|---|
Description |
Use the |
Parameters |
|
Returns |
Nothing. |
Requires |
This routine must be called from main. |
Example |
SetOrg(UART1_Write, 0x1234) |
Notes |
None. |
DoGetDateTime
Prototype |
sub function DoGetDateTime() as string |
---|---|
Description |
Use the |
Parameters |
None. |
Returns |
String with date and time when this routine is compiled. |
Requires |
Nothing. |
Example |
str = DoGetDateTime() |
Notes |
None. |
DoGetVersion
Prototype |
sub function DoGetVersion() as string |
---|---|
Description |
Use the |
Parameters |
None. |
Returns |
String with current compiler version. |
Requires |
Nothing. |
Example |
str = DoGetVersion() ' for example, str will take the value of '8.2.1.6' |
Notes |
None. |
__AddToFarPointer
Prototype |
sub procedure __AddToFarPointer(dim byref ptr ^as const far byte, dim increment as longword) |
---|---|
Description |
This function adds a given number to a pointer to a constant allocated in the far program memory space. |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
dim cpointer as ^far const byte ' pointer to a const array in far program memory space const const_array as byte[10] = (0,1,2,3,4,5,6,7,8,9) ' const array allocated in far program memory space ... cpointer = @const_array[5] __AddToFarPointer(cpointer, 1) ' increment pointer by 1; cpointer now points to const_array[6] |
Notes |
None. |
__SubFromFarPointer
Prototype |
sub procedure __SubFromFarPointer(dim byref ptr ^as const far byte, dim increment as longword) |
---|---|
Description |
This function subtracts pointer to a constant allocated in the far program memory space by a given number. |
Parameters |
|
Returns |
Nothing. |
Requires |
Nothing. |
Example |
dim cpointer as ^far const byte ' pointer to a const array in far program memory space const const_array as byte[10] = (0,1,2,3,4,5,6,7,8,9) ' const array allocated in far program memory space ... cpointer = @const_array[5] __AddToFarPointer(cpointer, 1) ' decrement pointer by 1; cpointer now points to const_array[4] |
Notes |
None. |
__FlashAddressToFarPointer
Prototype |
sub function __FlashAddressToFarPointer(dim address as longword) as ^const far byte |
---|---|
Description |
This function converts a given Flash memory address to a pointer to a constant allocated in the far program memory space. |
Parameters |
|
Returns |
Pointer to a constant allocated in the far program memory space. |
Requires |
Nothing. |
Example |
|
Notes |
None. |
__FarPointerToFlashAddress
Prototype |
sub function __FarPointerToFlashAddress(dim ptr as ^const far byte) as longword |
---|---|
Description |
This function converts a pointer to a constant (allocated in the far program memory space) to the appropriate Flash memory address. |
Parameters |
|
Returns |
Appropriate Flash memory address. |
Requires |
Nothing. |
Example |
|
Notes |
None. |
New
Prototype |
sub procedure New(dim byref Ptr as pointer); |
---|---|
Description |
Allocates a block of memory from the memory Heap, taking care of the alignment. It is recommended to use this routine instead of GetMem. |
Parameters |
|
Returns |
Returns a pointer to the memory block allocated by the function; Otherwise 0 (no free blocks of memory are large enough). |
Requires |
Nothing. |
Example |
|
Notes |
None. |
Dispose
Prototype |
sub procedure Dispose(dim byref Ptr as pointer) |
---|---|
Description |
Disposes a block of memory from the memory Heap, referenced by Ptr and returns its memory to the Heap. |
Parameters |
|
Returns | |
Requires |
Nothing. |
Example |
|
Notes |
After calling this routine, the value of Ptr is nil (0) (not assigned pointer). |
What do you think about this topic ? Send us feedback!