Vous êtes sur la page 1sur 11

13/04/2010

Tous les Cours

programmation des microcontrleur e

| Les microcontrleurs PIC | Les microcontrleurs ATMEL AVR | Programmation en langage Pascal (Mikropascal) | Application en mikropascal : Porte automatique de garage | Programmation en langage C (Pic C Compiler PCWH) | Le Bus I2C | Mmoires srie 24C32 | Tutorial Mikropascal | Tutorial Pic C Compiler | Tutorial Logipic | Tutorial Edit Algo | Tutorial IcProg | Chapitre 3
WinDev et C++, C# IDE, .NET, RAD, Sgbd, Etats, etc. Lien C++ direct - DVD Dmo gratuit
www.pcsoft.fr

Le langage C du compilateur CCS


1. Les Rgles de bases :
Toutes instructions ou actions se terminent par un point virgule ; Une ligne de commentaires doit commencer par /* et se terminer par */ ou commence par // norme C++. Un bloc dinstructions commence par { et se termine par } .

Formation Php Information Sur Les Formations ? Pour tout savoir Renseignez-Vous !
www.Groupe -Form ation-Info .com /

2. Les variables et les constantes :


2.1. Les constantes : Les constantes nexistent pas, c'est--dire quil ny a pas dallocation mmoire, mais on peut affecter un identificateur (Nom : Il ne doit pas dpasser 32 caractres, sans accent) Une valeur constante par linstruction #define. Syntaxe : < #define> <identificateur> <valeur> ; Exemple :
#define PI 3,14;

2.1.1. Dclarations spcifiques au compilateur CCS : #bit id =x,y Id : identifiant (Nom dun bit) X : Nom du variable ou dune constante Y : position du bit Exemple :
#bit RW #bit BUZZER =PORTA,2 =PORTD,7

#byte id = X Id: identifiant X: valeur 8 bits Exemple :


#byte #byte #byte #byte #byte PORTA PORTB PORTC PORTD PORTE = = = = = 5 6 7 8 9 // // // // // adresse adresse adresse adresse adresse du du du du du port port port port port A B C D E

2.2. Les variables : Les variables sont dfinies par sign ou non sign, Syntaxe : <Signed><type><identificateur1>,.., <identificateurn> .lidentificateur : Cest le nom (il ne doit pas dpasser 32 caractres sans accent) affect la variable. . le type : il dtermine la taille de la variable et les oprations pouvant tre effectues. On peut rajouter le mot signed devant le type de la variable, alors les variables deviennent signes. 2.2.1Les types du compilateur CCS : Type Taille Int1 Int8 1 bit 8 bits valeurs 0 OU 1 De 0x00 0xFF ou 0 255

technologuepro.com//Programmatio

1/11

13/04/2010

programmation des microcontrleur e


Int16 16 bits De 0x0000 0xFFFF ou 0 655535 Int32 32 bits char 8 bits float 32 bits short int long De 0x0000000 0xFFFFFFFF De 0 255 ou une lettre A. Z Format flottant Mme type que int1 Mme type que int8 Mme type que int16

Exemples :
Int A,B,C,D ; Char MESSAGE[10] ;

Les types signs Par dfaut, tous ces types de donnes sont signs, ils peuvent tre signs en rajoutant le mot cl signed devant le type. Exemple :
Signed int A ; Signed long NB; // // Entier de type sign, de -128 +127 Entier de type sign, de -32768 +32767

2.2.2 Les base du compilateur CCS : Le dcimal : Loctale : Lhexadcimal Le binaire A=10 ; A=012 ; A=0x0A ; A=0b00001010 ;

Le caractre : Exemple la lettre A code ASCII 65(Dcimal) ou $41(Hexadcimal), peut scrire : LETTRE = 65 Ou LETTRE = 0x41 Ou LETTRE = A

3. Les oprateurs du langage C :


Lors de son excution, un programme est amen effectuer des oprations qui peuvent tre purement arithmtiques, de comparaison, daffectation, etc. 3.1. Loprateur daffectation : Type Oprateur daffectation Symbole = Exemple X=10 ; Y = a + b

Loprande de gauche prend pour valeur loprande de droite. 3.2. Les oprateurs arithmtiques : Type Addition Soustraction Moins unaire Multiplication Division Reste de la division entire Symbole + * / % Exemple a = a + b ; x = 5+ a a =a b ;y=c -5 a=-b a =a * a ; b =y* 8 c=9/b;d=a/b r=a%b

3.3. Les oprateurs de comparaison ou relationnels : Type Symbole Exemple

technologuepro.com//Programmatio

2/11

