Академический Документы
Профессиональный Документы
Культура Документы
Grupo: A
Objetivo
Disear un programa en lenguaje C, para el microcontrolador AT89LP6440, que permita usar la interrupcin de propsito general del puerto uno, utilizando nicamente dos pines de ste para encender y apagar un LED conectado al pin cero del mismo puerto. Una de las interrupciones deber estar configurada para responder a flancos ascendentes (encender LED) y la otra para responder a flancos descendentes (apagar LED).
Introduccin
En este pequeo ejercicio se configur la interrupcin de propsito general del microcontrolador AT89LP6440 para utilizar dos de los ocho pines del puerto uno como entradas de una interrupcin. Primeramente se configur el comportamiento de cada pin modificando los registros GPMOD, GPLS y GPIEN para determinar deteccin (nivel o filo), comportamiento (alto o bajo) y habilitacin, respectivamente. Seguido de esto se estableci la funcin de servicio a la interrupcin en donde se definieron las instrucciones requeridas para verificar el registro GPIF y as determinar a travs de que pin del puerto uno haba sido producida la interrupcin, realizando as las operaciones de acuerdo al pin excitado. Finalmente el programa en C fue pasado a la ROM del microcontrolador y se comprob su funcionamiento de forma fsica.
Habilitada?
Interrupcin?
Figura 2. Registro GPMOD para configuracin del modo de operacin de un pin en el puerto uno. Se define si ser activada la interrupcin por nivel o filo.
Figura 3. Registro GPLS para configuracin el nivel de deteccin en un pin del registro uno. Se puede definir si se activar por nivel alto o bajo, o por filo ascendente o descendente.
Figura 4. Registro GPIEN para definir qu pines del puerto uno estarn habilitados para detectar una interrupcin.
Figura 5. Registro GPIF de banderas del puerto uno, utilizado para determinar en qu pin se ha dado una interrupcin.
Para configurar la interrupcin de propsito general basta con modificar los registros presentados anteriormente para definir el comportamiento de cada pin del puerto uno segn sea requerido. Por ejemplo, para establecer que el pin 0 estar habilitado y se activar por flanco de subida, y que el pin 7 estar habilitado y se activara por nivel alto, estando los dems pines deshabilitados, se puede usar el siguiente cdigo. GPMOD |= 0x01, para configurar que el pin 0 se activar por flanco. GPMOD &= 0x7F, para configurar que el pin 7 se activar por nivel. GPLS |= 0x81, configura que el pin 0 se activar por flanco ascendente y el pin 7 por nivel alto. GPIEN |= 0x81, habilitando pin 0 y pin 7.
Lo consecuente ser verificar el registro GPIF, al inicio de la funcin de servicio a esta interrupcin, para determinar en qu pin se dio sta. Es importante recalcar y recordar que tambin debe ser habilitada la GPI para que pueda funcionar como tal mediante el registro IE (habilitacin de interrupcin global) e IE2 (habilitacin de GPI). 4
Cdigo implementado
/*************************************************************************************** Nombre Programa: Ejercicio - Interrupciones GPI Materia: Sistemas con Microprocesador Fecha: 10 de febrero del 2014 Nombre: Victor Manuel Valenzuela De La Cruz Escuela: Universidad Autnoma de Ciudad Jurez Carrera: Ing. Sistemas Digitales y Comunicaciones Descripcin: Este programa prende y apaga un LED a travs de interrupciones GPI Versin: 1.0 Funcional: Si ***************************************************************************************/ //Header Files #include <at89lp6440.h> void inicializacion(void) { //P1.0 como salida push pull //P1.1 ... P1.7 como entradas high impedance P1M0 = 0x3E; P1M1 = 0x01; //Configurando prioridad de interrupciones GPI de nivel 1 IP2 |= 0x01; IPH2 |= 0x00; //Configurando interrupciones GPI puertos P1.1 y P1.2 //Flanco de bajada P1.1 (poner 0 en posicin de GPLS para flanco de bajada) GPLS &= 0xFB; //Flanco de subida P1.2 (poner 1 en posicin de GPLS para flanco de subida) GPLS |= 0x04; //Configurando interrupciones por filo (poner 1 en posicin deseada de GPMOD para activacin por filo) GPMOD |= 0x06; //Habilitando interrupciones GPI (poner 1 en posicin deseada de GPIEN para habilitar) GPIEN |= 0x06; //Habilitando interrupciones GPI e interrupcin global IE2 |= 0x01; EA = 1; //Condiciones iniciales P1_0 = 0; //Limpiando banderas que indican habilitacin de las GPI GPIF = 0x00; } void interrupt_gpi(void) interrupt 7 { //verificando GPIF que corresponde al registro que puede utilizarse para determinar //en que bit del puerto 1 se ha dado la interrupcin switch(GPIF) { case 0x02: //interrupcin en bit 1 (P1.1) P1_0 = 1; //prendiendo LED en P1.0 break;
Sistema Implementado
Conclusiones
En este pequeo ejercicio se comprendi el uso de otra interrupcin del microcontrolador AT89LP6440. La interrupcin de propsito general se compone de ocho bits o pines que pueden ser configurados individualmente para detectar diferentes comportamientos de la seal y activar la funcin de atencin a la interrupcin en caso de ser necesario. Esta interrupcin se maneja mediante cuatro registros, GPMOD se encarga de definir que el pin x se activar por nivel o filo, GPLS define si el nivel o filo, en el pin x, ser detectado como alto o bajo, y GPIEN es utilizado para habilitar el pin x como interrupcin. El registro restante, GPIF es utilizado para determinar en qu pin se ha dado la interrupcin. Es importante mencionar que esta interrupcin tiene un mismo vector asignado, por lo que cualquier interrupcin en cualquier pin, llamar a la misma funcin de atencin, por lo que es importante verificar que pin fue el activado mediante el registro GPIF y as realizar las acciones asociadas a ese pin.
Referencias
[1] Atmel, AT89LP6440, Atmel, [En lnea]. Available: http://www.atmel.com/devices/at89lp6440.aspx. [ltimo acceso: 12 Febrero 2014].