Como trabalhar com timer dos pic na linguagem c ccs

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor cfreund » 06 Mai 2014 16:33

Sem problema nenhum. Já que seu programa não é multitarefas.

Coloquei 1 e 'A' na variável como exemplo. Switch lê a variável e faz um JUMP para o case que coincide com o valor da variável. Conhece goto/label ? É o mesmo principio.

Código: Selecionar todos
var = 1;

if (var == 1) goto _ok;

return 1;

_ok: // <- Executa a partir desta linha

return 0;


.....
Código: Selecionar todos
case ...
   break;
case AGUARDAR_NIVEL:
    while (pino_sensor); // <- Fica parado aqui enquanto o pino do sensor estiver em nível alto
    break;
case ...
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor carlucio » 06 Mai 2014 16:48

cfreund,

Vamos ver se entendi

cpp code
int16 a=0; b=0;

timer: {
....

x++; variavel para incrementar a temporização da função 1
Y++: variavel para incrementar a temporização da função 2
}

void função 1(void){
a=1
switch (normal){

case 1: aqui é minha duvida de como temporizar.
if(a=1 && x>=0 && x<=180){ // rodar 3 minutos
output_high(pin_b5);
}
//sem break porque é sequencial, certo?
case 2: { idem ao anterior mas com outra temporização
}

break; //porque é o ultimo


A função 2 é igual ao anterior so mudando o a para b e incluindo ai a maneira que não sei ainda de esperar o nivel

Esta certo assim?
carlucio
Byte
 
Mensagens: 118
Registrado em: 05 Jan 2014 15:07

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor cfreund » 06 Mai 2014 16:57

carlucio escreveu:case 1:
// if(a=1 && x>=0 && x<=180){ // não tem necessidade de testar 'a'. você já fez isso com o switch.

x = 0;
while (x < 180); // espera enquanto x for menor que 180.

output_high(pin_b5);
}
// se não colocar o break aqui, irá executar o código de case 2 e adiante...
case 2: { idem ao anterior mas com outra temporização
}
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor carlucio » 06 Mai 2014 18:26

cfreund,

como fazer a seleção da switch? Seria assim:

cpp code
main( ){

while (true)

if(input(pin_b5)){
x=1; // que vai acionar a case 1 da função 1
processo normal(); //encaminha para a função1
}


Correto?
carlucio
Byte
 
Mensagens: 118
Registrado em: 05 Jan 2014 15:07

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor cfreund » 06 Mai 2014 18:48

Isso ai!

switch(x)
case 1: ....
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor andre_luis » 06 Mai 2014 20:30

Então, como o Claudio disse mais acima, o switch-case funciona de modo análogo ao if aninhado.
Só que de um modo mais organizado, facilitando o trabalho:

Imagem


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor carlucio » 12 Mai 2014 10:05

Pessoal, desculpa a ignorância, mas ate agora não entendi duas coisas.

A primeira é de como se chama/ direciona para a switch:
cpp code
void processo_enxague void()
switch (a)
case 1 :
x=0
while (x< 30)
{
output_high(pin_ b5); // roda 30 segundos
}
while(x>=31 && x<=60);
{
output_low(pin_b5);// para 30 segundos
}
while(x>=61 && x<=100);
{
output_hihg(pin_b5);// roda 40 segundos
}
while(x>=101 && x<=140);// para 40 segundos
{
output_low(pin_b5);
output_high(pin_b3); //descarta agua
}
while(x>=141 && x<=260);
{
output_low(pin_b3);// termino do descarte de agua
delay_ms(5000);
output_high(pin_a5); //libera solenoide de agua
}
break:

case 2:

output_low(pin_a5);//fecha a agua
delay_ms(5000);

// daqui para baixo apos o descarte tem que fazer a mesma coisa que fazia antes, so sendo acrescentado depois o termino do processo e depois um alarme sonoro.
x=0
while (x< 30)
{
output_high(pin_ b5); // roda 30 segundos
}
while(x>=31 && x<=60);
{
output_low(pin_b5);// para 30 segundos
}
while(x>=61 && x<=100);
{
output_hihg(pin_b5);// roda 40 segundos
}
while(x>=101 && x<=140);// para 40 segundos
{
output_low(pin_b5);
output_high(pin_b3); //descarta agua
}
while(x>=141 && x<=260);
{
output_low(pin_b3);// termino do descarte de agua
}
break:

main()
// zero todas as saidas e entradas
.....
....
....
....
if (input(pin_a1){
processo_enxague();
a=1;
}

if(input(pin_a2);//alcançou o nivel

{
a=2;
}


1º A maneira de se temporizar dentro da case esta correta? E dessa maneira?

2º A maneira de selecionar / ativar a switch esta correta? E assim?

Por favor alguem me de uma luz!
carlucio
Byte
 
Mensagens: 118
Registrado em: 05 Jan 2014 15:07

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor ze2 » 12 Mai 2014 11:04

pra ver se eu entendi, permita-me fazer uma corretiva taquigráfca mostrando seu 1º case:
Código: Selecionar todos
switch (a)
{
case 1 :
x=0;RB5=1; //roda...
while (x< 30);//..30 segundos
x=0;RB5=0; //para...
while (x< 30);//..30 segundos
x=0;RB5=1;//roda
while(x<40);//40 segundos
x=0;RB5=0;RB3=0;//descarta agua
while(x<40);// para 40 segundos
x=0;RB3=0;//termino do descarte de agua
RA5=1;//libera solenoide de agua
while(x<120);
break:
case 2:
...
...
break;
case x:
...
...
break;
}

desculpa a preguiça de ler o tópico todo pra me interar mais.
abç
Editado pela última vez por ze2 em 13 Mai 2014 11:48, em um total de 1 vez.
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor andre_luis » 12 Mai 2014 19:33

carlucio escreveu:Pessoal, desculpa a ignorância, mas ate agora não entendi duas coisas.

1º A maneira de se temporizar dentro da case esta correta? E dessa maneira?
2º A maneira de selecionar / ativar a switch esta correta? E assim?


Não, a temporização deve estar fora de qualquer rotina que você criar, caso contrário seu programa estará preso dentro de um loop, e ficará impossibilitado de tratar outras rotinas. O ideal é configurar o Timer para gerar 1 interrupção a cada "n" milisegundos, de modo que cada vez que sua rotina for executada, incrementa um contador, e no final você saberá quanto tempo passou. Por exemplo, no trecho da função abaixo retirada da rotina Lavadora.c presente no Blog, a variável Etapa é o argumento do switch e a variável ContTempo é quem realiza a função de receber o valor da contagem a ser decrementado na etapa seguinte.

cpp code
void CicloBasicoDePreLavagem ( void )
{
switch ( Etapa )
{
case ETAPA_ENCHER_PRE :
{
char MedidaDaAguaPre = AlturaDaAgua() ;
if ( MedidaDaAguaPre >= NIVEL_MEDIO_DE_AGUA ) goto decideproximaetapapre ;
if ( MedidaDaAguaPre < NivelDaAgua )
{
_BOMBA = BOMBA_DESLIGADA ;
_SABAO_I = PINO_NIVEL_ALTO ;
}
else
{
decideproximaetapapre:
if ( NivelDaAgua == NIVEL_ALTO_DE_AGUA )
{
Etapa = ETAPA_CONTINUA_ENCHER_PRE ;
ContTempo = TEMPO1MINUTO ;
}
else
{
_SABAO_I = PINO_NIVEL_BAIXO ;
RecargaLEDs() ;
Etapa = ETAPA_LAVAR_PRE ;
direcao = PARA_ESQUERDA ;
ContTempo = TEMPO5MINUTOS ;
Cont_D = TipoDeRotacao ;
Cont_E = TipoDeRotacao ;
Cont_M = TipoDeIntervalo ;
}
}
if ( ContTempo != 0 ) ContTempo-- ;
else
{
CodigoDeErro = ERRO_ENTRADA_DA_AGUA ;
Etapa = ETAPA_BEEP_ON ;
ContTempo = TEMPO10SEGUNDOS ;
}
}
break ;
case ETAPA_CONTINUA_ENCHER_PRE :
_SABAO_I = PINO_NIVEL_ALTO ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
_SABAO_I = PINO_NIVEL_BAIXO ;
RecargaLEDs() ;
Etapa = ETAPA_LAVAR_PRE ;
direcao = PARA_ESQUERDA ;
ContTempo = TEMPO5MINUTOS ;
Cont_D = TipoDeRotacao ;
Cont_E = TipoDeRotacao ;
Cont_M = TipoDeIntervalo ;
}
break ;
case ETAPA_LAVAR_PRE :
Lava( ETAPA_ESVAZIAR_PRE , 0 ) ;
break ;
case ETAPA_ESVAZIAR_PRE :
_BOMBA = BOMBA_LIGADA ;
if ( AlturaDaAgua() == NIVEL_VAZIO_DE_AGUA )
{
ContTempo = TEMPO1MINUTO ;
Etapa = ETAPA_CONTIN_ESVAZ_1MIN_PRE ;
}
break ;
case ETAPA_CONTIN_ESVAZ_1MIN_PRE :
_BOMBA = BOMBA_LIGADA ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
ContTempo = TEMPO3SEGUNDOS ;
Etapa = ETAPA_GIRAR3SEG_1A_PRE ;
}
break ;
case ETAPA_GIRAR3SEG_1A_PRE :
_BOMBA = BOMBA_LIGADA ;
_MOTOR_D = GIRANDO ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
ContTempo = TEMPO30SEGUNDOS ;
Etapa = ETAPA_PARAR15SEG_1A_PRE ;
}
break ;
case ETAPA_PARAR15SEG_1A_PRE :
_BOMBA = BOMBA_LIGADA ;
_MOTOR_D = PARADO ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
ContTempo = TEMPO3SEGUNDOS ;
Etapa = ETAPA_GIRAR3SEG_2A_PRE ;
}
break ;
case ETAPA_GIRAR3SEG_2A_PRE :
_BOMBA = BOMBA_LIGADA ;
_MOTOR_D = GIRANDO ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
ContTempo = TEMPO30SEGUNDOS ;
Etapa = ETAPA_PARAR15SEG_2A_PRE ;
}
break ;
case ETAPA_PARAR15SEG_2A_PRE :
_BOMBA = BOMBA_LIGADA ;
_MOTOR_D = PARADO ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
ContTempo = TEMPO3SEGUNDOS ;
Etapa = ETAPA_GIRAR3SEG_3A_PRE ;
}
break ;
case ETAPA_GIRAR3SEG_3A_PRE :
_BOMBA = BOMBA_LIGADA ;
_MOTOR_D = GIRANDO ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
ContTempo = TEMPO30SEGUNDOS ;
Etapa = ETAPA_PARAR15SEG_3A_PRE ;
}
break ;
case ETAPA_PARAR15SEG_3A_PRE :
_BOMBA = BOMBA_LIGADA ;
_MOTOR_D = PARADO ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
ContTempo = TEMPO1MINUTO ;
Etapa = ETAPA_CENTRIFUGAR_PRE ;
}
break ;

