La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Développement logiciel pour microcontrôleurs PIC

Présentations similaires


Présentation au sujet: "Développement logiciel pour microcontrôleurs PIC"— Transcription de la présentation:

1 Développement logiciel pour microcontrôleurs PIC
Langage C T.Berenguer

2 Développement d ’un projet
Ecriture algorithme non Ecriture du logiciel Ecriture du source oui Compilation Erreurs ? Test du logiciel sur le matériel Debug du programme non Fonctionnement OK ? oui Programmation de la carte Fin du projet

3 Flux de données d ’un projet
Fichiers source fichier1.c fichier2.c fichier3.asm mcc18 MPASMWIN Assembleur Compilateur Script pour le linkage fichier1.o fichier2.o fichier3.o Bibliothèques Fichiers objet lib1.lib script.lkr mplink Editeur de liens projet.hex projet.map projet.cof Fichiers de sortie Debug Programmation du composant

4 Programme source en C Commentaire /* bla bla Insertion d ’un fichier
sur plusieurs lignes bla bla */ Insertion d ’un fichier #include < nom.ext > défini dans options #include " nom.ext "  dans dossier local Commentaire // bla bla sur 1 ligne Définition équivalence #define symbole valeur Déclaration des variables m , c , d u sont des octets en RAM Unsigned, char, void, while, if … sont des mots réservés. Il y en a 32 en C. Les accolades indiques aussi le début et la fin des fonctions. Fonction principale Son nom est main, c ’est un mot réservé. Le point virgule indique la fin d ’une instruction. On peut mettre plusieurs instructions sur une ligne. Un couple d ’accolades indique le début { et la fin } d ’un bloc d ’instructions.

5 Type longueur domaine de valeur
Les types de données Type longueur domaine de valeur char ou signed char 8bits … 127 unsigned char 8bits int ou short 16bits … 32767 unsigned int 16bits long 32bits unsigned long 32bits … short long 24bits unsigned short long 24bits … float ou double 32bits -3, , double 64bits -1, ,

6 Déclaration des données en RAM
Une variable doit être déclarée avant d ’être utilisée type nom; unsigned char unit; // unit est un octet placé en RAM int maxi; // maxi mot 16 bit …32767 placé en RAM char lettre; // lettre est un caractère code ASCII placé en RAM type nom = valeur_initiale; unsigned char unit = 10; // unit est un octet initialisé à 10 en RAM int maxi = 1024; // maxi mot 16 bit initialisé à 1024 en RAM char lettre = ‘A’; // caractère A code ASCII 65 en RAM unsigned char unit; unsigned char UNIT; unsigned char Unit; Ces 3 variables sont différentes ! Le langage C fait la différence entre les MAJUSCULES et les minuscules

7 Déclaration des données en ROM
Elles sont rangées dans la ROM et ne sont donc pas modifiables rom type nom = valeur_initiale; rom unsigned char unit = 10; // unit est un octet initialisé à 10 en ROM rom int maxi = 1024; // maxi mot 16 bit initialisé à 1024 en ROM rom char lettre = ‘A’; // caractère A code ASCII 65 en ROM

8 #define nom valeur Les équivalences sont remplacées par leur valeur
Equivalences Les équivalences sont remplacées par leur valeur par le pré-processeur du compilateur. #define nom valeur Espaces ou tabulations Une équivalence n ’est pas une instruction du programme mais une directive pour le compilateur afin de faciliter la programmation. #define maxi 150 temperature = maxi; // la variable temperature prend la valeur 150 #define led_allume 1 #define led_eteinte 0 led1 = led_allume; // la variable led1 prend la valeur 1 led2 = led_eteinte; // la variable led2 prend la valeur 0

9 Les fonctions prog void buzzer (void) { …. ….. } Initialisation
des ports Led1 éteinte BP activé ? Led1 allumée Gestion du buzzer void init_port (void) { …. ….. } void main (void) { init_port(); led1 = 0; while(1) if(bp == 0) led1 = 1; buzzer(); } else led1 = 0;

