MARZO – JULIO 2010
UNIVERSIDAD POLITÉCNICA
SALESIANA
SISTEMAS MICROPROCESADOS 1
INFORME PRÁCTICA #07
TEMA: Interrupciones.
DAVID ESPIN
ANDRÉS MOGRO
QUITO - ECUADOR
PRÁCTICA 07
OBJETIVO: Elaborar programas para comprender el uso de las
interrupciones.
1. Uso de la interrupción externa cero.
Entradas:
Datos ingresados por el puerto B.
Procesos:
• Configuro el LCD en el puerto C.
• Configuro el puerto D como salida hacia leds.
• Habilito interrupciones e interrupción externa.
• Leo el puerto B y envío datos hacia el lcd y hacia los leds.
Salidas:
La salida del puerto C hacia el LCD y el puerto D hacia los leds.
CÓDIGO.
program INT0
dim L as byte
dim A,B as byte
dim valor as string[6]
sub procedure init
trisc=$0
trisd=$0
trisb=$FF 'puertob como entradas
option_reg=%10000000 'habilita todas las interrupciones por flanco
descendente
'prescaler no habilitado
intcon=%10010000 'habilita interrupciones e interrupcion externa RB0
L=0
A=0
B=0
Lcd_config(portc,7,6,5,4, portc,0,1,2) 'configuro LCD
lcd_cmd(lcd_cursor_off)
end sub
sub procedure interrupt
portd=inc(B)
intcon.intF=0
A=A+1
end sub
main:
init
LOOP:
byteTOSTR(A,valor)
lcd_cmd(lcd_clear)
lcd_out(1,1,valor)
delay_ms(500)
goto LOOP
end.
DIAGRAMA DE FLUJO
INICIO
Configuro el puerto C y D
como salida y el puerto B
como entrada
Habilito interrupciones,
Defino variables
Inicio el lazo
Transformo datos para
mostrar en el lcd y leds
y envío
Muestro en el LCD y en
los leds los datos.
ESQUEMÁTICO.
FOTOS.
2. Interrupción temporizadores.
Entradas:
Las variables que se guardan en el microcontrolador.
Procesos:
• Configuro el LCD en el puerto C y el puerto B.0 como salida.
• Habilito interrupciones e interrupciones del timer 0.
• Realizo el lazo y envío los datos al lcd y al puerto B.0.
Salidas:
La salida del puerto C hacia el LCD y el puerto B.0 hacia elosciloscopio.
CÓDIGO.
program intTimer
dim L as byte
Dim A,B as byte
dim valor as string[6]
sub procedure init
trisc=$0
trisd=$0
trisb=$0
option_reg=%10000011
intcon=%10100000
L=0
TMR0=92
A=0
B=0
Lcd_config(portc,7,6,5,4, portc,0,1,2)
lcd_cmd(lcd_cursor_off)
end sub
sub procedure interrupt
intcon.t0if=0
if L=0 then
tmr0=92
portb.0=0
L=1
else
portb.0=1
L=0
tmr0=92
end if
end sub
main:
init
LOOP:
Lcd_cmd(lcd_clear)
lcd_out(1,1,"UPS QUITO")
delay_ms(500)
goto LOOP
end.
DIAGRAMA DE FLUJO
INICIO
Configuro el puerto B y
C como salida
Habilito interrupciones
del timer 0, Defino
variables
Inicio el lazo con
interrupciones
Transformo datos para
mostrar en el lcd y en
el puerto B
Muestro en el LCD y en
el puerto B los datos
ESQUEMÁTICO.
FOTOS.
3. Mediante el uso de la interrupción del timer 1 realizar un
generador de onda cuadrada de periodo 1ms.
Procesos:
• Configurar portB como salida.
• Configurar e inicializar TIMER1
• Contador de TIMER 1
Salidas:
La salida del portb.0 o pin 33 en el cual se debe observar la forma de onda
de periodo de 1ms.
CÓDIGO.
program Timer1
dim cnt as word
dim B as byte
sub procedure interrupt
Inc(cnt)
PIR1.TMR1IF = 0 ' clear TMR1IF
TMR1H = $FF
TMR1L = $00
end sub
main:
PORTB = $00 ' initialize PORTB
TRISB = 0 ' PORTB is output
T1CON = 1 ' timer1 settings
PIR1.TMR1IF = 0 ' clear TMR1IF
TMR1H = $80 ' initialize Timer1 register
TMR1L = $00
PIE1.TMR1IE = 1 ' enable Timer1 interrupt
cnt = 0 ' initialize cnt
INTCON = $C0 ' set GIE, PEIE
while TRUE
if (cnt = 3) then
' if cnt is 76
PORTB = inc(B) ' then toggle PORTB leds and
cnt = 0 ' reset cnt
end if
wend
end.
DIAGRAMA DE FLUJOS
INICIO
Interrupción Configurar
portB salida
Inicio del contador
Configuro TMR1
Inicializar Registro Tmr1H
Habilitar interrupcion
Inicializar Registro Tmr1L
Configurar INTCON
Contador NO
=3
SI
Cambio el valor de portB
Contador = 0
ESQUEMÁTICO.
FOTOS.
4. Conteo del timer 0 en un periodo de tiempo.
Entradas:
• Habilito puerto B como entrada para conectar la señal del
generador de frecuencias.
Procesos:
• Habilito Puerto C y Puerto D como salida
• Configuro TMR0
• Habilito todas las interrupciones por flanco descendente
• Habilito interrupciones e interrupción externa
• Configuro LCD
Salidas:
• La salida hacia el LCD en el cual se observara el numero de
pulsos en el valor de la frecuencia.
CÓDIGO.
program medidor
dim L as byte
dim A,B as byte
dim valor as string[6]
sub procedure init
trisc=$0
trisd=$0
trisb=$FF
option_reg=%10000011
intcon=%10010000
L=0
A=0
B=0
lcd_config(portc,7,6,5,4,portc,0,1,2)
lcd_cmd(lcd_cursor_off)
end sub
sub procedure interrupt
portd=inc(B)
intcon.intF=0
if L=0 then
tmr0=0
L=1
else
L=0
A=tmr0
end if
end sub
main:
init
LOOP:
byteTOSTR(A,valor)
lcd_cmd(lcd_clear)
lcd_out(1,1,valor)
delay_ms(500)
goto LOOP
end.
DIAGRAMA DE FLUJOS
INICIO
Configuro el puerto C
como salida y puerto B
como entrada
Habilito todas las
interrupciones por flanco
descendiente
Habilito todas las
interrupciones
Configuro el LCD
Inicio sub procederé
interrupt
NO
Si L=0 L=1
SI
TMR0=0 a=TMR0
L=1
Muestro el valor en el
LCD
ESQUEMÁTICO.
FOTOS.
5. Que cambios debe realizar para observar la frecuencia en el LCD.
Entradas:
• Habilito puerto B como entrada para conectar la señal del
generador de frecuencias.
Procesos:
• Habilito Puerto C y Puerto D como salida
• Configuro TMR0
• Habilito todas las interrupciones por flanco descendente
• Habilito interrupciones e interrupción externa
• Configuro LCD
Salidas:
• La salida hacia el LCD en el cual se observara el valor de la
frecuencia la cual ingresamos por el portb.0.
CÓDIGO.
program interrupcion5
dim L as byte
dim a,b as byte
dim fre as word
dim valor as string[6]
sub procudere init
trisc=0
trisd=0
trisb=$FF
option_reg=%10000111
intcon=%10010000
L=0
a=0
b=0
lcd_config(portc,7,6,5,4,portc,0,1,2)
lcd_cmd(lcd_cursor_off)
end sub
sub procedure interrupt
portd=inc(b)
INTCON.INTF=0
if L=0 then
TMR0=0
L=1
else
L=0
a=TMR0
fre=(1000/a*19)
end if
end sub
main:
init
LOOP:
wordtostr(fre,valor)
lcd_cmd(lcd_clear)
lcd_out(1,1,valor)
delay_ms(500)
goto LOOP
end.
DIAGRAMA DE FLUJOS
INICIO
Configuro el puerto C
como salida y puerto B
como entrada
Habilito todas las
interrupciones por flanco
descendiente
Habilito todas las
interrupciones
Configuro el LCD
Inicio sub procederé
interrupt
NO
Si L=0 L=1
SI
TMR0=0 a=TMR0
L=1
freq=(1000/a*19)
Muestro el valor en el
LCD
ESQUEMÁTICO.
FOTOS.
CONCLUSIONES
Elaboramos programas en los cuales pudimos comprender el uso de
interrupciones.
En esta práctica el uso de los cristales fue de mucha importancia como en
el ejercicio de generar la onda cuadrada con el timer 1.
BIBLIOGRAFÍA
- Hojas de prácticas de Sistemas Microprocesados I proporcionados
por el Ing. Luis Oñate.
- Manual de ayuda de microbasic para PIC.
- ANGULO MARTÍNEZ IGNACIO; ROMERO YESA SUSANA; ANGULO
USATEGUI
JOSÉ MARÍA MICROCONTROLADORES PIC. DISEÑO PRACTICO DE
APLICACIONES. SEGUNDA PARTE: PIC16F87XX, PIC18FXXXX.