0% encontró este documento útil (0 votos)
38 vistas14 páginas

CarchiMateo Pract02 MicroCon M25

La práctica se centra en el manejo de temporizadores e interrupciones en el microcontrolador PIC18F4550, enseñando a configurar el módulo temporizador y a escribir rutinas de atención a interrupciones. Se utiliza el Temporizador 0 para generar retardos y controlar una secuencia de luces, además de implementar un apagado automático tras un tiempo determinado. Se describen los materiales, el marco teórico y el diseño del sistema, incluyendo la configuración del hardware y el funcionamiento del software.

Cargado por

alexm.carchi
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
38 vistas14 páginas

CarchiMateo Pract02 MicroCon M25

La práctica se centra en el manejo de temporizadores e interrupciones en el microcontrolador PIC18F4550, enseñando a configurar el módulo temporizador y a escribir rutinas de atención a interrupciones. Se utiliza el Temporizador 0 para generar retardos y controlar una secuencia de luces, además de implementar un apagado automático tras un tiempo determinado. Se describen los materiales, el marco teórico y el diseño del sistema, incluyendo la configuración del hardware y el funcionamiento del software.

Cargado por

alexm.carchi
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Practica 2: PIC18F4550- Manejo de

Temporizadores e Interrupciones ⋆

Alex Mateo Carchi Carchi

Universidad de Cuenca, ECU


alexm.carchi@ucuenca.edu.ec
https://www.ucuenca.edu.ec

1 Practica 2: PIC18F4550- Manejo de Temporizadores e


Interrupciones

2 Objetivos

Mediante la presente práctica, el estudiante aprenderá a:


1. Configurar el modulo temporizador TIMER de un microcontrolador PIC18F4550.
2. Reconocer la funcion de la funcion de PRE-SCALER.
3. Reconocer los modulos temporizadores como una fuente de interrupcion del
microcontrolador.
4. Escribir una subrutina de atencion a la interrupcion generada por un timer.

3 Materiales y Equipos
1. Multímetro digital
2. Project board
3. Pickit3
4. Cables de conexión multipar
5. Microcontrolador PIC18F4550
6. Resitencias
7. Crisital de oscilacion de 20MHz
8. Capacitores
9. Pulsantes
10. Leds
11. hoja de datos del microcontrolador PIC18F4550.


Universidad de Cuenca
2 Alex Mateo Carchi Carchi

4 Marco Teórico
4.1 Microcontrolador PIC18F4550
El PIC18F4550 es un microcontrolador de la familia PIC de Microchip Tech-
nology, diseñado para aplicaciones embebidas que requieren conectividad USB.
Cuenta con una arquitectura de 8 bits, múltiples puertos de E/S digitales, con-
vertidores analógico-digitales, y módulos periféricos como temporizadores, com-
paradores, y módulos PWM. Para esta práctica, se emplean específicamente los
módulos temporizadores y el sistema de interrupciones.

4.2 Temporizadores en PIC18F4550


El PIC18F4550 posee múltiples módulos temporizadores: TMR0, TMR1, TMR2
y TMR3. En esta práctica se utiliza el Temporizador 0 (TMR0), el cual puede
operar en modo de 8 o 16 bits. Está diseñado para generar retardos temporales
precisos y puede funcionar como temporizador (basado en el reloj interno) o
como contador (basado en señales externas).

– TMR0L y TMR0H: Son los registros de bajo y alto byte del temporizador.
– T0CON: Registro de control del TMR0 que configura el modo de operación,
activación del preescalador, modo de conteo (8/16 bits), y habilitación del
temporizador.

Preescalador (Prescaler) El preescalador es un divisor de frecuencia que per-


mite disminuir la frecuencia de entrada al temporizador, extendiendo así el inter-
valo de tiempo que puede medirse. Se selecciona mediante los bits T0PS2:T0PS0
en el registro T0CON y permite dividir la frecuencia del reloj por factores de 2
hasta 256. El uso adecuado del preescalador permite lograr retardos más largos
sin necesidad de incrementar el conteo del temporizador.

