PIC do Zero

Programação em C para Microcontroladores PIC

Aula 17 – Comunicação Serial UART

Nesta aula vamos estudar a comunicação serial UART, muito utilizada para troca de dados entre o PIC e computadores, IHMs, módulos Bluetooth, GSM, conversores USB-Serial, interfaces RS-232 e redes RS-485.

1. O que é UART?

UART significa Universal Asynchronous Receiver Transmitter. É um periférico interno do microcontrolador responsável por transmitir e receber dados seriais.

UART = Transmissor e Receptor Assíncrono Universal

2. O que é comunicação serial?

Comunicação serial transmite os bits um de cada vez, utilizando poucos fios. Isso é diferente da comunicação paralela, que envia vários bits ao mesmo tempo.

Byte: 01010101

Transmissão serial:
0 → 1 → 0 → 1 → 0 → 1 → 0 → 1

3. Comunicação paralela x comunicação serial

TipoCaracterísticas
ParalelaUsa vários fios para transmitir vários bits ao mesmo tempo.
SerialUsa poucos fios e transmite um bit por vez.

4. Pinos TX e RX

A UART utiliza normalmente dois sinais principais:

  • TX: transmissão de dados.
  • RX: recepção de dados.
PIC16F877A:
RC6 = TX
RC7 = RX

5. Ligação correta entre dois dispositivos

O TX de um dispositivo deve ser ligado ao RX do outro.

PIC TX  →  RX do módulo
PIC RX  ←  TX do módulo
GND     ↔  GND comum

6. O que é Baud Rate?

Baud Rate é a velocidade da comunicação serial. Ele define quantos bits são transmitidos por segundo.

Valores comuns:
9600
19200
38400
57600
115200

7. Exemplo de configuração para 9600 bps

Para um PIC com oscilador de 20 MHz, um valor comum para 9600 bps é:

SPBRG = 129;

8. Registradores principais da UART

RegistradorFunção
TXSTAControle da transmissão
RCSTAControle da recepção
SPBRGConfiguração do Baud Rate
TXREGRegistrador usado para transmitir dados
RCREGRegistrador usado para receber dados

9. Inicializando a UART

void UART_Init()
{
    SPBRG = 129;   // Baud Rate 9600 bps com Fosc de 20 MHz
    TXSTA = 0x24;  // Transmissão habilitada, modo assíncrono, alta velocidade
    RCSTA = 0x90;  // Porta serial habilitada e recepção contínua
}

10. Enviando um caractere

void UART_Write(char dado)
{
    while(!TXIF);  // Aguarda o registrador ficar livre
    TXREG = dado;  // Envia o caractere
}

11. Enviando uma mensagem

void UART_Texto(char *texto)
{
    while(*texto)
    {
        UART_Write(*texto++);
    }
}

12. Recebendo um caractere

char UART_Read()
{
    while(!RCIF);  // Aguarda chegar dado
    return RCREG;  // Retorna o caractere recebido
}

13. Exemplo completo: enviando texto para o computador

#include <xc.h>

void UART_Init()
{
    SPBRG = 129;
    TXSTA = 0x24;
    RCSTA = 0x90;
}

void UART_Write(char dado)
{
    while(!TXIF);
    TXREG = dado;
}

void UART_Texto(char *texto)
{
    while(*texto)
    {
        UART_Write(*texto++);
    }
}

void main()
{
    UART_Init();

    while(1)
    {
        UART_Texto("PIC do Zero\r\n");
    }
}

14. Comunicação com computador

Para comunicar o PIC com um computador, normalmente usamos um conversor USB-Serial.

PIC  →  Conversor USB-Serial  →  Computador

15. RS-232

RS-232 é um padrão clássico de comunicação serial. Como trabalha com níveis de tensão diferentes dos pinos do PIC, geralmente é necessário utilizar o circuito integrado MAX232.

PIC UART  ↔  MAX232  ↔  Porta serial RS-232

16. RS-485

RS-485 é muito utilizado em automação industrial por permitir comunicação em longas distâncias e com maior imunidade a ruídos.

PIC UART  ↔  MAX485  ↔  Rede RS-485

17. UART com Bluetooth

Módulos como HC-05 e HC-06 se comunicam com o PIC usando UART.

PIC TX → RX do HC-05
PIC RX ← TX do HC-05

18. UART com GSM

Módulos GSM como SIM800 e SIM900 usam comandos AT pela UART.

UART_Texto("AT\r\n");

19. Aplicações industriais

  • Comunicação com IHMs.
  • Comunicação com CLPs.
  • Comunicação com inversores de frequência.
  • Leitura de balanças e sensores inteligentes.
  • Redes RS-485.
  • Protocolo Modbus RTU.

20. Cuidados importantes

  • TX deve ligar no RX do outro dispositivo.
  • RX deve ligar no TX do outro dispositivo.
  • Os dois equipamentos devem usar o mesmo Baud Rate.
  • É necessário GND comum em comunicação TTL.
  • Verifique se o módulo trabalha em 5V ou 3,3V.

21. Exercícios

Exercício 1: Qual pino transmite dados?

TX

Exercício 2: Qual pino recebe dados?

RX

Exercício 3: Qual registrador envia dados?

TXREG

Exercício 4: Qual registrador recebe dados?

RCREG

22. Laboratório prático

Monte o PIC com um conversor USB-Serial e envie a mensagem PIC do Zero para o terminal serial do computador.

PIC16F877A
RC6/TX → RX do conversor USB-Serial
RC7/RX ← TX do conversor USB-Serial
GND    ↔ GND do conversor

23. Resumo da Aula

  • UART é comunicação serial assíncrona.
  • TX transmite e RX recebe.
  • Baud Rate define a velocidade.
  • TXREG transmite dados.
  • RCREG recebe dados.
  • UART é base para RS-232, RS-485, Bluetooth, GSM e Modbus RTU.

Próxima Aula – Aula 18

Na próxima aula vamos estudar Comunicação RS-485 e Protocolo Modbus RTU, entrando no universo das redes industriais.