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();
 
}