Entradas y salidas microcontrolador pic
En este post veremos los conceptos de TRISx y PORTx y como se usan en el compilador XC8.
Los pines del microcontrolador PIC pueden tener múltiples funciones, eso dependerá del microcontrolador PIC que se utilice, en esta ocasión se verá el uso de estos pines como entrada y salida, los pines se agrupan por puertos nombrados PORTA, PORTB hasta PORT-XX. Algunos pines para estos puertos son de entrada o salida y se multiplexan con funciones alternativas para las funciones periféricas de los dispositivos. En general, cuando se habilita un periférico, ese pin no se puede usar como un pin de E/S de propósito general.
Contenido
Diagrama de bloques
Observemos el diagrama de bloques básico de un microcontrolador, no vamos a detallar cada componente en este post, pero se hablará más adelante de ellos, lo que nos interesa son los puertos PORTXX.
Diagrama bloques
Puertos
Si observa el diagrama de bloques del microcontrolador, encontrará varios puertos marcados como PORTA, PORTB o los que tenga. En un microcontrolador, hay varios pines que sobresalen de él los cuales se utilizan para conectar el microcontrolador al mundo exterior. Sin embargo, dentro del microcontrolador, estos pines están controlados por registros dentro del microcontrolador que están representados por puertos mediante registro TRISx se eligen si los pines a utilizar del microcontrolador PIC serán salidas digitales o entradas digitales.
I/O
Con el propósito de sincronizar el funcionamiento de los puertos de E/S con la organización interna del microcontrolador de 8 bits, ellos se agrupan, de manera similar a los registros, en cinco puertos denotados con A, B, C, D y E. Todos ellos tienen las siguientes características en común:
- Por las razones prácticas, muchos pines de E/S son multifuncionales. Si un pin realiza una de estas funciones, puede ser utilizado como pin de E/S de propósito general.
- Cada puerto tiene su propio registro de control de flujo, o sea el registro TRIS correspondiente: TRISA, TRISB, TRISC etc. lo que determina el comportamiento de bits del puerto, pero no determina su contenido.
Al poner a cero un bit del registro TRIS (pin=0), el pin correspondiente del puerto se configurará como una salida. De manera similar, al poner a uno un bit del registro TRIS (bit=1), el pin correspondiente del puerto se configurará como una entrada. Esta regla es fácil de recordar: 0 = Entrada 1 = Salida.
Registro TRIS
El registro TRIS recibe su nombre del hecho de que puede estar en tres estados. Puede configurar para salida alta, salida baja o entrada. El registro TRIS se utiliza para hacer que un puerto sea una entrada o una salida. Para hacer que un puerto sea una salida, escribimos un 0 en el registro TRIS correspondiente de ese puerto. Para hacer una entrada, escribimos un 1.
Por ejemplo, para establecer PORTB como un puerto de salida, hacemos lo siguiente:
TRISB = 0;
De manera similar, si quisiéramos convertir ese mismo puerto en un puerto de entrada, hacemos lo siguiente:
TRISB = 1;
Es importante administrar de manera eficiente la valiosa E/S ya que los microcontroladores PIC no contienen un número infinito de pines. Por lo tanto, a veces es necesario asignar un pin en un puerto particular para servir una función de entrada o salida. Por ejemplo, para establecer un bit individual (en este caso, BIT 0 en PORTB) como salida, hacemos lo siguiente:
TRISBbits.TRISB0 = 0;
De manera similar, si quisiéramos establecer un bit como entrada, escribimos:
TRISBbits.TRISB1 = 1;
Como puede ver estas asignaciones son sencillas de realizar al momento de asignar un pin como entrada o salida.
Registro PORTx
Nos hemos referido a los puertos de los microcontroladores PIC en varias ocasiones. Un dispositivo puede tener varios puertos que van de A a E. Estos puertos tienen un ancho de 8 bits y, por lo tanto, generalmente estos puertos tienen desde los bits 0 a 7. El registro de puertos esencialmente lee los niveles de voltaje de los pines en el dispositivo.
Entradas salidas Registro PORTx
Cuando algún pin o pines del microcontrolador PIC se han configurado como salidas digitales mediante la programación de los bits del registro PORTx se indica si por la salida digital se tendrá un alto o un bajo que es lo mismo que un 1 o un 0.
Por ejemplo utilizando el compilador XC8 con la siguiente linea de código se pondrán todos los pines del puerto B como altos o a 1 o a 5V, si previamente mediante el registro TRISB se han configurado todos los pines del puerto B como salidas digitales.
PORTB=0b11111111;
PORTB=0xff;
si se quiere que solo por el pin RB3 salga un 1 será así.
PORTBbits.RB3=1;
RB3=1;
si se quiere que por los pines RB5 y RB2 salgan unos sería así:
PORTBbits.RB2=1;
PORTBbits.RB5=1;
Cuando algún pin o pines del microcontrolador PIC se han configurado como entradas digitales mediante los bits del registro PORTx se pueden leer los estados del los pines del puerto, esto es se puede leer si al pin del puerto x le está llegando una alto o un bajo, se puede leer bit por bit o todo el puerto a la vez, para esto será necesario crear variables donde se guardarán los estados leídos.
Por ejemplo si todos los pines del puerto B son utilizados como entradas digitales se puede proceder así.
uint8_t estados;//variable entera sin signo de 8 bits
estados=PORTB;//en la variable de 8 bits se guarda los estados de los pines del PUERTO B