Fork me on GitHub

20/10/12

Tutorial 2: Biblioteca MikroC: UART

Bibliotecas MikroC PRO for PIC: UART







BIBLIOTECA UART


UART (Universal Assynchronous Receiver-Transmitter) é um módulo que possibilita a transmissão e recepção serial de dados originalmente disponíveis na forma paralela.


A biblioteca UART  oferece trabalho confortável com o modo (full duplex) assíncrono, via protocolo RS-232.


Você pode facilmente se comunicar com outros dispositivos via protocolo RS-232 (por exemplo, com PC).Você precisa de um MCU PIC com hardware integrado UART, por exemplo 16F887.

Rotinas:

UART_Set_Active(char (*read_ptr)(), void (*write_ptr), char (*ready_ptr)(), char (*tx_idle_ptr()) - Alterna entre os módulos UART.
  read_ptr UARTx_Read;
  write_ptr UARTx_Write;
  ready_ptr UARTx_Data_Ready;
  tx_idle_ptr UARTx_Tx_Idle;

Exemplo:
UART_Set_Active(&UART1_Read, &UART1_Write, &UART1_Data_Ready, &UART1_Tx_Idle);
// Ativa o módulo UART1
UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle);
// Ativa o módulo UART2

OBS.: 'x' especifica o módulo a ser utilizado.  

UARTx_Init(const unsigned long baud_rate) - Alterna entre os módulos UART. 
baud_rate- Taxa de transmissão;  

UARTx_Data_Ready() - Retorna 1 se há dados sendo recebidos; e 0 se não há dados sendo recebidos.  

UARTx_Tx_Idle() - Retorna 1 se há dados sendo transmitidos; e 0 se não há dados sendo transmitidos.  
UARTx_Read() - Retorna o dado recebido. Use em conjunto com a função UARTx_Data_Ready();  

UARTx_Read_Text(char Output, char Delimiter, char Attempts) - Lê caracteres recebidos via UART até a sequência delimiter for detectado.  
Output - Texto recebido.  
Delimiter - Sequência de caracters para determinar o fim da recepção.  
Attempts - Determina o numero de caracteres recebidos.  

UARTx_Write(char data) - Transmite um caracter via UART.  
data - código do caracter a ser enviado (ver tabela ASCII);  

UARTx_Write_Text(char text) - Transmite um caracter via UART. 
text- Texto a ser enviado.  

EXEMPLO:
char uart_rd;

void main() {
  ANSEL  = 0;                     // Configure AN pins as digital
  ANSELH = 0;
  
  UART1_Init(9600);               // Initialize UART module at 9600 bps
  Delay_ms(100);                  // Wait for UART module to stabilize
  
  UART1_Write_Text("Start");
  UART1_Write(10);
  UART1_Write(13);
  
  while (1) {                     // Endless loop
    if (UART1_Data_Ready()) {     // If data is received,
      uart_rd = UART1_Read();     // read the received data,
      UART1_Write(uart_rd);       // and send data via UART
    }
  }
}

Um comentário:

Postagens Relacionadas!!