4.3 Interrupciones en Microcontroladores


Una interrupción es un evento que interrumpe la ejecución normal del programa
para atender una tarea urgente mediante una rutina especial llamada rutina de
atención a interrupciones o ISR (Interrupt Service Routine). Una vez atendido
el evento, la ejecución del programa continúa desde donde se interrumpió.

Módulo de Interrupciones del PIC18F4550 El PIC18F4550 dispone de un


sistema de interrupciones jerárquico con vectores de interrupción de alta y baja
prioridad. En el contexto del TMR0, la interrupción ocurre cuando el tempo-
rizador se desborda (pasa de su valor máximo a cero). Para ello, es necesario
configurar:

– El bit TMR0IE (Timer0 Interrupt Enable) en el registro INTCON para habilitar


la interrupción.
Practica 2: PIC18F4550- Manejo de Temporizadores e Interrupciones 3

– El bit GIE (Global Interrupt Enable) para permitir todas las interrupciones
globales.
– El bit TMR0IF (Timer0 Interrupt Flag) indica que ha ocurrido el desbor-
damiento y debe ser limpiado manualmente dentro de la ISR.

4.4 Rutinas de Atención a la Interrupción (ISR)


Las rutinas de atención a interrupciones deben ser lo más cortas y eficientes
posible. En el caso de esta práctica, la ISR asociada al TMR0 se utiliza para
controlar el retardo de 25 ms en la secuencia de luces del puerto B. Dentro de
la ISR, se realiza el reinicio del temporizador (carga de TMR0) y se actualiza el
estado del sistema, como el avance de la secuencia de LEDs.

5 Diseño del Sistema Microcontrolado


5.1 Aplicación de Temporizadores e Interrupciones

Para la correcta solventación de los objetivos se usó un conjunto de tempo-


rizadores e interrupciones, mismos que permiten la ejecución de múltiples tareas
de forma eficiente en sistemas embebidos. En esta práctica, se utilizan para:

– Generar una señal de parpadeo en el pin RD0 mediante retardo por software
(en la primera parte).
– Controlar la temporización de una secuencia de luces con retardo de 25 ms
usando el TMR0 e interrupciones (en la segunda y tercera parte).
– Implementar una lógica adicional de apagado automático después de 45 se-
gundos usando conteo acumulativo basado en el número de interrupciones
(en la tercera parte).
4 Alex Mateo Carchi Carchi

5.2 Plataforma de Hardware:

Fig. 1: Hardware implementado

5.3 Funcionamiento del Timer0 e Interrupciones


Activación y propósito del Timer0: El Timer0 del microcontrolador PIC18F4550
se configura para operar en modo temporizador de 16 bits, con un preescalador
de 1:128. Su función es generar interrupciones periódicas que permiten ejecutar
tareas paralelas, como la actualización de una secuencia de luces.
Inicio del conteo: El temporizador se activa mediante la instrucción:
1 BSF T0CON , TMR0ON
Esto ocurre cuando el botón RC0 es presionado en el bucle principal. En ese
momento, el Timer0 empieza a contar desde el valor precargado 0xF6DB (63195)
hasta el máximo valor posible, 0xFFFF (65535).
Cálculo del tiempo de interrupción:

T = (65536 − 63195) × 128 × 83.3 ns ≈ 25 ms

– 65536: valor máximo en 16 bits.


– 63195: valor cargado en TMR0H:TMR0L.
– 128: valor del prescaler.
4
– 83.3 ns: periodo de instrucción, dado por Tosc = con Fosc = 48 MHz.
Fosc
Practica 2: PIC18F4550- Manejo de Temporizadores e Interrupciones 5

Mecanismo de interrupción: Cuando el temporizador se desborda, se


activa la bandera T0IF, y si las interrupciones están habilitadas (GIE, PEIE,
T0IE), el flujo del programa se interrumpe y se salta a la dirección 0x08, donde
se encuentra la rutina de interrupción.
Dentro de la ISR (rutina de atención a la interrupción), se realiza lo siguiente:
1. Se limpia la bandera de interrupción con BCF INTCON, T0IF.
2. Se rota el contenido del registro LATB, avanzando la secuencia de luces.
3. Se guarda el nuevo estado de LATB en BitsPB.
4. Se incrementa un contador de 16 bits para medir 45 segundos (1800 inter-
rupciones de 25ms).
5. Se recarga el valor inicial en TMR0H:TMR0L para repetir el proceso.
Analogía del Timer0: El Timer0 se puede imaginar como un vaso que se
llena con gotas:
– Cada gota representa un ciclo de conteo del temporizador.
– El prescaler actúa como un gotero que limita la velocidad de entrada de
gotas.
– Cuando el vaso se llena (desborde), se genera una interrupción.
Tabla del prescaler para Timer0:
T0PS2:T0PS0 Prescaler
000 1:2
001 1:4
010 1:8
011 1:16
100 1:32
101 1:64
110 1:128
111 1:256
Medición precisa con breakpoint: Para verificar que la interrupción se
genera cada 25 ms, se puede colocar un breakpoint al inicio de la ISR. Debido
a que el temporizador solo se activa al presionar S2 (RC0), esta prueba debe
realizarse cuando dicho botón inicia el conteo.

5.4 Funcionamiento de Software:


Definición de Vectores
1 org 0 x00 ; Vector de Inicio / Reset
2 goto Inicio
3

4 org 0 x08 ; Vector de I n t e r r u p c i n


5 goto Interrupcion
Listing 1.1: Vectores de inicio e interrupción
Explicación: Se definen los vectores de interrupción y reset. Al encender el
microcontrolador, la ejecución comienza en la dirección 0x00. Si ocurre una in-
terrupción, el flujo se redirige a la dirección 0x08.
6 Alex Mateo Carchi Carchi

Declaración de Variables

1 Contador equ 0 x60


2 Contador1 equ 0 x61
3 ContadorX equ 0 x62
4 ParpadeosRD0 equ 0 x63
5 BitsPB equ 0 x64
6 Tiempo45s_L equ 0 x65
7 Tiempo45s_H equ 0 x66
Listing 1.2: Declaración de variables

Explicación: Se reservan direcciones de memoria para variables usadas en re-


tardos, conteo de parpadeos, estado del puerto B y el contador de 45 segundos.

Configuración Inicial del Sistema

1 Inicio :
2 BCF TRISD ,0 ; RD0 como salida
3 CLRF TRISB ; Puerto B como salida
4 BSF TRISC ,0 ; RC0 como entrada ( S2 )
5 BSF TRISC ,1 ; RC1 como entrada ( S3 )
6

7 BCF T0CON , TMR0ON ; Desactiva Timer0


8 BCF T0CON , T08BIT ; Timer en modo 16 bits
9 BCF T0CON , T0CS ; Usa reloj interno
10 BCF T0CON , PSA ; Habilita prescaler
11 BSF T0CON , 2
12 BSF T0CON , 1
13 BCF T0CON , 0 ; Prescaler = 1:128
Listing 1.3: Inicialización de puertos y temporizador

Explicación: Se configura RD0 y el puerto B como salidas. RC0 y RC1 son


entradas para botones. El Timer0 se configura en modo temporizador de 16 bits
con prescaler 1:128.

Inicialización de Variables e Interrupciones

1 BCF LATD ,0
2 CLRF LATB
3 movlw d ’40 ’
4 movwf Contador
5 movlw d ’92 ’
6 movwf Contador1
7 clrf BitsPB
8

9 BSF INTCON , GIE


10 BSF INTCON , PEIE
Practica 2: PIC18F4550- Manejo de Temporizadores e Interrupciones 7

11 BSF INTCON , T0IE


12

