PUERTOS DE ENTRADA/SALIDA:

Un recurso imprescindible en los microcontroladores es el que soporta las Entradas y Salidas con los periféricos del mundo exterior. Los PIC16C5X sólo disponen de líneas de E/S digitales, cada una de las cuales tiene su correspondencia con una patita de la cápsula. Dichas líneas se agrupan en tres puertos Puerto A, Puerto B y Puerto C. El Puerto A actúa lo mismo que un registro de E/S de lectura y escritura. Sólo son válidos los 4 bits de menos peso que corresponden con las patitas RA3:RA0. Los 4 bits de más peso no están implementados y cuando se leen siempre valen 0.

El Puerto B funciona como un registro de E/S de 8 bits bidireccionales, siendo accesibles todos ellos por las patitas RB7:RB0.

 

 

 

 

 

 

 

 

 

 

En los modelos PIC16C55/57, con 28 patitas, el Puerto C funciona como un registro de E/S de 8 bits. En los PIC16C54/CR54/C56, este registro se comporta como uno de propósito general al no existir suficientes patitas en las cápsulas para soportar estas líneas de E/S.

Los bits de cada puerto se configuran mediante los bits correspondientes de un registro de control asociado que recibe el nombre de TRIS. En realidad cada puerto soporta dos registros:

1º El registro de datos, al que se denomina Puerto X (PortX). Siendo X= A o B o C.
2º El registro de control TRISX, con el que se programa el sentido (Entrada o Salida) de las líneas del puerto X.

Los Puertos A, B y C se corresponden con las posiciones 5, 6 y 7 del área de datos. Cada uno de sus bits puede programarse como una línea de Entrada o de Salida, según se ponga un 1 ó un 0, respectivamente, en el bit del registro de control TRIS correspondiente

 

 

 

 

 

 

 

 

Un 1 en el bit "i" del registro TRISA pone en alta impedancia (Entrada) la línea asociada "i" del Puerto A. Como puede deducirse en el esquema de la anterior figura, en el que se representa el circuito electrónico con el que se enlaza cada patita de E/S del microcontrolador, si en el bit "i" de TRISA hubiese un 0, el contenido del biestable de datos correspondiente del Puerto A pasaría a la patita de E/S externa. Cualquier línea puede funcionar como Entrada o como Salida. Sin embargo, si actúa como Entrada, la información que se introduce desde el exterior no se memoriza o "amarra", pasa simplemente por un dispositivo triestado por lo cual el valor de dicha información debe mantenerse hasta que sea leída. La lectura se realiza en "tiempo real".

Cuando una patita de E/S funciona como salida, el bit que proviene del bus de datos se guarda en el Biestable del dato con lo cual la información que ofrece esta patita permanece invariable hasta que se reescriba otro bit.

Para configurar la patita como Entrada, hay que cargar un 1 en el Biestable de control de E/S mientras que hay que cargar un 0 si se desea que sea Salida.

Cada línea de E/S de los puertos se programa de forma independiente y puede ser Entrada o Salida. Cuando se produce un reset, todos los bits de los registros TRIS pasan a tener el valor 1 y todas las líneas de E/S actúan como Entrada por evidentes motivos de seguridad para evitar daños irreparables.

Para sacar un determinado nivel lógico por una línea de un puerto de E/S, se deposita el mismo en la línea correspondiente del bus de datos interno y se activa la señal WRITE, lo que origina el almacenamiento de dicho bit en el Biestable de datos. En esta situación, el Biestable de control de E/S debería contener un 0 (Salida). Con estos valores iniciales, la compuerta OR tendría un 0 en su salida y la compuerta AND, también. Estas salidas producen la conducción del transistor PMOS superior y el bloqueo del NMOS. Así, la patita de E/S queda conectada a VDD y soporta un nivel alto. Como la línea de salida está "amarrada", conserva su valor hasta que se desee sacar otro y se reescriba el Biestable D.

Cuando una línea de E/S actúa como Entrada, el nivel lógico depositado desde el exterior en la patita correspondiente pasa a la línea adecuada del bus de datos interno cuando se activa la señal READ y se hace conductor el dispositivo triestado que les une. Al programarse como línea de Entrada, los dos transistores MOS de salida quedan bloqueados y la línea queda en alta impedancia. Téngase en cuenta que cuando se lee una línea de Entrada se obtiene el estado actual que hay en la patita correspondiente y no el valor que haya almacenado en el Biestable.

La información presente en una línea de Entrada se muestrea al iniciarse un ciclo de instrucción y debe mantenerse estable durante ese tiempo.

Ya indicamos en el capítulo 2 que cada línea de un puerto puede suministrar una corriente máxima de 20 mA actuando como salida y absorber hasta 25 mA cuando actúa como entrada. Sin embargo, hay que tener en cuenta que existen unas limitaciones de disipación de potencia en el chip que son:

a) El puerto A puede absorber un máximo de 80 mA y suministrar un máximo de 50 mA en total.
b) El puerto B puede absorber un máximo de 150 mA y suministrar entre todas sus líneas un máximo de 100 mA.

Estas restricciones obligan a limitar la corriente de salida total de cada puerto así como la de entrada. Por lo tanto, habrá que conjugar los máximos admitidos por cada línea con los máximos permitidos por cada puerto, que comprende a todas las líneas.

Los puertos de entrada se leen mediante la instrucción movf PORTX, W siendo válido el dato sólo en el momento de la lectura pues no se memoriza.

Los puertos de salida se escriben con la instrucción movwf PORTX.

Es posible modificar el valor de algún bit particular de un puerto mediante las instrucciones bsf (poner a 1) y bcf (poner a 0). También se puede leer el valor de un bit de un puerto con las instrucciones btfss y btfsc.

Los puertos que contienen entradas y salidas necesitan una atención especial al escribir el programa. Instrucciones como bsf y bcf comienzan leyendo el valor del puerto y cargándolo en el registro W; allí ejecutan la puesta a 1 ó a 0 del bit seleccionado y, luego, depositan el registro W en el puerto. También hay que tener en cuenta las modificaciones que se produzcan en las patitas que son entrada y pasan a salida, pues pueden estar presentes datos antiguos en el registro de salida del puerto al ser memorizados.

Hay que prestar mucha atención a las operaciones que, tras una lectura de un puerto. sigue una escritura de la misma. Se debe dejar pasar un tiempo determinado para que se estabilice el voltaje de las patitas. Insertando entre la lectura y la escritura una instrucción NOP o cualquier otra que no implique a los puertos, se eliminan estos errores potenciales.

 

Localización de Puertos E/S
. Cada puerto de E/S tiene asociado un registro TRIS que configura como Entrada o Salida cada línea.