Vous êtes sur la page 1sur 13

TRADUCTEUR LANGAGE C pour les PICs

SOMMAIRE

1) TRADUCTION DUN ALGORITHME EN LANGAGE C. .............................................. 2 1.1) CONSTANTES ET VARIABLES ................................................................................... 2 1.1.1) Dclarations de constantes............................................................................ 2 1.1.2) Dclarations de Variables. ............................................................................ 3 1.2) LES STRUCTURES ALGORITHMIQUES ........................................................................ 4 1.2.1) Structure SI ... ALORS .............................................................................. 4 7.2.2) Structure SI ... ALORS ...SINON ................................................................... 4 1.2.3) Structure de choix multiple ............................................................................ 5 1.2.4) Structure REPETER ... JUSQUA ................................................................... 6 1.2.5) Structure TANT QUE ... FAIRE ... .................................................................. 6 1.2.6) Structure POUR Indice ALLANT DE ... A .... FAIRE ... .................................... 7 1.3) PROCEDURES ET FONCTIONS.................................................................................. 8 1.3.1) Syntaxe :...................................................................................................... 8 1.3.2) Une fonction sans paramtres dentre et de sortie......................................... 9 1.3.3) Une fonction avec des paramtres dentre et sans paramtres de sortie....... 10 1.3.4) Une fonction avec des paramtres dentre et un paramtre de sortie............ 11 1.3.5) Une fonction dinterruption........................................................................... 12 2) ORGANISATION DUN PROGRAMME EN LANGAGE C ......................................... 13

Philippe LETENNEUR - GRANVILLE - 2003 -

page 1

TRADUCTEUR LANGAGE C pour les PICs

1) TRADUCTION DUN ALGORITHME EN LANGAGE C. 1.1) Constantes et variables 1.1.1) Dclarations de constantes.
Algorithmique: Constante NomConstante : [Type] = Valeur Syntaxe C: #define ID_de_la_constante valeur

Exemples : // Dfinition des modes de FCT #define MODE_BISTABLE 0 #define MODE_TEMPO 1 // Dclaration des codes dun clavier #define AUCUNE 0xFF #define PLUS 0x26 #define MOINS 0x25 #define MLPI 0x13 #define STOP 0x15 #define BOLUS 0x16 #define PURG 0x16 // Dfinition de PORTs ou de REGISTREs de type octet // Dclaration des adresses des ports E/S du PIC // #byte propre au compilateur CCS #byte PORTA = 5 // adresse du PORT A #byte PORTB = 6 // adresse du PORT B #byte PORTC = 7 // adresse du PORT C #byte PORTD = 8 // adresse du PORT D #byte PORTE = 9 // Dclaration de registres internes du CAN #byte ADCON0 = 0x1F // adresse du registre ADCON0 #byte ADCON1 = 0x9F // adresse du registre ADCON1 // Dclaration // #bit propre #bit GODONE = #bit ADFM = // Affectation // Par exemple #bit LIMIT = #bit CLOCK = #bit F_H = #bit ENABLE = de bits internes au compilateur CCS ADCON0.2 ADCON1.7 dE/S de type bit : Commande dun moteur PORTC.1 PORTD.3 PORTC.5 PORTC.0

// Dfinition dun tableau de constantes const int AD_MODE[4]={0x00,0x01,0x02,0x03};

Philippe LETENNEUR - GRANVILLE - 2003 -

page 2

TRADUCTEUR LANGAGE C pour les PICs


1.1.2) Dclarations de Variables.
Algorithmique: Variable NomVariable : [Type] Syntaxe C : type ID_de_la_constante ;

Exemples : // Entier non sign int CODE_TOUCHE; long CMP_TOUCHE; int CMP_SEC; int CMP_ML; int VIT_MOT; int TPS_MIN, TPS_HEURE, TPS_SECONDE ; // Entier sign signed int TAMB ; signed long LUM ; // Rel float VALEUR_CAN ; // Tableau int ETAT_RE[4]; // chane de caractres char MESSAGE_N1[10] ;

// Variable 8 bits // Variable 16 bits

// Variable 8 bits signe // Variable 16 bits signe

// Variable de type rel

// Tableau de 4 lments entier

// chane de 9 caractres

Philippe LETENNEUR - GRANVILLE - 2003 -

page 3

TRADUCTEUR LANGAGE C pour les PICs


1.2) Les structures algorithmiques 1.2.1) Structure SI ... ALORS Algorithme
Si condition vraie Alors Actions Fin Si Actions

Algorigramme
Oui Non
condition vraie ?

Syntaxe C
if (condition) { instruction; }

