UART Remappable Library
mikroC PRO for PIC provides a library for the UART Remappable Module and comfortable work with the Asynchronous (full duplex) mode.
You can easily communicate with other devices via RS-232 protocol (for example with PC, see the figure at the end of the topic – RS-232 HW connection). Then, simply use the functions listed below.

Library Dependency Tree

Library Routines
- UART_Remappable_Init
- UARTx_Remappable_Init_Advanced
- UART_Remappable_Data_Ready
- UART_Remappable_Tx_Idle
- UART_Remappable_Read
- UART_Remappable_Read_Text
- UART_Remappable_Write
- UART_Remappable_Write_Text
- UART_Set_Active
Generic Routines
UART_Remappable_Init
Prototype |
void UART_Remappable_Init(const unsigned long baud_rate); // for MCUs with multiple modulesvoid UARTx_Remappable_Init(const unsigned long baud_rate); |
---|---|
Returns |
Nothing. |
Description |
Initializes hardware UART Remappable module with the desired baud rate. Refer to the device data sheet for baud rates allowed for specific Parameters :
![]()
Refer to the device data sheet for baud rates allowed for specific Fosc. |
Requires |
You'll need PIC MCU with hardware UART module and remappable feature.
![]() Therefore, compiler needs to know the value of the parameter in the compile time. That is why this parameter needs to be a constant, and not a variable. |
Example |
This will initialize hardware UART module and establish the communication at 2400 bps: UART_Remappable_Init(2400); |
UARTx_Remappable_Init_Advanced
Prototype |
void UARTx_Remappable_Init_Advanced(const unsigned long baud_rate, unsigned char mode, unsigned char stopBits); |
||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Returns |
Nothing. |
||||||||||||||||||||
Description |
Initializes hardware UART Remappable module with the custom configuration. Refer to the device data sheet for baud rates allowed for specific Parameters :
![]()
Refer to the device data sheet for baud rates allowed for specific Fosc. |
||||||||||||||||||||
Requires |
You'll need PIC MCU with hardware UART module and remappable feature.
![]() Therefore, compiler needs to know the value of the parameter in the compile time. That is why this parameter needs to be a constant, and not a variable. |
||||||||||||||||||||
Example |
This will initialize hardware UART module and establish the communication at 2400 bps: UART1_Remappable_Init_Advanced(9600, UART_MODE_8BIT_EVENPARITY, UART_STOPBITS_1); |
UART_Remappable_Data_Ready
Prototype |
unsigned short UART_Remappable_Data_Ready(); // for MCUs with multiple modulesunsigned short UARTx_Remappable_Data_Ready(); |
---|---|
Returns |
Function returns 1 if data is ready or 0 if there is no data. |
Description |
The function tests if data in receive buffer is ready for reading. ![]()
|
Requires |
MCU with the UART module and remappable feature. The UART module must be initialized before using this routine. See the UART_Remappable_Init routine. |
Example |
// If data is ready, read it: if (UART_Remappable_Data_Ready() == 1) { receive = UART_Remappable_Read(); } |
UART_Remappable_Tx_Idle
Prototype |
char UART_Remappable_Tx_Idle(); // for MCUs with multiple moduleschar UARTx_Remappable_Tx_Idle(); |
---|---|
Returns |
|
Description |
Use the function to test if the transmit shift register is empty or not. ![]()
|
Requires |
UART HW module must be initialized and communication established before using this function. See UART_Remappable_Init. |
Example |
// If the previous data has been shifted out, send next data: if (UART_Remappable_Tx_Idle() == 1) { UART_Remappable_Write(_data); } |
UART_Remappable_Read
Prototype |
unsigned short UART_Remappable_Read(); // for MCUs with multiple modulesunsigned short UARTx_Remappable_Read(); |
---|---|
Returns |
Received byte. |
Description |
The function receives a byte via UART. Use the UART_Remappable_Data_Ready function to test if data is ready first. ![]()
|
Requires |
MCU with the UART module and remappable feature. The UART module must be initialized before using this routine. See UART_Remappable_Init routine. |
Example |
// If data is ready, read it: if (UART_Remappable_Data_Ready() == 1) { receive = UART_Remappable_Read(); } |
UART_Remappable_Read_Text
Prototype |
void UART_Remappable_Read_Text(char *Output, char *Delimiter, char Attempts); // for MCUs with multiple modulesvoid UARTx_Remappable_Read_Text(char *Output, char *Delimiter, char Attempts); |
---|---|
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 UART_Remappable_Init. |
Example |
Read text until the sequence “OK” is received, and send back what’s been received: UART_Remappable_Init(4800); // initialize UART module Delay_ms(100); while (1) { if (UART_Remappable_Data_Ready() == 1) { // if data is received UART_Remappable_Read_Text(output, "OK", 10); // reads text until 'OK' is found UART_Remappable_Write(output); // sends back text } } |
UART_Remappable_Write
Prototype |
void UART_Remappable_Write(unsigned short data_); // for MCUs with multiple modulesvoid UARTx_Remappable_Write(unsigned short data_); |
---|---|
Returns |
Nothing. |
Description |
The function transmits a byte via the UART module. Parameters :
![]()
|
Requires |
MCU with the UART module and remappable feature. The UART module must be initialized before using this routine. See UART_Remappable_Init routine. |
Example |
unsigned char _data = 0x1E; ... UART_Remappable_Write(_data); |
UART_Remappable_Write_Text
Prototype |
void UART_Remappable_Write_Text (char *uart_text); // for MCUs with multiple modulesvoid UARTx_Remappable_Write_Text (char *uart_text); |
---|---|
Returns |
Nothing. |
Description |
Sends text (parameter ![]()
|
Requires |
UART HW module must be initialized and communication established before using this function. See UART_Remappable_Init. |
Example |
Read text until the sequence “OK” is received, and send back what’s been received: UART_Remappable_Init(4800); // initialize UART module Delay_ms(100); while (1) { if (UART_Remappable_Data_Ready() == 1) { // if data is received UART_Remappable_Read_Text(output, "OK", 10); // reads text until 'OK' is found UART_Remappable_Write(output); // sends back text } } |
UART_Set_Active
Prototype |
void UART_Set_Active(char (*read_ptr)(), void (*write_ptr)(unsigned char data_), char (*ready_ptr)(), char (*tx_idle_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 UART_Remappable_Init routine |
Example |
UART1_Remappable_Init(9600); // initialize UART1 module UART2_Remappable_Init(9600); // initialize UART2 module RS485Master_Init(); // initialize MCU as Master UART_Set_Active(&UART1_Remappable_Read, &UART1_Remappable_Write, &UART1_Remappable_Data_Ready, &UART1_Remappable_Tx_Idle); // set UART1 active RS485Master_Send(dat,1,160); // send message through UART1 UART_Set_Active(&UART2_Remappable_Read, &UART2_Remappable_Write, &UART2_Remappable_Data_Ready, &UART2_Remappable_Tx_Idle); // set UART2 active RS485Master_Send(dat,1,160); // send through UART2 |
UART_Data_Ready
Prototype |
char UART_Data_Ready(); |
---|---|
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 the UART_Remappable_Init routine. |
Example |
// If data is ready, read it: if (UART_Data_Ready() == 1) { receive = UART_Read(); } |
UART_Tx_Idle
Prototype |
char UART_Tx_Idle(); |
---|---|
Returns |
|
Description |
Use the function to test if the transmit shift register is empty or not. 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 UART_Remappable_Init. |
Example |
// If the previous data has been shifted out, send next data: if (UART_Tx_Idle() == 1) { UART_Write(_data); } |
UART_Read
Prototype |
char UART_Read(); |
---|---|
Returns |
Returns the received byte. |
Description |
Function receives a byte via UART. Use the function UART_Data_Ready 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 UART_Remappable_Init routine. |
Example |
// If data is ready, read it: if (UART_Data_Ready() == 1) { receive = UART_Read(); } |
UART_Read_Text
Prototype |
void UART_Read_Text(char *Output, char *Delimiter, char Attempts); |
---|---|
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). This is a generic routine which uses the active UART module previously activated by the UART_Set_Active routine. Parameters :
|
Requires |
UART HW module must be initialized and communication established before using this function. See UART_Remappable_Init. |
Example |
Read text until the sequence “OK” is received, and send back what’s been received: UART1_Init(4800); // initialize UART1 module Delay_ms(100); while (1) { 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 } } |
UART_Write
Prototype |
void UART_Write(char data_); |
---|---|
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 UART_Remappable_Init routine. |
Example |
unsigned char _data = 0x1E; ... UART_Write(_data); |
UART_Write_Text
Prototype |
void UART_Write_Text(char * UART_text); |
---|---|
Returns |
Nothing. |
Description |
Sends text via UART. Text should be zero terminated. This is a generic routine which uses the active UART module previously activated by the UART_Set_Active routine. Parameters :
|
Requires |
UART HW module must be initialized and communication established before using this function. See UART_Remappable_Init. |
Example |
Read text until the sequence “OK” is received, and send back what’s been received: UART1_Init(4800); // initialize UART1 module Delay_ms(100); while (1) { 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 } } |
What do you think about this topic ? Send us feedback!