Professional Documents
Culture Documents
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
page 1
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
page 2
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] ;
// chane de 9 caractres
page 3
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 ; }
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; }
page 4
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
page 5
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)) ;
Algorithme
Tant que condition vraie Faire Actions
Algorigramme
condition vraie ?
Syntaxe C
Non while (condition) { instruction ; }
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 ; }
page 6
Algorithme
Pour Indice Allant De Valeur1 A Valeur2
Algorigramme
Indice <- valeur1
Syntaxe C
Non
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 }
page 7
Paramtres d'entre
Fonction logicielle
Appel de la fonction
Paramtres de sortie
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.
page 8
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; }
nom_de_la_fonction() ; AFF_PURGE() ;
page 9
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
page 10
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
page 11
FL 3
FL 4 FL 6
Dclenchement
FL 2 FL 1
Prog Principal
FL 7
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; } }
page 12
// 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
page 13