Révision 847
Ajouté par albest il y a presque 4 ans
branch/best/sp4c12/SP4b1/SP4b1/SP4b1.c | ||
---|---|---|
void uart0_tx(char c); //Envoie d'un caract?re
|
||
char uart0_rx(void); //Fonction d'attente et lecture d'un caract?re
|
||
int rectrame(char * Buffer);
|
||
int hex2int(char *c); //Passage hexa en int
|
||
|
||
char * Buff;
|
||
/*Variable Globale*/
|
||
int trame_ok;
|
||
|
||
|
||
void main(void)
|
||
{
|
||
char Buffer[80];
|
||
|
||
uart0_init();
|
||
while(1){
|
||
uart0_tx(rectrame(Buff));
|
||
uart0_tx(rectrame(Buffer)+48);
|
||
if (trame_ok == 1){
|
||
uart0_tx('O');
|
||
}
|
||
else{
|
||
uart0_tx('N');
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
void uart0_init(void){
|
||
u0mr = 0x05;
|
||
... | ... | |
}
|
||
|
||
int rectrame(char * Buffer){
|
||
int i = 0;
|
||
char car_recu;
|
||
char checksum = '0';
|
||
int i;
|
||
char checksum;
|
||
char carac_recu;
|
||
char checksum_trame[3];
|
||
|
||
|
||
car_recu = uart0_rx();
|
||
while (uart0_rx() != '$');
|
||
i = 0;
|
||
checksum = 0; //'0'
|
||
while ((carac_recu = uart0_rx()) != '*'){
|
||
|
||
Buffer[i++] = carac_recu;
|
||
checksum = checksum ^ carac_recu; // ^ est le ou exclusif
|
||
}
|
||
|
||
while (car_recu != '$'){
|
||
i = 0;
|
||
checksum = '0';
|
||
checksum_trame[0] = uart0_rx();
|
||
checksum_trame[1] = uart0_rx();
|
||
|
||
if (checksum == hex2int(checksum_trame)){
|
||
trame_ok = 1;
|
||
}
|
||
while (car_recu != '*'){
|
||
Buffer[i++] = car_recu;
|
||
checksum = checksum ^ car_recu; // ^ est le ou exclusif
|
||
else{
|
||
trame_ok = 0;
|
||
}
|
||
return i;
|
||
}
|
||
|
||
int hex2int(char *c)
|
||
{
|
||
int i=0;
|
||
|
||
for(i=0; i<2; i++)
|
||
{
|
||
if(c[i]>='0' && c[i]<='9')
|
||
{
|
||
c[i] = c[i] - '0';
|
||
}
|
||
|
||
if(c[i]>='A' && c[i]<='F')
|
||
{
|
||
c[i] = c[i] - 'A' + 10;
|
||
}
|
||
}
|
||
return(c[1]+16*c[0]);
|
||
}
|
Formats disponibles : Unified diff
Realisation de la fonction rectrame v1