13/04/2010
Egalit Diffrent Suprieur Suprieur ou gal Infrieur Infrieur ou gal 3.4. Les oprateurs logiques : Type Et logique Ou logique Non logique 3.5. Les oprateurs binaires bit bit : Type Et binaire Ou binaire Ou exclusif Complment 1 Dcalage de n bits droite Dcalage de n bits gauche == != > >= < <=

programmation des microcontrleur e


a == b ; c == 9 c!= a a>b;8>a a >= b ; 8 >= a a<b;8<a a <= b ; 8 <= a

Symbole && || !

Symbole Exemple & | ^ ~ >> << x=y& z x=y|z x=y^z x=b ~z x = b >> n x = b << n

4. Les structures rptitives.


Le langage C possde des instructions permettant de rpter plusieurs fois une mme squence en fonction de certaines conditions. 4.1 Structure while : tant que ... faire ... Avec ce type dinstruction le nombre de rptitions nest pas dfini et dpend du rsultat du test effectu sur la condition. Si cette dernire nest jamais vrifie, la squence nest pas excute.
while (int x!=0) { ... }

La structure prcdente rpte la suite dinstruction comprises entre crochets tant que la variable entire x est diffrente de 0. 4.2 Structure do ... while : faire ... tant que... Cette structure ressemble fortement la prcdente la seule diffrence que la squence rpter est au moins excuter une fois mme si la condition nest jamais vrifie.
do { ... } while (int x!=0);

4.3 Structure for : Pour <variable> allant de <valeur initiale> <valeur finale> faire...

technologuepro.com//Programmatio

3/11

13/04/2010

programmation des microcontrleur e

Cette instruction permet de rpter, un nombre de fois dtermin, une mme squence.
for (i=0;i<5;i++) { ... }

La structure prcdente rpte 5 fois la suite dinstruction comprise entre crochets. La variable i prendra les valeurs successives de : 0, 1, 2, 3 et 4. 4.4 Les structures alternatives.

Ces structures permettent dexcuter des squences diffrentes en fonction de certaines conditions. 4.5 Structure if ... Else : Si <condition> faire ... sinon faire ... Avec cette structure on peut raliser deux squences diffrentes en fonction du rsultat du test sur une condition.
if (a<b) c=b-a; else c=a-b;

La structure prcdente affecte la valeur b-a c si a est infrieur b sinon c est affect par la valeur a-b. 4.6 Structure switch ... case. Cette structure remplace une suite de if ... else if ...else et permet une de raliser diffrentes squences appropries la valeur de la variable teste.
switch (a) { case 1 case 2 case 3 case 4 }

: : : :

b=16; b=8; b=4; b=2;

Dans la structure prcdente b=16 si a=1, b=8 si a=4 etc.

5. Les fonctions adaptes aux microcontrleurs PIC :


5.1. La gestion des entres et des sorties :
Les fonctions suivantes permettent dagir sur les ports dentres et de sorties : Output_low ( ) ; Output_high ( ) ; Output_bit (pin_xx, 0 ou 1) ; Input (pin_xx) ; Output _x (valeur) ; // X : nom de port AE Input_x ( ) ; Set_tris_x (valeur) ; // Valeur : dfinie la configuration de port (1 entre et 0 sotie) Exemples : Lecture de la broche Rb4 :
X = input (pin_B4) ;

Mise 1 de RA5 :
output (pin_A4 ,1) ;

ou
output_high (pin_A4) ;

Configuration de port c, 4 broches en entres et 4 broches en sorties :


Set_tris_c (0b11110000) ;

5.2. La gestion des temporisations :


Le compilateur intgre des fonctions trs pratique pour grer les dlais : delay_cycles (valeur) ; // temporisation en NB de cycles delay_us (valeur) ; // temporisation en s delay_ms (valeur) ; // temporisation en ms Pour pouvoir utiliser ces fonctions, il faut indiquer la frquence du Quartz de votre application, cette ligne doit tre dfinie au dbut du programme. #use delay (clock = frquence_de_quartz) ; Exemples :

technologuepro.com//Programmatio

4/11

13/04/2010
#use delay (clock=4000000); #use delay (clock = 20000000);

programmation des microcontrleur e


// quartz de 4 MHz //quartz en 20 MHz

5.3. La gestion de la liaison srie :


Toutes les fonctions dentre et de sortie peuvent tre rediriges sur le port srie du microcontrleur, il suffit dajouter la ligne ci-dessous pour configurer le port srie :
#use rs232 (BAUD=9600, xmit=PIN_C6, rcv=PIN_C7) //Cette ligne configure la liaison srie de PIC avec une vitesse de 9600 bauds.

Les fonctions suivantes utiliseront le port srie comme moyenne de communication : Printf() ; Putc() ; getc() ; Kbhit() ;

