Révision 859
Ajouté par jeleroy il y a presque 4 ans
SP4c2.c | ||
---|---|---|
|
||
#include "sfr32c87.h"
|
||
|
||
void uart0_init(void);
|
||
void uart0_tx(char c);
|
||
char uart0_rx(void);
|
||
int rec_trame(char* trame);
|
||
int hex2int(char* c);
|
||
|
||
void uart0_init(void){
|
||
//Configuration des ports en entr?e ou en sortie
|
||
... | ... | |
}
|
||
|
||
int rec_trame(char* trame){
|
||
int i = 0;
|
||
int i = 1,trame_ok =0;
|
||
int check_sum=0;
|
||
char check_sum_trame[2];
|
||
char c;
|
||
|
||
while (uart0_rx() != '$');
|
||
|
||
while ((c = uart0_rx()) != '*'){
|
||
while (uart0_rx() != '$'); //Tant qu'on ne re?oit pas le carat?re quii indique le d?but de la trame, on attend
|
||
while ((c = uart0_rx()) != '*'){//Reception des caracteres jusqu'? la fin de la trame
|
||
trame[i] = c;
|
||
check_sum ^= trame[i]; //Calcul du checksum de la trame re?ue
|
||
i++;
|
||
}
|
||
|
||
check_sum_trame[1] = uart0_rx(); //Acquisition du premier caractere du checksum
|
||
check_sum_trame[0] = uart0_rx();//Acquisition du deuxieme caractere du checksum
|
||
|
||
|
||
if (check_sum == hex2int(check_sum_trame)){
|
||
trame_ok = 1;
|
||
}else{
|
||
trame_ok = 0;
|
||
}
|
||
uart0_tx(trame_ok);
|
||
|
||
return i;
|
||
}
|
||
|
||
int hex2int(char* c){
|
||
int i;
|
||
|
||
for(i=0;i<2;i++){
|
||
if(c[i] >= '0' && c[i] <= '9'){
|
||
c[i] = c[i] - 48;
|
||
}
|
||
|
||
if(c[i] >= 'A' && c[i] <= 'F'){ //
|
||
c[i] = c[i] - 'A' + 10;
|
||
}
|
||
}
|
||
|
||
return(c[0] + 16* c[1]);
|
||
|
||
}
|
||
|
||
void uart0_tx(char c){
|
||
while(ti_u0c1 != 1); //tant qu'il n'y a pas de donn?e dans le registre de transmission
|
||
u0tb = c;
|
||
... | ... | |
uart0_init();
|
||
|
||
while(1){
|
||
uart0_tx(rec_trame(trame));
|
||
rec_trame(trame); //Reception de la trame
|
||
}
|
||
|
||
}
|
Formats disponibles : Unified diff
Fin TP SP4_c1