Professional Documents
Culture Documents
page 1 / 7
II.
Le langage C est : PORTABLE : Les modifications d'un programme pour passer dun systme un autre sont minimes. COMPLET : Un texte C peut contenir des squences de bas niveau (proches du matriel) en assembleur. SOUPLE : Tout est possible en C mais une grande rigueur simpose. EFFICACE : On rflchit (devant une feuille de papier) et on crit (peu).
Le programme doit galement contenir la dfinition des diffrentes fonctions cres par le programmeur (voir IX. Les Fonctions). Les fonctions doivent tre dfinies (au moins leur prototype) avant dtre appeles par une autre fonction. Le langage C comporte des bibliothques de fonctions prdfinies sous forme de fichiers comportant lextension .h. Ces fonctions seront ajoutes au programme excutable lors de ldition de liens. Pour incorporer dans un programme un fichier .h, on utilise la commande #include <fichier.h> place habituellement en dbut de fichier. Exemples :
#include <htc.h> // // // // // htc.h contient des fonctions ralisant des temporisations logiciels. Grce ce fichier .h, le compilateur connat ladresse de chaque registre et port Ex : PORTB correspond ladresse 06, etc.
#include <pic16f877a.h>
V.
Un programme en C utilise 2 zones mmoire principales : La zone des VARIABLES est un bloc RAM o sont stockes des donnes manipules par le programme. La zone des FONCTIONS et CONSTANTES est un bloc ROM qui recevra le code excutable du programme. Avant dutiliser une variable, une fonction ou une constante, il faut la dclarer afin dinformer le compilateur de son existence. Leur nom que l'on utilise est un identificateur. Leur criture doit : Utiliser les lettres de l'alphabet, de a z, et de A Z, les chiffres de 0 9 (sauf pour le premier caractre), le soulign ( _ ). Ne contenir ni espace, ni caractre accentu. tre reprsentative de leur rle dans le programme.
Compilateur
Code objet :
mon_programme.ASM
diteur de liens
Programme excutable :
mon_programme.HEX
Lancement du programme
STI2DSIN
page 2 / 7
VI.
Toutes les valeurs (constantes et variables) utilise en C sont classes selon des types. Un type dcide de loccupation mmoire de la donne. Pour dclarer correctement une variable ou une constante, il faut donc savoir auparavant ce quelle va contenir. On distingue les types suivants :
char a ; unsigned char b ; int c ; unsigned int d ; long e ; // Dclare un entier sign 8 bits [-128 +127 ] // Dclare un caractre non sign 8 bits [0 255] // Dclare un entier sign 16 bits [-32768 +32767 ] // Dclare un entier non sign 16 bits [0 65535] // Dclare un entier sign 32 bits // [-2147483648 +2147483647] // Dclare un entier non sign 32 bits // [0 4292967295] // Dclare un rel sign 32 bits dont la valeur // absolue est comprise entre 3,4.10-38 et 3,4.10+38 // Dclare un rel sign 64 bits dont la valeur // absolue est comprise entre 1,7.10-308 et 1,7.10+308 // Dclare un rel sign 80 bits dont la valeur // absolue est comprise entre 3,4.10-4932 et 3,4.10+4932
unsigned long f ;
float g;
double h;
&
long double i;
Exemple : a = 2 ; b = 3 ; x = a&b ; // rend le ET bit bit de a et b. // x vaut 0b10 Exemple : a = 2 ; b = 5 ; x = a|b ; // rend le OU bit bit de a et b. // x vaut 0b111 Exemple : a = 2 ; b = 7 ; x = a^b ; // rend le OU EXCLUSIF bit // bit de a et b. // x vaut 0b101 Exemple : a = 2 ; b = 1 ; x = a>>b ; // // // Exemple : a = 2 ; b = 3 ; x = a<<b ; // // // rend la valeur de a dcale droite de b bits. x vaut 0b01 rend la valeur de a dcale gauche de b bits. x vaut 0b10000
VIII.
Les oprateurs
A. Loprateur daffectation
Cet oprateur a dj t utilis dans les exemples prcdents. Il permet, entre autres, dinitialiser une variable.
= Exemple : a = 5 ; PORTB = 0 ; // Range 5 dans a. // le PORTB est mis 0
0.
// rend VRAI si a est suprieure // 4. FAUX sinon. // x vaut VRAI // rend VRAI si a est suprieure ou // gale 2. FAUX sinon. // x vaut VRAI
>=
Exemple : a = 2 ; x = a>= 2 ;
STI2DSIN
< Exemple : a = 6 ; x = a<3 ;
page 3 / 7
Exemple : Programme en C appelant des fonctions prdfinies et des fonctions crites par le programmeur.
#include <pic16f877a.h> // Fichier de dfinition des adresses des // registres du PIC 16F877A // Fichier de fonctions prdfinies pour // temporisations logicielles Note prof : <delay.h> le fichier se trouve dans le rpertoire des fichiers dentte du compilateur "delay.h" le fichier se trouve dans le mme rpertoire que le fichier source
<=
Exemple : a = 3 ; x = a<= 6 ;
==
Exemple : a = 6 ; x = a == 5 ;
#include <delay.h> // // // //
!=
Exemple : a = 4 ; x = a != 2 ;
// Directives dassemblage
&&
Exemple : a = 9 ; b = 1 ; // ET LOGIQUE : rend VRAI si les x = (a == 9) && (b != 8); // deux tests sont VRAIS. // FAUX sinon. // x vaut VRAI Exemple : a = 6 ; b = 3 ; // OU LOGIQUE : rend VRAI si au x = (a == 5) || (b != 3); // moins un des deux tests // est VRAI. FAUX sinon. // x vaut FAUX Exemple : a = 1 ; x = !a ; y = !(a == 5) ; // NEGATION LOGIQUE : rend VRAI si // a est FAUX. FAUX sinon. // x vaut FAUX et y vaut VRAI // Dfinitions des fonctions crite par le programmeur void PORTB_en_sortie(void) { TRISB=0; }
||
Remarque : Les oprateurs ont une priorit. Cette priorit nest pas forcment celle des mathmatiques et varie dun langage informatique un autre. Il vaut donc mieux utiliser les parenthses pour viter tous problmes.
void Allumer_LED_PORTB(void) { PORTB=0xFF; // RB0 RB7 mis 1 } void Eteindre_LED_PORTB(void) { PORTB=0x00; // RB0 RB7 mis 0 }
// fonction crite par le programmeur // Rpter toujours // voir La structure alternative ou slection page 5
Pour quun programme soit structur, chaque fonction doit effectuer une tche bien spcifique.
STI2DSIN
page 4 / 7
Dans la fonction main, la variable locale a vaut 5. Dans la fonction Ma_fonction_somme, la variable locale a vaut 1 et la variable locale b vaut 2. Aprs appel de la fonction Ma_fonction_somme, la variable a de la fonction main vaut toujours 5. Bien sr, z vaut 3.
X.
Une variable globale (ou permanente) est dclare en en-tte du programme. Elle est valide pendant toute la dure d'excution du programme car elle fait l'objet d'une rservation mmoire permanente en RAM. Elle peut tre utilise et modifie par toutes les fonctions du programme. Une variable locale (ou temporaire) est dclare lintrieur dune fonction. Son existence est limite la dure dexcution de cette fonction. Elle est donc ignore par les autres fonctions. Elle peut (bien que cette faon de procder soit dconseille), porter le mme nom qu'une variable globale ou qu'une autre variable locale se trouvant dans une autre fonction. Par dfaut, une variable locale est range en pile LIFO mais elle peut tre range en RAM une adresse fixe (statique). Elle nen demeure pas moins visible qu lintrieur de la fonction o elle a t dclare. Attention : la pile et la mmoire RAM des PIC sont trs limites. Exemple :
Void fonction_exemple() { int a=12 ; // variable locale a en pile. static char b ; // variable locale b en RAM une adresse fixe. }
int Ma_fonction_somme(int a, int b) { int resultat ; // dclaration dune variable locale appele // resultat resultat = a+b ; // Les variables a et b ont t dclares et // initialises lors de lappel de la fonction // linstruction return permet de retourner // une valeur la fonction appelante.
return resultat ; }
STI2DSIN
page 5 / 7
1.
La structure linaire se caractrise par une suite dactions excuter successivement dans lordre de leur nonc. Organigramme
Dbut
B. Organigramme
Lorganigramme est une reprsentation graphique normalise utilise pour analyser ou dcoder un problme. Il utilise des symboles reprsentant des traitements, des liaisons, des donnes Un organigramme bien reprsent doit tre flch et ferm, compris entre un dbut et une fin.
Langage algorithmique
Exemple en langage C
Dbut algorithme :
Opration 1
Opration 2
SYMBOLE
DSIGNATION
Opration 3
Fin
Sous-programme Portion de programme considre comme une simple opration. Entre-Sortie Mise disposition dune information traiter ou enregistrement dune information traite.
FAUX VRAI
2.
La structure alternative noffre que deux issues possibles sexcluant mutuellement. Les structures alternatives dfinissent une fonction de choix ou de slection entre lexcution de lun ou de lautre des deux traitements. galement dsignes par structures conditionnelles, elles sont reprsentatives de saut ou rupture de squence.
Embranchement Test, exploitation de conditions variables impliquant le choix dune parmi deux. Symbole utilis pour reprsenter une dcision. Dbut, fin ou interruption Dbut, fin ou interruption dun organigramme
FAUX
Condition
VRAI
Sens conventionnel des liaisons. Le sens gnral de liaison doit tre : De haut en bas, De gauche droite.
Action 2
Action 1
STI2DSIN
page 6 / 7
FAUX
Condition
VRAI
Action
FAUX
FIN SI
3.
4.
Dans cette structure la sortie de la boucle ditration seffectue lorsque le nombre souhait de rptition est atteint. Do lemploi dune variable de boucle (indice I) caractrise par : Sa valeur initiale. Sa valeur finale. Son pas de variation.
Langage algorithmique
FAIRE
Action
FAIRE action
Action
I=Vi; while(I>0) { I=I-1 fonction( ); I=I-1; } Remarque : En C, la squence est excute tant que la condition est vraie. FIN POUR
STI2DSIN
page 7 / 7
PORTB :
1 0 0 X0 1 1 1
+ 0 0 0 1 0 0 0 0
quivalent en C :
_ 1 0 0 X 0 1 1 1
1 0 0 1 0 1 1 1
0 0 0 0 1 0 0 0
quivalent en C :
0.
0 0 0 0 1 0 0 0
On veut tester ltat du bit 5 du PORTB. Si RB5 = 1 alors on appelle la fonction action_1(), sinon, on appelle la fonction action_2() ; Il y a deux solutions : Masque en ET : if(PORTB & 0b00100000) { action_1() ; // alors RB5 = 1 } else { action_2() ; // sinon RB5 = 0 } Masque en OU : if(PORTB | 0b11011111 == 0xFF) { action_1() ; // alors RB5 = 1 } else { action_2() ; // sinon RB5 = 0 }
1 0 0 1 0 1 1 1
1 1 1 1 1 1 0 1
quivalent en C :
1 0 0 1 1 1 0 1
Remarque : Le fichier pic16f877a.h contient la dfinition de chaque bit des registres et ports de notre PIC. Ceci permet de les forcer directement sans passer par les masques : Pour forcer le bit 3 du PORTB 1 : Pour forcer le bit 1 du PORTB 0 :
RB3=1 ; RB1=0 ;
Il faut prendre connaissance de la syntaxe et de la casse des registres, des ports et des bits en ditant le fichier pic16f877a.h. Les masques restent trs utiles pour la manipulation des bits non dfinis dans ce fichier