Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DEL PIC18F4550
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
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).
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):
Subrutinas
De Periodos Medios (10TINSTRUCCION < TR <255T INSTRUCCION )
Retardo
5
Subrutinas De Retardo De Periodo Corto
Subrutina RETARDO
Inicio
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.
Por lo tanto, una fórmula que sirve para calcular el tiempo de retardo total es la
siguiente:
TR 6 106 3 106 ( 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
0.5 10 3 6 10 6
XX 1 165.666 16610 A616
3 10 6
7
Subrutinas De retardo De Periodo Largo
Una subrutina para lograr un retardo de tiempo de 30 segundos (medio minuto), sería:
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
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
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 6s 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 10s por ciclo.
Por lo tanto, el periodo de la señal generada será de aproximadamente 1016s, 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.
10