Logo Studenta

Practica 4 Laboratorio de Microcontroladores

¡Estudia con miles de materiales!

Vista previa del material en texto

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO 
FACULTAD DE ESTUDIOS SUPERIORES CUAUTITLÁN
LABORATORIO DE MICROCONTROLADORES
PRÁCTICA #4
“INTERRUPCIONES”
PROFESORA:
ADDY MARTINEZ DUARTE
ALUMNO:
JORGE ANTONIO JIMENEZ BERNAL
CARRERA:
I.T.S.E
GRUPO:
1809A
SEMESTRE:
2018-I
FECHA DE ENTREGA:
04-10-2017
OBJETIVOS
· Comprender el uso de interrupciones como señales de alta prioridad durante la ejecución de programas.
· Hacer uso del puerto RB0/INT para detener un proceso y ejecutar una subrutina por medio de la interrupción.
· Hacer uso del módulo del WDT como una fuente de interrupción en el modo sleep.
INTRODUCCIÓN
	La interrupción Externa RB0/INT.
Esta fuente de interrupción es sumamente importante para atender acontecimientos externos en tiempo real. Cuando ocurre alguno de ellos activa el pin RB0/INT y se hace una petición de interrupción, en forma automática, este método es más eficaz que la técnica de sondeo ya que el microcontrolador no perderá tiempo preguntando a la línea de entrada para leer su estado, sino que únicamente atenderá al periférico cuando este se lo pida mediante la solicitud de interrupción. 
En el caso de la interrupción externa de los PIC18FXXX se tiene la siguiente directiva
#INT_EXT-flanco en el pin RB0. Se activa la bandera INTF. La directiva #INT_GLOBAL indica que la función que va a continuación sustituye todas las acciones, que inserta el compilador al aceptarse una interrupción. Solo se ejecuta lo que vaya en dicha función.          
	Si se utilizan las directivas de interrupción, el compilador genera el código necesario para saltar a la función que va tras esta directiva en el momento de la interrupción. Además, genera el código para salvar al principio y restituir al final el contexto, y también borrara la bandera que se activó con la interrupción. El programador, solo debe encargarse de habilitar las interrupciones. 
	Existe también otra función adicional destinada a configurar el flanco activo que genera la interrupción externa (En RB0).
· EXT_INT_EDGE(H_TO_L): Equivale a seleccionar el flanco de bajada para activar la bandera INTF.
· EXT_INT_EDGE(L_TO_H): Equivale a seleccionar el flanco de subida para activar la bandera INTF.
          
PROCEDIMIENTO EXPERIMENTAL
1. Se programó un contador de 8 bits de forma ascendente con una interrupción externa que encendía los 8 leds por 1 segundo y los apagaba por 1 segundo, durante 10 segundos, una vez terminara la interrupción volvía a contar desde el numero donde se quedó. 
2. Con ayuda del programador se programó el PIC16F887, donde se tomó fotografías del correcto funcionamiento del circuito.
Cuando se producía el flanco de bajada se activaba la interrupción por 10 segundos:
3. Se hizo una modificación del programa para que la interrupción se activara con flancos de subida en lugar de flancos de bajada:
Para ello se modificó la función ext_int_edge
CUESTIONARIO
1) El control de las interrupciones en lenguaje ensamblador se lleva acabo principalmente por el registro INTCON, describa la función de cada uno de sus bits.
Registro INTCON
Bit 7 – GIE: Bit de habilitar las interrupciones globales
	1 – Habilita todas las interrupciones no mascarables
	0 – Deshabilita todas las interrupciones
