Fala pessoal, blz?

Estou tentando montar um sistema que irá ler a porta serial e botões, seguindo um conselho segui a seguinte linha de raciocínio:

while(1){
   if(kbhit()){
   //FUNÇÃO PARA SERIAL
   }

   if(input(pin_b6)){
   //FUNÇÃO PARA RB6
   }

   if(input(pin_b7)){

   //FUNÇÃO PARA RB7
  }
}

O problema é que quando ele entra na serial não sai, ou seja digito "F" o sistema para ele não aceita mais nada, como possa forçar ele a voltar no loop? Segue o código que fiz para testes:

#include <16f628a.h>
#use delay (clock=4000000)
#fuses HS,NOWDT,PUT,NOLVP,XT,NOPUT,NOPROTECT,NOBROWNOUT
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,errors,stream=pc)


#int_ext
void direita ()
{
/*Abre para a direita */
if(!input_state(pin_b7))
output_high(pin_a2);
}


#int_ext1
void esquerda ()
{

/*Abre para a Esquerda */
if(!input_state(pin_b6))
output_high(pin_a3);

}


void main (void)
{

enable_interrupts(direita); //só um pino causará interrupção B7
enable_interrupts(esquerda); //só um pino causará interrupção B6
enable_interrupts(GLOBAL); //habilitando todas as interrupções


char dir; //variaveis de controle das lampadas
int opc; //variaveis de controle dos motores e switch-case

opc=0;

while(true){

while(!kbhit()); //aguarda até que seja recebido um dado na porta serial
dir=getc(); //armazena em c o caracter recebido na porta serial

//Direita
if (dir == 'd') //Abre janela
opc=1;
else if (dir == 'e') // fecha janela
opc=2;


switch(opc)
{
case 1: //Liga SALA
output_high(pin_a2);
delay_ms(100);
break;

case 2: //Desliga SALA
output_low(pin_b3);
delay_ms(100);
break;
}

} // Fim do While True

}//Fim do Void

Exibições: 363

Responder esta

Respostas a este tópico

Amigo, por curiosidade: qual o ambiente que vc está programando? Qual a placa ou processador?

Respondendo:

CCS;

PIC 16F628a

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço