Você está na página 1de 2

Proj_Alarme.

c 14/09/2022 15:11:48

//************ PROJETO ALARME RESIDENCIAL *************


/*
Alarme residencial com 5 Zonas de Alarme com Disparo Imediato e
1 Zona de Alarme com Disparo Temporizado de 5 segundos.
A Central possui um botão para o controle manual de ON-OFF da
Central e dois LEDs para sinalização visual para Alarme LIGADO
ou Alarme DESLIGADO.
A Central é controlada por um Terminal Serial (RS-232).
Se a Central receber o caractere 'L' -> Central Ligada
Se a Central receber o caractere 'D' -> Central Desligada
Botão RB6 também Liga e Desliga a Central
Sensor de Disparo Temporizado -> RB0 (Utilização do TIMER1)
Sensores de Disparo Imediato -> RB1, RB2, RB3, RB4 e RB5
Versão: 1.0
Data: 14/09/2022
Autor: Prof. Mauricio Deffert
*/

//DECLARAÇÃO DE VARIÁVEIS
unsigned char cnt; //Declaração de Variável "cnt" GLOBAL
unsigned char ALARME = 0; //Declaração de Variável "ALARME" GLOBAL
unsigned char CENTRAL_ON = 0; //Declaração de Variável "CENTRAL_ON" GLOBAL
unsigned char DADO_RECEBIDO; //Declaração de Variável "DADO_RECEBIDO" GLOBAL

//TRATAMENTO DE INTERRUPÇÃO
void interrupt(){
if(PIR1.TMR1IF==1){ //INTERRUPÇÃO DO TIMER1
if(cnt > 8){ // 2->500ms, 4->1000ms, 8-> 2000ms, etc
PORTD.RD0=~PORTD.RD0; //INVERTE NL RD0
cnt = 0;
ALARME = 1;
}
cnt++; //INCREMENTA "cnt" PARA CONTROLE DO TEMPO
TMR1L=0xDC; //Carga Inicial para 250 mseg
TMR1H=0x0B;
PIR1.TMR1IF=0; //Apaga o flag de sinalização do TIMER1
}//End “if(PIR1.TMR1IF==1)”
}//End "void interrupt()"

//SETUP DO MICROCONTROLADOR
void ConfigMCU(){
RCSTA.SPEN = 0; // Desliga a porta serial (ligada pelo bootloader).
ADCON1=0X07; //Configura todos os pinos para I/O Digital
UART1_INIT(9600);
INTCON.GIE = 1; //HABILITA CHAVE GERAL DAS INTERRUPÇÕES
INTCON.PEIE = 1; //HABILITA CHAVE DOS PERIFÉRICOS DAS INTERRUPÇÕES
PIE1.TMR1IE = 1; //HABILITA INTERRUPÇÃO DO TIMER1
TRISB = 255;
PORTB = 255;
TRISD = 0;
PORTD = 0B00000001;
}

void ConfigTimer1(){
//Programação do TIMER1(16 bits)
T1CON=0B00110100; // TIMER1 no modo Timer; Prescaler 1:8
TMR1L=0xDC; //Carga Inicial para 250 mseg
TMR1H=0x0B;
PIR1.TMR1IF=0; // Apaga o flag de sinalização do TIMER1
T1CON.TMR1ON = 0; // TIMER1 Off

1/2 mikroC PRO for PIC by mikroElektronika


Proj_Alarme.c 14/09/2022 15:11:48

void main() {
ConfigMCU(); //Chama função "ConfigMCU()"
ConfigTimer1(); //Chama função "ConfigTimer1()"

while(1){
if (UART1_Data_Ready() == 1) { //Testa o Recebimento de Dados
DADO_RECEBIDO = UART1_Read(); //Armazena dado recebido
UART1_WRITE_TEXT("\r\n"); //Quebra Linha
}

if(CENTRAL_ON == 1){ //Controle dos LEDs de ON e OFF


PORTD.RD0 = 0;
PORTD.RD1 = 1;
}else{
PORTD.RD0 = 1;
PORTD.RD1 = 0;
}

if(PORTB.RB0==0 && CENTRAL_ON.B0==1){ //SENSOR DE DISPARO TEMPORIZADO


T1CON.TMR1ON = 1; // TIMER1 ON
}
if(PORTB.RB6==0 || DADO_RECEBIDO == 'L' || DADO_RECEBIDO == 'D'){ //CHAVE 0
0N-OFF
T1CON.TMR1ON = 0; // TIMER1 E ALARME DESLIGADOS
ALARME = 0;
CENTRAL_ON.B0=~CENTRAL_ON.B0;
if(CENTRAL_ON ==0 || DADO_RECEBIDO == 'D') UART1_WRITE_TEXT("### ALARM
ME DESLIGADO ###\r\n"); //ALARME DESLIGADO
if(CENTRAL_ON ==1 || DADO_RECEBIDO == 'L') UART1_WRITE_TEXT("### ALARM
ME LIGADO ###\r\n"); //ALARME LIGADO
DELAY_MS(500);
if(DADO_RECEBIDO =='L') DADO_RECEBIDO = 0;
if(DADO_RECEBIDO =='D') DADO_RECEBIDO = 0;
}
if(ALARME==1){
T1CON.TMR1ON = 0; // ALARME DISPARADO
UART1_WRITE_TEXT("*** ALARME DISPARADO ***\r\n");
DELAY_MS(300);
}

//SENSORES DE DISPARO IMEDIATO


if(PORTB.RB1==0 && CENTRAL_ON.B0==1) ALARME = 1;
if(PORTB.RB2==0 && CENTRAL_ON.B0==1) ALARME = 1;
if(PORTB.RB3==0 && CENTRAL_ON.B0==1) ALARME = 1;
if(PORTB.RB4==0 && CENTRAL_ON.B0==1) ALARME = 1;
if(PORTB.RB5==0 && CENTRAL_ON.B0==1) ALARME = 1;
}//End “while(1)”
} //End “void main()”

2/2 mikroC PRO for PIC by mikroElektronika

Você também pode gostar