Página 1 de 1

Comunicação serial entre PIC's 16F877A - resolvido

MensagemEnviado: 13 Nov 2008 16:14
por alexhnunes
Boa tarde.
Estou com o seguinte problema: necessito fazer um painel de sinalização (são 03), sendo que existirá dois que controlam (um liga e outro desliga) e outro que só servirá de visualização.
Já desenvolvi o programa em CCS. Os botões de acionamento, além de ligarem os "led's" respectivos, enviam o protocolo corretamente.
O problema está no recebimento da serial (estou utilizando RS485). Na simulação e no circuito real, tentei utilizar a instrução kbhit seguida de um gets() (já tentei o getc() tbm, sem sucesso) e depois tentei fazer uma int_rda, que tbm não funciona (mesmo com as habilitações "global|int_rda"). O programa roda perfeitamente e não trava, ele só não está pegando os dados quando escrevo na serial.
Poderia ser algum fusível configurado erroneamente?

Grato pela ajuda
Alexandre

MensagemEnviado: 14 Nov 2008 15:39
por tcpipchip
Ta com cara de OVERRUN...
Pelo menos recebe um caractere ????
Veja em negrito...
Eu fiz este programa 10 anos atras no CCS e funcionava bem a serial...

#use RS232 (BAUD=19200,XMIT=PIN_C6,RCV=PIN_C7,RESTART_WDT,PARITY=N,BITS=8)

#bit cren = 0x18.4 // Continuous recive bit
#bit ferr = 0x18.2 // Framing Error bit
#bit oerr = 0x18.1 // Overrun Error bit
#bit adden = 0x18.3


char timed_getc() {

long timeout;

unsigned char car_temp;

timeout_error=FALSE;

timeout=0;

while(!kbhit()&&(++timeout<5000)) // 1/2 second

delay_us(10);

if(kbhit())
{
car_temp=getc();
if(oerr)
{
cren=0;
cren=1;
adden=1;
}
return(car_temp);
}

else {

timeout_error=TRUE;

return(0);

}

}

Eu implementei um GETC com TIMEOUT

MensagemEnviado: 19 Nov 2008 13:19
por alexhnunes
Obrigado, tcpipchip!

Resolvi o problema, era um comando para limpar a serial que eu havia incluído, porém não tinha mudado a quantidade de caracteres que ela deveria limpar, estava a mais. Depois que acertei isso, o programa voltou a funcionar legal...

Grato