case ETAPA_CENTRIFUGAR_PRE :
_BOMBA = BOMBA_LIGADA ;
_MOTOR_D = GIRANDO ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
_MOTOR_D = PARADO ;
ContTempo = TEMPO45SEGUNDOS ;
Etapa = ETAPA_PARA_30SEG_PRE ;
}
break ;

case ETAPA_PARA_30SEG_PRE :
_BOMBA = BOMBA_LIGADA ;
if ( ContTempo != 0 ) ContTempo-- ;
else
{
Etapa = ETAPA_ENCHER_MOLHO ;
ContTempo = TEMPO30MINUTOS ;
LED ( LED_OPCAO_PRELAVAR , APAGA ) ;
CicloProgramado = MOLHO ;
}
break ;
}
}
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor carlucio » 13 Mai 2014 09:50

Caro Andre,

Apesar de não aparecer ai, nesta ultima postagem minha, mas creio eu que fiz o que voce esta falando, olhando os post anteriores acima vera que o crei uma interrupção de timer para ser incrementada a cada 1 segundo duas variaveis ( x e y) por se tratar de 2 funçoes distintas. Não sei se esta certo mas fiz desta forma por não conhecer outra de se fazer. A minha duvida é se no caso o x que é incrementado dentro do timer(interrupção do timer) estaria certo desta forma a qual eu tinha postado anteriormente?
O "ze" postou que uma outra forma que não saberia se assim daria certo(não conhecia).