13 CLRF TMR0L
14 clrf Tiempo45s_L
15 clrf Tiempo45s_H
16 movlw 0 xF6
17 movwf TMR0H
18 movlw 0 xDB
19 movwf TMR0L
Listing 1.4: Inicialización de variables e interrupciones

Explicación: Se limpian los registros de salida. Se inicializan variables y reg-


istros del temporizador. Se habilitan las interrupciones globales, periféricas y del
Timer0.

Secuencia de Parpadeo Inicial

1 movlw d ’20 ’
2 movwf ParpadeosRD0
3

4 bucle1 :
5 BTG LATD ,0
6 movlw d ’50 ’
7 call Demora_Xms
8 decfsz ParpadeosRD0 ,1
9 goto bucle1
10 goto bucle2
Listing 1.5: Parpadeo inicial de 20 veces

Explicación: Se hace parpadear el LED en RD0 exactamente 20 veces, con un


retardo de 50 ms entre cada cambio de estado.

Bucle Principal de Ejecución

1 bucle2 :
2 BTG LATD ,0
3 movlw d ’500 ’
4 call Demora_Xms
5 BTFSS PORTC ,0
6 call secuencia_puertob
7 BTFSS PORTC ,1
8 call reset_secuencia
9 goto bucle2
Listing 1.6: Bucle principal del sistema

Explicación: El LED en RD0 sigue parpadeando con una demora de 500 ms. Si
se presiona S2, se inicia la secuencia de luces; si se presiona S3, esta se detiene.
8 Alex Mateo Carchi Carchi

Rutinas de Control de Secuencia

1 reset_secuencia :
2 CLRF LATB
3 CLRF BitsPB
4 BCF T0CON , TMR0ON
5 return
6

7 secuencia_puertob :
8 MOVF BitsPB , W
9 BNZ continuar_secuencia
10 movlw b ’11100000 ’
11 movwf LATB
12 movwf BitsPB
13 clrf Tiempo45s_L
14 clrf Tiempo45s_H
15 BSF T0CON , TMR0ON
16 return
17

18 continuar_secuencia :
19 movff BitsPB , LATB
20 BSF T0CON , TMR0ON
21 return
Listing 1.7: Control de secuencia de LEDs

Explicación: ‘secuencia_puertob‘ inicia la secuencia si no ha comenzado, y


‘continuar_secuencia‘ la retoma. ‘reset_secuencia‘ apaga las salidas y detiene el
temporizador.

Rutinas de Retardo

1 Demora_Xms :
2 movwf ContadorX
3 decf ContadorX ,1
4 DemoraXms_temp :
5 call demora_1ms
6 decfsz ContadorX
7 goto DemoraXms_temp
8 return
Listing 1.8: Demoras programables

Explicación: Esta subrutina implementa una demora de X milisegundos medi-


ante bucles anidados que simulan retardos.

Rutina de Interrupción
Practica 2: PIC18F4550- Manejo de Temporizadores e Interrupciones 9

1 Interrupcion :
2 BCF INTCON , T0IF
3 rrncf LATB , F
4 movff LATB , BitsPB
5

6 incf Tiempo45s_L , F
7 btfsc STATUS , Z
8 incf Tiempo45s_H , F
9

10 movlw 0 x07
11 subwf Tiempo45s_H , W
12 btfss STATUS , Z
13 goto no_reset
14

15 movlw 0 x08
16 subwf Tiempo45s_L , W
17 btfss STATUS , Z
18 goto no_reset
19

20 call reset_secuencia
21 clrf Tiempo45s_L
22 clrf Tiempo45s_H
23

24 no_reset :
25 movlw 0 xF6
26 movwf TMR0H
27 movlw 0 xDB
28 movwf TMR0L
29 retfie
Listing 1.9: Rutina de interrupción del Timer0

Explicación: Esta rutina se ejecuta cada 25 ms. Realiza una rotación del patrón
de LEDs en LATB, actualiza el contador de 45 s y reinicia la secuencia si ha
pasado ese tiempo.

