void trataExcepcion(void) { int codigo_error; //Algoritmo de tratamiento: // Imprimir codigo de error en 8led D8Led_init(); // Nos arriesgamos a reinizializar la pantalla... codigo_error = getMode(); // Obtenemos el modo, que usaremos para determinar en que excepcion estamos //push_debug(codigo_error, 0); // Metemos la excepcion en la pila // Por ahora, colgamos el sistema con el codigo de error parpadeante while (1) { D8Led_symbol(codigo_error - 1); Delay(1000); D8Led_symbol(16); Delay(1000); } }
/*--- codigo de la funcion ---*/ int Main(void){ char *pt_str = str; leds_off(); sys_init(); // inicializacion de la placa, interrupciones, puertos Eint4567_init(); keyboard_init(); Uart_Init(115200); // inicializacion de la Uart Uart_Config(); // configuración de interrupciones y buffers while(1){ *pt_str = Uart_Getch1(); // leer caracter if(pt_str[0] == 'L'){ led1_on(); led2_off(); } else if (pt_str[0] == 'R'){ led2_on(); led1_off(); } else { D8Led_symbol(pt_str[0]-'0'); } } }
void incrementar0_8(void){ if(simbolo==12 || simbolo==15){ simbolo = 0; } else{ simbolo += 1; if(simbolo==9){ simbolo = 0; } } D8Led_symbol(simbolo); }
void timer4_ISR(void) { DelayMs(200); /*Check if keyboard was pressed*/ if (key == -1 || key != numbers[3]) //mistake D8Led_symbol(numbers[3]); else D8Led_symbol_correct(numbers[3]); rINTMSK = rINTMSK | BIT_TIMER4; //disable timer4 rI_ISPC = BIT_TIMER4; DelayMs(1200); random_number_generator(); cont = 3; rINTMSK = rINTMSK & ~(BIT_TIMER0); //enable timer0 }
void timer0_ISR(void) { DelayMs(100); cont--; D8Led_symbol(numbers[cont]); if (cont == 0) { rINTMSK = rINTMSK | BIT_TIMER0; //disable timer0 rI_ISPC = BIT_TIMER0; //key = -1; //DelayMs(200); //rINTMSK = rINTMSK & ~(BIT_TIMER4); //enable timer4 rINTMSK = rINTMSK & ~(BIT_TIMER1); //enable timer1 } rI_ISPC = BIT_TIMER0; }
void Eint4567_ISR(void) { /* Identificar la interrupcion (hay dos pulsadores)*/ int which_int = rEXTINTPND; switch (which_int) { case 4: push_debug(0xFFFFFFFF,0xFFFFFFFF); boton=1; rINTMSK =BIT_EINT4567 | rINTMSK; //deshabilitar boton Timer3_Empezar(); estado=1; int_count++; // incrementamos el contador if(int_count==10){ int_count=reset; } break; case 8: boton=2; rINTMSK =BIT_EINT4567 | rINTMSK; //deshabilitar boton Timer3_Empezar(); confirmacion=1; estado=1; break; default: break; } // } D8Led_symbol(int_count); // sacamos el valor por pantalla (módulo 16) /* Finalizar ISR */ rEXTINTPND = 0xf; // borra los bits en EXTINTPND rI_ISPC |= BIT_EINT4567; // borra el bit pendiente en INTPND //esto //rINTMSK = ~(BIT_GLOBAL | BIT_TIMER0| BIT_TIMER2); }
void Eint4567_ISR(void) { /* Identificar la interrupcion (hay dos pulsadores)*/ int which_int = rEXTINTPND; switch (which_int) { case 4: int_count++; // incrementamos el contador break; case 8: int_count--; // decrementamos el contador break; default: break; } // } D8Led_symbol(int_count&0x000f); // sacamos el valor por pantalla (módulo 16) /* Finalizar ISR */ rEXTINTPND = 0xf; // borra los bits en EXTINTPND rI_ISPC |= BIT_EINT4567; // borra el bit pendiente en INTPND }
void esperar_mov() { while(mov_done == 0){ undisplay_ficha(8,8); display_mensaje_ayuda(); if (reset_mov == 1){ // si viene de reset mov -> borrar ficha del lcd simbolo = 15; D8Led_symbol(15); undisplay_ficha(fila,columna); reset_mov = 0; } while (actual == FILA) { // bucle de espera de respuestas hasta que el se modifique el valor de ready (hay que hacerlo manualmente) if(actualizar_tiempo == 1){ // actualiza cada decima de segundo tiempo += 1; display_actualizar_tiempo(tiempo); actualizar_tiempo = 0; } while (get_contador_ficha() > 0){ incrementar0_8(); decrementar_contador_ficha(); } if(get_confirmacion()==1){ // si se pulsa el boton derecho. fila = (char) simbolo; simbolo = 12; D8Led_symbol(12); set_confirmacion(0); actual = COLUMNA; } } while (actual == COLUMNA) { // bucle de espera de respuestas hasta que el se modifique el valor de ready (hay que hacerlo manualmente) if(actualizar_tiempo == 1){ // actualiza cada decima de segundo tiempo += 1; display_actualizar_tiempo(tiempo); actualizar_tiempo = 0; } while (get_contador_ficha() > 0){ incrementar0_8(); decrementar_contador_ficha(); } if(get_confirmacion()==1){ // si se pulsa el boton derecho. columna = (char) simbolo; simbolo = 15; D8Led_symbol(15); set_confirmacion(0); actual = CONFIRMAR; timer1_init(); } } if (fila == 8 || columna == 8){ // si pasar movimiento -> ocultar mensaje de ayuda para mostrar mensaje de pasando undisplay_mensaje_ayuda(); } while (actual == CONFIRMAR){ if(parpadear == 1){ // ejecutar parpadeo if(parpadeo == 0){ // estaba en blanco -> mostrar ficha display_ficha_jugador(fila, columna); parpadeo = 1; } else{ // estaba mostrada -> esconder ficha undisplay_ficha(fila,columna); parpadeo = 0; } parpadear = 0; } } } mov_done = 0; }