08/09/2017
Simplificando o exemplo acima para RESET em caso de travamento na recepção de dados pela porta SERIAL.
// COMPILADOR CCS
// Declare estes registradores no inicio no código ==============
// Atenção!!!: o endereço 0xFAB é do registrador RCSTA, no caso abaixo este endereço é para o PIC18F452
// você deve verificar o endereço de acordo com o PIC que você estiver utilizando.Ex: pic16F628A o end. é: 0X18
#bit SPEN=0XFAB.7
#bit CREN=0XFAB.4
#bit FERR=0XFAB.2
#bit OERR=0XFAB.1
//===================================================
// Reinicializa a porta RS232
void RestartRS232() // Rotina de verificação de erro, chame ela no inicio da função de interrupção: Veja exemplo abaixo.
{
if (OERR || FERR) // Tratamento de Erro RS232
{ // Reseta/Limpa erros na usart de recepção
SPEN = 1;
CREN = 0;
delay_us (1);
CREN = 1;
delay_us (1);
}
}
#int_RDA
void RDA_isr(void)
{
RestartRS232(); // Verifica erros de travamento
//...
//...
// seu codigo
}