21
Développement logiciel pour microcontrôleurs PIC Langage C T.Berengue r

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

Embed Size (px)

Citation preview

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

Développement logicielpour

microcontrôleurs PIC

Langage C

T.Berenguer

Page 2: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Développement d ’un projet

Projet

Ecriture algorithme

Compilation

Erreurs ?

Debug du programme

non

FonctionnementOK ?

oui

oui

Programmationde la carte

Fin du projet

Ecriture

du

logiciel

Test

du logiciel

sur le

matériel

Ecriture du source

non

Page 3: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Flux de données d ’un projet

fichier3.asmfichier1.c fichier2.c

mcc18 mcc18 MPASMWIN

fichier1.o fichier2.o fichier3.o lib1.lib script.lkr

mplink

projet.hex projet.mapprojet.cof

Fichiers sourceFichiers source

CompilateurCompilateur

AssembleurAssembleur

Fichiers objetFichiers objet

DebugDebugProgrammation Programmation

du composantdu composant

Fichiers de sortieFichiers de sortie

Editeur de liensEditeur de liens

BibliothèquesBibliothèquesScript pour le Script pour le

linkage linkage

Page 4: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Programme source en CCommentaire /* bla blasur plusieurs lignes bla bla */

Commentaire // bla blasur 1 ligne

Insertion d ’un fichier #include < nom.ext > défini dans options

#include " nom.ext "  dans dossier local

Définition équivalence#define symbole valeur

Déclaration des variablesm , c , d u sont des octets en RAM

Fonction principaleSon 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.

Les accolades indiques aussi le début et la fin des fonctions.

Unsigned, char, void, while, if … sont des mots réservés. Il y en a 32 en C.

Page 5: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Les types de données

char ou signed char 8bits -128 … 127

unsigned char 8bits 0 ... 255

int ou short 16bits -32768 … 32767

unsigned int 16bits 0 ... 65535

long 32bits -2.147.483.648 ... 2.147.483.647

unsigned long 32bits 0 … 4.294.967.295

short long 24bits -8.388.608 ... 8.388.607

unsigned short long 24bits 0 … 16.777.215

float ou double 32bits -3,4 . 1038 ... 3,4 . 1038

double 64bits -1,7 . 10308 ... 1,7 . 10308

Type longueur domaine de valeur

Page 6: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Déclaration des données en RAM

type nom;

unsigned char unit; // unit est un octet 0..255 placé en RAM

int maxi; // maxi mot 16 bit -32768…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;

Une variable doit être déclarée avant d ’être utilisée

Ces 3 variables sont différentes !

Le langage C fait la différence entre les MAJUSCULES et les minuscules

Page 7: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

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

Page 8: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Une équivalence n ’est pas une instruction du programme mais une directive pour le compilateur afin de faciliter la programmation.

Equivalences

Les équivalences sont remplacées par leur valeurpar le pré-processeur du

compilateur.

#define maxi 150

temperature = maxi; // la variable temperature prend la valeur 150

#define nom valeur

#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

Espaces ou tabulations

Page 9: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Les fonctions

void main (void){ init_port(); led1 = 0; while(1) { if(bp == 0) { led1 = 1; buzzer(); } else led1 = 0; }}

void init_port (void){

….…..

}

void buzzer (void){

….…..

}

prog

Initialisationdes ports

Led1 éteinte

BPactivé ?

Led1 allumée

Gestion du buzzer

Led1 éteinte

Page 10: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Les opérateurs arithmétiques

Addition +

a = 3;

c = a + 2; // c = 5

Soustraction -a = 3;

c = a - 2; // c = 1

Multiplication *a = 3;

b = 11;

c = a + b; // c = 33

Division /a = 75;

b = 3;

c = a / b; // c = 25

Modulo %Reste de la division

a = 75;

diz = a / 10; // diz = 7

unite = a % 10 // unite = 5 c ’est à dire le reste

Page 11: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Bases

Base 10 décimal

symboles : 0 1 2 3 4 5 6 7 8 9

a = 26;

c = a + 857;

Base 16 hexadécimal

symboles : 0 1 2 3 4 5 6 7 8 9 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 = 0b00011010; // 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 );

Page 12: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Les opérateurs logiques

ET &a = 0b11001100;

c = a & 0b10101010; // c = 0b1001000

OU |a = 0b11001100;

c = a | 0b00111100; // c = 0b11111100

Complément ~a = 0x03;