Traduction dun algorithme en langage C : 1. Constantes et variables :


1.1. Dclaration de Constantes :
Algorithmique : Constante Nomconstante : [Type] = valeur Syntaxe C : #define Exemple : Affectation dE/S de type bit : commande dun moteur
#bit #bit #bit #bit LIMIT CLOCK F_H ENABLE =PORTC,1; =PORTD,3; =PORTC,5; =PORTC,0;

ID_de_la_constante

valeur

1.2. Dclaration de variables:


Algorithmique : variable Nomvariable : [Type] Syntaxe C : #define Exemples :
float VALEUR_CAN ; int ETAT_RE[4] ; char MESSAGE_N1[10] ; // variable de type rel // tableau de 4 lments entier // chane de 9 caractres

ID_de_la_variable ;

2. Procdures et fonctions :
La traduction dune fonction ou procdure ou encore appel sous-programme seffectue ainsi :

2.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 variable de retour nom de fonction (types nom des paramtres) { Instruction 1 ; . . Instruction n ; Return (valeur) ; } A partir de ce syntaxe, on peut avoir plusieurs cas possibles comme : // Valeur renvoyer

2.2. Une fonction sans paramtres dentre et de sortie :


//Nom de la fonction : //Description du rle de la fonction : //Paramtres dentre : Rien //Paramtre de sortie : Rien

technologuepro.com//Programmatio

5/11

13/04/2010
Void nom de fonction (Void) { Instruction 1 ; . . . Instruction n ;}

programmation des microcontrleur e

2.3. Une fonction avec des paramtres dentre et sans paramtre de sortie :
//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 fonction (types nom des paramtres) { Instruction 1 ; . . . Instruction n ;}

