03- programmation en mikroc

Upload: mouna-soula

Post on 18-Oct-2015

1.300 views

Category:

Documents


28 download

TRANSCRIPT

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 0 -

    REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE

    MINISTERE DE LENSEIGNEMENT SUPERIEUR ET DE LARECHERCHE SCIENTIFIQUE

    UNIVERSITE MHAMED BOGARA DE BOUMERDES

    FACULTE DES SCIENCES - DEPARTEMENT PHYSIQUE

    Spcialit : INFOTRONIQUE&

    IMAGERIE ET APPAREILLAGE BIOMEDICAL

    V. TOURTCHINE

    Programmation en mikroC. Application pour lesmicrocontrleurs de la famille PIC

    Manuscrit labor selon le programme officiellement agre et confirme par le Conseil Scientifique de la Facult des Sciences

    BOUMERDES - 2012

    /*******************************COMMUNICATION SERIE RS232=========================

    Cet exemple illustre l'utilisation de fonction Software_UART de la bibliothque du compilateur mikroC PRO.Microcontrl.: 16F887Oscillat.: HS,10.0000 Mhz Fichier: COMMUNIC_RS232.c********************************/char error, byte_read; void main(){

    ANSEL = 0; ANSELH = 0;TRISC = 0x00; /*Configurer PORTB en sortie */PORTC = 0; Initialiser Soft_UART en 9600 bods Soft_UART_Init(&PORTC, 7, 6, 9600, 1); if (error > 0)

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 1 -

    I. LANGAGE ET COMPILATEUR mikroC POUR PIC

    Le langage mikroC pour PIC a trouv une large application pour le dveloppement de systmes embarqus sur la base de microcontrleur. Il assure une combinaison de l'environnement de programmation avance IDE (Integrated Development Environment) , et dun vaste ensemble de bibliothques pour le matriel, de la documentation complte et dun grand nombre des exemples.

    Le compilateur mikroC pour PIC bnficie d'une prise en main trs intuitive et d'une ergonomie sans faille. Ses trs nombreux outils intgrs (mode simulateur, terminal de communication Ethernet, terminal de communication USB, gestionnaire pour afficheurs 7 segments, analyseur statistique, correcteur d'erreur, explorateur de code, mode Dbug ICD...) associ sa capacit pouvoir grer la plupart des priphriques rencontrs dans l'industrie (Bus I2C, 1Wire, SPI, RS485, Bus CAN, USB, gestion de cartes compact Flash et SD/MMC, gnration de signaux PWM, afficheurs LCD alphanumriques et graphiques, afficheurs LEDs 7 segments, etc...) en font un outil de dveloppement incontournable pour les systmes embarqus, sans aucun compromis entre la performance et la facilit de dbogage.

    1.1 Compilateur mikroC PRO pour PIC

    La nouvelle version appele mikroC PRO dispose de trs nombreuses amliorations du compilateur mikroC : nouvelles variables utilisables, nouvelle interface IDE, amlioration des performances du linker et de l'optimisateur, cycle de compilation plus rapide, code machine gnr plus compact (jusqu' 40 % suivant les cas), nouveaux PIC supports, environnement de dveloppement encore plus ergonomique, nouveaux exemples d'applications, etc...

    1.2 Installation du compilateur mikroC PRO v. 1.65

    Pas 1 : Cliquer sur licne mikroC_PRO_1.65.exe (Si la fentre du Contrle de compte dutilisateur souvre, cliquer sur oui), et attendre que les donnes de linstallation se dcompressent.

    1. Dans la suite nous utiliserons le compilateur mikroC PRO v.1.65

    2. La simulation des applications de programmation nous ralisons laide du logiciel PROTEUS v.7.6 SP

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 2 -

    Pas 2 : Cliquer sur Next

    Pas 3 : Cocher la case : I accept the terms in the License Agreement et cliquer sur Next

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 3 -

    Pas 4 : Avant de cliquer sur Next, il est recommand de laisser la case Install For All Users coch. Cliquer sur Next

    Pas 5 : Cliquer sur Next

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 4 -

    Pas 6 : Cliquer sur Install (Noter bien lendroit dinstallation)

    Pas 7 : Cliquer sur OUI pour lassociation du format de fichier .c avec le logiciel mikroC PRO

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 5 -

    Pas 8 : Cliquer sur Finish

    Pas 9 : Aller dans le rpertoire M_License et copier les deux fichiers qui sy trouvent.

    Pas 10 : Coller pour remplacer les deux fichiers copis auparavant dans le rpertoire omikroC PRO a t install.

    Pas 11 : Cliquer deux fois sur le fichier mikroC_PRO_PIC.key pour enregistrer ses informations sur le registre de votre ordinateur.

    Pas 12 : Lancer le programme MikroC PRO en cliquant deux fois sur mikroCPIC1618.exe

    1.3 IDE mikroC PRO

    Lancer le compilateur mikroC PRO en cliquant sur licne

    mikroC PRO for PIC.lnk

    Cest sur la figure 1.1 que vous obtenez lorsque vous dmarrez l IDE mikroC PRO pour la premire fois.Une description dtaill de toutes les options disponibles dans ce compilateur prendre trop de temps, de sorte que nous allions sauter cette tape. Au lieu de cela, nous allons dcrire salement le processus dcriture dun programme en langage mikroC, un simulateur de contrle. Pour plus dinformations reportez-vous laide [F1].

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 6 -

    Menu Toolbar Projet Manager

    Fig. 1.1 Lenvironnement IDE du compilateur microC PRO

    Editeur de code (voire la figure 1.1 : Code Editeur)Lditeur de code est le mme que toute diteur de texte standard pour lenvironnement de Windows, y compris Copie, Coller , Annuler les actions etc Il possde en plus des ressources comme suit :

    Coloration syntaxique rglable Assistant de code Assistant de paramtre Mise en forme automatique

    Dans la bote de dialogue Obtions (figure 1.2) vous pouvez configurer la coloration syntaxique, l'aide pour le code et paramtres, la correction automatique etc. Pour accder ce dialogue

    cliquez sur Tools > Options du menu droulant ou sur l'icne

    Assistant de codeSi vous imprimez les premires lettres du mot et puis appuyez sur Ctrl + Espace, tous les identificateurs autoriss correspondant aux caractres imprims seront offerts dans une fentre(voir la figure 1.3). Maintenant, nous pouvons continuer rduire le choix de taper ou d'utiliserla sourie pour slectionner l'option approprie dans la propose et appuyez sur Entre.

    Code Explorer

    Code Editor

    Project Settings(paramtresprincipaux dumicrocontrleur)

    Error Window

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 7 -

    Fig.1.2. Bote de dialogue Options

    Fig.1.3. Assistant de code

    Mise en forme automatiqueAfin d'obtenir une lisibilit maximale, il est possible de gnrer automatiquement la mise en forme de certaines instructions. Par exemple, tapez l'instruction IF, puis CRTL + J. A ce stade, l'diteur ajoute tout seul les instructions. A vous ensuite de complter le programme.

    Affichage syntaxique colorToujours dans le but d'obtenir une lisibilit maximale de votre programme, il vous est possible de configurer entirement les couleurs de chaque partie du listing (figure 1.2). Par exemple les commentaires en "vert", les instructions en "noir", les valeurs numriques en "bleu clair", etc.

    Outils intgrsLe compilateur "MikroC PRO" pour PIC intgre diffrents petits outils trs pratiques qui vous simplifieront lcriture des programmes de vos applications.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 8 -

    a) Mini terminal USARTLe "MikroC PRO" intgre un petit terminal de communication USART RS-232 (Universal Synchronous Asynchronous Receiver) pour lequel vous pourrez configurer le dbit, les commandes RTS et DTR....

    b) Mini gestionnaire 7 segmentsLe "MikroC PRO" intgre un petit utilitaire qui vous permettra de slectionner la valeur dcimale ou hexadcimale fournir pour piloter un afficheur 7 segments.

    c) Table de conversion ASCIILe "MikroC PRO" intgre un petit utilitaire qui vous permettra d'afficher une table de conversion ASCII (trs utile lorsque vous travaillez avec des afficheurs LCD).

    d) Gestion des LCD graphiquesLe "MikroC PRO" intgre un petit utilitaire qui vous permettra de convertir des fichiers BMP en donnes pouvant tre affiches sur plusieurs types de LCD graphiques.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 9 -

    1.4 Cration dun nouveau projet

    Le mikroC PRO pour PIC organise des applications dans des projets, compos d'un seulfichier de projet (extension. mcppi) et un ou plusieurs fichiers sources (extension).

    Les fichiers source peut tre compil que si elles font partie d'un projet.Le fichier projet contient les informations suivantes :

    - Nom du projet et une description facultative- Composant cible- Option du composant- Frquence dhorloge du composant- La liste des fichiers source du projet avec les chemins- Fichiers d'image- Fichiers binaires (* mcl.)- D'autres fichiers

    La meilleure faon de crer un projet cest l'aide de l'Assistant Nouveau projet (menuProject> New ProjeCt ) ou en cliquant sur l'icne Nouveau projet partir de la barre d'outilsdu projet.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 10 -

    Nouvelles tapes de l'Assistant de projet

    Commencez crer votre nouveau projet, en cliquant sur le bouton Next :

    Premier pas - Slectionnez le priphrique dans le priphrique dans la liste droulante.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 11 -

    Deuxime pas - Saisir la valeur de frquence de l'oscillateur.

    Troisime pas - Spcifiez l'emplacement o votre projet sera enregistr.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 12 -

    Quatrime pas - Ajout pour le projet un fichier sil sont disponibles en ce moment.vous pouvez toujours ajouter des fichiers de projet plus tard

    en utilisant Project Manager.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 13 -

    Cinquime tape - Cliquez sur Finish pour crer votre nouveau projet.

    A ce stade, une nouvelle fentre vide (fig. 1.4) saffiche afin que vous pussiez y saisir votre programme.

    1.5 Compilation

    Ici vous devez saisir votre code-source

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 14 -

    Lorsque vous avez cr le projet et crit le code source, il est temps de le compiler.

    Slectionnez Project Build partir du menu droulant ou cliquez sur l'icne Build dansla barre d'outils du projet.

    Si plus d'un projet est ouvert, vous pouvez compiler tous ouverts projets en slectionnant Project

    Build All dans le menu droulant, ou cliquez sur licne de la barre d'outils du projet.

    Barre de progression s'affiche pour vous informer sur l'tat de la compilation. Si il y a desquelques erreurs, vous en serez inform dans la fentre d'erreur (fig. 1.4).

    Fig. 1.4 Avertissement des rreures

    Aprs la compilation russie, le compilateur mikroC PRO pour PIC gnre des fichiers de sortie dans le dossier du projet (dossier qui contient le fichier projet. mcppi). Les fichiers de sortie sontrsums dans le tableau ci-dessous:

    Format Description Type de fichierIntel HEX Code hexadcimal dans le format Intel. Fichier est utilis

    pour programmer PIC.hex

    Binary Fichier compil pour la bibliothque mikroC. Les distributions binaires sont des routines qui susceptibles

    .mcl

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 15 -

    dtre inscrits dans d'autres projets.List File Lmage globale de lallocation de mmoire du PIC pour :

    adresses dinstructions, les registres et les tiquettes du programme.

    .lst

    Assembler File

    Le fichier en assembleur avec des noms symboliques,obtenus partir de liste des fichiers.

    .asm

    1.5 Fichiers Sources

    Pour crer un nouveau fichier source, procdez comme suit :Slectionne New depuis le menu File ou pressez Ctrl+N ou cliquez sur licne New Fill depuis la barre doutils File.Une nouvelle fentre souvrira dans laquelle vous pourrez saisir votre code source. Slectionnez alors Save depuis le menu File ou pressez Ctrl+S ou cliquez sur licne Save File depuis la barre doutils File et nommez ce dernier comme vous le voulez.

    Cration dun nouveau fichier source

    Sauvegarder un fichierAssurez-vous que la fentre contenant le fichier que vous voulez sauvegarder est active.

    Slectionnez ensuite Save depuis le menu File ou pressez Ctrl+S ou cliquez sur licne Save Fail de la barre doutils File.

    Sauvegarder un fichier sous un nom diffrentAssurez-vous que la fentre contenant le fichier que vous voulez sauvegarder est active.

    Slectionnez ensuite Save As depuis le menu File. Une bote de dialogue Save [nom du fichier] .c as saffichera alors. Dans cette bote, slectionnez lemplacement dans lequel vous voulez sauvegarder le fichier.

    Dans le champ Nom du fichier, modifiez le nom du fichier que

    Ouvrir un fichier existantSlectionnez Open depuis le menu File ou pressez Ctrl+Q ou cliquez sur licne Open File depuis la barre doutils File. Dans la boite de dialogue Ouvrir, slectionnez alors lemplacement du fichier que vous dsirez ouvrir et cliquez sur le bouton Ouvrir.

    Le fichier slectionn saffiche dans sa propre fenetre. Si le fichier slectionn est dj ouvert, sa fenetre ddition (Editor) deviendra alors active.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 16 -

    II. INTRODUCTION AU LANGAGE DE PROGRAMMATION MICROC

    2.1 Structure d'un programme en mikroC

    La structure la plus simple d'un programme en mikroC, cest le programme reprsent dans le code-source 2.1, qui nous permettra de faire clignoter une LED connecte au PORTB (par exemple bit 0 du PORTB) du microcontrleur PIC avec une priode de 2 secondes (1 seconde allume et une seconde teinte).

    2.1.1 Rgles gnrale dcriture en microC

    Les instructions propres au langage microC doivent tre crites en minuscule(void main (void)).

    Les instructions particulires aux microcontrleurs doivent tre crites en majuscule (TRISB).

    Les retours la ligne et les espaces servent uniquement arer le code

    Toutes instructions ou actions se terminent par un point virgule ; .

    Code-source 2.1

    /****************************************************************************LED clignotante==============

    Ce programme fait clignoter dune LED connecte au PORTB (broche RB0) avecun des intervalles d'une seconde.Microcontrleur : 16F84AOscillateur : HS, 4.0000 Mhz

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 17 -

    Fichier : LED.cDate : Juillet 2012 ****************************************************************************/void main(){for(;;) // Boucle sans fin{TRISB = 0; // Configuration du PORTB en sortiePORTB.0 = 0; // RB0 = 0Delay_Ms(1000); // Pause dune secondePORTB.F0 = 1; // RB0 = 1Delay_Ms(1000); // Pause dune seconde

    } // Fin de la boucle}

    Examinons le fichier LED.c du code-source

    2.1.2 Commentaires Les commentaires sont utiliss pour prciser le fonctionnement du programme et pour une annotation du programme. Les lignes de commentaires sont ignores et non compil par le compilateur.

    En mikroC les commentaires de programmes peuvent tre de deux types: de longscommentaires, stendant sur plusieurs lignes, et de courts commentaires, occupant une seule ligne.

    Un commentaire au dbut d'un programme peut dcrire brivement le fonctionnement du programme et de fournir le nom de l'auteur, le nom du fichier programme, la date laquelle le programme a t crit, et une liste des numros de version, ainsi que les modifications dans chaque version.

    Comme montre le Code-source 2.1 les longs commentaires commencent par le caractre /* et se termine par le caractre */ .

    De mme, de courts commentaires commencent par le caractre // et il na pasbesoin d'un caractre de terminaison.

    2.1.2 Dbut et fin d'un programme

    En langage microC, un programme commence avec les mots-cls:

    void main()Aprs cela, une accolade ouvrante est utilise pour indiquer le dbut du corps de programme. Le programme se termine par une accolade fermante.

    Ainsi, comme indiqu dans le Code-source 2.1, le programme a la structure suivante :

    void main(){

    // Votre code ici}

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 18 -

    2.1.3 Fin dune instructionLe point virgule ; indique la fin dune instruction, sinon une erreur du compilateur sera gnre.

    j = 5; // correcte j = 5 // erreur

    2.1.4 Espaces blancs

    Les espaces blancs sont des espaces, des flans, les tabulations et les caractres de nouvelle ligne. Le compilateur microC ne tient pas compte tous les espaces blancs. Ainsi, les troissquences suivantes sont identiques :

    int i; char j;ou

    int i;char j;ou

    int i;char j;

    De mme, les squences suivantes sont identiques :

    i=j+2 ;ou

    i=j+2 ;

    2.2 Elments de programmation en mikroC

    2.2.1 Les variables. Dfinition et dclaration de variables

    Une variable est une portion rserve dune mmoire laquelle on a donn un nom. On peut stocker ou lire les informations de ces variables.Toute variable utilise dans un programme doit auparavant tre dfinie.La dfinition dune variable consiste la nommer et lui donne un type et ventuellement lui donner une valeur initiale (initialiser). Cest cette dfinition qui rserve (alloue) la place mmoire ncessaire en fonction du type.Lorsque le programme que lon ralise est dcompos en plusieurs modules, une mme variable, utilise dans plusieurs modules, doit tre dclare dans chacun de ces modules. Par contre, on ne dfinira cette variable que dans un seul de ces modules. Cest au moment de ldition des liens que lon mettra en correspondance les variables apparaissant dans plusieurs modulez (variable partage, mot-cl extern).La position de la dclaration ou de la dfinition dune variable dtermine sa porte cest--dire sa dure de vie et sa visibilit.

    Les variables globales sont dclares en dehors de toute fonction.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 19 -

    Les variables locales sont dclares lintrieur des fonctions et ne sont pas visible lextrieur de la fonction dans laquelle celle-ci est dfinie.

    Les noms des variables ne peuvent contenir que des lettres de a z et partir de A Z, le trait de soulignement "_" et les chiffres de 0 9.

    Les noms des variables dans mikroC n'est pas sensible la casse, de sorte que Sum, som et soM reprsente le mme identifiant.

    Voici quelques identificateurs valides:

    temperature_V1Pressureno_hitdat2stringSUM3_vtext

    ... mais voici quelques identificateurs incorrectes:

    7temp // ne peut pas commencer par un chiffre% Suprieur // ne peut pas contenir de caractres spciauxint // ne peut pas rpter un mot-clj23.07.04 // ne peut pas contenir de caractres spciaux(priode)

    Certains noms sont rservs pour le compilateur lui-mme et ne peut pas tre utiliss comme noms de variables dans un programme. Le tableau 2.1 donne une liste alphabtique de ces noms rservs.

    Tableau 2.1 Noms rservs en mikroCasm enum signedauto extern sizeofbreak float staticcase for structchar goto switchconst if typedefcontinue int uniondefault long unsigneddo register voiddouble return volatileelse short while

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 20 -

    Le langage mikroC prend en charge les types de variables indiques dans le tableau 2.2.

    Tableau 2.2: Types de variables en mikroC

    Type

    Taille(bits)

    Plage

    unsigned char 8 0 255unsigned short int 8 0 255unsigned int 16 0 65535unsigned long int 32 0 4294967295signed char 8 -128 127signed short int 8 -128 127signed int 16 -32768 32767signed long int 32 - 2147483648 2147483647float 32 1.17549435082E-38 6.80564774407E38double 32 1.17549435082E-38 6.80564774407E38long double 32 1.17549435082E-38 6.80564774407E38

    (unsigned) char or unsigned short (int)

    Les variables appeles (unsigned) char ou unsigned short (int), sont des variables non signes de 8 bits avec une plage de 0 255. Dans l'exemple suivant deux variables de 8bits nommes total et sum sont crs, et sum est affecte la valeur dcimale 150:

    unsigned char total, sum;sum = 150;

    ou

    char totale, sum;sum = 150;

    Les variables peuvent affecter des valeurs au cours de leur dclaration. Ainsi, les dclarations ci-dessus peuvent aussi tre crites comme suit:

    char total, sum = 150;

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 21 -

    signed char or (signed) short (int)

    Les variables appeles signed char, ou (signed) short (int) sont des variables signes de 8 bits avec une gamme de -128 +127. Dans l'exemple suivant, une variable signe de 8 bits nomme counter est cr avec une valeur de 50 :

    signed char counter =- 50;soitshort counter = -50;soitshort int counter = -50;

    (signed) int

    Les variables appels (signed) int sont des variables signes de 16 bits avec une gamme ayant de - 32768 +32767. Dans l'exemple suivant d'un entier sign nomm Big est :

    int Big;

    unsigned (int)

    Les variables appels unsigned (int) sont des variables non signs de 16 bits avec une gamme de 0 65535. Dans l'exemple suivant une variable de 16 bits nomme count est affecte la valeur dcimale de 12000 :

    unsigned int count = 12000;

    (signed) long (int)

    Les variables appels (signed) long (int) sont des variables signes de 32 bits avec une gamme de - 2147483648 +2147483647. Un exemple est suivant :

    signed long LargeNumber;

    unsigned long (int)

    Les variables appels unsigned long (int) sont des variables non signes de 32 bits ayant une gamme de 0 4294967295. Un exemple est suivant:

    unsigned long VeryLargeNumber;

    float or double or long double

    Les variables appeles float ou double ou long double, sont des variables virgule flottante mis en uvre en utilisant le mikroC de format 32 bits.Nombres virgule flottante comprise entre - 1.17549435082E-38 + 6.80564774407E38. Dans l'exemple suivant, une variable flottante nomme area estaffecte la valeur 12.235:

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 22 -

    float area ;area = 12.235;

    Pour viter toute confusion lors de l'laboration du programme, il est recommand de prciser le signe de la variable (sign ou non sign) ainsi que le type de variable. Par exemple, utiliser unsigned char au lieu de char seulement, et unsigned int au lieu de unsigned seulement.

    2.2.2 ConstantesConstantes reprsentent des valeurs fixes (numrique ou caractre) dans des programmes quine peuvent pas tre changes. En mikroC, constantes peuvent tre entiers, flottants, caractres, les chanes, ou des types numrs.

    Integer ConstantsLes constantes entires (Integer Constants) peuvent tre en dcimal, hexadcimal, octalou binaire. Le type de donnes d'une constante est tir par le compilateur partir de sa valeur. Mais suffixes peut tre utilis pour changer le type d'une constante.

    Dans le tableau 2.2, nous avons vu que les constantes dcimales (signed long int)peuvent avoir des valeurs de 2147483648 + 4294967295. Par exemple, nombre constant 210 est stock comme un entier non sign ( unsigned char) ou (unsigned short int). De mme, nombre constant - 200 est stock comme un entier sign (signed int).

    Le suffixe u ou U force la constante d'tre non sign (unsigned) et le suffixe l ou L forcela constante d'tre longue (long). Utilisation de U (ou u) et L (ou l) oblige la constanted'treunsigned long.

    Les constantes sont dclares en utilisant le mot-cl const et sont stockes dans le flash de mmoire du microcontrleur PIC. Par exemple, MAX est dclar comme la constante100 :const MAX =100;

    Les constantes hexadcimales commencent par les caractres 0x ou 0X et peuvent contenir des donnes numriques de 0 9 et les caractres hexadcimaux de A F.Dans l'exemple suivant, TOTAL est la constante de la valeur hexadcimale FF:

    const TOTAL = 0xFF;

    Les constantes octales ont un zro au dbut du nombre et peuvent contenir des donnesnumriques de 0 7. Dans l'exemple suivant, une constante CNT est affecte une valeur octale 17 :

    const CNT = 017;

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 23 -

    Les constantes binaires commencent par 0b ou 0B et ne peuvent contenir que 0 ou 1. Par exemple une constante nomme Min est dclare comme ayant la valeur binaire11110000:

    const Min = 0b11110000

    Floating Point Constants

    Les constantes virgule flottante (Floating Point Constants) se compose de:

    Entier dcimalPoint dcimalPartie dcimale fractionnaire e ou E et l'ordre du signe

    MikroC limite les valeurs de constantes virgule flottante par la gamme :

    1.17549435082 * 10-38 ... 6.80564774407 * 1038.

    Dans l'exemple suivant, une constante nomme TEMP est dclare comme ayant la valeur fractionnelle 37.50 :

    const TEMP = 37.50ouconst TEMP = 3.750E1Character Constants

    Une constante de caractre (Character Constants) est un caractre renferm dans des guillemets simples. Par exemple, une constante nomme First_Alpha est dclarecomme ayant la valeur du caractre A :

    const First_Alpha = A;

    String Constants

    Les constantes de chane (String Constants ) sont des squences fixes de caractresstockes dans la mmoire flash du microcontrleur. La chane doit commencer et se terminer par un guillemet " . Un exemple dune constante de type chane est la suivante :

    "Il s'agit d'un exemple de chane constante"

    Une constante chane peut tre tendue travers une frontire en ligne en utilisant une barre oblique inverse "\" :

    "C'est la premire partie de la chane \et c'est la poursuite de la chane "

    Cette dclaration de la constante chane est la mme que :

    "C'est la premire partie de la chane et c'est la poursuitede la chane "

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 24 -

    Enumerated Constants

    Les constantes numres (Enumerated Constants) sont de type entier et sont utilises pour faire un programme plus facile suivre. Dans l'exemple suivant, une constante nomme couleur stocke les noms de couleurs. Le premier lment de couleur a la valeur 0:

    enum couleur {noir, marron, rouge, orange, jaune, vert, bleu, gris,white};

    2.2.3 Squences d'chappement

    Les squences d'chappement (Escape Sequences) sont utilises pour reprsenter les caractres ASCII non imprimables. Tableau 2.3 montre quelques squences d'chappementcouramment utiliss et de leur reprsentation en langage microC.

    Par exemple, la combinaison de caractres \n reprsente le caractre de nouvelle ligne.

    Un caractre ASCII peut galement tre reprsent en prcisant son code hexadcimal, aprs une barre oblique inverse.

    Par exemple, le caractre de nouvelle ligne peut galement tre reprsent comme \x0A .

    Tableau 2.3: Quelques squences d'chappement

    Squence d'chappement

    Valeur de la

    squenceHex Caractre

    \ a 0X07 BEL (cloche)

    \ b 0X08 BS (backspace)

    \ t 0X09 HT (tabulation horizontale)

    \ n 0XLF 0A (saut de ligne)

    \ v 0X0B VT (tabulation verticale)

    \ f 0X0C FF (saut de page)

    \ r 0X0D CR (retour chariot)

    \ xH Chane de chiffres Hex

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 25 -

    2.2.4 Variables statiques

    Les variables statiques (Static variables ) sont des variables locales utilises dans les fonctions

    lorsque la dernire valeur d'une variable entre les appels successifs de la fonction doit tre prserve. Comme le montre l'exemple suivant, les variables statiques sont dclares en utilisant le mot cl static :

    statique unsigned int count ;

    2.2.5 Variables externes

    Utilisation du mot (extern) devant un nom de variable dclare cette variable comme externe. Ilindique au compilateur que la variable est dclare ailleurs dans un code-source distincte

    module. Dans l'exemple suivant, les variables sum1 et SUM2 sont dclars comme externesentiers non signs :

    extern int sum1, SUM2 ;

    2.2.6 Variables volatiles

    Les variables volatiles (Volatile Variables ) sont importantes dans d'interruption des programmes et de routines dentres-sorties. Utilisation de mot-cl volatile indique que la valeur de la variable peut changer au cours de la dure de vie du programme indpendant de l'coulement normal du programme. Dans l'exemple suivant, la variable Led est dclare comme un volatile non sign :

    volatile unsigned char Led;

    2.2.7 Variables numres

    Les variables numres sont utilises pour rendre un programme plus lisible. Dans unevariable numre, une liste de rfrences est spcifie et la valeur du premier lment est fix 0, l'autre lment est mis 1, et ainsi de suite. Dans l'exemple suivant, la Semaine de typeest dclar comme un liste numre et LUN = 0, MAR = 1, WEN = 2, et ainsi de suite :

    enum Semaine {LUN, MAR, MER, JEU, VEN, SAM, DIM};

    Il est possible d'impliquer les valeurs des lments dans une liste numre. Dans leexemple suivant, noir = 2, bleu = 3, rouge = 4, et ainsi de suite.

    enum couleurs {noir = 2, bleu, rouge, blanc, gris};

    De mme, dans l'exemple suivant, noir = 2, bleu = 3, rouge = 8, et gris = 9:

    enum couleurs {black = 2, bleu, rouge = 8, gris};

    Les variables de type de recensement peuvent tre dclares par les spcifiant aprs la liste

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 26 -

    des articles. Par exemple, pour dclarer la variable My_Week de la Semaine de type numr, utilisez la dclaration suivante:

    enum Semaine {LUN, MAR, MER, JEU, VEN, SAM, DIM} My_Week;

    Maintenant, nous pouvons utiliser My_Week comme une variable dans un programme:

    My_Week = MER // assigne 2 My_Week

    ou

    My_Week = 2 // le mme que ci-dessus

    Aprs avoir dfini Semaine comme un type numr, nous pouvons dclarer des variables This_Week et Next_Week de type Semaine :

    enum Semaine This_Week, Next_Week;

    2.2.8 Tableaux

    Les tableaux (Arrays) sont utiliss pour stocker des lments lis dans le mme bloc de mmoire et en vertu d'un nom spcifi. Un tableau est dclar en spcifiant son type, le nom, et le nombre dlments stocker. Par exemple:

    unsigned int Total [5] ;Ce tableau de type unsigned int est nomm Total et dispose de cinq lments. Le premierlment d'un tableau est index 0. Ainsi, dans cet exemple, Total[0] se rfre au premierlment du tableau et Total[4] se rfre au dernier lment. Le tableau Total est stockdans un mmoire ayant cinq emplacements conscutifs comme suit:

    Total[0]Total[1]Total[2]Total[3]Total[4]

    Les donnes peuvent tre stockes dans le tableau en spcifiant le nom du tableau et de l'indice. Par exemple, pour stocker 25 dans le deuxime lment du tableau, nous devons crire:

    Total[1] = 25;

    De mme, le contenu d'un tableau peut tre lu en spcifiant le nom du tableau et de sonindex. Par exemple, pour copier l'lment de tableau dindex 2 une variable appele Temp , nous devons crire:

    Temp = Total[2];

    Le contenu d'un tableau peut tre initialis lors de la dclaration du tableau enattribuant d'une squence de valeurs spares par des virgules dans le tableau. Voici un exemple dun tableau ayant 12 lments des mois[0] = 31, mois[1] = 28, etainsi de suite:

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 27 -

    unsigned char mois[12] = {31,28,31,30,31,30,31,31,30,31,30,31};www.newnespress.

    Le mme tableau peut galement tre dclar sans spcifier sa taille:

    unsigned char mois[ ] = {31,28,31,30,31,30,31,31,30,31,30,31};Des tableaux de caractres peuvent tre dclars de manire similaire. Dans l'exemple suivant, un tableau de caractres nomms Hex_Letters est dclare avec 6 lments:

    unsigned char Hex_Letters[ ] ={A, B, C, D, E, F};Les chanes sont des tableaux de caractres avec un terminateur null. Les chanes peuvent tre dclares soit par enfermant la chane entre guillemets, ou en spcifiant chaque caractre du tableau au sein de apostrophes et puis en terminant la chane avec un caractre nul. La chane de deux dclarations dans l'exemple suivant est identique :

    unsigned char Mystring[ ] = COMP;

    et

    unsigned char Mystring[ ] = {C, O, M, P, \0};Dans le langage de programmation microC, nous pouvons aussi dclarer des tableaux aux dimensions multiples. Tableaux unidimensionnels sont gnralement appels vecteurs, et des tableaux bidimensionnels sont appels matrices. Un rseau bidimensionnel est dclar en spcifiant le type de donnes de la matrice, le nom de tableau, et la taille de chaque dimension. Dans l'exemple suivant, un tableau deux dimensions nomm P contiens trois lignes et quatre colonnes. Au total, le tableau a douze lments. Le premier lment de la matrice est P[0][0], et le dernier lment est P[2][3].La structure de ce tableau est montre ci-dessous:

    P[0][0] P[0][1] P[0][2] P[0][3]

    P[1][0] P[1][1] P[1][2] P[1][3]

    P[2][0] P[2][1] P[2][2] P[2][3]

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 28 -

    lments d'un tableau multidimensionnel peut tre spcifi lors de la dclaration dutableau. Dans l'exemple suivant, rseau bidimensionnel Q a deux ranges et deuxcolonnes, ses lments diagonaux sont mis 1, et de ses lments non diagonaux sontremis 0:

    unsigned char Q[2][2] = { {1,0}, {0,1} };

    2.2.9 PointeursLes pointeurs (Pointers) sont une partie importante du langage microC, car ils occupent les adresses mmoire des autres variables. Les pointeurs sont dclares de la mme manire que d'autres variables, mais avec le caractre * en face du nom de variable. Dans l'exemple suivant, un pointeur de caractre non sign du nom pnt est dclar:

    unsigned char *pnt;

    Quand un nouveau pointeur est cr, son contenu est d'abord indtermin et il ne tient pasl'adresse d'une variable. Nous pouvons attribuer l'adresse d'une variable un pointeur l'aidele & :

    pnt = &Count;

    Maintenant pnt affecte l'adresse de variable Count. La variable Count peut tre affecte une valeur en utilisant le caractre * en avant de son pointeur. Par exemple, le Count peut tre attribue 10 l'aide de son pointeur :

    * pnt = 10; // Count = 10

    cest la mme chose que

    Count = 10; // Count = 10ou, la valeur du Count peut tre copi la variable Cnt en utilisant son pointeur :

    Cnt = *pnt; // Cnt = Count

    Pointeurs de tableaux

    Dans le langage microC, le nom d'un tableau est aussi un pointeur de tableau. Ainsi, pour le tableau :unsigned int Total[10];Le nom Total est galement un pointeur de ce tableau, et il contient l'adresse du premierellment de la matrice. Ainsi, les deux noncs suivants sont gaux:

    Total[2] = 0;et*(Total + 2) = 0;

    En outre, l'nonc suivant est vrai:

    &Total[j] = Total + j ;

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 29 -

    En langage microC, nous pouvons effectuer des oprations arithmtiques pour pointeurs qui peuvent impliquer :

    Comparaison de deux pointeurs Addition ou la soustraction d'un pointeur et un entier La soustraction de deux pointeurs Assigner un pointeur vers un autre En comparant un pointeur avec zroPar exemple, supposons que le pointeur P est affect afin de contenir l'adresse du tableaudlment Z[2]:

    P = &Z[2];

    Nous pouvons maintenant effacer les lments 2 et 3 du tableau Z, comme dans les deux exemples qui suivent. Les deux exemples sont identiques, sauf que dans le premier exemple pointeur P contient l'adresse de Z[3] la fin des tats, et il contient l'adresse de Z[2] la fin de deuxime srie de dclarations:

    *P = 0; // Z[2] = 0

    P = P + 1; // maintenant P pointe llment 3 de Z*P = 0; // Z[3] = 0

    ou

    *P = 0; // Z[2] = 0

    *(P +1) = 0; // Z[3] = 0

    Un pointeur peut tre affect un autre pointeur. Dans l'exemple suivant, les variables Cnt et Tot sont lensable de 10 lments crs l'aide de deux pointeurs diffrents:

    unsigned int *i, *j; // dclare 2 pointeurs

    unsigned int Cnt, Tot; // dclare deux variablesi = &Cnt; // i pointe vers Cnt

    *i = 10; // Cnt = 10

    j = i; // copy pointeur i vers pointeur j

    Tot = *j; // Tot = 10

    2.2.10 Structures

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 30 -

    Une structure peut tre utilise pour recueillir des lments connexes, qui sont ensuite traits comme un seul objet. Contrairement un tableau, une structure peut contenir un mlange de types de donnes. Par exemple, un structure permet de stocker les donnes personnelles (nom, prnom, ge, date de naissance, etc) d'un tudiant.Une structure est cre en utilisant le mot-cl struct, suivie d'une structure de nom et duneliste des dclarations de membre. ventuellement, des variables de mme type que la structure peuvent dclarer l'extrmit de la structure.L'exemple suivant dclare une structure nomme Personne :

    struct Personne{unsigned char name[20];unsigned char prnom[20];

    unsigned char nationalit[20];unsigned char ge;}

    Nous pouvons dclarer des variables du mme type que la structure en donnant le nom de la structure et le nom de la variable.

    Par exemple, deux variables Moi et Toi de type Personne vous pouvez crer parla dclaration:

    struct Personne Moi, Toi;Les variables de type Personne peuvent galement tre cres lors de la dclaration de la structure comme suit :

    struct Personne{unsigned char name[20];unsigned char prnom [20];unsigned char nationalit [20];unsigned char ge;

    }Moi, Toi

    Nous pouvons attribuer des valeurs aux lements d'une structure en spcifiant le nom de la structure, suivi d'un point . et le nom de l'lment. Dans l'exemple suivant, l'ge

    des variables de structure Moi est mis 25, et M variable est affect la valeur de l'ge dansvariable de structure Vous:

    Moi.age = 25;M = Vous.age;

    Elments de la structure peut tre initialis lors de la dclaration de la structure. Dans l'exemple suivant, le rayon et la hauteur de la structure sont initialiss Cylindre 1.2 et2.5 respectivement :

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 31 -

    struct Cylindre{valeur de rayon;valeur dhauteur;

    } MienCylindre {1.2, 2.5};

    Les valeurs peuvent galement tre attribues pour les lments d'une structure lade des pointeurs en dfinissant les variable el les types des pointeurs. Par exemple, si LeCylindreest dfini comme un pointeur vers la structure Cylindre, alors nous pouvons crire :

    struct Cylindre{valeur de rayon;flotter dauteur;

    }*LeCylinder;LeCylinder -> rayon = 1.2;LeCylinder -> hauteur = 2.5;

    La taille d'une structure est le nombre d'octets contenus dans la structure. Nous pouvons utiliser l'oprateur sizeof pour obtenir la taille d'une structure.

    Considront l'exemple ci-dessus :

    sizeof (MienCylindre)

    retours 8, tant donn que chaque variable de type float occupe 4 octets en mmoire.

    Les champs de bits peuvent tre dfinis en utilisant les structures. Avec les champs de bits, nous pouvons attribuer des identificateurs pour les bits dune variable. Par exemple, pour identifier les bits 0, 1, 2, 3 d'une variable pour LowNibble et d'identifier les 4 bits restants pour HighNibble nous pouvons crire :

    struct{LowNibble: 4;HighNibble: 4;

    } MienVariable;

    On peut alors accder aux quartets bits de la variable MienVariable :

    MienVariable.LowNibble = 12;MienVariable.HighNibble = 8;

    En microC, nous pouvons utiliser les dclarations typedef pour crer de nouveaux types dune variable. Par exemple, une nouvelle structure type de donnes nomm Reg peut tre cr comme suit :

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 32 -

    typedef struct{

    unsigned char nom[20];unsigned char prenom[20];unsigned ge;

    }Reg;

    Les variables de type Reg peuvent ensuite tre crs de la mme manire que les autres types de variables. Dans l'exemple suivant, les variables MyReg, Reg1, et Reg2 sont crs partirde type de donnes Reg:

    Reg MyReg, REG1, REG2;

    Le contenu dune structure peut tre copi dans une autre structure, condition quedes structures soient dtermines partir du mme modle. Dans l'exemple qui suit , P2 est copi sur P1:struct Personne{unsigned char nom [20];unsigned char prenom [20];unsigned int ge;unsigned int hauteur;unsigned poids;

    }

    struct Personne P1, P2;. . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . .P2 = P1;

    2.2.11 UnionsLes unions sont utilises pour les variables de recouvrement. Une union est similaire une structure et il est mme dfini d'une manire similaire. Les deux sont bass sur des modles, et les membres de tous les deux sont accessible l'aide des oprateurs . ou -> . Une chausse diffre d'une structure en ce que tous variables dans une union occupent la mme zone mmoire, ils partagent le mme stockage. Un exemple de dclaration de l'union est la suivante :

    union flags

    {unsigned char x;unsigned int y;

    }P;

    Dans cet exemple, les variables x et y occupent la mme zone de mmoire, et la taille de cel'union est de 2 octets de long, ce qui est de la taille de la plus grande partie de l'union. Quand

    la variable y est charg avec une valeur de 2 octets, la variable x aura la mme valeur que faible octet de y.

    Dans l'exemple suivant, y est charg avec 16-bit valeur hexadcimale0xAEFA, et x est charg avec 0xFA:

    P.y = 0xAEFA ;

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 33 -

    La taille d'une union est la taille (nombre d'octets) de son lment est le plus important. Ainsi,la dclaration:

    sizeof (P)renvoie 2.

    Cette union peut aussi tre dclare comme suit :

    union flags{unsigned char x;unsigned int y;

    }union flags P;

    2.2.12 Oprateurs et expressions en mikroC

    Les oprateurs sont appliqus aux variables et d'autres objets dans les expressions pour assurer certaines conditions ou des calculs.

    Une expression est un objet syntaxique obtenu en assemblant des constantes, des variables et des oprateurs.

    Exemple :

    x + 12

    Dans le langage microC, il y a dautres oprateurs que les oprateurs arithmtiques quon a lhabitude de manipuler. Il y en a en fait plus de 40 oprateurs.

    Oprateurs et priorits

    Vous avez lhabitude de manipuler des expressions arithmtiques :

    2+3*4*5-2, 2-3-4

    On sait que ces expressions sons quivalentes (2+(3*(4*5)))-2, (2-3)-4.

    Introduire les parenthses permet de dfinir sans ambiguit lexpression que lon manipule. Pour viter lusage des parenthses qui alourdissent la lecture, il existe des rgles pour lever toute ambigit :

    Exemple :

    2+3*4

    La sous expression 3*4 est value en premier et le rsultat obtenu est ajout la valeur 2 (forme avec parenthse : 2+(3+4)).On dit que loprateur * possde une priorit suprieur la priorit de loprateur + .

    2-3-4

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 34 -

    La sous expression 2-3 est value en premier et au rsultat obtenu, on soustrait la valeur 4 (forme avec parenthse : (2-3)-4).On dit que lordre dvaluation de loprateur est de gauche droite.

    La donne dune priorit et dun ordre dvaluation permet de fixer des rgles communes dvaluation des expressions.

    Ces priorits et ordre dvaluation ne permettent videment pas de se dispenser compltement des parenthses :

    (2+3)*4 comparer 2+3*4

    Caractristiques de loprateur () :

    Oprateur Nom Notation Priorit Ordre

    ( ) parenthses () 15 gauche-droite

    Oprateur daffectation

    Loprateur la plus importante dans un langage de programmation est celle qui consiste donner une valeur une variable.

    Cette opration est dsigne par le symbole = .

    Comme laffectation range une valeur dans une variable (une zone mmoire), il est impratif que le membre gauche dune affectation reprsente une zone (left value).

    Une constante nest pas une left value car il ne dsigne pas ladresse dune zone mmoire. Elle ne peut donc pas figurer en membre gauche dune affectation.

    Le membre droit dune affectation peut dsigner soit une constante soit une zone mmoire soit une expression.

    Oprateur Nom Notation Priorit Ordre

    = affectation x = y 2 droite- gauche

    Les oprateurs arithmtiques

    Oprateur Nom Notation Priorit Ordre

    + addition x + y 12 gauche-droite

    - soustraction x - y 12 gauche-droite

    * multiplication x*y 13 gauche-droite

    / division x/y 13 gauche-droite

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 35 -

    % modulo x%y 13 gauche-droite

    Les oprateurs +, -, * , fonctionnent comme en arithmtique.

    Par contre, loprateur / (division) se comporte de manire diffrente selon que les oprandes sont des entier ou des nombres flottants :

    Nombres flottants : le rsultat est un nombre flottant obtenu en divisant les deux nombres. Nombres entiers : le rsultat est un nombre entier obtenu en calculant la division entier ou division euclidienne. Loprateur % nest dfini que pour les entiers et le rsultat est le reste de la division entire des oprandes.

    Rappel sur la division entire : On appelle quotient et reste de la division entire de a et de b, les nombres entiers q et vrifiant :

    a = q*b +r ; 0 < r < B

    Exemple 1 :

    Si a = 20 et b = 3 alors q = 6 et r = 2 (on a vrifi : 20 = 6*3 + 2)

    Exemple 2 :

    int a, b, c ;float x, y, z ;

    a = b/c; //division entirea = x/y; //reste entierx = y/z; //division rellex = 2/3; //division entirex = 2.0/3.0; //division rellex = (float)((float)a)/y; //division relle

    Loprateur unaire a une priorit suprieure aux oprateurs binaires arithmtiques :

    Les oprateurs de comparaison

    Oprateur Nom Notation Priorit Ordre

    -(unaire) ngation -x 13 droite- gauche

    Oprateur Nom Notation Priorit Ordre

    == teste dgalit x == y 9 gauche-droite

    != teste de non galit x ! = y 9 gauche-droite

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 36 -

    Thoriquement, le rsultat dune comparaison est une valeur boolenne (vrai ou faux). En microC, le rsultat dune comparaison est 1 (!= 0) ou 0 selon que cette comparaison est vraieou fausse.Il nexiste pas de type boolen en microC : la valeur entire 0 sera considre comme quivalente la valeur faux et toute valeur diffrente de 0 quivalente la valeur vrai.

    Les oprateurs logiques

    Une variable boolenne est une variable pouvant prendre la valeur vrai ou faux.

    La valeur dune expression boolenne est, comme le rsultat des comparaisons, une valeur entire.

    Oprateur Nom Notation Priorit Ordre

    && ET x && y 5 gauche-droite

    II OU x II y 4 gauche-droite

    ! (unaire) NON ! x 14 droite- gauche

    Les oprateurs de manipulation de bits

    Oprateur Nom Notation Priorit Ordre

    & ET bit bit x & y 8 gauche-droite

    I OU bit bit x I y 6 gauche-droite

    ^ OU exclusif bit bit x ^ y 7 gauche-droite

    (unaire) NON bit bit x 14 droite-gauche

    >> dcalage droite >> x 11 droite-gauche

    = y 10 gauche-droite

    < teste infrieur strict x < y 10 gauche-droite

    > teste suprieur strict x > y 10 gauche-droite

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 37 -

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 38 -

    Cette expression est une sorte de si alors sinon sous forme dexpression : si la condition e est vraie alors cette expression vaut x sinon elle vaut y.

    Exemple :

    a = (v == 2) ? 1 : 2 ;

    affecte la variable a la valeur 1 si v vaut 2, sinon la variable a la valeur 2.

    Oprateur squentiel

    Cet oprateur permet de regrouper plusieurs expressions en une seule : lvaluation de lexpression e1, e2 consiste en lvaluation successive (dans lordre) des expressions e1 puis de e2.

    Oprateur de dimension

    Cet oprateur donne loccupation mmoire (en octets) dune variable ou dun type de donn.

    Exemple :

    La valeur de lexpression sizeof(c) est 1 si c est une variable de type char.Lexpression sizeof(char)donne galement la valeur 1.

    Oprateur de parenthse

    Loprateur de parenthse ( ) permet de dfinir lordre dvaluation dune expression.Cest galement ce mme oprateur qui est utilis pour encapsuler les parenthses des fonctions.Mme lorsquune fonction na pas darguments, ces parenthses sont obligatoires.

    Oprateur de slection

    Ces oprateurs . et -> servent slectionner des champs de donnes structures.

    Oprateur Equivalent Notation Priorit Ordre

    , oprateur squentiel

    e1 , e2 1 droite-gauche

    Oprateur Equivalent Notation Priorit Ordre

    sizeof oprateur de dimension

    sizeof (e) 14 droite-gauche

    Oprateur Equivalent Notation Priorit Ordre

    () oprateur dadressage () 15 gauche-droite

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 39 -

    Oprateurs du prprocesseur

    Toute ligne de code-source commence par # est considre comme un oprateur de prprocesseur (ou loprateur de prtraitement ou encore la ligne de commande).Les oprateurs du prprocesseur sont gnralement placs au dbut du code-source, mais ils ont le droit d'tre n'importe o dans le programme.

    Le prprocesseur permet un programmeur de :

    Compiler un programme de sorte que les parties du code ne sont pas compils Remplacer les symboles avec d'autres symboles ou des valeurs Insrer des fichiers texte dans un programme

    La syntaxe plus commune d'un oprateur du prprocesseur est :

    #include

    MikroC compilateur prend en charge les commandes de prprocesseur suivantes:

    #define #undef#if #elif #endif#ifdef #ifndef#error#ligne

    Commande du prprocesseur #define

    La commande prprocesseur #define fournit une macro o chaque apparition de son nomdans le programme est remplac par la valeur de ce nom.

    Par exemple, pour remplacer toutes les apparitions de MAX avec une valeur de 100, nous pouvons crire:

    #define MAX 100

    Notez que la commande prprocesseur #define noccupe pas lespace en mmoire.

    Nous pouvons passer des paramtres une dfinition de macro en prcisant les paramtres entre les parenthses aprs le nom de la macro. Par exemple :

    #define ADD (a, b) (a + b)

    Oprateur Equivalent Notation Priorit Ordre

    . oprateur de slection x,info 15 gauche-droite

    -> oprateur de slection x->info 15 gauche-droite

    [] oprateur de slection x[3] 15 gauche-droite

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 40 -

    Lorsque cette macro est utilise dans un programme, (a, b) sera remplac par (a + b)comme indiqu ci-dessous :

    p = ADD (x, y) sera transform en p = (x + y)

    De mme, nous pouvons dfinir une macro pour calculer le carr de deux nombres :

    #define CARRE (a) (a * a)

    Nous pouvons maintenant utiliser cette macro dans un programme :

    p = CARRE (x) sera transform en p = (x * x)

    Commande du prprocesseur #include

    La commande #include est utilis pour inclure un fichier source dans un programme. Habituellement les fichiers avec l'extension ". H" sont utiliss avec #include. Il y a deuxformats pour l'utilisation de #include:

    #include et#include "fichier"

    Dans la premire option le fichier est recherch d'abord dans le rpertoire d'installation mikroC, puis dans les chemins de recherche des utilisateurs.

    En seconde option le fichier spcifi est recherch dans le dossier de projet mikroC , puis dansle dossier d'installation mikroC, puis dans les chemins de recherche des utilisateurs.Il est galement possible de spcifier un chemin de rpertoire complet :

    #include "C: \ temp \ last.h"

    Le dossier dans ce cas nest recherch que dans le chemin du rpertoire spcifi.

    Commande du prprocesseur #if, #elif, #else, #endif

    Les commandes prprocesseur #if, #elif, #else et #endif sont utilise pour les compilations conditionnelles, o certaines parties du code-source peut tre compile si certaines conditions sont remplies. Dans l'exemple suivant, si M a une valeur diffrente de zro la section de code o les variablesA et B sont mis zro est tabli, sinon la section de code o A et B sont tous les deux 1 est compil.Notez que le #if doit se terminer par #endif:

    #if MA = 0;B = 0;

    #elseA = 1;B = 1;

    #endif

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 41 -

    Nous pouvons galement utiliser la condition #elif, qui teste une nouvelle condition si la condition prcdente tait fausse :

    #if MA = 0;B = 0;

    #elif NA = 1;B = 1;

    #elseA = 2;B = 2;

    #endif

    Dans l'exemple ci-dessus, si M a une valeur diffrente de zro, A = 0 ; B = 0. Sinon, si N est une valeur non nulle, A = 1; B = 1. Enfin, si la fois M et N sont gaux zro, alors A = 2 ; B = 2.Notez quune seule section de code est compil entre #if et #endif et qu'une section de code peut contenir n'importe quel nombre dinstructions.

    2.2.13 Structure de contrle de programme

    Les instructions sont normalement excutes squentiellement partir du dbut la fin dun programme. Nous pouvons utiliser des instructions de contrle pour modifier ce flux squentiel

    normal dans un programme C. Les instructions de contrle suivantes sont disponibles dans les programmes en mikroC:

    De slection if et switchD'itration ou bouclage forModifications inconditionnels dexcution

    Instructions de slection if et switch

    Instruction ifCette instruction conditionnelle if permet dexcuter des instructions de manire slective en fonction du rsultat dun test. La dclaration du format gnral de l'instruction if est la suivante :

    if (expression)instruction1

    elseinstruction2

    ou

    if(expression) instruction1; else instruction2;Si lexpression est vraie (valeur non nulle), linstruction1 sexcute sinon, dans le deuxime cas, cest listruction2 qui sexcute.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 42 -

    Le mot-cl else est optionnel et peut tre omis. Dans l'exemple suivant, si la valeur de x est suprieure MAX alors la variable P estincrmente de 1, sinon elle est dcrment de 1:

    if (x > MAX)P++;

    elseP--;

    Nous pouvons avoir plus d'une instruction en joignant les dclarations dans bouclsentre parenthses. Par exemple:

    if (x> MAX){

    P++;Cnt = P;Sum = Sum = Cnt;

    }elseP--;

    Dans cet exemple, si x est suprieur MAX, donc les trois instructions bouclsentre les parenthses sont excuts, sinon la dclaration P-- est excut.

    Un autre exemple en utilisant l'instruction if est la suivante:

    if (x> 0 && x

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 43 -

    . . . . . . . . . . . . . . . . . . . . .case condition:Instructions;break;default:Instructions;}

    Linstruction switch fonction comme suit : d'abord la condition est value. Lacondition est ensuite compare condition1 et si une correspondance est trouve, les dclarations contenues dans ce bloc sont valus. Puis seffectuer le saut de contrle en dehorsde l'instruction switch lorsque le mot break est rencontr.

    Si la condition ne se trouve pas, la condition est compare condition2et si une correspondance est trouve, les dclarations de ce bloc sont values et le saut de contrle dehors dtats de commutation seffectuer, et ainsi de suite. Lavaleur par dfault est facultative, si la condition ne correspond aucune des conditionsspcifies.

    Dans l'exemple suivant, la valeur de la variable est valu Cnt. Si Cnt = 1, A est mis 1. Si Cnt = 10, B est mis 1, et si Cnt = 100, C est mis 1. Si Cnt n'est pas gal 1, 10,ou100, donc D est fix 1:

    switch (Cnt){case 1:

    A=1;break;

    case 10:

    B=10 ;break ;

    case 100:C=100;break;

    default:D =1;}

    Puisque les espaces blancs sont ignors en langage C, nous pouvons galement crire le code prcdent comme suit:

    switch (Cnt){case 1: A = 1; break;case 10: B = 1; break;case 100: C = 1; break;dfault: D = 1;}

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 44 -

    Instructions d'itration for, while, do, goto, continue et break

    Les instructions d'itration nous permettent d'effectuer des boucles dans un programme, o une partie d'un code doit tre rpt un certain nombre de fois. Dans mikroC l'itration peut tre effectue de quatre faons. Nous se penchera sur chacun des exemples :

    Utilisation de for Utilisation de while Utilisation de do Utilisation de goto, continue et break

    Instruction forLa syntaxe d'une instruction for est :

    for (expression initiale; expression de condition; expressionincrment){Instructions;

    }

    L'expression initiale dfinit la variable au dpart de la boucle, et cette variable estcompare l'expression de condition avant l'entre dans la boucle. Dclarations l'intrieur de la boucle sont excutes de faon rpte, et aprs chaque itration la valeur dexpression est incrmente. L'itration se poursuit jusqu' moment o l'expression de condition devient fausse. Une boucle sans fin est forme si l'expression condition est toujours vraie.

    L'exemple suivant montre comment une boucle peut tre mise en place pour excuter 10 fois. Dans cet exemple, la variable i commence par 0 et elle est augmente de 1 la fin de chaque itration. La boucle se termine quand i = 10, puisque dans ce cas, la condition i

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 45 -

    Dans l'exemple suivant d'une boucle sans fin o tous les paramtres sont omis :

    // Exemple de boucle sans finfor (;;){Instructions;

    }

    Dans la boucle sans fin suivante, i commence par 1 et n'est pas incrment l'intrieur de la boucle :

    // Boucle sans fin avec i = 1 for (i = 1;;){Instructions;

    }

    Sil n'y a qu'une seule instruction l'intrieur de la boucle for, les accolades peuvent tre omises comme cest montr dans l'exemple suivant :

    for (k = 0; k

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 46 -

    {for (j = 0; j < 4; j++) Sum = Sum + M[i][j];

    }

    Instruction while

    La syntaxe d'une instruction while est la suivante :

    while (condition){

    Instructions;}

    Ici, les instructions sont excutes jusqu' ce que la condition devienne fausse, ou les instructions sont excutes de faon rpte aussi longtemps que la condition est vraie. Si la condition est fausse l'entre de la boucle, la boucle ne sera pas excut et le programme seracontinuer de l'extrmit de la boucle while. Il est important que la condition est changintrieur de la boucle, sinon une boucle sans fin sera form.Le code suivant montre comment mettre en place une boucle d'excuter 10 fois :

    // Une boucle qui s'excute 10 foisk = 0;while (k

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 47 -

    // Calculer la somme des nombres de 1 10unsigned int k, sum;k = 1;sum = 0;while (k

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 48 -

    /*Une boucle sans fin*/k = 0 ; do{Instructions;

    } while (k < 10);

    Une boucle sans fin peut galement tre cre si la condition est rgle pour tre vrai tout le temps:

    /* Une boucle sans fin */do{Instructions;

    }while (k = k);

    Instruction goto, continue et break

    Une instruction goto peut tre utilise pour modifier le flux normal de contrle dans unprogramme. Elle provoque le programme sauter une tiquette spcifie. Une tiquette peut

    tre n'importe quel jeu de caractres alphanumriques commenant par une lettre et se terminant par le caractre : .Bien que linstruction goto soit non recommande, elle peut tre utilise conjointement avecune instruction if pour crer un programme en itrations. L'exemple suivant montre comment mettre en place une boucle pour lexcuter 10 fois en utilisant goto et if :

    / * Excute 10 fois * /k = 0;Boucle:

    Instructions;k++;

    if (k < 10) goto Boucle;

    La boucle commence par ltiquette Boucle et la variable k = 0. Les instructions sont excutes l'intrieur de la boucle et k est incrment de 1. La valeur de k est alors compar

    10 et le programme retourne ltiquette Boucle si k

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 49 -

    /* Calculer la somme des nombres 1,2,3,4,6,7,8,9,10 */Sum = 0;i = 1;for (i = 1; i 5

    }2.2.14 Utilisation mikroC avec des instructions en langage dassembleur

    Il devient parfois ncessaire dutiliser la langue assembleur pour microcontrleurs PIC et des instructions en langage mikroC.Des instructions en langage assembleur peuvent tre incluses dans un programme en utilisantmot-cl asm (ou _asm, ou __ asm).

    La syntaxe est la suivante:

    asm{

    Instructions }

    Commentaires du langage dassembleur (une ligne commenant par un point-virgule) ne sont pas autoriss, mais les deux types de commentaires en microC peuvent tre utiliss dans les routines en langage d'assembleur :

    asm{

    // Ce code introduit un temporisation

    MOVLW 6 // Charge W avec 6. . . . . . . . . . . . . . .. . . . . . . . . . . . . . .

    }

    Les variables en microC peuvent tre utilises dans les routines en langage d'assembleur, mais elles doivent tre dclares et initialises avant son utilisation.

    Par exemple, une variable Temp peut tre initialise et ensuite charge dans le registre W :

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 50 -

    unsigned char Temp = 10;asm{MOVLW Temp // W = Temp =10

    . . . . . . . . . . . . . . . . . .}

    2.3 Exercices

    Ecrire un programme pour mettre tous les 8 pattes du PORTB au niveau 1.

    PORTB est configur comme un port de sortie ( laide du registre TRISB), et ensuitetous les 8 bits du port sont mis au niveau logique 1 (en chargeant le registre PORTB par le nombre hexadcimal 0xFF) :

    void main (){TRISB = 0; // Configurer PORTB en sortiePORTB = 0xFF; // Mettre toutes les bits du port 1

    }

    crire un programme pour mettre les pattes impaires (1, 3, 5 et 7) du PORTB au niveau 1.

    Repres impaires de port peuvent tre mis au niveau logique 1 en envoyant la configuration binaire 10101010 au registre PORTB. Cette configuration binaire est lenombre hexadcimal 0xAA et le programme ncessaire est :

    void main (){TRISB = 0; // Configurer PORTB en sortiePORTB = 0xAA; // Activer les pattes impairs numrots

    }

    Ecrire un programme pour compter en binaire sans fin et envoie ces donnes PORTB :

    Exercice 2.1

    Solution 2.1

    Solution 2.2

    Exercice 2.2

    Exercice 2.3

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 51 -

    00000000000000010000001000000011. . . . . . . . . . . .. . . . . . . . . . . .1111111011111111

    00000000. . . . . . . . . . . .

    Une boucle sans fin peut tre utilise, et l'intrieur de cette boucle la valeur d'une variable peut tre incrmente, puis envoye PORTB:

    void main () {unsigned char Cnt = 0;for (;;) // Boucle sans fin{PORTB = Cnt; // Envoyer Cnt PORTBCnt++; // Incrmentation Cnt

    }}

    crire un programme pour mettre tous les bits de PORTB au niveau logique 1, puis la logique 0, et rpter ce procd dix fois.

    Linstruction for peut tre utilise pour crer une boucle rpter les oprations requises dix fois

    void main () {unsigned char j;for (j = 0; j < 10; j++) // Rpter 10 fois{

    PORTB = 0xFF; // Mettre les bits de PORTB 1PORTB = 0; // Mettre les bits de PORTB 0

    }}

    Solution 2.3

    Exercice 2.4

    Solution 2.4

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 52 -

    Le rayon et la hauteur d'un cylindre sont de 2,5 cm et 10 cm respectivement. Ecrire un programme pour calculer le volume de ce cylindre.

    Le programme est :

    void main () {float Rayon = 2.5, Hauteur = 10;float Volume;Volume = PI * Rayon * Rayon * Hauteur;

    }

    Ecrire un programme pour trouver le plus grand lment d'un tableau d'entiers ayant dix lments.

    Au dbut, la variable m est affecte sur le premier lment de la matrice. Une boucle est alors forme et le plus grand lment de la matrice se trouve :

    void main () {unsigned char j ;int m, A [10];m = A [0]; // Premier lment du tableaufor (j = 1; j < 10; j++){if (A [j]> m) m = A [j];

    }}

    Ecrire un programme en utilisant une boucle while pour effacer tous les dix lmentsentiers dans un tableau M.

    Dans le programme qui suit, NUM est dfinie comme 10 et une variable j est utilise comme le compteur de boucle:

    Exercice 2.5

    Exercice 2.6

    Solution 2.6

    Exercice 2.7

    Solution 2.7

    Solution 2.5

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 53 -

    #define NUM 10void main () {int M[NUM];unsigned char j = 0;while (j < NUM){M[j] = 0;j++;

    }}

    Ecrire un programme pour convertir la temprature de C F partir de 0 C, avec le pas de 1 C jusqu' 100 C, et stocker les rsultats dans un tableau appel F.

    La temprature quivalente en F, est calcule selon la formule:

    F = (C- 32.0)/1.08

    Une boucle for est utilise pour calculer la temprature en F et la ranger dans tableau F :

    void main () {float F[100];unsigned char C;for (C = 0; C

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 54 -

    III. FONCTIONS ET BIBLIOTHEQUES DANS MIKROC

    3.1 Fonctions dans mikroC

    Les fonctions sont gnralement dfinies comme des sous-programmes qui renvoient une valeur fonde sur un certain nombre de paramtres d'entre. Chaque programme doit avoir une seule fonction externe marquant le point d'entre dans le programme principale. Les fonctions sont dclars comme des prototypes en standard ou fourni par l'utilisateur, ou par des fichiers du programme. Chaque programme crit en langage mikroC se compose de nombre plus ou moins de fonctions. L'ide principale est de diviser un programme en plusieurs parties qui utilisent ces fonctions afin de rsoudre le problme rel plus facile. En outre, les fonctions nous permettent d'utiliser les comptences et les connaissances d'autres programmeurs. Par exemple, sil est ncessaire d'envoyer une chane de caractres un cran LCD, il est beaucoup plus facile d'utiliser une partie dj crite du programme que de recommencer. Les fonctions consistent des commandes prcisant ce qui doit tre fait sur des variables. Elles peuvent tre compares des sous-routines. En rgle gnrale, il est beaucoup mieux d'avoir un programme compos d'un grand nombre de fonctions simples que de quelques fonctions importantes.

    3.1.1 Dclaration dune fonction

    Chaque fonction doit tre dclare de manire tre correctement interprt au cours du processus de compilation. Dclaration contient les lments suivants:

    Nom de la fonction Liste des paramtres Dclaration des paramtres Corps de la fonction Type de rsultat de la fonction

    La syntaxe gnrale d'une dfinition de fonction est montre ci-dessous :

    type_de_rsultat nom_fonction(parameter1, parameter2, .....){.............corps de la fonction.............

    }

    Dans lexemple qui suit, la fonction, nomme Mult, reoit deux arguments entiers, a et b, et renvoie leur produit. Notez que l'utilisation des parenthses dans une instruction de retour est facultative :

    int Mult(int a, int b){return (a*b);

    }

    Quand une fonction est appele, elle s'attend gnralement donner le nombre d'argumentsexprims en liste d'arguments de la fonction. Par exemple, la fonction prcdente peut treappele :

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 55 -

    z = Mult (x, y);

    o la variable z est le type de donnes int. Notez que les arguments dclars dans ladfinition de la fonction et les arguments passs lorsque la fonction est appele sontindpendants les uns des autres, mme si elles ont le mme nom. Dans l'exemple prcdent,lorsque la fonction est appele, variable x est copi a et variable y et est copie b surentre en fonction Mult.

    Certaines fonctions ne renvoient pas de donnes. Le type de donnes de ces fonctions doit tre dclares comme nul. Par exemple

    void LED(unsigned char D){PORTB = D;

    }

    Fonctions void peut tre appele sans aucune instruction d'affectation, mais les parenthsessont ncessaire pour indiquer au compilateur que un appel de fonction est faite: LED ();

    En outre, certaines fonctions ne possdent pas d'arguments. Dans l'exemple suivant, lafonction, nomme Compl, complte PORTC du microcontrleur. Il ne renvoie pas de donneset n'a pas d'arguments:

    void Compl(){PORTC = PORTC;

    }

    Cette fonction peut tre appele en tant que :

    Compl ();

    Les fonctions sont normalement dfinies avant le dbut du programme principal.

    Certaines dfinitions de fonction et de leur utilisation dans les programmes principaux sont illustres dans les exemples suivants:

    Exercice 3.1

    crire une fonction appele Cercle_Surface pour calculer la surface d'un cercle dont le rayon sera utilis comme un argument. Utilisez cette fonction dans un programme principal pour calculer la surface d'un cercle dont le rayon est de 2,5 cm. Sauvegarder la valeur de cettesurface dans une variable appele Cercle.

    Solution 3.1

    Le type de donnes de la fonction est dclar comme float. La surface d'un cercle est calcule par la formule :

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 56 -

    Surface = r2

    o r est le rayon du cercle. La surface est calcule et stocke dans une variable localeappele s, qui est ensuite retourne par la fonction :

    float Cercle_Surface(float rayon){float s;s = PI*rayon*rayon;return s ;

    }

    Le code-source 3.1 montre comment la fonction Cercle_Surface peut tre utilise dans un programme principal pour calculer la surface d'un cercle dont le rayon est de 2,5 cm. La fonction est dfinie avant le programme principal. La fonction est appele l'intrieur duprogramme principal pour calculer la surface et la stocker dans la variable Cercle.

    Code-source 3.1

    /**************************************************************************** SURFACE D'UN CERCLE====================

    Ce programme appelle la fonction Cercle_Surface pour calculer la surface d'un cercle.Microcontrleur : PIC 18F452Oscillateur : HS, 08.0000 MhzFichier: SURFACE_CERCLE.cDate: Juillet 2012****************************************************************************///Calcule la surface d'un cercle en fonction de rayon

    float Cercle_Surface (float rayon){float s;s = PI*rayon*rayon;return s;

    }

    /* Dbut du programme principal. Calcul de la surface d'un cercle o le rayon= 2,5 */

    void main () {float r, Cercle;r = 2.5;Cercle = Cercle_Surface(r);

    }

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 57 -

    Exercice3.2

    crire une fonction appele Surface et une fonction appele Volume pour calculer la surface et le volume d'un cylindre, respectivement. Puis crire un programme principal pour calculer la surface et le volume du cylindre dont le rayon est 2,0cm et la hauteur est 5,0cm. Stocker la valeur de cette surface dans la variable Cylindre_Surface et la valeur de volume dans la variable Cylindre_Volume.

    Solution 3.2

    La surface d'un cylindre est calcule par la formule:Surface = 2rho r et h sont le rayon et la hauteur du cylindre, respectivement. Le volume d'un cylindre est calcul par la formule:Volume = r2hLe code-source 3.2 montre les fonctions qui calculent la surface et le volume d'un cylindre et le programme principal qui calcule la surface et le volume d'un cylindre dont le rayon =2,0cm et 5,0cm de hauteur.

    Exercice 3.3

    crire une fonction appele Minuscule_Majuscule pour convertir un caractre de minusculeen majuscule.

    Solution 3.3

    La valeur ASCII du caractre en majuscule du premier caractre ('A') est gale 0x41. De mme, la valeur l'ASCII du premier caractre en minuscule ('a') est gale 0x61. Un caractre minuscule peut tre converti en son quivalent majuscule en soustrayant 0x20 du caractre en minuscule.Les fonctions ncessaires sont montres dans le code-source 3.3.

    Exercice 3.4

    Utilisez la fonction que vous avez cr dans l'exemple 3.3 dans un programme principal pour convertir la lettre r en majuscules.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 58 -

    Solution 3.4

    Le programme requis est indiqu dans le code-source 3.4. La fonctionMinuscule_Majuscule est appele pour convertir le caractre en minuscule de la variableLc en majuscules et de stocker dans la variable Uc.

    Code-source 3.2

    /**************************************************************************SURFACE ET VOLME DUN CYLINDRE==============================

    Ce programme calcule la surface et le volume d'un cylindre dont le rayon est 2,0cm et la hauteur est 5,0cm.Microcontrleur : PIC 18F452Oscillateur : HS, 08.0000 MhzFichier: VOLUM_CYLINDRE.cDate: Juillet 2012***************************************************************************///Fonction pour calculer la surface d'un cylindre

    float Surface(float rayon, float hauteur){float s;s = 2.0*PI*rayon*hauteur;return s;

    }

    // Fonction pour calculer le volume d'un cylindre

    float Volume(float rayon, float hauteur){float s ;s = PI*rayon*rayon*hauteur;return s;

    }

    // Dbut du programme principale

    void main () {

    float r = 2.0, h = 5.0;float Cylindre_Surface, Cylindre_Volume;Cylindre_Surface = Surface(r,h);Cylindre_Volume = Volume(r,h);

    }

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 59 -

    Code-source 3.3

    /***********************************************************************MINUSCULEMAJUSCULE===================

    Ce programme convertit le caractre en minuscule de la variable Lc dans le caractre en majuscule et le sauvegarde dans la variable Uc.Microcontrleur : PIC 16F84AOscillateur : HS, 8.0000 MhzFichier: MINUSC_MAJUSC.cDate: Juillet 2012 *************************************************************************/

    /* Fonction pour convertir un caractre en minuscule dans un caractre en majuscule*/

    unsigned char Minuscule_Majuscule (unsigned char c){if(c > ='a' && c

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 60 -

    Code-source 3.4

    /**************************************************************************** MINUSCULES EN MAJUSCULES

    ============================Ce programme convertit le caractre en minuscule de la variable Lc en majuscule et le sauvegarde dans la variable Uc.Microcontrleur : 16F84AOscillateur : HS, 8.0000 MhzFichier: MINUSC_MAJUSCUL.cDate: Juillet 2012****************************************************************************/// Fonction pour convertir un caractre de minuscule en majuscule

    unsigned char Minuscule_Majuscule(unsigned char c){if (c> = 'a' && c

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 61 -

    Code-source 3.5

    /****************************************************************************MINUSCULES EN MAJUSCULES

    ============================Ce programme convertit le caractre en minuscule de la variable Lc en majuscule et le sauvegarde dans la variable Uc.Microcontroller: 16F84AOscillateur : HS, 8.0000 Mhz Fichier: MIN_MAJ_2.cDate: Juillet 2012***************************************************************************/unsigned char Minuscule_Majuscule(unsigned char);// Dbut du programme principal

    void main (){unsigned char Lc, Uc;Lc = r;Uc = Minuscule_Majuscule (Lc);

    }

    // Fonction pour convertir un caractre de minuscule en majuscule

    unsigned char Minuscule_Majuscule (unsigned char c){if (c> = 'a' && c

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 62 -

    3.1.3 Dfinition de fonction

    La fonction se compose de sa dclaration et de son corps de la fonction. Le corps de fonctionest un bloc, reprsentant de dfinitions locales et des dclarations entre les accolades {}. Toutes les variables dclares au sein de corps sont locales. La fonction elle-mme peut tre dfinie uniquement dans le cadre du fichier. Cela signifie que les dclarations ne peuvent pastre imbriques. Pour revenir au rsultat de la fonction, utilisez l'instruction de return. Dclaration retour dune fonction de type void ne peut pas avoir un paramtre, vous pouvez omettre linstruction return si elle est la dernire instruction du corps de la fonction. Voici unedfinition de fonction chantillon :

    // retourne Max avec le plus grand l'un de ses 2 arguments

    int Max (int x, int y) {return (x >= y)? x: y;

    }

    Voici un exemple de fonction qui dpend des effets secondaires plutt que de la valeur de retour :

    /* Fonction qui convertit coordonnes Descartes (x, y)en coordonnes polaires (r, fi): */

    #include voide polaire (double x, double y, double *r, double *fi){*r = sqrt (x * x + y y *);*fi = (x == 0 && y == 0)? 0: atan2 (y, x);return; // cette ligne peut tre omise

    }

    3.1.3 Appels de fonctions

    Une fonction est appele avec des arguments rels placs dans la mme squence que leurcorrespondant paramtres formels. Utilisez un oprateur d'appel de fonction () :

    fonction_nom (expression_1, expression_2, ..., expression_n)

    Chaque expression dans l'appel de fonction est un argument rel. Nombre et types desarguments rels doivent correspondre ceux des paramtres de fonctions formelles. Arguments rels peuvent tre de n'importe quelle complexit. Sur lappel de fonction, tous les paramtres formels sont crs en tant qu'objets locaux initialis par des valeurs d'arguments rels. De retour d'une fonction, lobjet temporaire est cr la place de l'appel, et il est initialis par l'expression de la dclaration de retour.

    Cela signifie que l'appel de fonction comme un oprande de l'expression complexe est traite en rsultat de fonction.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 63 -

    Si la fonction est sans rsultat (type void) ou vous n'avez pas besoin du rsultat, vous pouvez crire l'appel de fonction comme une expression autonome.En C, les paramtres scalaires sont toujours passs la fonction par valeur. Une fonction peutmodifier les valeurs de ses paramtres formels, mais cela n'a aucun effet sur le rel argument dans la routine d'appel. Vous pouvez passer objet scalaire par le discours de dclarer un paramtre formel d'tre un pointeur. Ensuite, utilisez l'oprateur * pour accder l'objet pointu.

    3.1.4 Conversion argument

    Quand un prototype de la fonction n'a pas t pralablement dclar, mikroC convertit arguments intgraux un appel de fonction de l'largissement intgrante (l'expansion)Quand un prototype de fonction est en porte, mikroC convertit l'argument donn par le type de paramtre dclar comme par affectation.

    Si un prototype est prsent, le nombre d'arguments doivent correspondre. Les types doiventtre compatibles uniquement dans la mesure o une cession peut galement les convertir. Vous pouvez toujours utiliser une conversion explicite pour convertir un argument pour un type qui est acceptable un prototype de fonction.

    Remarque : Si le prototype de fonction ne correspond pas la dfinition de la fonction relle,mikroC permet le dtecter si et seulement si cette dfinition se trouve dans la mme unit de compilation comme le prototype. Le compilateur est aussi capable de forcer les arguments du type appropri. Supposons que vous ayez le code qui suit :

    int limit = 32;char ch = 'A';long res;extern long fonc(long par1, long par2); // prototypemain (){

    //...res = fonc(limit, ch); // fonction call (appeler)

    }

    Comme il a le prototype de fonction pour func, ce programme convertit limit et ch long, en utilisant la rgle standard, avant qu'il ne les place sur la pile pour l'appel la fonction fonc.Sans le prototype de fonction, limit et ch aurait t plac dans la pile comme un entier et un caractre, respectivement. Dans ce cas, la contenu de pile ne serait pas correspondre la tailleou le contenu de fonc, conduisant un problme. Lutilisation des prototypes de fonctionsfacilite grandement dans la rvlation des erreurs.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 64 -

    3.2 Fonctions intgres

    Le compilateur mikroC fournit un ensemble de fonctions intgres qui peuvent tre appeles partir du programme. Ces fonctions sont numres dans le tableau 3.1, avec une brve description de chacune. La plupart de ces fonctions peuvent tre utilises dans un programme sans avoir inclure des fichiers d'en-tte.

    Tableau 3.1: Fonctions intgresFonction Description

    Lo Renvoie le plus faible nombre d'octets (bits 0 7)

    Hi Renvoie le plus faible nombre d'octets (bits 8 15)

    Higher Renvoie le plus leve d'octet d'un nombre (bits 16 23)

    Highest Retourne le plus grand d'octets d'un nombre (bits 24 31)

    Delay_us Cre le retard dans les units de microseconde

    Delay_ms Cre le retard constante dans les units de millisecondes

    Vdelay_ms Cre le retard en millisecondes en utilisant des variables de programme

    Delay_Cyc Cre le retard bas sur l'horloge de microcontrleur

    Clock_Khz Rgler lhorloge de microcontrleur en KHz

    Clock_Mhz Rgler lhorloge de microcontrleur en MHz

    Les exceptions sont des fonctions Lo, Hi, Higher, et Highest, qui exigent le fichier den-ttebuilt_in.h. De plus dtails sur l'utilisation de ces fonctions sont disponibles dans le manuel de mikroC.Delay_us et delay_ms fonctions sont frquemment utiliss dans les programmes o les retards sont requis (par exemple, se met clignoter une LED).

    L'exemple suivant illustre l'utilisation de la fonction Delay_ms :

    Exercice 3.6

    Une LED est connecte au PORTB (broche RB0) d'un microcontrleur PIC16F84A travers dune rsistance de limitation, comme indiqu dans la figure 3.1.

    Ecrire un programme qui fera clignoter le LED ON et OFF en permanence dans lintervalle d'une seconde.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 65 -

    Solution 3.6

    Une LED peut tre connecte un microcontrleur en deux modes : source de courant et absorption de courant. En mode d'absorption de courant (voir figure 3.1a) une patte de la LED est connecte + 5 V travers une rsistance R de limitation de courant et l'autre patte est relie la patte de port de sortie du microcontrleur. La LED sera allume lorsque le port de sortie du microcontrleur est au niveau logique 0 ( savoir, environ +0 V).En mode de source de courant (voir figure 3.1b) une patte de la LED est relie au port de sortiedu microcontrleur et l'autre patte est relie la masse travers une rsistance R de limitation de courant. La LED sera allum lorsque le port de sortie du microcontrleur est au niveau logique 1 ( savoir, environ +5 V). La mme valeur de rsistance R peut tre utilise en modede source de courant.

    a) b)

    Fig.3.1 LED connecte au port RB0 d'un microcontrleur PIC

    Le programme requis est donn dans le code-source 3.6 (fichier LED CLIGNOT.C). Le port PORTB est configur en sortie en utilisant la dclaration TRISB = 0. Une boucle sans fin est alors forme avec la dclaration for, et l'intrieur de cette boucle la LED est allume ou teinte avec un dlai dune second.

    Un autre programme clignoter une LED donn par le code-source 3.7 (fichier LED CLIGNOT2.C) est plus facile suivre en utilisant la commande de prprocesseur #define.

    3.3 Fonctions de la bibliothque mikroC

    Un vaste ensemble de fonctions de la bibliothque est disponible avec le compilateur mikroC. Ces fonctions de la bibliothque peuvent tre appeles partir de n'importe quel programme, et ils sont inclus dans le programme. Le manuel d'utilisation mikroC donne une description dtaille de chaque fonction de la bibliothque, avec des exemples. Dans cette partie, les fonctions de la bibliothque disponibles sont identifies, et les fonctions de la bibliothque importante et couramment utiliss sont dcrites dans dtail, avec des exemples.

  • V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la famille PIC

    - 66 -

    Le tableau 3.2 donne une liste des fonctions de la bibliothque mikroC, organise en ordre fonctionnel.Certaines des fonctions de la bibliothque frquemment utilises sont les suivantes :

    EEPROM bibliothqueLCD bibliothqueLogiciel UART bibliothqueMatriel USART bibliothqueSound bibliothqueANSI C bibliothqueDivers bibliothques

    Code-source 3.6

    /****************************************************************************LED CLIGNOTANTE================

    Ce programme fait clignoter dune LED connecte au port RB0 d'un microcontrleur PIC avec lintervalle dune seconde. La fonction intgr Delay_ms est utilis pour crer un dlai de 1 seconde entre les clignotements. Microcontrleur: 16F84AOscillateur: HS, 4.0000 MhzFichier: LED_CLIGNOTE.cDate: Juillet 2012****************************************************************************/void main () {TRISB = 0; // Configurer PORTB en sortiefor (;;) // Boucle sans fin{PORTB = 1; // Activer LEDDelay_ms (1000); // Retard 1 secondePORTB = 0; // Dsactiver LEDDelay_ms (1000); // Retard 1 seconde

    }}

    Code-source 3.7

    /***************************************************************************LED CLIGNOTANTE_2===================

    Ce programme fait clignoter dune LED connecte au port RB0 d'un microcontrleur PIC avec lintervalle dune seconde. En utilisant les commandes de prprocesseur #define le programme est devenu plus facile suivre.Microcontrleur: 16F84AOscillateur: HS, 4.0000 MhzFichier: LED_CLIGNOTE2.cDate: Juillet 2012**************************************************************************/#define LED PORTB.0#define ON 1#define OFF 0#define One_Second_Delay Delay_ms(1000)