Atelier du 23 février 2005

 
 
Jacques nous a démontré comme faire du son (Code Morse) en utilisant les nombres dans la table ASCII.
 
Voici un exemple de tableau ASCII et comment trouver la valeur de la lettre A :

 

 
Jacques nous a préparé ce tableau :
CONST INT8 CW [64]={0x00,1,1,1,1,1,1,1,1,1,1,1,1,0x31,1,0x29, // de 0 à 15
0x3F,0x3E,0x3C,0x38,0x30,0x20,0x21,0x23,0x27,0x2F,1,1,1,1,1,1,// de 16 à 31
1,0x06,0x11,0x15,0x09,0x02,0x14,0x0B,0x10,0x04,0x14,0x0D,0x12,
0x07,0x05,0x0F,// de 32 à 47
0x16,0x1B,0x0A,0x08,0x03,0x0C,0x18,0x0E,0x19,0x1D,0x13,1,1,1,1,1};// de 48 à 63
 
Voici une explication pour comprendre facilement ce tableau !
 
Comment dans ce tableau trouver la valeur de la lettre A ?
Si vous partez de 0000 en haut et 0000 à gauche qui est le "nul", comptez les cases pour vous rendre jusqu'à la lettre "A" : "nul = 1" "soh = 2" "stx = 3" ainsi de suite la lettre "A" qui est la 66 ième case dans le tableau.
 
Maintenant quel son doit on produire pour envoyer la lettre A en morse ?
Réponse : Dit Dah ou 0b00000110 en binaire, le "0" est un Dit et le Dah est un "1"
                  de plus dans le programme nous utilisons la fonction SHIFT RIGHT pour savoir
              quand la lettre est terminée, si la valeur de 0b00000110 est égale à 1 la lettre
              "A" est terminée.  Ce qui veux dire que dans 0b00000110 nous utilisons
              seulement les trois derniers nombre 0b00000110, à partir de la droite le 0
              qui donne le Dit, ainsi il ne reste que 0b00000011.  Le premier 1 qui donne le
              Dah, il ne reste que 0b00000001 et le dernier 1 permet de comparer dans la
              fonction if(shift_right(&lettre_cw,1,0) que 1 = 1 donc la lettre est terminée.
 
Ok, on transpose notre code binaire 0b00000110 en code Ascii.
 
Que vaut 0b00000110 en binaire ?
Le 0b00000110 vaut 0, le 0b00000110 vaut deux et le 0b00000110 vaut 4
soit 2 + 4 = 6.  Le chiffre 6 en Ascii comme en Hexadécimal vaut 0x06.
 
Retournons au tableau de Jacques pour trouver la valeur 0x06 !
Si nous comptons de gauche à droite le 0x00=1, 1=2, 1=3, jusqu'à 0x06=34
 
Petit problème ! Dans le tableau de code Ascii la lettre A est à la case 66, mais dans le
tableau de Jacques elle se retrouve à la 34 ième position.  Alors il faut enlever de 66 à 34
soit 32 pour trouver la lettre A.  Dans le programme on inscrit le 32 dans la fonction
lettre_cw=cw[cw_alpha-32];
 
 
Devoir de la semaine :
Jacques nous demande de trouver comment rappeler le flag de l'interruption external.
 
Voici la dernière version du programme