Buenas tardes a todos, llevo 3 días atascado en una parte muy simple de la interrupción de puerto serie para la comunicación con un dsPIC.
Lo único que quiero es recibir desde PC un dato y volver a mandarle para comprobar, todo esto dentro de la interrupcion del puerto serie.
El código es muy simple
void __attribute__((interrupt,auto_psv)) _U1RXInterrupt(void)
{
char mand[50];
char rec[10];
int a=0;
double n;
DisableIntU1RX;
while(!DataRdyUART1())
a=getsUART1(6, (unsigned int*)rec, 20); //lectura puerto serie
n=atof(rec); //convertir a double
sprintf(mand,"a=%d result %f",a,n);
putsUART1((unsigned int *)mand);
while(BusyUART1());
CloseUART1();
OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);
EnableIntU1RX;
}
La interrupcion funciona y el envio al PC de un dato que yo quiera o una cadena funciona perfectamente, pero no logro leer correcto lo que mando yo desde el PC
Seguro que es un error muy simple, pero no logro resolverlo.
Con este código me llega siempre el mismo valor.
para sustituir la función atof, lo que he hecho para probar ha sido
n=(double)rec[0]*10+(double)rec[1]+(double)rec[2]/10+(double)rec[3]/100+(double)rec[4]/1000;
y el resultado es siempre el mismo independiente de lo que mande desde PC
Muchas gracias de antemano
Lo único que quiero es recibir desde PC un dato y volver a mandarle para comprobar, todo esto dentro de la interrupcion del puerto serie.
El código es muy simple
void __attribute__((interrupt,auto_psv)) _U1RXInterrupt(void)
{
char mand[50];
char rec[10];
int a=0;
double n;
DisableIntU1RX;
while(!DataRdyUART1())
a=getsUART1(6, (unsigned int*)rec, 20); //lectura puerto serie
n=atof(rec); //convertir a double
sprintf(mand,"a=%d result %f",a,n);
putsUART1((unsigned int *)mand);
while(BusyUART1());
CloseUART1();
OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);
EnableIntU1RX;
}
La interrupcion funciona y el envio al PC de un dato que yo quiera o una cadena funciona perfectamente, pero no logro leer correcto lo que mando yo desde el PC
Seguro que es un error muy simple, pero no logro resolverlo.
Con este código me llega siempre el mismo valor.
para sustituir la función atof, lo que he hecho para probar ha sido
n=(double)rec[0]*10+(double)rec[1]+(double)rec[2]/10+(double)rec[3]/100+(double)rec[4]/1000;
y el resultado es siempre el mismo independiente de lo que mande desde PC
Muchas gracias de antemano