Projet

Général

Profil

« Précédent | Suivant » 

Révision 868

Ajouté par gasacco il y a environ 4 ans

Fonction Rectrame avec checksum sans interruption

Voir les différences:

branch/sacco/sp4c12/SP4c1/SP4c1/uart0.c
}
}
int hex2int( char*c)
{
int i =0;
int dec =0;
for( i; i<=1;i++)
{
if(c[i] >=65 && c[i]<=70)
{
c[i] = c[i]-55;
}
else
{
c[i] = c[i]-48;
}
}
dec = c[0]*16+c[1];
return dec;
}
short recTrame (char *Buffer)
int trame_ok;
int recTrame (char *Buffer)
{
int i=0;
char CS =0;
char CS =0x00;
int CS_dec;
char CS_reel[2];
int CS_reel_dec;
char a;
char CS_reel[1];
while (uart0_rx() !='$');
while (a = uart0_rx() != '*')
a = uart0_rx();
while (a != '*')
{
Buffer[i] = a;
CS = Buffer[i] + CS;
i++;
CS = Buffer[i]^CS;
i++;
a = uart0_rx();
}
CS_reel[0] = uart0_rx();
CS_reel[1] = uart0_rx();
CS_reel_dec = hex2int(CS_reel);
CS_dec = (int) CS;
CS_reel[0] = uart0_rx();
CS_reel[1] = uart0_rx();
if (CS_reel[0] + CS_reel[1] == CS)
if (CS_dec ==CS_reel_dec)
{
uart0_tx('Y');
trame_ok =1;
}
else
{
trame_ok =0;
}
return i;
}
......
while (1)
{
nb1 = (char) (recTrame(trame))/10;
nb1 = (char) (recTrame(trame))/10;
nb2 = (char) (recTrame(trame))%10;
uart0_tx(nb1+48);
uart0_tx(nb2+48);
if (trame_ok)
{
uart0_tx(nb1+48);
uart0_tx(nb2+48);
}
}
}

Formats disponibles : Unified diff