#include <8051.h> //Kalvim Scotti - Mario Felipe - 15/12/2010 //Sistema de central de alarme //Obj: gerar uma frequência diferente para cada sensor, vinculado a uma porta(bit), por meio de interrupção //globais char senha = 0x34; int Armar = 0, tipoFreq=0, porta=0; //Função responsável pela autenticação no sistema void AguardaSenha() { int c,a,b; int ok = 0; while (!ok) { P1 = 0xfe; while(P2_6); if ((senha & 0x3f) == (P2 & 0x3f)) { for (c=3;c>0;c--){ for(a=5;a>0;a--){ for(b=10000;b>0;b--); } P1 = 0xff; for(a=5;a>0;a--){ for(b=10000;b>0;b--); } P1 = 0xfe; } ok = 1; P1 = 0x7f; }else{ P1 = 0xf8; for(c=10;c>0;c--){ for(a=10000;a>0;a--); } } } porta = 0; } //Função que pega configura o timer 0 e seta a variavel global tipoFrec com o valor do tipo void configura_timer() { //deixa a ultimo led acionado aceso if (porta != tipoFreq){ switch (porta){ case 1: P1_1 = 0; break; case 2: P1_2 = 0; break; case 3: P1_3 = 0; break; case 4: P1_4 = 0; break; case 5: P1_5 = 0; break; } } porta = tipoFreq; TR0 = 0; TF0 = 0; TMOD = 0x01; switch (tipoFreq){ case 1: // 20ms TH0 = 0xB1; TL0 = 0xE0; break; case 2: //30ms TH0 = 0x8A; TL0 = 0xD0; break; case 3: //40ms TH0 = 0x63; TL0 = 0xC0; break; case 4: //50ms TH0 = 0x3C; TL0 = 0xB0; break; case 5: //60ms TH0 = 0x15; TL0 = 0xA0; break; } TR0 = 1; ET0 = 1; EA = 1; } //Função de monitoramento das portas void MonitorarAlarme() { while (P2_0){ if (!P2_3){ tipoFreq = 1; //Seta variavel global com o valor do tipo configura_timer(); } if (!P2_4){ tipoFreq = 2; //Seta variavel global com o valor do tipo configura_timer(); } if (!P2_5){ tipoFreq = 3; //Seta variavel global com o valor do tipo configura_timer(); } if (!P2_6){ tipoFreq = 4; //Seta variavel global com o valor do tipo configura_timer(); } if (!P2_7){ tipoFreq = 5; //Seta variavel global com o valor do tipo configura_timer(); } } Armar = 2; } //subrotina de interrupcao void timer0(void) interrupt 1 using 0 { switch (tipoFreq){ case 1: if (P1_1){ P1_1 = 0; }else{ P1_1 = 1; } break; case 2: if (P1_2){ P1_2 = 0; }else{ P1_2 = 1; } break; case 3: if (P1_3){ P1_3 = 0; }else{ P1_3 = 1; } break; case 4: if (P1_4){ P1_4 = 0; }else{ P1_4 = 1; } break; case 5: if (P1_5){ P1_5 = 0; }else{ P1_5 = 1; } break; } //reconfigura o timer configura_timer(); } //Função principal do sistema void main() { //aguarda P2_0 while(P2_0); for (;;) { //insere a senha se Armar = 0 if (Armar == 0) { AguardaSenha(); Armar = 1; }else{ //desabilita alarme se senha ok if (Armar == 2){ AguardaSenha(); EA=0; Armar=1; } } MonitorarAlarme(); } }