void main(void) { uart_init(); PORTD = _BV(PD2); /* resistor de pull-up */ MCUCR = _BV(ISC01); /* int0 por flanco H->L */ GICR = _BV(INT0); /* int0 habilitada */ TIMSK = _BV(OCIE1A); /* interrupion por comparacion */ TCCR1B = _BV(WGM12); /* modo de borrado del timer cuando cuando la comparacion coincide */ OCR1A = 124; /* cuento 125 ints de timer 1MHz / 8 = 125000 da un margen de 1000 overflows */ sei(); while(1) { switch(menu()) { case 'c': configuracion(); case 'r': TCCR1B &= ~(_BV(CS11)); /* detiene el timer */ TCNT1 = 0; /* timer a cero */ for (i = 0; i < MAX_MEDICIONES; i++) valores[i] = 0; i = 0; x = 0; break; case 'v': volcar(); break; default: printf("\n ERROR: opcion invalida\n"); } } }
/*Funcion *conf asigna una accion del hilo que ejecuta el programa El programa se mantiene oyendo el puerto para detectar un mensaje entrante*/ void *conf(void *var) { int salir = 0; while(salir ==0) configuracion(); }
void interrupt() { if(PIR1.RCIF) { if(RCREG>47&&RCREG<58) { contador++; switch(contador) { case 1: d1=RCREG-48; break; case 2: d2=RCREG-48; break; case 3: d3=RCREG-48; break; } Numero=((d1*100)+(d2*10)+d3); IntToStr(Numero, TEXTO2); configuracion(); RESET_LCD(); CONFIG_SET(); ENABLE(); DISPLAY_ON_OFF(); ENABLE(); CLEAR_DISPLAY(); ENABLE(); ENTRY_MODE_SET(); ENABLE(); CADENA1(); //Cadena de Texto 1era Linea SET_DDRAM(); ENABLE(); CADENA2(); //Cadena de Texto 2da Linea } if(RCREG>96&&RCREG<108) { Boton=RCREG; switch(Boton) { case 97: Motor=5; break; case 98: Motor=4; break; case 99: Motor=3; break; case 100: Motor=1; break; case 101: Motor=0; break; case 102: PORTB=0x00; PORTB.RB2=1; PWM_CFG(); Periodo(256); Valor=(Numero*2.5)+200; Ancho_Pulso(Valor); break; case 103: d1=0; d2=0; d3=0; contador=0; break; case 104: PORTB=0x00; switch(Motor) { case 0: PORTB.RB0=1; break; case 1: PORTB.RB1=1; break; case 3: PORTB.RB3=1; break; case 4: PORTB.RB4=1; break; case 5: PORTB.RB5=1; break; } if(Motor>0) { Numero=72; } if(Motor==0) { Numero=105; } PWM_CFG(); Periodo(256); Valor=(Numero*2.5)+200; Ancho_Pulso(Valor); break; case 105: PORTB=0x00; switch(Motor) { case 0: PORTB.RB0=1; break; case 1: PORTB.RB1=1; break; case 3: PORTB.RB3=1; break; case 4: PORTB.RB4=1; break; case 5: PORTB.RB5=1; break; } if(Motor>0) { Numero=68; } if(Motor==0) { Numero=45; } PWM_CFG(); Periodo(256); Valor=(Numero*2.5)+200; Ancho_Pulso(Valor); break; case 106: PORTB=0x00; break; } } } }