c = ~ a; // c = 0xFC

OU exclusif ^a = 0b11001100;

b = 0b10100010;

c = a ^ b; // c = 0b01101110

Décalage à DROITE >>

a = 0b00110000;

c = a >> 2;// c = 0b00001100;

Décalage à GAUCHE <<

a = 0b00110000;

c = a << 2; // c = 0b11000000;

Page 13: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Autres opérateurs

Incrément ++a = 55;

a++; // a = 56

Décrément --a = 20;

a--; // a = 19

Affectation =a = 55; // a prend la valeur 55

a = a + b; // la somme de a et b est mise dans a

Séparateur ; a = 55; b = a + 1;

•Bloc d ’instruction { .. .. .. }

•Liste de variables ou de constantes

Séparateur , unsigned char TAB[5] = { 2, 5, 8, 20, 5 }; // tableau de 5 valeurs

•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 ...

Page 14: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Instruction conditionnelle IF…. ELSE

Condition?

Condition?

Action 1Action 1 Action 2Action 2

Vrai

Fausse

if( condition ) action1;

else action2;

if( a > b ) c = c - a;

else c = c- b;

if( a > b )

{ c = c - a;

d = c - a;

}

else { c = c - b;

d = c - b;

}

if( a > b )

{ c = c - a;

d = c - a;

}

if( (a > b) && ( b > 0) ) c = c - a;

else c = c- b;

Action1 et action2 sont un bloc d ’instructions

Action1 et action2 sont une seule instruction

ELSE n ’existe pas

Condition multiples

Si la condition est vrai

•faire l ’action 1

•sinon faire action 2

Page 15: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

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é. . . .

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 )

Opérateurs logique de test

ET &&

OU ||

NON !

if( (a > b) && ( b > 0) )

if( (a > b) || ( b > 0) )

if( !( a == b) )

Simplification

if( a ) …

else …

ce test est :

• vrai si a > 0

• faux si a = 0

Page 16: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

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;

}

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;

}

Valeur led1 led2 led3

0

1

2

3

4

5

6

7

0 0 0

1 0 0

0 1 0

1 1 x

0 0 0

0 0 0

0 0 0

1 1 1

Répondre par• 0• 1 • x si pas de modification

Page 17: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Boucle FOR

Condition?

Condition?

ActionAction

ModificationModification

Sortie de la boucle

InitialisationInitialisation for ( initialisation ; condition ; modification )

{

action;

… ;

}

Version 1

for( x = 0 ; x < 5 ; x++ )

{

action;

}

Version 2

for( x = 5 ; x > 0 ; x-- )

{

action;

}

Ces 2 boucles sont identiques.

Action est exécutée 5 fois

Version 2 simplifiée

for( x = 5 ; x ; x-- )

{

action;

}

x est vrai si x > 0 donc la boucle sera exécutée tant que x > 0Attention aux conditions qui rendent la boucle

infinie.

Page 18: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

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().

Boucle WHILE

while (condition)

{

action;

… ;

}

x = 0;

while ( x < 5 )

{

action;

x++;

}

x = 10;

while ( x < 5 )

{

action;

x++;

}

Cette boucle est identique à une boucle FOR

Dans cette boucle action ne sera jamais exécutée car la condition est déjà fausse lors de la première entrée.

while ( bouton == 0 )

{

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é.

Tant que condition vraie faire...

while ( 1 )

{

action;

… … ;

}

Condition?

Condition?

ActionAction

Sortie de la boucle

Page 19: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Nombre d ’exécutions de la boucle :

A la sortie de la boucle total =

5

10

Boucle DO … WHILE

Faire... tant que condition vraie

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 );

Condition?

Condition?

ActionAction

Sortie de la boucle

Page 20: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

// x = 1 indice 0 = premier élément du tableau

// x = 40 indice 3 = quatrième élément du tableau

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éléments du tableau.

Un tableau doit être déclaré avant son utilisation.

type nom[taille] = { éléments … } ;

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 }

unsigned char TABLEAU[5] = { 1 , 10 , 30 , 40 , 50 } ;

X = TABLEAU[0];

X = TABLEAU[3];

Nombre d ’exécutions de la boucle :

A la sortie de la boucle somme =

5

131

somme = 0;

for(i = 0 ; i < 5 ; i++ )

{

somme = somme + TABLEAU[i];

}

Page 21: Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

...C

Fin de la première partie

à suivre...