Ciao Marcop20
Prova a guardare questo mio topic di qualche tempo fa, forse può autarti
www.laurtec.it/forum/17-programmazione-m...errori-da-usart#7503
Nel mio programma la ricezione l'ho impostata così:
while (! DataRdyUSART()); // attende l'arrivo di un carattere
if(RCSTAbits.FERR==1 || RCSTAbits.OERR==1 )
{
RCSTAbits.CREN=0; //Overrun error (si azzere azzerando il registro CREN)
data=RCREG; //Svuoto il buffer
RCSTAbits.CREN=1; //Overrun error (si azzere settando il registro CREN)
goto esci;
}
data=RCREG; //legge il dato dalla seriale
WriteUSART(data); // reivia il dato su al PC
esci:
.
.
.
.
.
}
e funzione senza diminuire la velocità (9600) e senza inserire pause tra un carattere e l'altro
in un'alrto programma, che utilizza l'interrupt sulla seriale faccio così:
// Controllo che l'interrupt sia stato generato dall'USART
if (PIR1bits.RCIF==1)//è arrivato un carattere dalla EUSART ?
{
if(RCSTA&0x06) //molto più efficiente del controllo "if(RCSTAbits.FERR==1 || RCSTAbits.OERR==1 )"
{
RCSTAbits.CREN=0; //Overrun error (si azzere azzerando il registro CREN)
temp=RCREG; //Svuoto il buffer
RCSTAbits.CREN=1; //Overrun error (si azzere settando il registro CREN)
goto Esci_Int;
}
Esci_Int;
..
.
..
Forse anche quest'altro mio topic può interessarti
www.laurtec.it/forum/17-programmazione-m...limitstart=0&start=5
Spero possa esserti stato utile
ciao