Exemple Algorithme Variable Compteur : Double Octet Si Compteur < 1000 Alors Compteur Compteur + 1 FinSi Programme source long Compteur ; if (Compteur < 1000) { Compteur = Compteur + 1 ; }

7.2.2) Structure SI ... ALORS ...SINON ... Algorithme


Si condition vraie Alors Actions1 Sinon Actions2 Fin Si

Algorigramme
Oui
condition vraie ?

Syntaxe C
Non if (condition) { instruction_1; } else { instruction_2; }

Actions1

Actions2

Exemple Algorithme Variable NoTouche : Octet Si NoTouche = 3 Alors NoTouche 0 Sinon NoTouche NoTouche + 1 FinSi Programme source int NoTouche ; if (NoTouche == 3 ) { NoTouche = 0; } else { NoTouche = NoTouche + 1; }

Philippe LETENNEUR - GRANVILLE - 2003 -

page 4

TRADUCTEUR LANGAGE C pour les PICs


1.2.3) Structure de choix multiple
Linstruction if ne permet de faire un choix quentre 2 possibilits. Si lon dsire faire un choix sur 3 possibilits ou plus, il devient ncessaire de cascader plusieurs instructions if, et le programme perd de sa clart. Le langage C possde une instruction spcifique ce cas de figure, il sagit de linstruction switchcase.

Algorithme
Selon expression E Cas expression E1 Instruction A Cas expression E2 Instruction B Cas expression E3 Instruction C Cas sinon Instruction D Fin Selon

Algorigramme
E = E3 ?

E = E1 ?

Non

E = E2 ?

Non

Non

Instruction A

Instruction B

Instruction C

Instruction D

Syntaxe C
switch (expression E) { case E1 : instruction A; break ; case E2 : instruction B; break ; case E3 : instruction C; break ; default :instruction D; }

Chaque expression est value lune aprs lautre jusqu ce que lune delles corresponde lexpression entre parenthses. Linstruction de branchement inconditionnel break provoque la sortie de la structure de choix multiples. Loubli de break aprs une instruction entrane lvaluation du cas suivant, mme si le rsultat de lvaluation est vrai. Ltiquette default est utile dans le cas ou aucune valuation na t satisfaisante. Elle nest pas obligatoire. Attention : Le choix entre les diverses possibilits est rgit par la valeur dune expression de type entier ou caractre et non plus par une condition. Exemple Algorithme Programme source int Nombre, Sortie ; switch (Nombre) { case 1 : Sortie = 0b11110111 ; break ; case 4 : Sortie = 0b11111110 ; break ; default : Sortie = 0b11111111 ; }

Variable Nombre,Sortie : Octet Cas ou Nombre Vaut 1 : Sortie %11110111 4 : Sortie %11111110 Autres : Sortie %11111111 FinCas

Philippe LETENNEUR - GRANVILLE - 2003 -

page 5

TRADUCTEUR LANGAGE C pour les PICs


1.2.4) Structure REPETER ... JUSQUA ...
La condition qui rgit la boucle ainsi que sa rptition est value la fin de chaque tour de boucle. Le test se faisant en fin de boucle, celle-ci sera effectue au moins une fois.

Algorithme
Rpter Actions Jusqu condition vraie

Algorigramme
Actions

Syntaxe C
do { instruction ;
condition vraie ?

Non

}
while ( ! (condition vraie)) ;

Exemple Algorithme Variable Compteur : Octet Rpter Incrmenter Compteur Jusqu' Compteur = 100 Programme source int Compteur ; do { Compteur = Compteur + 1 ; } while( !( Compteur == 100)) ;

1.2.5) Structure TANT QUE ... FAIRE ...


La condition qui rgit lentre dans la boucle ainsi que sa rptition est value avant chaque tour de boucle, donc aussi avant le premier. Le test se faisant en dbut de boucle, celle-ci ne sera pas effectue si la condition est fausse.

Algorithme
Tant que condition vraie Faire Actions

Algorigramme
condition vraie ?

Syntaxe C
Non while (condition) { instruction ; }

Actions Fin Faire

Exemple Algorithme Variable Compteur2 : Octet sign Tant Que Compteur2 > -8 Faire Dcrmenter Compteur2 FinFaire Programme source signed int Compteur2 ; while (Compteur2 > -8) { Compteur2 = Compteur2 - 1 ; }

Philippe LETENNEUR - GRANVILLE - 2003 -

page 6

TRADUCTEUR LANGAGE C pour les PICs


1.2.6) Structure POUR Indice ALLANT DE ... A .... FAIRE ...
Il sagit dune boucle inconditionnelle, car le nombre de tours de boucle est fix par le programmeur. Ce type de boucle comporte un compteur dont la valeur est fixe avant le premier tour valeur1, puis compare une valeur donne valeur2 chaque tour. Si la condition est vraie, on excute le bloc dinstructions, puis on modifie le contenu du compteur etc