2.4. Une fonction avec des paramtres dentre et un paramtre 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 variable de retour nom de fonction (types nom des paramtres) { Instruction 1 ; .

Instruction n ; Return (valeur) ; // Valeur renvoyer }

2.5Une fonction dinterruption :


Lexcution dune fonction dinterruption rpond a un vnement qui peut tre interne (priphrique : CAN, TIMER, EEPROM, USART, I2C) ou externe (RB0,PORTB) du microcontrleur. Lappel dune fonction dinterruption ne dpend pas de programme principal, mais elle linterrompe pendant son excution. Une fonction dinterruption na pas de paramtre dentre et de sortie. Le compilateur CCS utilise une directive spciale INIT_XXXX (XXXX nom de linterruption) pour les diffrencier avec les autres fonctions logicielles. Syntaxe : //Nom de la fonction : //Description du rle de la fonction : #INIT_XXXX //Nom de linterruption

Void nom de fonction (Void) {

technologuepro.com//Programmatio

6/11

13/04/2010
Instruction 1 ; . Instruction n ; }

programmation des microcontrleur e

Organisation dun programme en langage C :


/////////////////////////////////////////////////////////////////////////////////////////////// //rle du programme : // // Auteur : // //Lieu : // //Version : // /////////////////////////////////////////////////////////////////////////////////////////////// //fichier de dclaration des registres internes du microcontrleur 16F84A.H #include <16F84A.H> //Dclaration des adresses des ports E/S #byte PORTA = 5 //adresse #byte PORTB = 6 // adresse //Dclaration des constantes #define NB_MAX 100 //Affectation des entres et sorties de type bit #bit BUZZER = PORTD7 //par exemple : Command dun buzzer //Frquence du quartz #use delay (clock=20000000) //Configuration de la liaison srie de PIC avec une vitesse de9600 bauds #use rs232 (BAUD=9600, xmit=PIN_C6, rcv=PIN_C7) //Dclaration du prototype 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 ; Long VOULUME ; //Programme principale Main() { Instruction 1 ; . Instruction n ; } //Dclaration des fonctions logicielles Par exemple : //Nom de la fonction : DECALAGE_DROITE //Description du rle de la fonction : dcalage droite de NB bits //Paramtres dentre : entier VAL, entier NB //Paramtre de 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 A sera affecte VAL //la valeur 2 sera affecte NB //le rsultat de la fonction sera affecte B

du port A du port B

Quelques directives et fonctions du pic C compiler


1- Directives #use delay Syntaxe Rle Exemple : #use delay(clock=frquence) : Renseigne le compilateur sur la frquence du quartz utilis. : #use delay(clock=4000000)

#fuses Syntaxe Rle : #fuses options : Permet de dfinir le mot de configuration. Les options sont : LP, XT, HS, RC

technologuepro.com//Programmatio

7/11

13/04/2010
Exemple WDT, NOWDT PUT, NOPUT

programmation des microcontrleur e

PROTECT, NOPROTECT.

: #fuses XT,NOWDT,NOPUT,NOPROTECT

#int_xxxx Syntaxe : #int_ext #int_ RB #int_TIMER0 : interruption externe. : changement dtat de RB4 RB7. : dbordement du timer0.

#int_EEPROM : fin dcriture dans lEEPROM. Rle 2- Fonctions BIT_CLEAR() Syntaxe Rle Exemple : BIT_CLEAR(var, bit) : Mettre 0 le bit bit de la variable var . : a=0x1F BIT_CLEAR(a, 3) a devient 17 hexa. : Spcifie la source de linterruption.

BIT_SET() Syntaxe Rle Exemple : BIT_SET(var, bit) : Mettre 0 le bit bit de la variable var . : a=0x1F BIT_SET(a, 6) a devient 3F hexa.

BIT_TEST() Syntaxe Rle Exemple : BIT_TEST(var, bit) : Teste ltat du bit bit de la variable var . : a=0x1F BIT_TEST(a, 2) Le rsultat est 1 car le bit 2 de la variable a est 1.

DELAY_MS()

technologuepro.com//Programmatio

8/11

13/04/2010
Syntaxe Rle Exemple : DELAY_MS(x)

programmation des microcontrleur e

: Temporisation se x ms. : DELAY_MS(2000) Temporisation de 2 secondes.

INPUT() Syntaxe Rle : etat=INPUT(pin) : Permet de lire ltat dune broche dun port pralablement configure en entre. : a=input(PIN_B0) la variable a re&ccedil;oit ltat de la broche 0 du port B.

Exemple

INPUT_x() Syntaxe Rle : etat=INPUT_x() : Permet de lire ltat dun port (x sur 8 bits) pralablement configur en entre. : c=input_A() la variable c re&ccedil;oit ltat du port A (1 octet).

Exemple

OUTPUT_x() Syntaxe Rle : OUTPUT_x(valeur) : Permet de sortir loctet valeur sur le port x , pralablement configur en sortie. : OUTut_B(0x1F) La valeur 1FH est envoye sur le port B.

Exemple

OUTPUT_BIT() Syntaxe Rle Exemple : OUTPUT_BIT(pin, etat) : Permet de mettre la pin (pin) ltat logique (etat). : OUTut_BIT(PIN_A3,1) Mettre 1 la broche 3 du port A.

OUTPUT_HIGH() Syntaxe : OUTPUT_HIGH(pin)

technologuepro.com//Programmatio

9/11

13/04/2010
Rle Exemple

programmation des microcontrleur e


: Permet de mettre 1 la pin (pin). : OUTut_HIGH(PIN_A3) Mettre 1 la broche 3 du port A.

OUTPUT_LOW() Syntaxe Rle Exemple : OUTPUT_LOW(pin) : Permet de mettre 0 la pin (pin). : OUTut_LOW(PIN_A3) Mettre 0 la broche 3 du port A.

ROTATE_LEFT() Syntaxe Rle : ROTATE_LEFT(adresse, n) : Rotation gauche de n positions de loctet ayant pour adresse adresse . : a=0x86 ROTATE_LEFT(&a, 1) a devient 0d hexa.

Exemple

ROTATE_RIGHT() Syntaxe Rle : ROTATE_RIGHT(adresse, n) : Rotation droite de n positions de loctet ayant pour adresse adresse . : a=0x86 ROTATE_ RIGHT (&a, 1) a devient 43 hexa.

Exemple

SET_TRIS_x() Syntaxe Rle Exemple : SET_TRIS_x(valeur) : Configure la direction du port x . : SET_TRIS_B(0x0F) Les pins B7, B6, B5, B4 sont configures en sortie (0). Les pins B3, B2, B1, B0 sont configures en entre (1).

SHIFT_LEFT() Syntaxe : SHIFT_LEFT(adresse, n, bit)

technologuepro.com//Programmatio

10/11

13/04/2010
Rle

programmation des microcontrleur e


: Dcalage gauche de n positions de loctet dadresse adresse ; bit est le bit introduit 0 ou 1. : SHIFT_LEFT(&b, 2, 0) Dcalage gauche de 2 positions de la variable b .

Exemple

SHIFT_RIGHT() Syntaxe Rle : SHIFT_RIGHT(adresse, n, bit) : Dcalage droite de n positions de loctet dadresse adresse ; bit est le bit introduit 0 ou 1. : SHIFT_ RIGHT (&b, 2, 0) Dcalage droite de 2 positions de la variable b .

Exemple

Go

Articles

Projets

Forum

Tlchargement

Login

Rvis le :23-06-2008| www.technologuepro.com

technologuepro.com//Programmatio

11/11

Vous aimerez peut-être aussi