Projet

Général

Profil

849 smseck1
/***********************************************************************/
/* */
/* FILE :sp4c1.c */
/* DATE :Wed, Jun 02, 2021 */
/* DESCRIPTION :main program file. */
/* CPU GROUP :87B */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.18). */
/* NOTE:THIS IS A TYPICAL EXAMPLE. */
/***********************************************************************/
#include "sfr32c87.h"

int trame_ok;
//les prototypes
void uart0_init (void);
void uart0_tx(char c);
void alphabet(char *chaine);
char uart0_rx(void);
int rectrame (char *buffer);

typedef enum
{
synchronisation,
reception,
checksum,
validation
} etat_machine;
etat_machine etat=synchronisation;




//Initialisation du port s?rie 0
void uart0_init(void)
{
u0mr = 0x05;
u0brg = 0x20;
u0c0 = 0x11;
u0c1 = 0x05;
pd6 = 0x08;
ps0 = 0x08;
psl0=0x00;
}
//Envoi d'un caract?re
void uart0_tx(char c)
{
while(ti_u0c1 !=1);
u0tb=c;
}
//Envoi une suite de caract?re de ?A? ? ?Z?
void alphabet(char *chaine)
{
int i=0;
while(chaine[i]!='\0')
{
uart0_tx(chaine[i]);
i++;
}
}
//fonction d'attente d'un caract?re sur la liaison s?rie et renvoie le caract?re suivant dans l'alphabet
char uart0_rx(void)
{
while(ri_u0c1!=1);
return u0rb;
}
/*int rectrame(char *buffer)
{
int i = 0;
char caractere_recu;
char checksum = '0';

caractere_recu = uart0_rx(); //lecture du caractere recu*
while ( caractere_recu != '$')//detection trame
{
i = 0;
checksum = 0;
}

while ( caractere_recu != '*') //memorisation de la trame re?ue
{
caractere_recu = uart0_rx();
buffer[i++] = caractere_recu;
checksum = checksum ^ caractere_recu;
}

return i ;
}*/

int rectrame(char *buffer)
{
int k=0;
int nombre_caractere_apres_etoile=0;
int nombre_caractere=0;
char caractere_recu;
char checksum_trame=0;
char checksum_fin_trame[];
char checksum_calculer=0;

while(1)
{

if (caractere_recu == '$')
{
nombre_caractere = 0;
etat=reception;
checksum_trame=0;
}

if (caractere_recu !='*')
{
buffer[nombre_caractere] = caractere_recu;
nombre_caractere++;
checksum_trame ^= caractere_recu;
nombre_caractere_apres_etoile = 0;
}
else
{
etat =checksum;
}
if (nombre_caractere_apres_etoile==2)
{
etat=validation;
checksum_calculer=hex_int(checksum_fin_trame);
}
nombre_caractere_apres_etoile++;


if (checksum_trame==checksum_calculer)
{
etat = synchronisation;
return nombre_caractere;
}
else

etat = synchronisation;
return 0;

return buffer[];
}
}



void main ()
{
char chaine[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char buffer[80];
uart0_init();
while(1)
alphabet(chaine);
RecTrame(buffer);

}