6 Pruebas y verficaciones
6.1 Parte 1
La primera parte consiste en configurar un led en RD0 para que produzca 20
parpadeos cada 50ms y luego permanezca permanentemente parpadeando cada
500ms, el funcionamiento de esta parte de la practica es sencillo y para compro-
barlo empleando la herramienta watch con el contador de parpadeos.
10 Alex Mateo Carchi Carchi

Fig. 2: Visualizacion de la inicializacion de la varible que cuenta 20 parpadeos de


RD0

6.2 Parte 2
Adicional a la parte 1, en la parte 2 se pide la introducción de una secuencia en
la cual los bits deben recorrer a una distinta posición hacia la derecha, luego de
cada interrupcion, lo importante aqui es que la duracion entre cada cambio en el
encedidido de los leds de la secuencia debe tener una duracion de 25ms, tambien
se realizo la introduccion de la lectura de 2 pulsantes, el uno para pausar la
secuencia y el otro para iniciarla, ya sea desde cero o desde la posicion en la que
hayan estado los bits de la secuencia.

Fig. 3: Verificacion de la duracion de las interrupaciones


Practica 2: PIC18F4550- Manejo de Temporizadores e Interrupciones 11

Fig. 4: Visualizacion de la secuencia de 3 de bits

6.3 Parte 3
Adicional a la parte 2, en esta parte de la práctica, se solicita que la secuencia
se detenga sola luego de 45 segundos, si no se detiene antes con el pulsante de
reinicio.

Fig. 5: Leds apagados tanto en un instante inicial como luego de apagarse tran-
scurridos los 45 segundos.
12 Alex Mateo Carchi Carchi

7 Preguntas

1. ¿Cuáles son los registros y bits asociados al funcionamiento del


Timer que seleccionó para la práctica?
Para el Timer0 del PIC18F4550, los registros y bits utilizados son:
– T0CON: Registro de configuración del Timer0.
• TMR0ON (bit 7): Habilita/inhabilita el Timer0.
• T08BIT (bit 6): Selecciona el modo de 8 o 16 bits.
• T0CS (bit 5): Selecciona fuente de reloj (interna o externa).
• PSA (bit 3): Asigna el preescalador.
• T0PS2:T0PS0 (bits 2:0): Seleccionan el valor del preescalador.
– TMR0L y TMR0H: Registros de bajo y alto byte del Timer0.
– INTCON:
• TMR0IF (bit 2): Bandera de interrupción por desbordamiento.
• TMR0IE (bit 5): Habilita la interrupción del Timer0.
• GIE (bit 7): Habilita las interrupciones globales.
• PEIE (bit 6): Habilita interrupciones periféricas.
2. ¿Para qué sirve la opción de PRE-SCALER del módulo tempo-
rizador del microcontrolador?
El preescalador permite dividir la frecuencia del reloj que ingresa al tempo-
rizador, alargando así el tiempo de desbordamiento. Esto es útil para generar
retardos más largos sin necesidad de incrementar el valor de conteo. En la
práctica se usó un preescalador de 1:128.
3. ¿Qué es una interrupción?
Es un mecanismo que permite interrumpir el flujo normal del programa
cuando ocurre un evento externo o interno importante, para ejecutar una
rutina específica llamada ISR (Interrupt Service Routine). Luego, el pro-
grama retorna al punto donde fue interrumpido.
4. ¿Qué función desempeña el vector de interrupción?
El vector de interrupción es una dirección fija en memoria donde se guarda
la instrucción de salto hacia la rutina de atención a la interrupción. En el
PIC18F4550, el vector de interrupción principal se encuentra en la dirección
0x08.
5. ¿Para qué se activa el bit TMR0IF una vez que ha sucedido el
desborde del módulo temporizador TMR0?
El bit TMR0IF indica que el Timer0 se ha desbordado. Su activación permite
al microcontrolador reconocer que debe ejecutar la rutina de interrupción
asociada, si las interrupciones están habilitadas.
6. ¿Por qué es conveniente un módulo temporizador operando a 16
bits para conteos de tiempo relativamente grandes?
Un temporizador de 16 bits puede contar hasta 65536 ciclos, lo cual permite
generar retardos más largos o tener mayor resolución temporal sin requerir
múltiples ciclos de recarga o software adicional.
7. Explique cómo consiguió contar el tiempo de 45 segundos para la
parte 3 de la práctica.
Practica 2: PIC18F4550- Manejo de Temporizadores e Interrupciones 13

