Révision 869
Ajouté par celasherme il y a environ 4 ans
SP4c1.c | ||
---|---|---|
|
||
#include "sfr32c87.h"
|
||
|
||
// variable globale
|
||
int trame_ok;
|
||
|
||
// initialisation du port serie
|
||
void uart0_init (void)
|
||
{
|
||
... | ... | |
return u0rb;
|
||
}
|
||
|
||
int hex2int (char * c) // permet de convertir de l'hexa vers le decimal
|
||
{
|
||
int i;
|
||
int a;
|
||
for (i=0;i<2;i++)
|
||
{
|
||
if (c[i] >= '0' && c[i]<='9')
|
||
{
|
||
c[i]=c[i]-'0';
|
||
}
|
||
else
|
||
{
|
||
c[i]=c[i]-55;
|
||
}
|
||
}
|
||
a =(c[1] + 16*c[0]);
|
||
return a;
|
||
}
|
||
|
||
char checksum=0;
|
||
|
||
int rectrame(char * Buffer)
|
||
{
|
||
int i=0;
|
||
char c;
|
||
while(uart0_rx()!='$');
|
||
c = uart0_rx();
|
||
while(c!='*')
|
||
|
||
char calc_checksum[2];
|
||
char verif_checksum;
|
||
|
||
while(uart0_rx()!='$'); // on attend d'avoir le debut de la trame avec $
|
||
c = uart0_rx(); // sinon on lit deux fois un uart different
|
||
while(c!='*') // tant qu'on atteint pas la fin de la trame avec *
|
||
{
|
||
|
||
Buffer[i]= c;
|
||
i=i+1;
|
||
Buffer[i]= c; // on met dans le buffer la trame
|
||
i=i+1; // on incremente de 1
|
||
checksum=checksum^c; // ^ pour le ou exclusif entre toutes les valeurs
|
||
c = uart0_rx();
|
||
|
||
}
|
||
calc_checksum[0]=uart0_rx();
|
||
calc_checksum[1]=uart0_rx();
|
||
verif_checksum =hex2int(calc_checksum);
|
||
if ( (int) checksum == hex2int(calc_checksum))
|
||
{
|
||
trame_ok=1;
|
||
//uart0_tx('O');
|
||
}
|
||
else
|
||
{
|
||
trame_ok=0;
|
||
|
||
}
|
||
|
||
return i;
|
||
}
|
||
|
||
... | ... | |
uart0_tx(carac); // on affiche la nouvelle lettre a chaque fois
|
||
}
|
||
}*/
|
||
|
||
|
||
|
||
char c1,c2;
|
||
char trame[100]; // tableau pour stocker la trame
|
||
uart0_init(); // initialisation
|
||
|
||
|
||
while(1)
|
||
{
|
||
//uart0_tx(uart0_rx()+1);//On utilise la fonction tx pour ecrire sur le terminal le resultat que renvoie rx
|
||
|
||
c1=(char)(rectrame(trame)/10); // On divise par 10 pour avoir 6
|
||
c2=(char)(rectrame(trame)%10); // on recupere le modulo de la division soit ici 2
|
||
// c1=(char)(rectrame(trame)/10); // On divise par 10 pour avoir 6 car l'uart n'envoi qu'un carac par carac
|
||
// c2=(char)(rectrame(trame)%10); // on recupere le modulo de la division soit ici 2 donc les unit? pour au final avoir 62
|
||
|
||
uart0_tx(c1+48);
|
||
uart0_tx(c2+48);
|
||
|
||
// uart0_tx(c1+48);
|
||
// uart0_tx(c2+48);
|
||
|
||
|
||
uart0_tx(rectrame(trame)+48);
|
||
|
||
if (trame_ok==1)
|
||
{
|
||
uart0_tx('O');
|
||
uart0_tx('K');
|
||
}
|
||
if (trame_ok==0)
|
||
{
|
||
uart0_tx('N');
|
||
uart0_tx('O');
|
||
uart0_tx('N');
|
||
}
|
||
}
|
||
}
|
Formats disponibles : Unified diff
continuation fonction rectrame avec checksum