Bit 6 – PEIE: Bit de habilitar las interrupciones por periféricos
1 – Habilita todas las interrupciones no mascarables periféricas.
0 – Deshabilita todas las interrupciones periféricas.
	Bit 5 – T0IE: Bit de habilitar el Timer0 por sobrefujo
		1 – Habilita la interrupción Timer0
		0 – Deshabilita la interrupción Timer0
	Bit 4 – INTE: Bit de Habilitar la interrupción Externa INT
		1 – Habilita la interrupción externa INT
		0 – Deshabilita la interrupción externa INT
	Bit 3 – RBIE: Bit de habilitar la interrupción de cambio PORTB
		1 – Habilita la interrupción de cambio PORTB
		0 – Deshabilita la interrupción de cambio PORTB
	Bit 2 – T0IF: Bit de Bandera de interrupción por sobreflujo del Timer0
		1 – El registro Timer0 tiene sobreflujo
		0 – El registro Timer0 no tiene sobreflujo
	Bit 1 – INTF: Bit de bandera de Interrupción Externa INT
		1 – La interrupción externa INT ocurrió
		0 – La interrupción externa INT no ocurrió
	Bit 0 – RBIF: Bit de bandera de cambio PORTB
1 – Cuando al menos uno de los Pines de PORTB I/O ha cambiado de estado
		0 – Cuando ninguno de los pines de PORTB I/O ha cambiado de estado 
2) El microcontrolador PIC16F887 cuenta con numerosas fuentes de interrupción, describa detalladamente al menos 3 de ellas.
· Interrupción Externa RB0/INT: La fuente de interrupciones externa INT se utiliza para atender eventos externos en tiempo real, por ejemplo detectar el cruce por cero de una señal. La interrupción se puede producir si y sólo si el cambio en RB0/INT es durante el flanco ascendente o si y sólo si es durante el flanco descendente.
Su configuración es:
1. Escribir la rutina de interrupción y sobre ella su directiva a como se muestra a continuación: 
#INT_EXT 
Void int_ext_isr(){
 … Código de la interrupción … 
} 
2. Dentro de la rutina principal habilitar las interrupciones globales y Habilitar la interrupción INT a como se muestra a continuación:
Void main(){ 
… 
enable_interrups(GLOBAL); //Habilita las interrupciones Globales. 
enable_interrups(INT_EXT); //Habilita la interrupción INT_EXT. 
… 
}
· Interrupción por cambio PORTB: La fuente de interrupciones por cambio en PORTB se utiliza para atender eventos externos en tiempo real, tales como manejo de botones o interruptores. La interrupción se puede producir si el cambio en alguno de los Pines en RB es durante el flanco ascendente o si es durante el flanco descendente. Todos los pines del PORTB están configurados como pines de Interrupción-en-cambio. Para que se habilite la interrupción el valor presente es comparado con el valor almacenado en la última lectura para determinar cuál bit ha sido cambiado o cual no coincide. Esta interrupción puede despertar al dispositivo del modo sleep. Para salir de la rutina de interrupción el usuario debe leer el PORTB para eliminar la condición de error.
Su configuración es:
1. Escribir la rutina de interrupción y sobre ella su directiva a como se muestra a continuación:
#INT_RBx
Void RBx_isr(){
 …
 Código de la interrupción
 …
}
2. Dentro de la rutina principal habilitar las interrupciones globales y Habilitar la interrupción
TMR0 a como se muestra a continuación:
Void main(){
…
enable_interrups(GLOBAL); //Habilita las interrupciones Globales.
enable_interrups(INT_RBx); //Habilita la interrupción INT_RBx.
…
}
3) Investigue en la página del fabricante del microcontrolador usado en la práctica si existen modelos que posean más de una fuente de interrupción externa
No existen.
CONCLUSIONES
Esta práctica consistió en hacer un programa que llevara a cabo una interrupción, mediante un botón externo al microcontrolador, así que se configuro el puerto RB0/INT como entrada de la interrupción, y el puerto C se configuro como salida, siendo también un contador de 8 bits, que cuando se presionaba el botón se generaba la interrupción, que lo que hacía era encender todos los LEDs durante un segundo y mantenerlos apagados otro segundo, esto se repetía 5 veces y nuevamente se seguía el conteo. Finalmente esta práctica tuvo un buen funcionamiento y además fue de gran ayuda para comprender el uso de interrupciones y sobre la configuración que estas conllevan.
BIBLIOGRAFÍA 
· Hoja de datos del PIC16F887

Continuar navegando