unsigned char OutData[] = {"$TS=0000 S0=0000 S1=0000 S2=0000 S3=0000 SR0=0000.00\r"};
#define OffsetTimeStamp 4 // offset in OutData : position de la val de TimeStamp
#define OffsetSensor0_T 12 // offset in OutData : position de la val de Sensor0_T
#define OffsetSensor1_T 20 // offset in OutData : position de la val de Sensor1_T
#define OffsetSensor2_T 28 // offset in OutData : position de la val de Sensor2_T
#define OffsetSensor3_T 36 // offset in OutData : position de la val de Sensor3_T
#define OffsetSensor0_Tr 45 // offset in OutData : position de la val de Sensor0_Tr
int SeqComm;
//#define SeqCommMax 5000 // ttes les 1 s
//#define SeqCommMax 2500 // combien de fois pour ariver en Te=0.50s avec des pas de 200us :
#define SeqCommMax 1250 // combien de fois pour ariver en Te=0.25s avec des pas de 200us :
//----------------------------------------------------
// Convertit un "Word" hexa en "4 chars Hexadécimaux"
// et les sort sur la table en memoire
//----------------------------------------------------
inline void ConvHexa(int Var, int tablePos, unsigned char * table)
{
int tmp;
tmp=Var & 0x000F;
if (tmp<=9) tmp+=0x30;
else tmp+=0x37;
table[tablePos+3]=tmp;
tmp=Var>>4 & 0x000F;
if (tmp<=9) tmp+=0x30;
else tmp+=0x37;
table[tablePos+2]=tmp;
tmp=Var>>8 & 0x000F;
if (tmp<=9) tmp+=0x30;
else tmp+=0x37;
table[tablePos+1]=tmp;
tmp=Var>>12 & 0x000F;
if (tmp<=9) tmp+=0x30;
else tmp+=0x37;
table[tablePos]=tmp;
}
//----------------------------------------------------
// Convertit un "12 bits" en "4 chars décimaux. 2 chars" xxxx.xx
// maximum : 1023.75 pour 12 bits
// et les sort sur la table en memoire
//----------------------------------------------------
inline void ConvDec(int Var, int tablePos, unsigned char * table)
{
unsigned int k;
unsigned char c;
// Char
k = Var>>2;
c = k/1000;
if (c > 0)
k = k - c*1000;
table[tablePos] =(c + 0x30);
c = k/100;
if (c > 0)
k = k - c*100;
table[tablePos+1]=(c + 0x30);
c = k/10;
if (c > 0)
k = k - c*10;
table[tablePos+2]=(c + 0x30);
table[tablePos+3]=(char)(k + 0x30);
// apres la virgule :
switch (Var & 0x03)
{
case 0 : table[tablePos+5]=0x30; // xxxx.00
table[tablePos+6]=0x30; break;
case 1 : table[tablePos+5]=0x32; // xxxx.25
table[tablePos+6]=0x35; break;
case 2 : table[tablePos+5]=0x35; // xxxx.50
table[tablePos+6]=0x30; break;
case 3 : table[tablePos+5]=0x37; // xxxx.75
table[tablePos+6]=0x35; break;
}
}
//-----------------------------------------------------------------------------
void SendMsg(void)
{
while (*TXPtr)
{
while (U1STAbits.UTXBF);
U1TXREG = *TXPtr++;
}
}
//------------------------------------------------------------------------
// SendData sends the debug information on the uart at 19200 baud
void SendData()
{
// Codage ASCII de la donnée hexa
ConvHexa( TimeStamp, OffsetTimeStamp, OutData); // TimeStamp en Hexa
ConvHexa( Sensor0_T, OffsetSensor0_T, OutData); // Sensor0_T en Hexa
ConvHexa( Sensor1_T, OffsetSensor1_T, OutData); // Sensor1_T en Hexa
ConvHexa( Sensor2_T, OffsetSensor2_T, OutData); // Sensor2_T en Hexa
ConvHexa( Sensor3_T, OffsetSensor3_T, OutData); // Sensor3_T en Hexa
Sensor0_Tr=(Sensor0_T >> 3) & 0xFFF;
ConvDec( Sensor0_Tr, OffsetSensor0_Tr, OutData); // Sensor0_T en Decimal
TXPtr = &OutData[0];
SendMsg();
}