No caso da maneira de se chamar a case estaria certo a maneira que escrevi?
carlucio
Byte
 
Mensagens: 118
Registrado em: 05 Jan 2014 15:07

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor ze2 » 13 Mai 2014 11:10

oi. do jeito que vc fez está faltando chave depois do switch e sobrando durante. provavelmente seu compilador vai xiar. e sim eu subentendi que a incrementa a variável na interrupt e olha que nem vi posts anteriores. sério. a maneira que aguarda os segundos está correta sim. o mc fica parado mas pra sua proposta tudo bem. Do jeito que fiz é praticamente a lesma lerda mas note-se que acesso diretamente o pino do mc. Não sei se seu compilador tem essa capacidade.

aliás tinha errado no >. Era <. corrigi.

sucessos!
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor andre_luis » 13 Mai 2014 18:46

carlucio escreveu:Não sei se esta certo mas fiz desta forma por não conhecer outra de se fazer. A minha duvida é se no caso o x que é incrementado dentro do timer(interrupção do timer) estaria certo desta forma a qual eu tinha postado anteriormente?


Funcionalmente, não vi problema, porém esqueceu o ponto-e-virgula depois do comando, o que poderia dar erro de compilação.

Código: Selecionar todos
      x=0





+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor carlucio » 21 Mai 2014 16:49