Algorithme
Pour Indice Allant De Valeur1 A Valeur2

Algorigramme
Indice <- valeur1

Syntaxe C

Faire Actions FinFaire


Indice valeur2 <

Non

for(val_ini ;condition ; modif) { instruction ; }

Actions Indice <- Indice +1

Exemple Algorithme Variable NbDecalage, Indice : octet Mot : double octet Programme source int NbDecalage, Indice ; long Mot ;

Pour Indice Allant de 1 NbDecalage for (Indice=1 ;Indice < NbDecalage ;Indice = Indice + 1) Faire { Dcaler Mot d'1 bit gauche Mot = Mot << 1; FinFaire }

Philippe LETENNEUR - GRANVILLE - 2003 -

page 7

TRADUCTEUR LANGAGE C pour les PICs


1.3) Procdures et fonctions

Paramtres d'entre

Fonction logicielle

Appel de la fonction

Paramtres de sortie

La traduction dune fonction ou procdure ou encore appeles sous-programme seffectue ainsi :

1.3.1) Syntaxe :
// Nom de la fonction : // Description du rle de la fonction : // Paramtres dentre : Noms et types des paramtres dentre // Paramtre de sortie : Nom et type du paramtre de sortie Type_de_la_valeur_de_retour nom_de_la_fonction( types nom_des_paramtres ) { instruction 1 ; . . . instruction n ; return(valeur) ; // Valeur a renvoyer } Remarque : Tous les paramtres dentres deviennent des variables locales de la fonction. A partir de cette syntaxe, on peut avoir plusieurs cas possibles : 1) Une fonction sans paramtres dentre et de sortie. 2) Une fonction avec des paramtres dentre et sans paramtres de sortie. 3) Une fonction avec des paramtres dentre et un paramtre de sortie. 4) Une fonction dinterruption.

Philippe LETENNEUR - GRANVILLE - 2003 -

page 8

TRADUCTEUR LANGAGE C pour les PICs


1.3.2) Une fonction sans paramtres dentre et de sortie.
Fonction logicielle

Appel de la fonction

En anglais, dpourvu ou sans se traduit par void, donc la dfinition de la fonction sera : // Nom de la fonction : // Description du rle de la fonction : // Paramtres dentre : Rien // Paramtre de sortie : Rien void nom_de_la_fonction( void ) { instruction 1 ; . . . instruction n ; } Exemple : // Procdure AFF_PURGE // Description: Affichage du message PurG // Entre : Rien // Sortie : Rien void AFF_PURGE(void) { // commande de l'affichage multiplex PORTA=C_P; SEL1=1; SEL0=1; MEMO=1; MEMO=0; PORTA=C_uu; SEL1=1; SEL0=0; MEMO=1; MEMO=0; PORTA=C_r; SEL1=0; SEL0=1; MEMO=1; MEMO=0; PORTA=C_G; SEL1=0; SEL0=0; MEMO=1; MEMO=0; }

Appel de la fonction : Exemple :

nom_de_la_fonction() ; AFF_PURGE() ;

Philippe LETENNEUR - GRANVILLE - 2003 -

page 9

TRADUCTEUR LANGAGE C pour les PICs


1.3.3) Une fonction avec des paramtres dentre et sans paramtres de sortie.
Paramtres d'entre Fonction logicielle

Appel de la fonction

// Nom de la fonction : // Description du rle de la fonction : // Paramtres dentre : Noms et types des paramtres dentre // Paramtre de sortie : Rien void nom_de_la_fonction(types nom_des_paramtres ) { instruction 1 ; . instruction n ; } Remarque : Tous les paramtres dentres deviennent des variables locales de la fonction. Exemple : // Procdure d'affichage du logo // Entre : Entier CODE // sortie : Rien // Description : Affichage des codes du logo void AFF_LOGO(int CODE) { PORTA=CODE; SEL1=1; SEL0=1; MEMO=1; MEMO=0; } Appel de la fonction : nom_de_la_fonction(nom_des_paramtres) ; Exemple : AFF_LOGO(0x45); // La valeur 0x45 sera affecte CODE

Philippe LETENNEUR - GRANVILLE - 2003 -

page 10

TRADUCTEUR LANGAGE C pour les PICs


1.3.4) Une fonction avec des paramtres dentre et un paramtre de sortie.

Paramtres d'entre

Fonction logicielle

Appel de la fonction

Paramtres de sortie

