unsigned long ReadCount(void)
{
unsigned long Count;
unsigned char i;
ADDO=1;
ADSK=0;
Count=0;
while(ADDO);
for (i=0;i<24;i++)
{
ADSK=1;
Count=Count<<1;
ADSK=0;
if(ADDO) Count++;
}
ADSK=1;
Count=Count^0x800000;
ADSK=0;
return(Count);
} datos = ReadCount();
sprintf (salida,",%u,",datos);
USARTWriteString(salida);Tal ves por que estas recortandolo...Código: C
// Envio long datos; short int *ptr, i; datos = ReadCount(); ptr = &datos; for(i=0;i<3;i++) UARTWrite(*ptr++)Código: C
//Repecion long datos; shor int *ptr=&datos, i; bool dato_listo; interrupcion(){ *ptr++=RCREG; if (++i < 3) i=0; ptr=&datos; dato_listo=1 }
Ahora si envias mas cosas podrias enviarlo como hexa.. y algun tipo de printf sobre la UART.
Tengo un pointer de un entero de 8 bits llamado ptr, tengo ademas una variable "datos" de 24bits
lo que hice fue asignar al ptr la direccion de comienzo de la variable "datos.
Algo mas grafico. Supongamos que datos esta ubicado en 0x100 de la RAM
0x100 - 0x21
0x101 - 0x3F
0x102 - 0x89
Suponete que ese es tu numero de 24 bits, 0x213F89
hago que ptr sea 0x100
Envio lo que hay en 0x100 ( 0x21 ) e incremento, al incrementar como mi puntero es un short int ( 8 bits ) va a incrementar solo 1 byte. es decir va a apuntar a 0x101, y voy a enviar ahora 0x3F, luego ocurre lo mismo y envio 0x89.
Luego en tu programa en delphi vas a tener que recomponer eso.. puede ser muy simple si es un entero ( me explico en C )
Supongamos que los datos los guardas en un array asi: dato[0] = 0x21 , dato[1]= 0x3F , dato[2]= 0x89 , que son los valores y que llegan en ese orden
dato_recibido = (dato[0] << 16) + (dato[1] << 8 ) + dato[0]; // 0x210000 + 0x3F00 + 0x89 = 0x213F89
Y ya tenes tu dato en tu PC armado como lo tenias antes.
Tambien podes hacer una union con un array de 3 enteros. Eso depende de vos