Sunteți pe pagina 1din 18

UNIVERSIDAD NACIONAL AUTNOMA DE MXICO FACULTAD DE ESTUDIOS SUPERIOR ARAGN

INGENIERIA EN COMPUTACIN

ALUMNO: BAUTISTA LPEZ HCTOR HUMAC: 410008500

REPORTE DE PRCTICA No 7

MATERIA: LABORATORIO DE MICROPROCESADORES Y MICROCONTROLADORES

GRUPO: 8557

CICLO ESCOLAR 2013 - 2

PROFESOR: HERNNDEZ HERNNDEZ ALDO

CIUDAD NEZAHUALCYOTL A 4 DE MAYO DE 2013

INTRODUCCIN

Las interrupciones de los microcontroladores PIC de la gama media son interrupciones enmascarables y fijas, de modo que se pueden habilitar o inhabilitar globalmente y adems cada fuente de interrupcin se puede habilitar o inhabilitar individualmente. Para que una solicitud de interrupcin se haga efectiva, tanto la fuente de la interrupcin como el sistema en su conjunto deben estar habilitados. El sistema se habilita o inhabilita globalmente mediante el bit GIE del registro de funciones especiales INTCON. Los dispositivos con posibilidad de interrumpir se habilitan o inhabilita, individualmente mediante bits de los registros INTCON, PIE1 y PIE2. Al ser todas las interrupciones fijas, todas las solicitudes, si estn habilitadas, hacen que el microcontrolador pase a ejecutar la instruccin que est en la direccin 4 de la memoria de programa. Dentro de la rutina de atencin a la interrupcin, el programador debe averiguar la fuente de la interrupcin consultando los bits apropiados en los registros de funciones especiales (INTCON, PIR1 y PIR2) asociados al sistema de interrupcin del PIC. Cuando se produce una solicitud de interrupcin, si el sistema en su conjunto y la fuente en particular estn habilitados, el microcontrolador termina la instruccin en curso, guarda en la pila el valor del contador de programa y salta a la direccin 4 de la memoria de programa. El tiempo transcurrido entre el momento en que se produce la solicitud de interrupcin y el comienzo de la ejecucin de la primera instruccin de la subrutina de atencin a la interrupcin (la que est en la direccin 4), est entre 3 y 3,75 ciclos de mquina. Este es el denominado tiempo de latencia de la interrupcin, cuyo valor exacto depende del momento en que se produce la solicitud dentro de un ciclo de mquina y de la fuente de interrupcin (si es interna o externa). La figura 2 ilustra las operaciones que tienen lugar en el microcontrolador durante el tiempo de latencia. En primer lugar se completa la instruccin que estaba en curso cuando se produjo la solicitud de interrupcin; a continuacin se guarda en la pila el valor del contador del programa (PC), que apunta a la siguiente instruccin, y finalmente se pone el valor 0004 en el PC, con lo cual se salta la primera instruccin de la rutina que atiende la solicitud de interrupcin. Al atender una solicitud de interrupcin, el sistema de interrupciones queda inhabilitado (el bit GIE es puesto a 0).

Cada mdulo de entrada y salida puede generar al menos una solicitud de interrupcin. Entre las posibles fuentes de interrupcin estn las siguientes: 1. 2. 3. 4. 5. 6. 7. Interrupcin externa por el terminal INT del microcontrolador. Interrupcin por cambio en el nivel lgico de las entradas RB4:RB7 del Puerto B. Interrupcin por desbordamiento de los temporizadores Timer0, Timer1 y Timer2. Interrupcin por algn evento en el mdulo CCP. Interrupcin por el puerto serie USART. Interrupcin por el convertidor A/D. Interrupcin por la finalizacin de escritura en la EEPROM.

Todos los PIC de la clase media usan al menos un registro de funciones especiales para controlar las interrupciones, a continuacin se describe cada uno: INTCON.- En este registro se controla la interrupcin externa (proveniente del terminal INT), la interrupcin por cambio en los terminales RB4 a RB7 y la interrupcin por desbordamiento del Timer0. Hay tambin un bit (GIE) para habilitar globalmente el sistema de interrupcin. Las restantes fuentes de interrupcin se controlan con los registros PIE1, PIR1, PIE2 y PIR2. La figura 3 muestra los bits del registro de control de las interrupciones INTCON.