10 Les opérateurs arithmétiques
c = a + 2; // c = 5 Addition + a = 3; c = a - 2; // c = 1 Soustraction - a = 3; b = 11; c = a + b; // c = 33 Multiplication * a = 75; b = 3; c = a / b; // c = 25 Division / a = 75; diz = a / 10; // diz = 7 unite = a % // unite = 5 c ’est à dire le reste Modulo % Reste de la division

11 Base 10 décimal Base 16 hexadécimal Base 2 binaire
Bases Base 10 décimal symboles : a = 26; c = a + 857; Base 16 hexadécimal symboles : a b c d e f A B C D E F la nombre est précédé de 0x... a = 0x1a; // a = 26 a = 0x1A; // a = 26 a = 0x001a; // a = 26 Base 2 binaire symboles : 0 1 la nombre est précédé de 0b... a = 0b11010; // a = 26 a = 0b ; // a = 26 Le programmeur utilisera la base la plus adaptée et la plus facile à manipuler Le compilateur accepte aussi l ’utilisation de bases différentes dans un calcul : - a = 0x01101 >> 3; - b = ( c * 2 ) + ( a / 0b1010 );

12 Les opérateurs logiques
a = 0b ; c = a & 0b ; // c = 0b ET & a = 0b ; c = a | 0b ; // c = 0b OU | a = 0x03; c = ~ a; // c = 0xFC Complément ~ a = 0b ; b = 0b ; c = a ^ b; // c = 0b OU exclusif ^ a = 0b ; c = a >> 2; // c = 0b ; Décalage à DROITE >> a = 0b ; c = a << 2; // c = 0b ; Décalage à GAUCHE <<

13 Liste de variables ou de constantes
Autres opérateurs a = 55; a++; // a = 56 Incrément a = 20; a--; // a = 19 Décrément a = 55; // a prend la valeur 55 a = a + b; // la somme de a et b est mise dans a Affectation = Séparateur ; a = 55; b = a + 1; Début et fin des fonctions Dans les tableaux pour séparer les éléments Utilisé dans les tests IF..THEN SWITCH.. CASE Utilisé dans les boucles FOR WHILE DO..WHILE Etc ... Bloc d ’instruction { } Liste de variables ou de constantes Séparateur , unsigned char TAB[5] = { 2, 5, 8, 20, 5 }; // tableau de 5 valeurs

