#include // include peripheral declarations #include //prototipos int raiz (int valor); int limiar(int sinal); void main(void) { int i; // contador int s1; // somatorio numerador int s2; // somatorio denominador int sinal; // sinal atual int sinal_; // sinal anterior int tmp; // sinal inicial float p; // coeficiente de correlação normalizado PTA = 0; /* clear/initialize Port A */ /* do PWM */ TSC_TSTOP = 1; // stop counter TSC_PS = 0; // prescaler divide por 1 TSC_TRST = 1; // reset counter TMODH = 0; TMODL = 250; // PWM frequency 20kHz TCH1H = 0; TCH1L = 50; // pulse width TSC0_MS0B = 0; // PWM TSC1_MS1A = 1; // output compare TSC1_ELS1B = 1; TSC1_ELS1A = 0; // clear on compare TSC1_TOV1 = 1; // toggle on overflow TSC_TSTOP = 0; // start counter /* do AD */ ADSCR_CH = 2; // entrada pino AD2=PTA4 ADSCR_ADCO = 1; // convert continously ADICLK_ADIV = 2; // AD clock = 5MHz/4 (about 1MHz) TCH1L = 230; for(;;) { s1 = s2 = 0; s2 = sinal*sinal; tmp = sinal = ADR-0x80; if (TCH1L == 5) { TCH1L = 230; } for(i=0;i<400;i++) { while(!PTA_PTA1); sinal_ = sinal; sinal = ADR-0x80; s1 += sinal*sinal_; s2 += sinal*sinal ; while( PTA_PTA1); } p = s1/raiz((s2-(tmp*tmp))*(s2-(sinal*sinal))); if (p > 0.9f && p < 1.1f) { TCH1L = 5; for(i=0;i<20000;i++) { while(!PTA_PTA1); while( PTA_PTA1); } } } } /* RAIZ */ int raiz(int valor) { int resultado = valor/2; while (resultado-valor/resultado > 1) { resultado = (resultado + valor/resultado)/2; } return resultado; }