Sei sulla pagina 1di 13

UNIVERSIDAD POLITÉCNICA

“SALESIANA”

FACULTAD DE INGENIERÍAS

CARRERA DE INGENIERÍA
ELECTRÓNICA

SISTEMAS MICROPROCEADOS I
INFORME Nº 7

SANTIAGO MALDONADO
ARMANDO ALOMOTO
JIMMY ANDRADE

6º ELECTRÓNICA “1”
UNIVERSIDAD POLITÉCNICA SALESIANA

SISTEMAS MICROPROCESADOS I
INFORME Nº 1

Tema: Interrupciones

Objetivo

 Elaborar programas para comprender el uso de interrupciones

Desarrollo
Para la práctica se utilizo el PIC 16F877A

Figura 1. PIC 16F877A


PROCEDIMIENTO PRÁCTICO
 PROBLEMA Nº 1

Uso de la interrupción externa cero.

 ALGORITMO

• Definir la configuración
• Configurar las variables para el TMR0
• Habilito todas las interrupciones por flanco descendente
• Habilito interrupciones e interrupción externa
• Configurar el LCD
• End

 CÓDIGO

program contadorcuatro
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=%10000000
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
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 FLUJOS

INICIO

CONFIGURO LAS
VARIABLES

CONFIGURAR EL TMR0

OPTION_REG=%100000

INTERRUPCIÓN EXTERNA

CONFIGURACIÓN DEL LCD

END

 SIMULACIÓN
 RESULTADO

 PROBLEMA Nº 2

Interrupción temporizadores.

 ALGORITMO

• Definir la configuración
• Configurar las variables para el TMR0
• Habilito todas las interrupciones por flanco descendente
• Configurar el LCD
• End

 CÓDIGO

program ejerciciodos
Dim L as byte
Dim A,B as byte
Dim valor as string[6]
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
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 FLUJOS

INICIO

CONFIGURO LAS
VARIABLES

CONFIGURAR EL TMR0

OPTION_REG=%100000

CONFIGURACIÓN DEL LCD

END
 SIMULACIÓN

 RESULTADO
 PROBLEMA Nº 3

Mediante el uso de la interrupción del timer1 realizar un generador de


onda cuadrada de periodo de 1ms.

 ALGORITMO

• Definir la configuración
• Configurar las variables para el TMR1
• Habilito el prescalar de 2
• Configurar el LCD
• End

 CÁLCULOS PARA OBTENER 1ms EN LA FORMA DE ONDA

El cristal a utilizarse es de 8MHz

  
  2
  0.5 
 

Para obtener 1ms sólo utilizamos el tiempo discreto que es igual al


tiempo de subida en la onda cuadrada y es igual a 500µs. El valor
máximo del registro es igual a FFFF. El prescalar a utilizarse es igual a 2

     !" #á%#"  & " ' %(


500 µ  0.5  2( 65536 ' %(
500  1 65536 ' %(
500  65536 ' %
%  65536 ' 500
%  65036

El valor de x lo transformamos en hexadecimal para poner en el registro


del timer 1
%  -.0/
 CÓDIGO

program ejerciciotres
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=%10000000
intcon=%11000000
TMR1H = $FE ' initialize Timer1 register
TMR1L = $0C
pie1=1
t1con=$11
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
PIR1.TMR1IF = 0
TMR1H = $FE ' initialize Timer1 register
TMR1L = $0C
if L=0 then
portb.0=0
L=1
else
portb.0=1
L=0
PIR1.TMR1IF = 0 ' clear TMR1IF
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 FLUJOS

INICIO

CONFIGURO LAS
VARIABLES

CONFIGURAR EL TMR1

CONFIGURACIÓN DEL LCD

END
 SIMULACIÓN

 RESULTADO
 PROBLEMA Nº 4

Conteo del timer0 en un periodo de tiempo.

 ALGORITMO

• Definir la configuración
• Configurar las variables para el TMR0
• Habilito todas las interrupciones por flanco descendente
• Habilito interrupciones e interrupción externa
• Configurar el LCD
• End

 CÓDIGO
program ejerciciocuatro
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 LAS
VARIABLES

CONFIGURAR EL TMR0

OPTION_REG=%100011

CONFIGURACIÓN DEL LCD

END

 SIMULACIÓN
 RESULTADO

 CONCLUSIONES

1. Para que se pueda producir una interrupción en el timer0 hay que


habilitar las interrupciones globalmente y la interrupción en concreto que
queremos utilizar con el registro INTCON.
2. Cuando se produce una interrupción el pic deja automáticamente lo que
esté haciendo, va directo a la dirección que se le asigna en el programa
y ejecuta lo que encuentre a partir de allí hasta encontrarse con otra
instrucción.
3. Mientras se está ejecutando una interrupción no se puede producir otra
interrupción, el pic no lo permite.

 BIBLIOGRAFÍA

• http://www.disam.upm.es/~cybertech/Nacional/Documentos/Comp
onentes/PIC16F877a.pdf (17/12/2010)
• http://ww1.microchip.com/downloads/en/devicedoc/30292c.pdf
(17/12/2010)
• http://members.fortunecity.es/electronico/tutoriales/tutopic16f84/p
8.html (17/12/2010)
• Manual de ayuda de microbasic para PIC. (17/12/2010)