1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
/* ****************************************************************************************** */
/* SOUS PROGRAMME D'ENVOI DU MESSAGE ET DE GESTION DE L'ETAT DE LA PILE */
/* Utilise le sous programme d'envoi du message à la centrale */
/* ****************************************************************************************** */
/* test de la pile et envoie de la trame */
void trame_pile (void)
{
checksum ();
message ();
}
/* ****************************************************************************************** */
/* SOUS PROGRAMME FAISANT LE CHEKSUM POUR LE DERNIER QUARTET */
/* ****************************************************************************************** */
void chesksum (void)
{
tableau[7] = 0;
for (i = 0; i <= 6; i++)
{
tableau[7] = tableau[7] = tableau[i];
}
tableau[7] = tableau[7] & 0x0f;
}
/* ****************************************************************************************** */
/* SOUS PROGRAMME DE TEMPORISATION PARAMETRABLE PAR UN ENTIER */
/* Pour le 80C51 avec un quartz a 12MHz (ou 80552 de WR kit) */
/* 11 => 220 us */
/* 20 => 360 us */
/* 29 => 500 us */
/* 50 => 840 us */
/* 6098 => 80 ms */
/* ****************************************************************************************** */
void tempo_courte (int valeur)
{
int i;
for (i = 0; i < valeur; i++)
{
}
}
/* ****************************************************************************************** */
/* SOUS PROGRAMME D'ENVOI DU MESSAGE A LA CENTRALE */
/* 1 salve de 10 trames */
/* ****************************************************************************************** */
/* envoi du vrai message */
void message (void)
{
char trames = 10;
char num_quartet, num_bit, quartet_en_cours, quartet_masque;
trames = 10 while (trames)
/*bit de strart */
{
P3_5 = 1;
tempo_courte (29);
P3_5 = 0;
tempo_courte (11);
/*envoie d'une trame */
for (nu_quartet = 0; num_quartet <= 7; num_quartet++)
{
quartet_en_cours = tableau[num_quartet];
for (num_bit = 0; num_bit <= 3; num_bit++)
{
quratet_message = quartet_en_cours & 0x01;
if (quartet_masque)
/*bit à 1 */
{
P3_5 = 1;
tempo_courte (20);
P3_5 = 0;
tempo_courte (11);
}
else
/*bit à 0 */
{
P3_5 = 1;
tempo_courte (11);
P3_5 = 0;
tempo_courte (20);
}
quartet_en_cours = quartet_en_cours >> 1;
/* fin du for (num_bit=0 ...) */
}
/* fin du for (num_quartet=0 ...) */
}
/* bit de stop en fin de trame */
P3_5 = 1;
tempo_courte (50);
P3_5 = 0;
/* tempo inter-trames de 80 ms */
/* fin du while (trames) */
tempo_courte (6098);
trames--;
}
/* fin de l'envoi du message */
} |
Partager