Está en la página 1de 25

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.

También podría gustarte