/* * Disciplina: Organização e Arquitetura de Computadores II * Aluno: Gizelle Felinto * : Petronio Araújo * * Titulo: Pega Ladrão */ #include /* include peripheral declarations */ #include /* * Modolo que Verifica que se há silencio no ambiente */ bool em_silencio(){ int sinal, contador, i; contador = 0; for(i=0; i < 1000; i++){// Numero maxima de verificações por amostra(1000 pontos). Intervalo de tempo da amostra while(! PTA_PTA1 );// espera que ponto seja calculado. ou registrodo. sinal = ADR-0x80;// deslocamento para que o silencio seja zero. while( PTA_PTA1 );// garante que na proxima leitura não seja lido o mesmo ponto if (abs(sinal) > 0x10)// se ponto for acima da faixa de silencio contador++; // conta ponto de barulho } return contador < 800; //ocorrendo 500 pontos de barulho } /* * Ativa por um determinado tempo o alarme */ void wait(int t){ unsigned int i,j;//0..64000 for(i=0; i < t; i++) //timeout for(j=0; j < 60000; j++); //um segundo (mais ou menos) } void main(void) { 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 // _DDRA.Bits.DDRA1 = 1; /* set Bit 1 as output */ /* do AD */ ADSCR_CH = 2; // entrada pino AD2=PTA4 ADSCR_ADCO = 1; // convert continously ADICLK_ADIV = 2; // AD clock = 5MHz/4 (about 1MHz) //AQUI.. logica inversa de sinal para disparo TCH1L = 0x5;// começa com sinal, isto é, com alarme desativado for(;;) { if (em_silencio()) TCH1L = 0x5; // com sinal, sem alarme! else{ TCH1L = 0xE6; // sem sinal, isto é, com alarme ativado wait(10); // 3 seguntos alarmando! } } }//main