¿Por qué configurar PORTx antes de TRISx?

4

Estaba explorando el código de ejemplo que MikroE proporciona para la programación PIC con MikroC, y siempre configuran PORTx antes de configurar TRISx. ¿Cuál es la razón de esto?

Dado que TRIS solo selecciona si el puerto o pin es el modo de salida / entrada, ¿por qué importa la configuración del pin antes de configurar el modo?

Código de ejemplo

  PORTA = 255;
  TRISA = 255;                        // configure PORTA pins as input
  PORTB = 0;                          // set PORTB to 0
  TRISB = 0;                          // designate PORTB pins as output
  PORTC = 0;                          // set PORTC to 0
  TRISC = 0;                          // designate PORTC pins as output
    
pregunta Shubham

3 respuestas

10

Los bits PORTx se ajustan antes que los bits TRISx para que sepa cuál será la salida antes de convertir el pin en una salida. Si está configurando los bits TRISx a las entradas, no importa. Sin embargo, si está borrando los bits TRISx y activándolos, es más seguro determinar cuál será la salida antes de que cambie de entrada a salida. Por lo tanto, si una alarma o algo se dispara cuando un pin está alto, querrá asegurarse de que cuando se convierta en una salida, comience con una baja.     

respondido por el Justin Trzeciak
5

Para este bit de código específico, la respuesta es que el programador desea configurar los pines a un estado / voltaje conocido antes de configurarlos como salidas. Pero en general, los bits TRIS hacen más que solo establecer un pin para el modo de entrada o salida.

La mnemotecnia TRIS significa tri-estado. Cuando un pin está en reposo, la resistencia de ese pin es tan alta que se desconectan del circuito.

Si alguna vez has mirado en autobuses, habrías visto circuitos de tres estados. Son la forma en que los pobres conectan varias salidas sin utilizar un multiplexor o un conmutador. Todo lo que necesita es asegurarse de que solo haya una salida en el bus que no esté en modo de triple estado en ningún momento.

También existe un método "seguro" para implementar buses al no permitir que ningún dispositivo emita ningún voltaje que no sea cero voltios. Los valores en el bus obtienen voltaje VCC a través de una o varias resistencias de pull-up. Muchos buses serie hacen esto. Si recuerdo correctamente, CAN bus hace esto. La contención nunca es un problema con este esquema. Solo debe ocuparse de las colisiones que se pueden hacer en el software.

Por lo tanto, en un montón de código con el que he trabajado (y de hecho en un montón de mi propio código), los bits del PORT están codificados para 0 y los pines se activan al establecer los bits TRIS en 1 o% código%. Por lo tanto, a veces verá un código en producción donde las salidas se controlan a través de los bits TRIS en lugar de los bits PORT.

    
respondido por el slebetman
2

Tal vez sea una forma de evitar que se produzcan fallas en la salida, luego baja después de un tris. Si establece salidas bajas antes de tris, se garantiza que serán bajas después de tris. ¡Tal vez! Supongo que esto supone que el registro del puerto de salida puede contener bits aleatorios o tal vez estén todos en alto después de un reinicio.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas