Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
h>
#device adc=12
#use delay(clock=20000000,RESTART_WDT)
#use rs232(baud=2400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,restart_wdt)
//Esta��o Transmissora
#include <string.h>
#INCLUDE <stdlib.h>
int1 Flag_Incrementa_Hidro1=0;
int1 Flag_Incrementa_Hidro2=0;
//*****************************************************
//*****************************************************
//------------------------------
// Interrup��es do Timer 2
//------------------------------
#int_TIMER2
void TIMER2_isr(void){
Tempo_mS++;
} // void TIMER2_isr(void)
//------------------------------
// Interrup��es do Hidr�metro
//------------------------------
#int_EXT
void EXT1_isr(void)
{
Flag_Incrementa_Hidro1=1;
}//EXT_isr(void)
#int_EXT1
void EXT_isr(void)
{
Flag_Incrementa_Hidro2=1;
}//EXT1_isr(void)
//------------------------------
// Captura de [spam]�gicas
//------------------------------
void Captura_ADC(){
Leitura=0;
pacote.adc0=0;
pacote.adc1=0;
pacote.adc2=0;
pacote.adc3=0;
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// [spam]�gica 00
Leitura=0;
pacote.adc0=0;
set_adc_channel(0);//seta adc A0
delay_us(100);
//for(X=0;X<Tempo_Delay;X++){}
for(cont=1;cont<=200;cont++){//faz a media das 200 Leituras descartando as 40
primeiras
}//for
Leitura=(Leitura/160);
//pacote.adc0 = Leitura*12.21;// coloca em mV*10
pacote.adc0 = Leitura;
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// [spam]�gica 01
Leitura=0;
pacote.adc1=0;
set_adc_channel(1);//seta adc A1
delay_us(100);
//for(X=0;X<Tempo_Delay;X++){}
for(cont=1;cont<=200;cont++){//faz a media das 200 Leituras descartando as 40
primeiras
pacote.adc1 = read_adc();//ler adc A1
delay_us(100);
//for(X=0;X<Tempo_Delay;X++){}
if(cont>40){
Leitura=Leitura+pacote.adc1;
}//if
}//for
Leitura=(Leitura/160);
//pacote.adc1 = Leitura*12.21;// coloca em mV*10
pacote.adc1 = Leitura;
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// [spam]�gica 05
Leitura=0;
pacote.adc2=0;
set_adc_channel(4);//seta adc A5
delay_us(100);
//for(X=0;X<Tempo_Delay;X++){}
for(cont=1;cont<=200;cont++){//faz a media das 200 Leituras descartando as 40
primeiras
pacote.adc2 = read_adc();//ler adc A0
delay_us(100);
//for(X=0;X<Tempo_Delay;X++){}
if(cont>40){
Leitura=Leitura+pacote.adc2;
}//if
}//for
Leitura=(Leitura/160);
//pacote.adc2 = Leitura*12.21;// coloca em mV*10
pacote.adc2 = Leitura;
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// [spam]�gica 09
Leitura=0;
pacote.adc3=0;
set_adc_channel(9);//seta adc A1
delay_us(100);
//for(X=0;X<Tempo_Delay;X++){}
for(cont=1;cont<=200;cont++){//faz a media das 200 Leituras descartando as 40
primeiras
pacote.adc3 = read_adc();//ler adc A1
delay_us(100);
//for(X=0;X<Tempo_Delay;X++){}
if(cont>40){
Leitura=Leitura+pacote.adc3;
}//if
}//for
Leitura=(Leitura/160);
//pacote.adc3 = Leitura*12.21;// coloca em mV*10
pacote.adc3 = Leitura;
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
} // void Captura_ADC()
//------------------------------
// C�lculo da m�dia das [spam]�gicas
//------------------------------
void Media_ADC(){
pacote.adc1 = ADC_02_Aux/Quantidade_de_Capturas;
pacote.adc1 = pacote.adc1*12.21; // coloca em mV*10
pacote.adc2 = ADC_03_Aux/Quantidade_de_Capturas;
pacote.adc2 = pacote.adc2*12.21; // coloca em mV*10
pacote.adc3 = ADC_04_Aux/Quantidade_de_Capturas;
pacote.adc3 = pacote.adc3*12.21; // coloca em mV*10
//Zerando as vari�veis ADC_0X_Aux e Quantidade_de_Captura.
Quantidade_de_Capturas=0;
ADC_01_Aux=0;
ADC_02_Aux=0;
ADC_03_Aux=0;
ADC_04_Aux=0;
}
//------------------------------
// Captura de Digitais
//------------------------------
void Captura_Digitais(){
pacote.d1=dig1;
pacote.d2=dig2;
pacote.d3=dig3;
pacote.d4=dig4;
} // void Captura_Digitais()
//------------------------------
// Captura de Hidr�metros
//------------------------------
void Captura_Hidrometros(){
if(Flag_Incrementa_Hidro1==1){
output_high(LED_PULSO); // Acende LED para demonstrar
delay_ms(100); // que houve interrup��o
output_low(LED_PULSO); // ap�s 250 ms apaga LED
pacote.hidro1++;
if(pacote.hidro1>=9999999)pacote.hidro1=0;
Flag_Incrementa_Hidro1=0;
}
if(Flag_Incrementa_Hidro2==1){
output_high(LED_PULSO); // Acende LED para demonstrar
delay_ms(100); // que houve interrup��o
output_low(LED_PULSO); // ap�s 250 ms apaga LED
pacote.hidro2++;
if(pacote.hidro2>=9999999)pacote.hidro2=0;
Flag_Incrementa_Hidro2=0;
}
}
void main(){
setup_adc_ports(AN0_TO_AN9|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
//setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //Incremento em 1.6uS
setup_timer_2(T2_DIV_BY_4,249,5); //Incremento em 1.0mS
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
ext_int_edge(0,H_TO_L); // Int_Ext sens�vel a borda de descida
ext_int_edge(1,H_TO_L); // Int_Ext sens�vel a borda de descida
while(true){
//---------------------------------------------------------
//Realiza as Capturas
Captura_ADC();
Captura_Digitais();
Captura_Hidrometros();
Quantidade_de_Capturas++;
//---------------------------------------------------------
//Defini��o do Intervalo
if(Tempo_mS>=Intervalo){
Tempo_mS=0;
Flag_Envios++;
Media_ADC();
output_high(LED_TX);
montaPacote(&pacote);
enviaPacote(mensagem,(sizeof(protocolo)+2));
output_low(LED_TX);
} // if(Tempo_mS>=Intervalo)
//---------------------------------------------------------
} // while(true)
} // void main()