Está en la página 1de 10

UNIDAD 5 SISTEMA DE PUERTOS DE ENTRADA/SALIDA

DEL PIC18F4550

5.1 Puertos De Entrada/Salida

Como se comentó al estudiante durante los temas revisados en el capítulo 3, el


microcontrolador PIC18F4550 contiene cinco puertos de entrada y salida, a saber:
PORTA, PORTB, PORTC, PORTD y PORTE. Esos puertos pueden ser utilizados
para propósitos generales, es decir, para aplicaciones simples donde el diseñador
puede elegir libremente, según su criterio, la función y el sentido de flujo de los datos,
en cada una de sus terminales.

Es conveniente advertir al estudiante que después de una operación de reinicio


(reset), los puertos PORTA y PORTE quedan configurados por defecto, para operar
como canales analógicos de entrada. Si el estudiante usuario necesita que ellos
operen como canales digitales, deberá reconfigurarlos adecuadamente en el registro
ADCON1.

Adicionalmente, las terminales de los diferentes puertos del PIC, también pueden ser
utilizadas para propósitos especiales. Recuerde el estudiante que en el capítulo 3 se
mostró como cada patilla tiene funciones alternas que ofrecen la posibilidad de
diseñar sistemas con funciones superiores, realmente ventajosas.

Por ejemplo, las terminales de los puertos PORTA y PORTE pueden funcionar como
canales de entrada de señales analógicas, para el Convertidor A/D.

1
Diagrama a bloques genérico de E/S

Algunas terminales del PORTB pueden ser utilizadas por una Interfaz De
Comunicación Serial Síncrona, para transferir el programa de aplicación desde
una computadora personal (PC), hacia la memoria EEPRO-FLASH del
microcontrolador.

Interfaz
Serial
Sincrona

COMPUTADOR RB7/PGD MEMORIA


PERSONAL RB6/PGC DE
ó PORTB PROGRAMA
RB3/PGM EEPROM
PROGRAMADOR
DE PIC's FLASH

2
Las funciones especiales del PORTC están relacionadas con funciones de Entrada
De Reloj, funciones de producción de Señales De Salida PWM, funciones de las
interfaces de Comunicación Serial, Síncronas (SPI, I2C) y Asíncronas (USART).

PIC DIPOSITIVO PIC DIPOSITIVO


EXTERNO EXTERNO

USART RC7/DT USART SSP RC4/SDA


RC6/CK RC3/SCL INTERFAZ
MODO MODO MODO
I2C
SINCRON0 GND SINCRON0 I2C GND

PIC DIPOSITIVO PIC DIPOSITIVO


EXTERNO EXTERNO

RC5/SDO
USART RC7/RX USART SSP RC4/SDI INTERFAZ
MODO RC6/TX MODO MODO RC3/SCK SPI
ASINCRON0 GND ASINCRON0 SPI
RA5/SS

Las terminales del PORTD y el PORTE se pueden usar para implementar la Interfaz
Del Puerto Paralelo Esclavo (PSP).

Puerto
Paralelo
Esclavo

RDO/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
PORTD RD4/PSP4
RD5/PSP5 MEMORIA
RD6/PSP6 EXTERNA
PIC RD7/PSP7
ó
COMPUTADOR
EXTERNO

RE0/RD
RE1/WR
PORTE
RE2/CS

3
5.2 Registros De Control De Sentido De Flujo, En Los Puertos De E/S

Cada uno de los puertos de E/S del PIC18F4550, tiene asociado un registro TRIS,
que controla el sentido de flujo de los datos en dicho puerto. Por ejemplo, el PORTA
tiene asociado el registro TRISA; el PORTB tiene asociado el registro TRISB y así
sucesivamente. El estudiante programador puede configurar el sentido de flujo de
los datos en cada patilla de puerto correspondiente, realizando escritura de ceros en
los registros TRIS, en las posiciones de los bits que necesita que operen como
salidas; por el contrario, la escritura de unos sobre ciertas posiciones de bits de los
registros TRIS hará que dichos canales se comporten como entradas.