Seguindo alguns informaçoes passadas pelo nossos amigos elaborei este outro programa para tentar conseguir resolver o meu problema.
Mas o programa não esta funcionando corretamente no que se diz respeito a temporizações e a parte do case 2 não esta respondendo.
Sera que alguem pode me ajudar

O programa em anexo:

cpp code
#include "C:\Documents and Settings\CARLUCIO\Desktop\switch teste\tanquinho aut.h"

#define nivel_agua pin_a2
#define programa_1 pin_a3
#define programa_2 pin_a0
#define encher_tanquinho pin_b3
#define esvaziar_tanquinho pin_b0
#define alarme pin_b5
#define rodar_motor pin_b4

int a=0;
int16 temp1=0, temp2=0, temp3=0;


int contagem_t0=0;
int processo_normal, processo_enxague;
static boolean led;


#int_RTCC
void RTCC_isr(void)
{
set_timer0 (131-get_timer0());
contagem_t0++;
if(contagem_t0==125)
{
contagem_t0=0;
led=!led;
output_bit(pin_a6,led);
if(temp1==2000)
{
temp1=0;
}
else{
temp1++;
}

if(temp2==3000)
{
temp2=0;
}
else{
temp2++;
}
if(temp3==1000)
{
temp3=0;
}
else{
temp3++;
}

}
}



void processo_normal(void){
//while(input(programa_1))
switch (a){

case 1:
temp1=0;
while(temp1>=0 && temp1<=30);
{
output_high(rodar_motor);
}
while(temp1>=31 && temp1<=60);
{
output_low(rodar_motor);
}
while(temp1>=61 && temp1<=80);
{
output_high(rodar_motor);
}
while(temp1>=81 && temp1<=85);
{
output_low(rodar_motor);
delay_ms(2000);
output_high(esvaziar_tanquinho);
}
while(temp1>=86 && temp1<=120);
{
output_low(esvaziar_tanquinho);
delay_ms(2000);
output_high(encher_tanquinho);
}
break;


case 2:

output_low(encher_tanquinho);
delay_ms(5000);

temp1=0;
while(temp1>=0 && temp1<=30);
{
output_high(rodar_motor);
}
while(temp1>=31 && temp1<=60);
{
output_low(rodar_motor);
}
while(temp1>=61 && temp1<=80);
{
output_high(rodar_motor);
}
while(temp1>=81 && temp1<=85);
{
output_low(rodar_motor);
delay_ms(2000);
output_high(esvaziar_tanquinho);
}
while(temp1>=86 && temp1<=120);
{
output_low(esvaziar_tanquinho);
delay_ms(2000);
output_high(encher_tanquinho);
}
break;

}



}



void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
set_timer0(131);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

// TODO: USER CODE!!

while(true)
{

output_low(rodar_motor);
output_low(esvaziar_tanquinho);
output_low(encher_tanquinho);


if(input(programa_1)==0){
processo_normal();
a=1;
}

if(input(nivel_agua)==0){
a=2;
}

}

}




Se alguem puder me dizer o que esta errado!
carlucio
Byte
 
Mensagens: 118
Registrado em: 05 Jan 2014 15:07

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor ze2 » 22 Mai 2014 08:59

oi. isso pode não te ajudar mas permita observar. você está usando o delay nativo do compilador e um outro meio doidinho dentro da rotina. que tal se esquecesse os 2? crie o seu próprio tipo:
Código: Selecionar todos
void meudelay(unsigned char dl) //no máximo 255 segundos
{
temp1=dl; //considerando que temp1 é DECREMENTADO a cada segundo na interrupt
while(temp1);
}

aí é só fazer: (baseando no seu fonte)
Código: Selecionar todos
#define rodar_motor RB4
#define liga 1
#define desliga 0
//...
switch (a){
 case 1:
       meudelay(30);//<--o ';' faz parar por aqui por 30 segundos hein..
       //{ e não precisa das chaves
       rodar_motor=liga; //output_high(rodar_motor);
       //}
       meudelay(30);
       rodar_motor=desliga; //output_low(rodar_motor);
       meudelay(20);
       rodar_motor=liga;//output_high(rodar_motor);
//etc...
       break;
//etc...
}