Se utilizó un contador de 16 bits representado por dos variables: Tiempo45s_L


y Tiempo45s_H. Cada interrupción del Timer0 ocurre cada 25 ms. Por tanto,
al contar 1800 interrupciones (1800 × 25 ms = 45000 ms), se alcanza un re-
tardo de 45 segundos. Esta comparación se realiza en la ISR:
– Se incrementa el contador en cada interrupción.
– Se compara con el valor 1800 (0x0708 en hexadecimal).
– Si se alcanza dicho valor, se reinicia la secuencia y el contador.

7.1 Conclusiones

– Se comprendió y aplicó el funcionamiento del temporizador Timer0 del mi-


crocontrolador PIC18F4550, configurado en modo temporizador de 16 bits
con preescalador de 1:128. Esta configuración permitió generar interrup-
ciones periódicas precisas, fundamentales para el control temporal del sis-
tema.
– A través del análisis del periodo de instrucción (Tosc = 48 MHz
1
= 20.83 ns) y
su multiplicación por el número de ciclos desde el valor precargado (65536 −
63195 = 2341), se calculó correctamente un retardo aproximado de 25ms
entre interrupciones. Esto se logró con la siguiente expresión:

T = (65536 − 63195) × 128 × 83.3 ns ≈ 25 ms

– Se implementó una rutina de interrupción eficiente, que se ejecuta cada 25ms


y permite rotar el contenido del registro LATB, generando una secuencia de
desplazamiento de bits en los LEDs conectados al puerto B. Esto simula un
efecto de movimiento visual que cambia a intervalos temporales definidos,
controlado sin uso de retardos por software.
– Se desarrolló una lógica precisa para contar 45 segundos mediante el conteo
acumulativo de interrupciones. Al ejecutarse la ISR cada 25ms, se emplearon
dos registros de 8 bits (Tiempo45s_L y Tiempo45s_H) para contar 1800 inter-
rupciones (1800 × 25 ms = 45000 ms = 45 s). Una vez alcanzado este umbral,
la secuencia de LEDs se detiene automáticamente.
– Se implementó también una secuencia de encendido de LEDs de 3 bits
(11100000) que se desplaza cíclicamente hacia la derecha, y se conserva
entre interrupciones utilizando una variable auxiliar (BitsPB). Esta secuen-
cia puede ser iniciada mediante un botón conectado a RC0 y detenida por
otro conectado a RC1, demostrando una adecuada integración entre entradas
digitales y el sistema de temporización.
– Además, se programó un parpadeo inicial del LED en RD0, con una rutina
de retardo por software para simular 20 parpadeos de 50ms seguidos de
parpadeos continuos de 500ms. Esta primera etapa permitió familiarizarse
con la estructura de bucles y llamadas a subrutinas de demora en ensam-
blador.
14 Alex Mateo Carchi Carchi

References
1. Ibrahim, D. (2012). Microcontroladores PIC: Diseño práctico de aplicaciones en C.
Marcombo. ISBN: 9788426720014.
2. Microchip Technology Inc. (2007). Hoja de datos del PIC18F4550. Recuperado de
https://ww1.microchip.com/downloads/en/devicedoc/39632b.pdf.
3. Mendoza, J. (2009). Microcontroladores PIC: Programación y prácticas con
MPLAB. Alfaomega, 2ª edición. ISBN: 9789702219735.

También podría gustarte