UART Library
The UART hardware module is available with a number of 8051 compliant MCUs. The mikroBasic PRO for 8051 UART Library provides comfortable work with the Asynchronous (full duplex) mode.
Library Routines
- UARTx_Init
- UARTx_Init_Advanced
- UARTx_Data_Ready
- UARTx_Read
- UARTx_Read_Text
- UARTx_Write
- UARTx_Write_Text
- UART_Set_Active
Generic Routines
Notes:
- UART routines require you to specify the module you want to use. To select the desired UART, simply change the letter
x
in the prototype for a number from1
to2
.
Number of UART modules per MCU differs from chip to chip. Please, read the appropriate datasheet before utilizing this library.Example:
UART2_Init(9600)
initializes UART 2 module at 9600 bps. - Some MCUs have multiple UART modules. Switching between the UART modules in the UART library is done by the UART_Set_Active function (UART module has to be previously initialized).
- Some of the MCUs do not support UARTx_Init_Advanced routine. Please, refer to the appropriate datasheet.
UARTx_Init
Prototype |
sub procedure UARTx_Init(dim baud_rate as longint) |
---|---|
Returns |
Nothing. |
Description |
Configures and initializes the UART module. The internal UART module module is set to:
Parameters :
Refer to the device datasheet for baud rates allowed for specific Fosc. |
Requires |
MCU with the UART module. |
Example |
' Initialize hardware UART1 and establish communication at 9600 bps UART1_Init(9600) |
UARTx_Init_Advanced
Prototype |
sub procedure UARTx_Init_Advanced(dim baud_rate as longint, adv_setting as byte) |
||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Returns |
Nothing. |
||||||||||||||||||||||||||||
Description |
Configures and initializes UART module. Parameters :
|
||||||||||||||||||||||||||||
Requires |
MCU must have UART module. |
||||||||||||||||||||||||||||
Example |
' Initialize hardware UART1 module and establish communication at 9600 bps, 8-bit data, even parity and 2 STOP bits UART1_Init_Advanced(9600, _UART_EVENPARITY or _UART_TWO_STOPBITS) |
UARTx_Data_Ready
Prototype |
sub function UARTx_Data_Ready() as byte |
---|---|
Returns |
|
Description |
Use the function to test if data in receive buffer is ready for reading. |
Requires |
MCU with the UART module. The UART module must be initialized before using this routine. See UARTx_Init and UARTx_Init_Advanced routines. |
Example |
dim receive as byte ... ' read data if ready if (UART1_Data_Ready() = 1) then receive = UART1_Read() end if |
UARTx_Read
Prototype |
sub function UARTx_Read() as byte |
---|---|
Returns |
Returns the received byte. |
Description |
The function receives a byte via UART. Use the UARTx_Data_Ready function to test if data is ready first. |
Requires |
MCU with the UART module. The UART module must be initialized before using this routine. See UARTx_Init and UARTx_Init_Advanced routines. |
Example |
dim receive as byte ... ' read data if ready if (UART1_Data_Ready() = 1) then receive = UART1_Read() end if |
UARTx_Read_Text
Prototype |
sub procedure UARTx_Read_Text(dim byref Output as string[255], dim byref Delimiter as string[10], dim Attempts as byte) |
---|---|
Returns |
Nothing. |
Description |
Reads characters received via UART until the delimiter sequence is detected. The read sequence is stored in the parameter This is a blocking call: the delimiter sequence is expected, otherwise the procedure exits( if the delimiter is not found). Parameter |
Requires |
UART HW module must be initialized and communication established before using this function. See UARTx_Init. |
Example |
Read text until the sequence “OK” is received, and send back what’s been received: UART1_Init(4800) ' initialize UART module Delay_ms(100) while TRUE if (UART1_Data_Ready() = 1) ' if data is received UART1_Read_Text(output, 'OK', 10) ' reads text until 'OK' is found UART1_Write_Text(output) ' sends back text end if wend. |
UARTx_Write
Prototype |
sub procedure UARTx_Write(dim data_ as byte) |
---|---|
Returns |
Nothing. |
Description |
The function transmits a byte via the UART module. Parameters :
|
Requires |
MCU with the UART module. The UART module must be initialized before using this routine. See UARTx_Init and UARTx_Init_Advanced routines. |
Example |
dim data_ as byte ... data = 0x1E UART1_Write(data_) |
UARTx_Write_Text
Prototype |
sub procedure UARTx_Write_Text(dim byref uart_text as string[255]) |
---|---|
Returns |
Nothing. |
Description |
Sends text (parameter |
Requires |
UART HW module must be initialized and communication established before using this function. See UARTx_Init. |
Example |
Read text until the sequence “OK” is received, and send back what’s been received: UART1_Init(4800) ' initialize UART module Delay_ms(100) while TRUE if (UART1_Data_Ready() = 1) ' if data is received UART1_Read_Text(output, 'OK', 10) ' reads text until 'OK' is found UART1_Write_Text(output) ' sends back text end if wend. |
UART_Set_Active
Prototype |
sub procedure UART_Set_Active (dim read_ptr as ^TUART_Rd_Ptr, dim write_ptr as ^TUART_Wr_Ptr, dim ready_ptr as ^TUART_Rdy_Ptr) |
---|---|
Returns |
Nothing. |
Description |
Sets active UART module which will be used by the UART library routines. Parameters :
|
Requires |
Routine is available only for MCUs with two UART modules. Used UART module must be initialized before using this routine. See UARTx_Init routine. |
Example |
UART1_Init(9600) ' initialize UART1 module UART2_Init(9600) ' initialize UART2 module RS485Master_Init() ' initialize MCU as Master UART_Set_Active(@UART1_Read, @UART1_Write, @UART1_Data_Ready) ' set UART1 active RS485Master_Send(dat,1,160) ' send message through UART1 UART_Set_Active(@UART2_Read, @UART2_Write, @UART2_Data_Ready) ' set UART2 active RS485Master_Send(dat,1,160) ' send message through UART2 |
UART_Data_Ready
Prototype |
sub function UART_Data_Ready() as byte |
---|---|
Returns |
|
Description |
Use the function to test if data in receive buffer is ready for reading. This is a generic routine which uses the active UART module previously activated by the UART_Set_Active routine. |
Requires |
MCU with the UART module. The UART module must be initialized before using this routine. See UARTx_Init and UARTx_Init_Advanced routines. |
Example |
dim receive as byte ... ' read data if ready if (UART_Data_Ready() = 1) then receive = UART_Read() end if |
UART_Read
Prototype |
sub function UART_Read() as byte |
---|---|
Returns |
Returns the received byte. |
Description |
The function receives a byte via UART. Use the UART_Data_Ready function to test if data is ready first. This is a generic routine which uses the active UART module previously activated by the UART_Set_Active routine. |
Requires |
MCU with the UART module. The UART module must be initialized before using this routine. See UARTx_Init routine. |
Example |
dim receive as byte ... ' read data if ready if (UART_Data_Ready() = 1) then receive = UART_Read() |
UART_Read_Text
Prototype |
sub procedure UART_Read_Text(dim byref Output as string[255], dim byref Delimiter as string[10], dim Attempts as byte) |
---|---|
Returns |
Nothing. |
Description |
Reads characters received via UART until the delimiter sequence is detected. The read sequence is stored in the parameter This is a blocking call: the delimiter sequence is expected, otherwise the procedure exits( if the delimiter is not found). Parameter This is a generic routine which uses the active UART module previously activated by the UART_Set_Active routine. |
Requires |
UART HW module must be initialized and communication established before using this function. See UARTx_Init. |
Example |
Read text until the sequence “OK” is received, and send back what’s been received: UART1_Init(4800) ' initialize UART module Delay_ms(100) while TRUE if (UART_Data_Ready() = 1) ' if data is received UART_Read_Text(output, 'OK', 10) ' reads text until 'OK' is found UART_Write_Text(output) ' sends back text end if wend. |
UART_Write
Prototype |
sub procedure UART_Write(dim TxData as byte) |
---|---|
Returns |
Nothing. |
Description |
The function transmits a byte via the UART module. This is a generic routine which uses the active UART module previously activated by the UART_Set_Active routine. Parameters :
|
Requires |
MCU with the UART module. The UART module must be initialized before using this routine. See UARTx_Init routine. |
Example |
dim data_ as byte ... data_ = 0x1E UART1_Write(data_) |
UART_Write_Text
Prototype |
sub procedure UART_Write_Text(dim byref uart_text as string[255]) |
---|---|
Returns |
Nothing. |
Description |
Sends text (parameter This is a generic routine which uses the active UART module previously activated by the UART_Set_Active routine. |
Requires |
UART HW module must be initialized and communication established before using this function. See UARTx_Init. |
Example |
Read text until the sequence “OK” is received, and send back what’s been received: UART1_Init(4800) ' initialize UART module Delay_ms(100) while TRUE if (UART1_Data_Ready() = 1) ' if data is received UART1_Read_Text(output, 'OK', 10) ' reads text until 'OK' is found UART1_Write_Text(output) ' sends back text end if wend. |
Library Example
This example demonstrates simple data exchange via UART. If MCU is connected to the PC, you can test the example from the USART Terminal.
program UART dim uart_rd as byte main: UART1_Init(9600) ' Initialize UART module at 9600 bps Delay_ms(100) ' Wait for UART module to stabilize while (TRUE) ' Endless loop if (UART1_Data_Ready() <> 0) then ' If data is received, uart_rd = UART1_Read() ' read the received data, UART1_Write(uart_rd) ' and send data via UART end if wend end.
HW Connection
UART HW connection
What do you think about this topic ? Send us feedback!