de novo... pode não lhe ser 100% inútil
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: Como trabalhar com timer dos pic na linguagem c ccs

Mensagempor carlucio » 03 Jun 2014 23:38

Agora peguei o jeito de fazer a switch funcionar, tentei do jeito que o ze falou mas sem sucesso, por apresentar algums erros de declaração dos port's.
Tentei novamente do jeito que tinha feito mas com pequenas alterações e funciona bem, mas não estou sabendo uma forma de quando chegar no final da primeira case, mandar a saida de encher o tanquinho ficar acionada, aguardando o nivel de agua ( no caso quando a agua encostar no sensor e o mesmo mandar p/ o pic o 1(5v)), e direcionar para o case 2 que se faz referencia ao enxague:

Vejam abaixo:

cpp code
#include "C:\Documents and Settings\CARLUCIO\Desktop\switch teste\tanquinho aut.h"

#define nivel_agua pin_a2
#define programa_1 pin_a3
#define programa_2 pin_a0
#define encher_tanquinho pin_b3
#define esvaziar_tanquinho pin_b0
#define alarme pin_b5
#define rodar_motor pin_b4

int a=0;
int16 temp1=0, temp2=0, temp3=0;

int contagem_t0=0;
int processo_normal, processo_enxague;
static boolean led;

#int_RTCC
void RTCC_isr(void)
{
set_timer0 (131-get_timer0());
contagem_t0++;
if(contagem_t0==125)
{
contagem_t0=0;
led=!led;
output_bit(pin_a6,led);
if(temp1==2000)
{
temp1=0;
}
else{
temp1++;
}

if(temp2==3000)
{
temp2=0;
}
else{
temp2++;
}
if(temp3==1000)
{
temp3=0;
}
else{
temp3++;
}

}
}

void processo_normal(void){

switch (a){

case 1:
temp1=0;{
output_high(rodar_motor);
while(temp1>=0 && temp1<=30);
}
output_low(rodar_motor);{

while(temp1>=31 && temp1<=60);
}
output_high(rodar_motor);{

while(temp1>=61 && temp1<=80);
}
output_low(rodar_motor);{

while(temp1>=81 && temp1<=90);
}
output_high(esvaziar_tanquinho);{

while(temp1>=91 && temp1<=110);
}
output_low(esvaziar_tanquinho);{
delay_ms(1000);
output_high(encher_tanquinho); --------------------->>>> MEU PROBLEMA COMEÇA AQUI, O QUE PODERIA SER FEITO?????

// while(temp1>=111 && temp1<=115);
}

//output_high(encher_tanquinho);{
if(!input(nivel_agua) == 1){ ---------------------------->>>>> AGUARDA ATINGIR O NIVEL PARA DIRECIONAR PARA A CASE 2
a=2;
// }

while(temp1>=116 && temp1<=130);
}
break;

case 2: ------------------------------------------>>>>> DAQUI PARA BAIXO INICIASSE O MODO DE ENXAGUE QUE AINDA NÃO ESTA COMPLETO...

output_low(encher_tanquinho);
delay_ms(1000);
output_high(rodar_motor);

temp1=0;
while(temp1>=0 && temp1<=30);
{
output_low(rodar_motor);
}
while(temp1>=31 && temp1<=60);
{
output_high(rodar_motor);
}
while(temp1>=61 && temp1<=80);
{
output_low(rodar_motor);
}
while(temp1>=81 && temp1<=85);
{
//output_low(rodar_motor);
//delay_ms(2000);
output_high(esvaziar_tanquinho);
}
while(temp1>=86 && temp1<=100);
{
output_low(esvaziar_tanquinho);
delay_ms(2000);
output_high(encher_tanquinho);
}
}

break;
}


void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
set_timer0(131);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

// TODO: USER CODE!!

while(true)
{

output_low(rodar_motor);
output_low(esvaziar_tanquinho);
output_low(encher_tanquinho);

if(input(programa_1)==0){
processo_normal();
a=1;
}

//if(input(nivel_agua)==0){ // esta comentado a espera de encontrar a maneira certa de se fazer!!!
//processo_normal();
//a=2;
//}
//
}

}


Sera que alguem pode me dar uma luz do que esta errado ou faltando????
O programa faz tudo certo ate chegar no local acima comentado.
carlucio
Byte
 
Mensagens: 118
Registrado em: 05 Jan 2014 15:07

AnteriorPróximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x