Estou tentando utilizar um código para ler os botões de um controle remoto ECP no PIC 16F628A e não funciona
O mais estranho é que com o 16F877A funcionou perfeitamente, mas com o 16F628A não
O código eu peguei nesse tópico aqui :
http://forum.clubedohardware.com.br/top ... lli/page-2
Fiz as adaptações para o 16F628A e ficou assim:
- Código: Selecionar todos
#include <16F628A.h>
#FUSES HS, NOWDT, NOPROTECT,NOLVP,BROWNOUT, PUT
#use delay(clock = 4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
//#define lcd_enable pin_B0 // pino enable do LCD
//#define lcd_rs pin_B1 // pino rs do LCD
//#define lcd_wr pin_B2 // pino rs do LCD
//#define lcd_d4 pin_B4 // pino de dados d4 do LCD
//#define lcd_d5 pin_B5 // pino de dados d5 do LCD
//#define lcd_d6 pin_B6 // pino de dados d6 do LCD
//#define lcd_d7 pin_B7 // pino de dados d7 do LCD
#include "lcd.c"
#use fast_io(A)
#use fast_io(B)
#define RFIn PIN_B0 //entrada do sinal de RF
#define NBIT 28 // numero de bits
INT32 DATA=0;
int1 decoder(void)
{
byte x=0;
int16 time_aux=0;
DATA=0;
while(!input_state(RFIn))
{
time_aux++;
delay_us(10);
}
if((time_aux>1149) || (time_aux<=1151))
{
for(x=0;x<NBIT;x++)
{
while(input_state(RFin));
delay_us(250);
if(input_state(RFIn))
{
return FALSE;
}
delay_us(500);
if(!input_state(RFIn))
{
data|=0x8000000;
data>>=1;
}else data>>=1;
delay_us(500);
if(!input_state(RFin))
{
return FALSE;
}
}
return TRUE;
}
else return FALSE;
}
void main()
{
set_tris_A(0b00000000);
lcd_init();
while (TRUE) {
decoder();
printf(lcd_putc,"\fC: %Lu\nRECV",DATA);
delay_ms(5);
if(DATA==112971776){
output_toggle(PIN_A0);
delay_ms(500);
}
else if(DATA==110874624){
output_toggle(PIN_A1);
delay_ms(500);
}
else if(DATA==111923200){
output_toggle(PIN_A2);
delay_ms(500);
}
}
}
Na verdade o que estou tentando fazer aqora é acionar os LEDS das portas A0,A1 e A2 com os códigos dos botões que eu já li usando o 16F877A.
Eu montei o mesmo código como 16F877A e ele aciona os LEDS perfeitamente
Não consegui descobrir o porque de não estar funcionando
Alguém pode me ajudar a resolver esse mistério?