Para conocer el significado de cada bit del registro INTCON, ser necesario que te auxilies con la hoja de datos del microcontrolador. OPTION.-Controla del comportamiento del TMR0,tiene un bit relacionado con interrupciones externas, TMR0 almacena el valor del contador que funciona continuamente e incrementa el valor almacenado una unidad con cada impulso de reloj, cada vez que llega al valor FF regresa a 00, esto genera una interrupcin en dado caso que se le haya autorizado; este ciclo contina indefinidamente. El registro TMR0 puede leer o escribir directamente con cualquier instruccin para conocer su posicin actual o inicializarlo en un registro determinado, es importante recordar que la escritura en este registro se necesita un retardo de dos ciclos de instruccin para retomar el incremento. La figura 4 muestra los bits de registro de control de interrupciones OPTION.

Para conocer el significado de cada bit del registro OPTION, ser necesario que te auxilies con la hoja de datos del microcontrolador. RBI.-Consiste en el cambio de nivel en los pines RB7 a RB4, para producir este cambio se activa la bandera RBIF del registro INTCON; al igual que el registro GIE tienen que estar a 1. Este tipo de interrupciones estn pensadas para un teclado matricial de 16 teclas (4 x 4). Los pines RB7 a RB4 se configuran como entrada y se considera como interrupcin externa si algunos de los pines cambia de estado. TIMER 0, TIMER 1, TIMER 2.- Son generadas por TF0, TF1 y TF2 cuando se produce un desbordamiento en el registro del Timer correspondiente, la bandera que est activada es borrada por el hardware cuando es vectorizada la rutina de atencin a la interrupcin. CCP.- Tiene un registro de 16 bits que pueden ser utilizados para captura de tiempo al producirse un evento, como comparador del valor que cuenta un temporizador TMR1, registro de 10 bits del ciclo de trabajo de una seal PWM que es generada por el microcontrolador. El mdulo CCP se comporta idnticamente salvo el caso del funcionamiento por disparo, tras un reset se apaga. USART.- Es un sistema asncrono full-duplex1el cual puede comunicarse con dispositivos perifricos como terminales CRT y con computadoras, puede programarse como un sistema asncrono half-duplex2 como maestro o esclavo para comunicarse al MCU con circuitos integrados perifricos tales como ADC, DAC y EPROM serial. Tiene dos banderas que indican su estado y generan interrupciones UDRE indica registro de datos vacos y TXC indica Transmisin completada. Se encuentra en los registros RCREG y TXREG (recibir y transmitir datos respectivamente. Convertidor A/D.- Se encuentra en los registros INTCONT, PIE1 y PIR1 para interrupciones por mencionar algunos, en la figura 4 se muestran los bits de cada registro.

EEPROM.- Esta interrupcin se activa por la finalizacin de escritura en la EEPROM, dispone de 64 bytes donde se pueden almacenar datos que no se pierden al desconectar alguna alimentacin. La memoria EEPROM no se encuentra mapeada en la zona de memoria de datos donde se encuentran los registros SFR y GPR, para poder escribir y leerla durante el funcionamiento del microcontrolador se deben utilizar registros especiales como EEDATA, EEADR, EECON1 y EECON2.

OBJETIVOS
El objetivo de esta prctica es implementar un reloj con cronmetro digital. La tcnica de diseo se ver modificada, ya que haremos uso de interrupciones para generar diferentes eventos que controlen la operacin del sistema.

OBJETIVOS ESPECFICOS
Analizar y configurar el funcionamiento de los registros INTCON y OPTION del microcontrolador PIC 16F887.Aprender a programar las interrupciones en lenguaje C.

MATERIAL Y EQUIPO DE LABORATORIO


Equipo de cmputo con el siguiente software y caractersticas o MPLAB IDE de Microchip 8.6 o superior o Acceso a internet

Memoria USB Fuente de 5 volts Programa practica7.asm Protoboard PIC16f887 6 resistencias de 1K 2 push button Cristal de 32.678kHz Cristal de 4 MHz Teclado LCD alfanumrica de 2 lneas de 16 caracteres. Potencimetro* se utiliza en caso de ajustar el contraste de la pantalla, de preferencia conectar a tierra. 4 capacitores cermicos de 22 pF Cable calibre 22 o 24 de distinto color

DESARROLLO. CAPTURA Y COMPILACIN


1. Crea una carpeta llamada <practicas microcontroladores> en la unidad C y dentro de ella cree una carpeta llamada <practica 03>. 2. Crea un proyecto en MPLAB IDE llamado practica 03 dentro de la ruta <c:\practicas microcontroladores\practica 03> usando el asistente de proyectos (Project Wizard). 3. Crea y agrega al proyecto un nuevo archivo de cdigo fuente llamado <main.asm> y captura el cdigo fuente de la prctica 3 descrito en el anexo 1 y guarda tu archivo. 4. Compila el proyecto presionando F10. Si existen errores revisa el cdigo fuente y corrige los errores hasta que el programa sea compilado con xito. Para la presente prctica, use el cdigo de apoyo que se me facilito en la documentacin, y, realizando unas modificaciones menores, le aad la autenticacin mediante el uso de un switch para recibir solamente la contrasea. En base a la contrasea se conceda o no el acceso al sistema. A continuacin muestro el cdigo que use para la realizacin de la prctica:

CDIGO COMPILADO
/* UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO FACULTAD DE ESTUDIOS SUPERIORES ARAGON LABORATORIO DE MICROPROCESADORES Y MICROCONTROLADORES

BAUTISTA LOPEZ HECTOR HUEMAC 410008500 */ #include <16F887.h> #fuses XT,NOWDT,NOPROTECT,NOLVP,MCLR,NOCPD,NOBROWNOUT,NODEBUG,NOLVP,NOIESO,NOFCMEN #use delay(clock=4000000) #include "lcd.c" #include "kbd.c" #include "string.h" int8 hrs; int8 min; int8 seg; void isr_int(void) ; // Espera por dos digitos del teclado // Regresa un int8 con el valor convertido de 0 a 99 int8 kbd_get_data(void) { int8 key = 0; int8 valor = 0; while(key==0) key = kbd_getc(); // Esperar por un digito de decena while(kbd_getc() != 0){}; // Esperar por soltar la tecla valor = ((key-'0')*10); // Convertir de ASCII a binario key = 0; while(key==0) key = kbd_getc(); // Esperar por segundo digito de unidad while(kbd_getc() != 0){}; // Esperar por soltar la tecla valor += key-'0'; // Convertir de ASCII a binario return valor; } // Rutina de servicio a la interrupcion del T1 // Se ejecuta cada segundo // Incrementa la cuenta del reloj #INT_TIMER1 void isr_t1(void) { set_timer1(32678); seg++; if(seg >= 60) { seg = 0; min++; if(min >= 60) { min = 0; hrs++; if(hrs >= 24) hrs=0; } } } // Rutina de servicio a la interrupcion externa // Se ejecuta cuando se preciona el boton SET // Pide un la contrasea para accesar #INT_EXT

void hora(void) { int8 pass1; int8 pass2; int n=0; printf(lcd_putc,"\f Introducir\n codigo de acceso"); delay_ms(300); pass1 = kbd_get_data(); // Esperar por digitos del teclado pass2 = kbd_get_data(); if ((pass1 ==17 )&&(pass2==37)){ n=1; } if ((pass1 ==06 )&&(pass2==23)){ n=2; } if ((pass1 ==88 )&&(pass2==24)){ n=3; } if ((pass1 ==13 )&&(pass2==13)){ n=4; } if ((pass1 ==11 )&&(pass2==11)){ n=5; } if ((pass1 ==77 )&&(pass2==77)){ n=6; } switch (n) { case 1: printf(lcd_putc,"\f Acceso concedido"); delay_ms(500); printf(lcd_putc,"\f Bienvenido\n HUEMAK"); delay_ms(1000); break; case 2: printf(lcd_putc,"\f Acceso concedido"); delay_ms(500); printf(lcd_putc,"\f Bienvenido\n JAMES JORDAN"); delay_ms(1000); break; case 3: printf(lcd_putc,"\f Acceso concedido"); delay_ms(500); printf(lcd_putc,"\f Bienvenido\n KOBE"); delay_ms(1000); break; case 4: printf(lcd_putc,"\f Acceso concedido"); delay_ms(500); printf(lcd_putc,"\f Bienvenido\n TECO"); delay_ms(1000); break;

case 5: printf(lcd_putc,"\f Acceso concedido"); delay_ms(500); printf(lcd_putc,"\f Bienvenido\n ROSE"); delay_ms(1000); break; case 6: printf(lcd_putc,"\f Acceso concedido"); delay_ms(500); printf(lcd_putc,"\f Configurar Hora"); delay_ms(1000); isr_int(); break; default: printf(lcd_putc,"\f Acceso Denegado"); delay_ms(1000); break; } } void isr_int(void) { int8 buffer; //Ingresar hora printf(lcd_putc,"\f hora (00 - 23)\n"); do { buffer = kbd_get_data(); // Esperar por dos digitos del teclado } while(buffer >= 24); // Validar hora hrs = buffer; printf(lcd_putc,"\f min (00 - 59)\n"); printf(lcd_putc," %02u:",hrs); //Ingresar minuto do { buffer = kbd_get_data(); // Esperar por dos digitos del teclado } while(buffer >= 60); // Validar minutos min = buffer; printf(lcd_putc,"\f Hora actualizada"); printf(lcd_putc,"\n %02u:%02u",hrs,min); delay_ms(500); seg = 0; } void Reemplace(char old, char new, char *string) { int leng, index; leng = strlen(string); for(index = 0; index < leng; index++) { if(string[index] == old) { string[index] = new; }

} } void main() { char timeString[10]; //Bloque de congfiguracion set_timer1(32678); hrs = 0; min = 0; seg = 0; delay_ms(500); lcd_init(); // Inicializar LCD kbd_init(); // Inicializar teclado enable_interrupts(GLOBAL); // Habilitar permiso para interrupciones globales enable_interrupts(INT_TIMER1); // Habilitar permiso para interrupcion en T1 INT T1 enable_interrupts(INT_EXT); // Habilitar permiso para interrupcion extena INT_EXT ext_int_edge( H_TO_L ); setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT); // Configurar T1: // Oscilador externo de 32.678KHz // Preescala a 1 // Bloque principal while (TRUE) { sprintf(timeString,"%2u:%2u:%2u",hrs,min,seg); Reemplace(' ', '0', timeString); printf(lcd_putc,"\f %s",timeString); sleep(); // Entrar en modo de bajo consumo } }

DESARROLLO. VALIDACIN MEDIANTE SIMULACIN


Los pasos siguientes los segu al pie de la letra y en la parte de Resultados se anexan las pantallas correspondientes de MPLAB que saque a la hora de simular. 1. Activa el simulador MPLAB SIM en el men <Debugger Select tool MPLAB SIM>. 2. Abre la ventana watch desde el men <View watch> y agrega los registros en la lista de smbolos: a. STATUS b. PORTB c. TRISB d. PORTD e. TRISD f. WREG g. ANSELH 3. Crea una nueva ventana del generador de estmulos asncronos desde el men <Debugger Stimuls New Work Book> y agrega los pines desde RB0 hasta RB7 con la accin <Set High> y nuevamente los mismos pines con la accin <Set Low>.

4. Realiza la simulacin paso a paso del programa presionando F8 mientras visualiza el cdigo fuente y la ventana watch. Analiza el contenido de cada smbolo de la ventana watch y comenta cual es el estado o configuracin del microcontrolador. 5. Realiza la simulacin de entradas digitales a travs del puerto B presionando en el botn correspondiente en el generador de estmulos asncronos mientras sigue simulando paso a paso con F8. 6. Valida que el programa de la prctica 1 lea 8 bits del puerto B y refleje la lectura en el puerto D.

DESARROLLO. ARMADO DEL CIRCUITO


Los siguientes pasos tambin fueron seguidos como se indica a continuacin. Las fotografas correspondientes se muestran en el apartado de resultados. 1. Arma el circuito de que se muestra en el anexo 2. 2. Programa tu microcontrolador con el cdigo de ejecutable 3. Alimenta tu circuito con 5V cuidando la correcta polarizacin. Puedes armar una fuente de 5V tomando como base el diagrama del anexo 3. 4. Valida la correcta operacin del circuito. Si tu circuito no funciona correctamente comprueba la alimentacin con un multmetro, de persistir la falla comprueba la directiva __config para que sta tenga configurado el oscilador interno y deshabilitados el botn de reinicio (NOMCLR), el perro guardin (NOWDT) y bajo voltaje de programacin (NLPV) particularmente, compila y programa nuevamente.

RESULTADOS
Simulacin del circuito en PROTEUS: En vez de usar push button, en la simulacion use DIP-SWITCH para facilitarme las cosas, sin embargo, funciona igual que al momento de armarlo.

Cuando se presiona el push-button que habilita la interrupcion externa:

Con la contrasea 1737:

Con la contrasea 1111:

Con la contrasea 0623, el acceso de los dioses:

Con la contrasea 1313:

Con la contrasea 8824:

Con la contrasea 7777, se accede a la configuracion de la hora:

Con lo que se comprueba que efectivamente, que el sistema accede con las contraseas especificadas en la programacin de la PIC.

Armado del Circuito: Cuando arme el circuito, ya alimentado, se vea de la siguiente manera:

CONCLUSIONES
Esta prctica me ayudo a conocer el funcionamiento de interrupciones en el PIC, tanto internas (Timer) como externas (INT_EXT, activada mediante el pin RB0). Esto es benfico para nosotros porque en el mbito de los microcontroladores nuestro dispositivo debe poder comunicarse con el exterior, o hacer algo cuando se genere algn evento interno, por lo cual, aprender a manejar las interrupciones es muy importante, y conocer cuntos tipos de ellas tiene el mismo peso, para poder aprovecharlas y usarlas como mejor nos convenga. Para esta prctica manejamos la interrupcin interna con el Timer, para generar un contador que pudiramos usar para un reloj que mostrara la hora en la LCD, y esta aplicacin tan sencilla explicaba muy bien ambos conceptos, la interrupcin interna y el manejo del Timer como contador. Ahora, en el caso de la interrupcin externa, la ocupamos para activar la deteccin de datos que entraban por el puerto B a travs de un teclado matricial, lo que involucro adems conocer el funcionamiento de dicho dispositivo para poderlo manejar. Entonces, para esta prctica tuvimos que aprender varias cosas, comparada con las practicas anteriores, adems de que el involucrar el acceso por contrasea hace de esta una prctica bastante interesante, si no es que la ms interesante que hemos visto en el laboratorio. La aplicacin de este circuito que viene a mi mente es para poder abrir una puerta. S que esto involucrara mayores conocimientos y dispositivos extra, pero de momento s que la parte de control ya la tengo, aunque sea en un PIC.

Los conocimientos adquiridos en esta prctica sern de mucha utilidad para futuros proyectos, en caso de existir alguno que involucre interrupciones, que, como he podido averiguar, se ocupan en la mayora de proyectos ms que nada porque permiten la comunicacin del circuito con dispositivos externos y computadoras.

BIBLIOGRAFA
Practica No. 4 del laboratorio de Microprocesadores y Microcontroladores Datasheet del PIC16F887 Datasheet del Driver L293D Compilador C CCS y simulador PROTEUS para microcontroladores PIC.

S-ar putea să vă placă și