Projet

Général

Profil

« Précédent | Suivant » 

Révision 859

Ajouté par jeleroy il y a presque 4 ans

Fin TP SP4_c1

Voir les différences:

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