>> Tecnologia Eletrônica >  >> Telefones >> Viva-voz de Conferência

O Registrador TRIS nos Microcontroladores PIC da Microchip: Controle de Direção de Dados

Na arquitetura de microcontroladores PIC® da Microchip Technology (famílias PIC10/12/16/18/24/32), o registrador TRIS (Registrador Tri-Estado) é o Registrador de Direção de Dados para uma porta de I/O. Ele configura cada pino como Entrada ou Saída.

Origem do Nome

TRIS = **TRI**-Stado (Entrada, Saída Alta, Saída Baixa / Alta-Impedância). O pino pode ser forçado Alto, forçado Baixo, ou Alta-Impedância (Entrada).

Lógica Bit a Bit (A Regra de Ouro)

Valor do Bit TRISxDireção do PinoEstado do PinoDriver de SaídaBuffer de Entrada
1EntradaAlta-Impedância (Hi-Z)Desabilitado (Desligado)Habilitado (Schmitt Trigger / TTL)
0SaídaForçado Alto / BaixoHabilitado (Push-Pull / Open-Drain*)Habilitado (Lê estado do pino)

*Open-Drain (registrador ODCON) desabilita P-FET; requer pull-up externo.

Mnemônico: "1 = Entrada (I)", "0 = Saída (O)". Pense: **1** parece um **I** (Input). **0** parece um **O** (Output).

Mapeamento de Registradores (Exemplos)

  • PIC16F877A (Mid-range): TRISA (5-bit), TRISB (8-bit), TRISC, TRISD, TRISE. Banco 1 (RP0=1).
  • PIC18F4550 (High-end 8-bit): TRISA–TRISE. Access Bank (Banco 15 / BSR).
  • PIC24 / dsPIC33 (16-bit): TRISA–TRISG. Espaço SFR. Registradores 16-bit.
  • PIC32 (MIPS32): TRISA–TRISG. Mapeado em memória. TRISxSET / TRISxCLR / TRISxINV registradores de manipulação atômica de bits.

Interação Crítica: LATx vs PORTx

  • Escrita de Saída: Escreva no registrador LATx (Latch). Evita problemas de Leitura-Modificação-Escrita (RMW) em pinos muito carregados. LATBbits.LATB5 = 1;
  • Leitura de Entrada: Leia registrador PORTx. Amostra tensão do pino. if (PORTBbits.RB4) ...
  • Leitura de Saída: Leia LATx (valor escrito garantido). Ler PORTx lê *tensão real do pino* (pode diferir devido a carga).

Sequência de Configuração (Boa Prática)

// 1. Configurar Analógico/Digital (ANSELx = 0 para I/O digital) ANSELB = 0x00;
// 2. Definir Níveis Iniciais de Saída (LATx) *antes* de tornar saídas LATB = 0x00; // Todos baixos inicialmente
// 3. Definir Direção de Dados (TRISx) TRISB = 0b00010000; // RB4 = Entrada (1), Outros = Saída (0)
// 4. Habilitar Pull-ups Fracos (se necessário, para entradas) WPUBbits.WPUB4 = 1; // Pull-up no RB4 INTCON2bits.nRBPU = 0; // Habilita pull-ups PORTB globalmente 

Sobreposições de Função Especial

Módulos periféricos (UART, SPI, I2C, PWM, ADC, Comparador) **sobrescrevem controle do TRIS** quando habilitados.

  • UART TX → Força Saída. RX → Força Entrada.
  • ADC → Força Entrada (Analógico), desabilita buffer digital (ANSEL=1).
  • Bit TRIS torna-se "don't care" para aquele pino. Verifique "Pin Diagram" / "Pinout I/O Description" no datasheet.

Armadilhas Comuns

  • Esqueceu ANSEL: Pino padrão Entrada Analógica no POR. Leitura digital retorna 0. TRIS=1 mas ANSEL=1 → Analógico. Sempre limpe ANSEL primeiro.
  • RMW em PORTx: PORTB |= 0x01; lê pino (pode estar baixo por carga), modifica, escreve de volta → limpa outras saídas. Use LATx.
  • Seleção de Banco (PIC16): TRIS no Banco 1. PORT no Banco 0. BANKSEL TRISB faltando → escreve no registrador errado (PORTB).

O registrador TRIS é o guardião da direção do pino. Domine sua lógica "1=Entrada, 0=Saída", sua parceria com LATx/PORTx/ANSELx, e sobreposições periféricas, e você domina I/O do PIC.