// Nom de la fonction : // Description du rle de la fonction : // Paramtres dentre : Noms et types des paramtres dentre // Paramtre de sortie : Nom et type du paramtre de sortie Type_de_la_valeur_de_retour nom_de_la_fonction(types nom_des_paramtres ) { instruction 1 ; . . . instruction n ; return(valeur) ; // Valeur a renvoyer } Exemple : // Procdure DECALAGE_DROITE // Description : DECALAGE droite de NB bits // Entre : Entier VAL, Entier NB // Sortie : Entier RESULTAT int DECALAGE_DROITE(int VAL, int NB) { int RESULTAT; RESULTAT = VAL >> NB; return(RESULTAT); } Appel de la fonction : nom_de_la_fonction(nom_des_paramtres) ; Exemple : A = 16 ; B = DECALAGE_DROITE (A,2) ; // La valeur de la variable RESULAT est renvoye // au programme appelant

// La valeur de A sera affecte VAL // La valeur 2 sera affecte NB // Le rsultat de la fonction sera affect B

Philippe LETENNEUR - GRANVILLE - 2003 -

page 11

TRADUCTEUR LANGAGE C pour les PICs

1.3.5) Une fonction dinterruption.


Lexcution dune fonction dinterruption rpond un vnement qui peut tre interne (Priphriques : CAN, TIMER, EEPROM, USART, I2C) ou externe (RB0, PORTB) du microcontrleur. Lappel dune fonction dinterruption ne dpend pas du programme principal, mais elle linterrompt pendant son excution.

Fonction logicielle INTERRUPTION

FL 3

FL 4 FL 6

Dclenchement vnement extrieur

Dclenchement

FL 2 FL 1

Prog Principal

FL 7

Priphrique interne I2C, TIMER, CAN, USART, ....

PIC

RESET

Une fonction dinterruption na pas de paramtres dentre et de sortie. Le compilateur CCS utilise une directive spciale INT_XXXX (XXXX nom de linterruption) pour les diffrencier avec les autres fonctions logicielles. // Nom de la fonction : // Description du rle de la fonction : #INT_xxxx // Nom de linterruption void nom_de_la_fonction( void ) { instruction 1 ; . instruction n ; } Exemple : // Procdure CLOCK_TIMER2 // Description: Interruption toutes les secondes // Directive CCS pour une interruption TIMER2 #int_timer2 void CLOCK_TIMER2(void) { if(INT_CMP == 0) { INT_CMP = INT_CMP 1 ; // toutes les secondes INT_CMP = 100; } }

Philippe LETENNEUR - GRANVILLE - 2003 -

page 12

TRADUCTEUR LANGAGE C pour les PICs


2) ORGANISATION DUN PROGRAMME EN LANGAGE C
// // // // Rle du programme : Auteur : Lieu : Version:

// fichier de dclaration des registres internes du micro contrleur 16F877.H ou 16F876.H #include <16F877.H> // Directive pour dbuguer sous MPLAB6 avec lICD2 #device ICD=TRUE // Dclaration #byte PORTA = #byte PORTB = #byte PORTC = #byte PORTD = #byte PORTE = des adresses des ports E/S 5 // adresse du PORT A 6 // adresse du PORT B 7 // adresse du PORT C 8 // adresse du PORT D 9 // adresse du PORT E

// Dclaration des constantes #define NB_MAX 100 // Par exemple NB_MAX // Affectation des entres et sorties de type bit #bit BUZZER = PORTD.7 // Par exemple : Commande dun buzzer // Frquence du quartz #use delay (clock=20000000) // Configuration de la liaison srie du PIC avec une vitesse de 9600 bauds. #use rs232 (BAUD=9600, xmit=PIN_C6, rcv=PIN_C7) // Dclaration des prototypes de toutes les fonctions logicielles // nom de la fonction suivi dun point virgule // Par exemple : void INIT_UC(void); // Dclaration des variables globales // Par exemple : long DEBIT; // DEBIT // Programme Principal main() { Instruction_1 ; Instruction_n ; } // Dclaration des fonctions logicielles // Nom de la fonction : // Description du rle de la fonction : // Paramtres dentre : Noms et types des paramtres dentre // Paramtre de sortie : Nom et type du paramtre de sortie Type_de_la_valeur_de_retour nom_de_la_fonction( types nom_des_paramtres ) { instruction_1 ; instruction_n ; return(valeur) ; // Valeur a renvoyer } // Par exemple // Nom de la fonction : INIT_UC // Description du rle de la fonction : Initialisation du uC // Paramtres dentre : Rien // Paramtre de sortie : Rien void INIT_UC(void) { PORTA=0x00 ; set_tris_A(0b11100000) ; PORTB=0x00 ; set_tris_B(0b11000000) ; // RB6 & RB7 entres pour lICD }

mlh

Philippe LETENNEUR - GRANVILLE - 2003 -

page 13