14 Instruction conditionnelle IF…. ELSE
? Action 1 Action 2 Vrai Fausse if( a > b ) c = c - a; else c = c- b; Action1 et action2 sont une seule instruction Action1 et action2 sont un bloc d ’instructions if( a > b ) { c = c - a; d = c - a; } else { c = c - b; d = c - b; Si la condition est vrai faire l ’action 1 sinon faire action 2 ELSE n ’existe pas if( a > b ) { c = c - a; d = c - a; } if( condition ) action1; else action2; if( (a > b) && ( b > 0) ) c = c - a; else c = c- b; Condition multiples

15 Opérateurs de comparaison
Supérieur > Supérieur ou égal >= Inférieur < Inférieur ou égal <= Egal == Différent != if( a > b ) if( a >= b ) if( a < b ) if( a <= b ) if( a == b ) if( a != b ) if( a = b ) ... else ... Ne pas confondre : l ’ affectation = le test de comparaison == Le compilateur ne détectera pas d ’erreur mais le résultat ne sera pas celui escompté Simplification if( a ) … else … ce test est : vrai si a > 0 faux si a = 0 Opérateurs logique de test ET && OU || NON ! if( (a > b) && ( b > 0) ) if( (a > b) || ( b > 0) ) if( !( a == b) )

16 Instruction conditionnelle SWITCH … CASE
Remplace une suite de IF .. ELSE expression doit être un entier ou un caractère. Switch compare cette expression aux valeurs des différents case. L ’instruction break permet de sortir d ’un bloc. Ici cela permet de ne pas tester les case suivants. Default est effectué si aucun des case n ’est effectué. switch ( expression ) { case valeur1 : instruction(s) 1; break; case valeur2 : instruction(s) 2; break; case valeur3 : instruction(s) 3; break; default : instruction(s) par défaut; } Valeur led1 led2 led3 1 2 3 4 5 6 7 switch ( valeur ) { case 1 : led1 = 1; led2 = 0; led3 = 0; break; case 2 : led1 = 0; led2 = 1; led3 = 0; break; case 7 : led3 = 1; case 3 : led1 = 1; led2 = 1; break; default : led1 = 0; led2 = 0; led3 = 0; } x Répondre par 1 x si pas de modification

17 Boucle FOR Initialisation
Condition ? Action Modification Sortie de la boucle Initialisation for ( initialisation ; condition ; modification ) { action; … ; } Version 1 for( x = 0 ; x < 5 ; x++ ) { action; } Version 2 for( x = 5 ; x > 0 ; x-- ) { action; } Version 2 simplifiée for( x = 5 ; x ; x-- ) { action; } Ces 2 boucles sont identiques. Action est exécutée 5 fois Attention aux conditions qui rendent la boucle infinie. x est vrai si x > 0 donc la boucle sera exécutée tant que x > 0

18 Tant que condition vraie faire...
Boucle WHILE Tant que condition vraie faire... Condition ? Action Sortie de la boucle while (condition) { action; … ; } Cette boucle est identique à une boucle FOR x = 0; while ( x < 5 ) { action; x++; } Dans cette boucle action ne sera jamais exécutée car la condition est déjà fausse lors de la première entrée. x = 10; while ( x < 5 ) { action; x++; } while ( 1 ) { action; … … ; } Soit un bouton poussoir qui donne 0 si il est appuyé. Ici on fait l ’action tant que le poussoir est maintenu appuyé. On sort de la boucle quant le bouton n ’est plus appuyé. while ( bouton == 0 ) { action; } while(1) est une boucle qui permet d ’exécuter indéfiniment un bloc d ’instructions. Cette boucle est volontairement rendue infinie en testant une condition toujours vrai : 1 étant > 0 donc vrai On trouve très souvent une boucle while(1) dans la fonction main().

19 Faire... tant que condition vraie
Boucle DO … WHILE Faire... tant que condition vraie Condition ? Action Sortie de la boucle do { action; … ; } while (condition); Action est toujours exécutée au moins une fois que condition soit vraie ou fausse. x = 0; total = 0; do { total = total + x; x++; } while ( x < 5 ); Nombre d ’exécutions de la boucle : A la sortie de la boucle total = 5 10

20 type nom[taille] = { éléments … } ;
LES TABLEAUX Un tableau permet de regrouper des variables ou des constantes de même type. Ces variables ou constantes sont appelées éléments du tableau. Un tableau doit être déclaré avant son utilisation. Obligatoire comme pour les variables et constantes Nom du tableau, respecter la case. Indique le nombre d ’éléments du tableau. L ’initialisation est facultative elle est de la forme : = { élément0 , élément1 , , élémentx } type nom[taille] = { éléments … } ; unsigned char TABLEAU[5] = { 1 , 10 , 30 , 40 , 50 } ; X = TABLEAU[0]; X = TABLEAU[3]; // x = indice 0 = premier élément du tableau // x = indice 3 = quatrième élément du tableau somme = 0; for(i = 0 ; i < 5 ; i++ ) { somme = somme + TABLEAU[i]; } Nombre d ’exécutions de la boucle : A la sortie de la boucle somme = 5 131

21 Fin de la première partie
...C Fin de la première partie à suivre...


Télécharger ppt "Développement logiciel pour microcontrôleurs PIC"

Présentations similaires


Annonces Google