Por ejemplo, si usted necesita configurar todas las terminales del PORTB como
canales de salida, ejecutar la instrucción, CLRF TRISB, y utilizando e registro LATx.
Alternativamente, también puede ejecutar la secuencia de instrucciones siguiente:

RB7
RB6
RB5
MOVLW H’00’ RB4
MOVWF TRISB PORTB
RB3
RB2
RB1
RB0

Como un ejemplo adicional considere el caso donde usted necesita configurar las
terminales nones de PORTC como canales de entrada y las terminales pares como
canales de salida; para conseguir esto, primeramente deberá ubicarse sobre el
banco 1 o sobre el banco 3 de la memoria de datos, y seguidamente, ejecutar la
secuencia de instrucciones siguiente:
RC7
RC6
RC5
MOVLW B’10101010’ RC4
MOVWF TRISC PORTC
RC3
RC2
RC1
RC0

4
5.3 Subrutinas De Retardo De Tiempo

Las subrutinas de retardo de tiempo son secciones de programa que están diseñadas
para “consumir tiempo”; es decir, provocar espacios de tiempo, con la finalidad de
esperar a que ocurra un evento, ó que una cierta condición perdure y trascienda
en el tiempo, hasta que pueda ser cambiada, etc.

Por ejemplo, para producir una señal digital cuadrada con frecuencia de 1KHz y con
ciclo de trabajo de 30%, primeramente es necesario cambiar la condición del potencial
a nivel alto, en la patilla del puerto asignado; enseguida deberá implementarse un
retardo de tiempo de 0.3 ms, que asegure que tal condición del nivel alto permanecerá
inalterada. Una vez transcurrido el tiempo de pulso, ahora la condición del potencial en
la patilla mencionada será conmutada a nivel bajo y habrá de implementarse un
retardo de tiempo de 0.7 ms para completar el tiempo de no pulso.

1ms

0.3ms 0.7ms

Las subrutinas de retardo se clasifican, según sea el periodo de tiempo de espera que
producen. Generalmente la unidad de referencia es el tiempo que tarda un ciclo de
instrucción (TINSTRUCCIÓN):

Periodos Cortos (TINSTRUCCION < TR <10T INSTRUCCION )

Subrutinas
De Periodos Medios (10TINSTRUCCION < TR <255T INSTRUCCION )
Retardo

Periodos Largos (TR>255TINSTRUCCION )

5
Subrutinas De Retardo De Periodo Corto

La estructura de una subrutina de periodo corto generalmente incluye una o varias


instrucciones NOP (No Operación), según se requiera. Recuerde que las instrucciones
NOP se ejecutan en un ciclo de instrucción. Por ejemplo, si la frecuencia del cristal
oscilador que anima al PIC fuese de 4MHz, entonces la frecuencia de ejecución de
instrucciones sería de 1MHz; por lo tanto el periodo de instrucción (T INSTRUCCION), sería
de 1 microsegundo (S). De este modo la subrutina de retardo siguiente implementa
un tiempo de retardo de 5 microsegundos.

RETARDO5US: NOP ; 1s


NOP ; 1s
NOP ; 1s
RETURN ; 2s

Subrutinas De retardo De Periodo Medio

Cuando una aplicación requiere que se produzca un tiempo de retardo de más de 10


veces el período de instrucción, TINSTRUCCIÓN, y menor que 255 de dicho periodo,
entonces se recomienda utilizar una subrutina de periodo medio. Estas subrutinas
están basadas en la estrategia de inicializar un registro contador con un cierto valor
numérico XX; enseguida comenzar a decrementar el contenido de dicho contador.
Cada vez que el contador es decrementado, se verifica si su contenido ya llegó a cero.
Mientras el contenido del acumulador es diferente de cero, se procede a un nuevo
ciclo, de modo que mientras el proceso de decremento progresa el tiempo transcurre.
La condición de ocurrencia del cero en el contenido del registro contador, marca el fin
de la subrutina de retardo. La estructura de la subrutina se da enseguida.

