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
Tags:
Amigo, por curiosidade: qual o ambiente que vc está programando? Qual a placa ou processador?
Respondendo:
CCS;
PIC 16F628a
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por