Subrutina RETARDO

Inicio

Cargar reg CONTADOR


con valor XX

Decrementar reg
CONTADOR

¿CONTADOR=0?
NO

SI

Fin

6
La secuencia de instrucciones que se presenta abajo, implementa una subrutina de
retardo de periodo medio. Si la aplicación considera un cristal oscilador con una
frecuencia de 4MHz, entonces la frecuencia de ejecución de las instrucciones será de
1MHz y el tiempo que tarda cada ciclo de instrucción será de 1 microsegundo.

RETARDO: MOVLW H’XX’ ; 1s


MOVWF CONTADOR ; 1s
ESPERA: DECFSZ CONTADOR, F ; 1s ó 2s
GOTO ESPERA ; 2s
RETURN ; 2s

Por lo tanto, una fórmula que sirve para calcular el tiempo de retardo total es la
siguiente:

TR  1MOVLW  1MOVWF  ( XX  1)1DECFSZ  2DECFSZ  ( XX  1)2GOTO  2RETURN   106

TR  6  106  3  106 ( xx  1)

Así, el valor XX, que debe de ser cargado en el registro CONTADOR, para lograr un
tiempo de retardo TR, está dado por:

TR  6  10 6
XX  1
3  10 6

Por ejemplo, si se necesita diseñar una subrutina de retardo de 0.5 milisegundos,


entonces el valor de XX sería:

0.5  10 3  6  10 6
XX   1  165.666  16610  A616
3  10 6

El código de la subrutina de retardo que produce un retardo de 0.5 milisegundos sería:

RETARDOP5MS: MOVLW H’A6’


MOVWF CONTADOR
ESPERAP5MS: DECFSZ CONTADOR, F
GOTO ESPERAP5MS
RETURN

7
Subrutinas De retardo De Periodo Largo

Las subrutinas de periodo largo generalmente se implementan con anidamientos de


subrutinas de períodos cortos y medios; por ejemplo si una aplicación requiriese de
una subrutina de 50 milisegundos, entonces se puede ejecutar la subrutina de 0.5
milisegundos unas 100 veces:

RETARDO50MS: MOVLW H’64’ ; 100 Veces


MOVWF CONTADOR2
ESPERA50MS: CALL RETARDOP5MS ; Retardo o.5 ms
DECFSZ CONTADOR2, F
GOTO ESPERA50MS
RETURN

La única condición para realizar los anidamientos necesarios, es tener el cuidado de


definir contadores independientes, para cada orden de magnitud de retardo de
tiempo. Por ejemplo, una subrutina para producir un retardo aproximado de un
segundo es la siguiente:

RETARDO1S: MOVLW H’14’ ; 20 Veces


MOVWF CONTADOR3
ESPERA1S: CALL RETARDO50MS ; Retardo 50 ms
DECFSZ CONTADO3, F
GOTO ESPERA1S
RETURN

Una subrutina para lograr un retardo de tiempo de 30 segundos (medio minuto), sería:

RETARDO30S: MOVLW H’1E’ ; 30 Veces


MOVWF CONTADOR4
ESPERA30S: CALL RETARDO1S ; Retardo 1S
DECFSZ CONTADO4, F
GOTO ESPERA30S
RETURN

Subrutina para lograr un retardo de tiempo aproximado de 10 minutos:

RETARDO10M: MOVLW H’14’ ; 20 Veces


MOVWF CONTADOR5
ESPERA10M: CALL RETARDO30S ; Retardo 30S
DECFSZ CONTADO5, F
GOTO ESPERA10M
RETURN

8
5.4 Generación De Señales Digitales Usando Subrutinas De Retardo
La generación de señales digitales mediante el uso de puertos y subrutinas de
retardo de tiempo es muy simple. Suponga el estudiante que se está interesado de
producir una señal digital periódica, con frecuencia de 1000 Hertz y ciclo de trabajo
de 50%, cuando un interruptor se cierra y se necesita inhibir la señal cuando el
interruptor se abre. El diagrama de flujo correspondiente y el programa se muestran
a continuación:

Inicio

Configurar patillas
RC2=Entrada y RB0=Salida

+5V +5V

¿RC2=0?

VDD
10K

RB0=ALTO

RC2 RB0
PIC

OFF Subrutina de retardo de


0.5ms
ON
VSS

RB0=BAJO

Subrutina de retardo de
0.5ms

; Programa para generar una señal digital cuadrada con frecuencia de 1KHz a través de la patilla
; RB0, cuando la patilla RC2 presenta nivel de voltaje bajo. La señal deja de producirse cuando el
; potencial en RC2 es alto.

LIST p=18F4550
INCLUDE <P18f4550.INC>
; Variables del programa
;
CBLOCK
CONTADOR1
ENDC
;
ORG H’0000’
GOTO MI_PROGRAMA
;
ORG H’0005’
MI_PROGRAMA: BCF TRISB, 0 ; RB0=salida
BSF TRISC, 2 ; RC2=entrada
;
NO_SEÑAL: BTFSC PORTC,2 ; RC2=0?
GOTO NO_SEÑAL
SEÑAL: BSF PORTB, 0 ; RB0=ALTO
CALL RETARDOP5MS ; Retardo 0.5 ms
BCF PORTB, 0 ; RB0=BAJO
9
CALL RETARDOP5MS ; Retardo 0.5 ms
GOTO NO_SEÑAL
;
RETARDOP5MS: MOVLW H’A6’ ; Subrutina de retardo
MOVWF CONTADOR1 ; de 0.5 milisegundos
ESPERAP5MS: NOP
DECFSZ CONTADOR1, F
BRA ESPERAP5MS
RETURN
;
END

Es necesario advertir al estudiante que cuando compruebe la operación del programa


anterior en físico, seguramente observará que al cerrar el interruptor, se presentara
una señal cuadrada, a través de la patilla RB0, de aproximadamente 980 Hertz de
frecuencia, en lugar de la frecuencia proyectada de 1000 Hertz.

Existen dos razones de esa pequeña diferencia: la primera razón es el error generado
al redondear el valor XX de 165.666 a 166, esto incrementa el periodo de la señal en
aproximadamente 6s en cada ciclo; la segunda razón es el tiempo de retardo
adicional que han tomado todas las instrucciones del programa principal que no
pertenecen a la subrutina de retardo. Si el estudiante contabiliza el retardo adicional
provocado por esas instrucciones encontrará que consumen un total de 10s por ciclo.
Por lo tanto, el periodo de la señal generada será de aproximadamente 1016s, lo
que produce una frecuencia de 984 Hertz.

Para ajustar la frecuencia al valor de 1000 Hertz, según la especificación inicial del
proyecto, se suele modificar el valor XX que se carga en el registro contador. Si se
sustraen una o dos unidades se pueden obtener resultados satisfactorios.

5.5 Temporización De Eventos

Otra aplicación natural de las subrutinas de retardo es la generación de señales de


salida sincronizadas, para el control de eventos diversos, tales como el encendido y
apagado de las luces de un sistema de semáforos, o como ocurre con la activación de
un conjunto de electroválvulas, en un proceso automatizado de producción de piezas.
A diferencia del apartado anterior, esta vez, se requiere del manejo de varias señales
de salida y el uso de varias subrutinas de retardo, con tiempos diferentes. Para ilustrar
sobre este tipo de aplicaciones considere el problema de producir la secuencia de
señales de control que se presentan en el diagrama de tiempos de la figura siguiente.

10

También podría gustarte