REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES

Dimension: px
Commencer à balayer dès la page:

Download "REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES"

Transcription

1 REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE MINISTERE DE L ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE UNIVERSITE M HAMED BOGARA DE BOUMERDES FACULTE DES SCIENCES - DEPARTEMENT PHYSIQUE Spécialité : INFOTRONIQUE & IMAGERIE ET APPAREILLAGE BIOMEDICAL V. TOURTCHINE Programmation en mikroc. Application pour les microcontrôleurs de la /******************************* COMMUNICATION SERIE RS232 ========================= Cet exemple illustre l'utilisation de fonction Software_UART de la bibliothèque du compilateur mikroc PRO. Microcontrôl.: 16F887 Oscillat.: HS, 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) Manuscrit élaboré selon le programme officiellement agrée et confirme par le Conseil Scientifique de la Faculté des Sciences BOUMERDES

2 I. LANGAGE ET COMPILATEUR mikroc POUR PIC Le langage mikroc pour PIC a trouvé une large application pour le développement de systèmes embarqués sur la base de microcontrôleur. Il assure une combinaison de l'environnement de programmation avancée IDE (Integrated Development Environment), et d un vaste ensemble de bibliothèques pour le matériel, de la documentation complète et d un grand nombre des exemples. Le compilateur mikroc pour PIC bénéficie d'une prise en main très intuitive et d'une ergonomie sans faille. Ses très nombreux outils intégrés (mode simulateur, terminal de communication Ethernet, terminal de communication USB, gestionnaire pour afficheurs 7 segments, analyseur statistique, correcteur d'erreur, explorateur de code, mode Débug ICD...) associé à sa capacité à pouvoir gérer la plupart des périphériques rencontrés dans l'industrie (Bus I2C, 1Wire, SPI, RS485, Bus CAN, USB, gestion de cartes compact Flash et SD /MMC, génération de signaux PWM, afficheurs LCD alphanumériques et graphiques, afficheurs LEDs à 7 segments, etc...) en font un outil de développement incontournable pour les systèmes embarqués, sans aucun compromis entre la performance et la facilité de débogage. 1.1 Compilateur mikroc PRO pour PIC La nouvelle version appelée mikroc PRO dispose de très nombreuses améliorations du compilateur mikroc : nouvelles variables utilisables, nouvelle interface IDE, amélioration des performances du linker et de l'optimisateur, cycle de compilation plus rapide, code machine généré plus compact (jusqu'à 40 % suivant les cas), nouveaux PIC supportés, environnement de développement encore plus ergonomique, nouveaux exemples d'applications, etc Dans la suite nous utiliserons le compilateur mikroc PRO v La simulation des applications de programmation nous réalisons à l aide du logiciel PROTEUS v.7.6 SP 1.2 Installation du compilateur mikroc PRO v Pas 1 : Cliquer sur l icône mikroc_pro_1.65.exe (Si la fenêtre du Contrôle de compte d utilisateur s ouvre, cliquer sur oui), et attendre que les données de l installation se décompressent

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

4 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 - 3 -

5 Pas 6 : Cliquer sur Install (Noter bien l endroit d installation) Pas 7 : Cliquer sur OUI pour l association du format de fichier.c avec le logiciel mikroc PRO - 4 -

6 Pas 8 : Cliquer sur Finish Pas 9 : Aller dans le répertoire M_License et copier les deux fichiers qui s y trouvent. Pas 10 : Coller pour remplacer les deux fichiers copiés auparavant dans le répertoire où mikroc 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 l icône mikroc PRO for PIC.lnk C est sur la figure 1.1 que vous obtenez lorsque vous démarrez l IDE mikroc PRO pour la première fois. Une description détaillé 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 décrire salement le processus d écriture d un programme en langage mikroc, un simulateur de contrôle. Pour plus d informations reportez-vous à l aide [F1]

7 Menu Toolbar Projet Manager Code Explorer Code Editor Project Settings (paramètres principaux du microcontrôleur) Error Window Fig. 1.1 L environnement IDE du compilateur microc PRO Editeur de code (voire la figure 1.1 : Code Editeur) L éditeur de code est le même que toute éditeur de texte standard pour l environnement de Windows, y compris Copie, Coller, Annuler les actions etc Il possède en plus des ressources comme suit : Coloration syntaxique réglable Assistant de code Assistant de paramètre Mise en forme automatique Dans la boîte de dialogue Obtions (figure 1.2) vous pouvez configurer la coloration syntaxique, l'aide pour le code et paramètres, la correction automatique etc. Pour accéder à ce dialogue cliquez sur Tools > Options du menu déroulant ou sur l'icône Assistant de code Si vous imprimez les premières lettres du mot et puis appuyez sur Ctrl + Espace, tous les identificateurs autorisés correspondant aux caractères imprimés seront offerts dans une fenêtre (voir la figure 1.3). Maintenant, nous pouvons continuer à réduire le choix de taper ou d'utiliser la sourie pour sélectionner l'option appropriée dans la proposée et appuyez sur Entrée

8 Fig.1.2. Boîte de dialogue «Options» Fig.1.3. Assistant de code Mise en forme automatique Afin d'obtenir une lisibilité maximale, il est possible de générer 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 compléter le programme. Affichage syntaxique coloré Toujours dans le but d'obtenir une lisibilité maximale de votre programme, il vous est possible de configurer entièrement les couleurs de chaque partie du listing (figure 1.2). Par exemple les commentaires en "vert", les instructions en "noir", les valeurs numériques en "bleu clair", etc. Outils intégrés Le compilateur "MikroC PRO" pour PIC intègre différents petits outils très pratiques qui vous simplifieront l écriture des programmes de vos applications

9 a) Mini terminal USART Le "MikroC PRO" intègre un petit terminal de communication USART RS-232 (Universal Synchronous Asynchronous Receiver) pour lequel vous pourrez configurer le débit, les commandes RTS et DTR... b) Mini gestionnaire 7 segments Le "MikroC PRO" intègre un petit utilitaire qui vous permettra de sélectionner la valeur décimale ou hexadécimale à fournir pour piloter un afficheur 7 segments. c) Table de conversion ASCII Le "MikroC PRO" intègre un petit utilitaire qui vous permettra d'afficher une table de conversion ASCII (très utile lorsque vous travaillez avec des afficheurs LCD). d) Gestion des LCD graphiques Le "MikroC PRO" intègre un petit utilitaire qui vous permettra de convertir des fichiers BMP en données pouvant être affichées sur plusieurs types de LCD graphiques

10 1.4 Création d un nouveau projet Le mikroc PRO pour PIC organise des applications dans des projets, composé d'un seul fichier 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 - Fréquence d horloge du composant - La liste des fichiers source du projet avec les chemins - Fichiers d'image - Fichiers binaires (* mcl.) - D'autres fichiers La meilleure façon de créer un projet c est à l'aide de l'assistant Nouveau projet (menu Project> New ProjeCt ) ou en cliquant sur l'icône Nouveau projet du projet. à partir de la barre d'outils - 9 -

11 Nouvelles étapes de l'assistant de projet Commencez à créer votre nouveau projet, en cliquant sur le bouton Next : Premier pas - Sélectionnez le périphérique dans le périphérique dans la liste déroulante

12 Deuxième pas - Saisir la valeur de fréquence de l'oscillateur. Troisième pas - Spécifiez l'emplacement où votre projet sera enregistré

13 Quatrième pas - Ajout pour le projet un fichier s il sont disponibles en ce moment. vous pouvez toujours ajouter des fichiers de projet plus tard en utilisant Project Manager

14 Cinquième étape - Cliquez sur Finish pour créer votre nouveau projet. A ce stade, une nouvelle fenêtre vide (fig. 1.4) s affiche afin que vous pussiez y saisir votre programme. Ici vous devez saisir votre code-source 1.5 Compilation

15 Lorsque vous avez créé le projet et écrit le code source, il est temps de le compiler. Sélectionnez Project Build à partir du menu déroulant ou cliquez sur l'icône Build dans la barre d'outils du projet. Si plus d'un projet est ouvert, vous pouvez compiler tous ouverts projets en sélectionnant Project Build All dans le menu déroulant, ou cliquez sur l icône 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 des quelques erreurs, vous en serez informé dans la fenêtre d'erreur (fig. 1.4). Fig. 1.4 Avertissement des érreures Après la compilation réussie, le compilateur mikroc PRO pour PIC génère des fichiers de sortie dans le dossier du projet (dossier qui contient le fichier projet. mcppi). Les fichiers de sortie sont résumés dans le tableau ci-dessous: Format Description Type de fichier Intel HEX Code hexadécimal dans le format Intel. Fichier est utilisé.hex pour programmer PIC Binary Fichier compilé pour la bibliothèque mikroc. Les distributions binaires sont des routines qui susceptibles.mcl

16 d être inscrits dans d'autres projets. List File L mage globale de l allocation de mémoire du PIC pour : adresses d instructions, les registres et les étiquettes du programme. Assembler File Le fichier en assembleur avec des noms symboliques, obtenus à partir de liste des fichiers..lst.asm 1.5 Fichiers Sources Création d un nouveau fichier source Pour créer un nouveau fichier source, procédez comme suit : Sélectionne New depuis le menu File ou pressez Ctrl+N ou cliquez sur l icône New Fill depuis la barre d outils File. Une nouvelle fenêtre s ouvrira dans laquelle vous pourrez saisir votre code source. Sélectionnez alors Save depuis le menu File ou pressez Ctrl+S ou cliquez sur l icône Save File depuis la barre d outils File et nommez ce dernier comme vous le voulez. Ouvrir un fichier existant Sélectionnez Open depuis le menu File ou pressez Ctrl+Q ou cliquez sur l icône Open File depuis la barre d outils File. Dans la boite de dialogue Ouvrir, sélectionnez alors l emplacement du fichier que vous désirez ouvrir et cliquez sur le bouton Ouvrir. Le fichier sélectionné s affiche dans sa propre fenetre. Si le fichier sélectionné est déjà ouvert, sa fenetre d édition (Editor) deviendra alors active. Sauvegarder un fichier Assurez-vous que la fenêtre contenant le fichier que vous voulez sauvegarder est active. Sélectionnez ensuite Save depuis le menu File ou pressez Ctrl+S ou cliquez sur l icône Save Fail de la barre d outils File. Sauvegarder un fichier sous un nom différent Assurez-vous que la fenêtre contenant le fichier que vous voulez sauvegarder est active. Sélectionnez ensuite Save As depuis le menu File. Une boîte de dialogue Save [nom du fichier].c as - 15 s affichera - alors. Dans cette boîte, sélectionnez l emplacement dans lequel vous voulez sauvegarder le fichier.

17 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, c est le programme représenté dans le code-source 2.1, qui nous permettra de faire clignoter une LED connectée au PORTB (par exemple bit 0 du PORTB) du microcontrôleur PIC avec une période de 2 secondes (1 seconde allumée et une seconde éteinte) Règles générale d écriture en microc Les instructions propres au langage microc doivent être écrites en minuscule (void main (void)). Les instructions particulières aux microcontrôleurs doivent être écrites en majuscule (TRISB). Les retours à la ligne et les espaces servent uniquement à aérer le code Toutes instructions ou actions se terminent par un point virgule «;». Code-source 2.1 /**************************************************************************** LED clignotante ============== Ce programme fait clignoter d une LED connectée au PORTB (broche RB0) avec un des intervalles d'une seconde. Microcontrôleur : 16F84A Oscillateur : HS, Mhz

18 Fichier : LED.c Date : Juillet 2012 ****************************************************************************/ void main() for(;;) // Boucle sans fin TRISB = 0; // Configuration du PORTB en sortie PORTB.0 = 0; // RB0 = 0 Delay_Ms(1000); // Pause d une seconde PORTB.F0 = 1; // RB0 = 1 Delay_Ms(1000); // Pause d une seconde // Fin de la boucle Examinons le fichier LED.c du code-source Commentaires Les commentaires sont utilisés pour préciser le fonctionnement du programme et pour une annotation du programme. Les lignes de commentaires sont ignorées et non compilé par le compilateur. En mikroc les commentaires de programmes peuvent être de deux types: de longs commentaires, s étendant sur plusieurs lignes, et de courts commentaires, occupant une seule ligne. Un commentaire au début d'un programme peut décrire brièvement 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 numéros de version, ainsi que les modifications dans chaque version. Comme montre le Code-source 2.1 les longs commentaires commencent par le caractère «/*» et se termine par le caractère «*/». De même, de courts commentaires commencent par le caractère «//» et il n a pas besoin d'un caractère de terminaison Début et fin d'un programme En langage microc, un programme commence avec les mots-clés: void main() Après cela, une accolade ouvrante est utilisée pour indiquer le début 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

19 2.1.3 Fin d une instruction Le point virgule «;» indique la fin d une instruction, sinon une erreur du compilateur sera générée. j = 5; j = 5 // correcte // erreur Espaces blancs Les espaces blancs sont des espaces, des flans, les tabulations et les caractères de nouvelle ligne. Le compilateur microc ne tient pas compte tous les espaces blancs. Ainsi, les trois séquences suivantes sont identiques : int i; char j; ou int i; char j; ou int i; char j; De même, les séquences suivantes sont identiques : i=j+2 ; ou i=j +2 ; 2.2 Eléments de programmation en mikroc Les variables. Définition et déclaration de variables Une variable est une portion réservée d une mémoire à laquelle on a donné un nom. On peut stocker ou lire les informations de ces variables. Toute variable utilisée dans un programme doit auparavant être définie. La définition d une variable consiste à la nommer et lui donnée un type et éventuellement lui donner une valeur initiale (initialiser). C est cette définition qui réserve (alloue) la place mémoire nécessaire en fonction du type. Lorsque le programme que l on réalise est décomposé en plusieurs modules, une même variable, utilisée dans plusieurs modules, doit être déclarée dans chacun de ces modules. Par contre, on ne définira cette variable que dans un seul de ces modules. C est au moment de l édition des liens que l on mettra en correspondance les variables apparaissant dans plusieurs modulez (variable partagée, mot-clé extern). La position de la déclaration ou de la définition d une variable détermine sa portée c est-à-dire sa durée de vie et sa visibilité. Les variables globales sont déclarées en dehors de toute fonction

20 Les variables locales sont déclarées à l intérieur des fonctions et ne sont pas visible à l extérieur de la fonction dans laquelle celle-ci est définie. 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 représente le même identifiant. Voici quelques identificateurs valides: temperature_v1 Pressure no_hit dat2string SUM3 _vtext... mais voici quelques identificateurs incorrectes: 7temp // ne peut pas commencer par un chiffre % Supérieur // ne peut pas contenir de caractères spéciaux int // ne peut pas répéter un mot-clé j (période) // ne peut pas contenir de caractères spéciaux Certains noms sont réservés pour le compilateur lui-même et ne peut pas être utilisés comme noms de variables dans un programme. Le tableau 2.1 donne une liste alphabétique de ces noms réservés. Tableau 2.1 Noms réservés en mikroc asm enum signed auto extern sizeof break float static case for struct char goto switch const if typedef continue int union default long unsigned do register void double return volatile else short while

21 Le langage mikroc prend en charge les types de variables indiquées dans le tableau 2.2. Type Taille (bits) Tableau 2.2: Types de variables en mikroc Plage unsigned char 8 0 à 255 unsigned short int 8 0 à 255 unsigned int 16 0 à unsigned long int 32 0 à signed char à 127 signed short int à 127 signed int à signed long int à float 32 ± E-38 à ± E38 double 32 ± E-38 à ± E38 long double 32 ± E-38 à ± E38 (unsigned) char or unsigned short (int) Les variables appelées (unsigned) char ou unsigned short (int), sont des variables non signées de 8 bits avec une plage de 0 à 255. Dans l'exemple suivant deux variables de 8 bits nommées total et sum sont créés, et sum est affectée la valeur décimale 150: unsigned char total, sum; sum = 150; ou char totale, sum; sum = 150; Les variables peuvent affecter des valeurs au cours de leur déclaration. Ainsi, les déclarations ci-dessus peuvent aussi être écrites comme suit: char total, sum = 150;

22 signed char or (signed) short (int) Les variables appelées signed char, ou (signed) short (int) sont des variables signées de 8 bits avec une gamme de -128 à Dans l'exemple suivant, une variable signée de 8 bits nomméecounter est créé avec une valeur de 50 : signed char counter =- 50; soit short counter = -50; soit short int counter = -50; (signed) int Les variables appelés (signed) int sont des variables signées de 16 bits avec une gamme ayant de à Dans l'exemple suivant d'un entier signé nommébig est : int Big; unsigned (int) Les variables appelés unsigned (int) sont des variables non signés de 16 bits avec une gamme de 0 à Dans l'exemple suivant une variable de 16 bits nomméecount est affectée la valeur décimale de : unsigned intcount = 12000; (signed) long (int) Les variables appelés (signed) long (int) sont des variables signées de 32 bits avec une gamme de à Un exemple est suivant : signed long LargeNumber; unsigned long (int) Les variables appelés unsigned long (int) sont des variables non signées de 32 bits ayant une gamme de 0 à Un exemple est suivant: unsigned long VeryLargeNumber; float or double or long double Les variables appelées 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 E-38 à E38. Dans l'exemple suivant, une variable flottante nommée area est affectée la valeur :

23 float area ; area = ; Pour éviter toute confusion lors de l'élaboration du programme, il est recommandé de préciser le signe de la variable (signé ou non signé) ainsi que le type de variable. Par exemple, utiliserunsigned char au lieu dechar seulement, etunsigned int au lieu deunsigned seulement Constantes Constantes représentent des valeurs fixes (numérique ou caractère) dans des programmes qui ne peuvent pas être changées. En mikroc, constantes peuvent être entiers, flottants, caractères, les chaînes, ou des types énumérés. Integer Constants Les constantes entières (Integer Constants) peuvent être en décimal, hexadécimal, octal ou binaire. Le type de données 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 décimales (signed long int) peuvent avoir des valeurs de à Par exemple, nombre constant 210 est stocké comme un entier non signé ( unsigned char) ou (unsigned short int). De même, nombre constant 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 force la constante d'être longue (long). Utilisation de U (ou u) et L (ou l) oblige la constante d'être unsigned long. Les constantes sont déclarées en utilisant le mot-clé const et sont stockées dans le flash de mémoire du microcontrôleur PIC. Par exemple, MAX est déclaré comme la constante 100 : const MAX =100; Les constantes hexadécimales commencent par les caractères 0x ou 0X et peuvent contenir des données numériques de 0 à 9 et les caractères hexadécimaux de A à F. Dans l'exemple suivant, TOTAL est la constante de la valeur hexadécimale FF: const TOTAL = 0xFF; Les constantes octales ont un zéro au début du nombre et peuvent contenir des données numériques de 0 à 7. Dans l'exemple suivant, une constante CNT est affectée une valeur octale 17 : const CNT = 017;

24 Les constantes binaires commencent par 0b ou 0B et ne peuvent contenir que 0 ou 1. Par exemple une constante nommée Min est déclarée comme ayant la valeur binaire : const Min = 0b Floating Point Constants Les constantes à virgule flottante (Floating Point Constants) se compose de: Entier décimal Point décimal Partie décimale fractionnaire e ou E et l'ordre du signe MikroC limite les valeurs de constantes à virgule flottante par la gamme : ± * ± * Dans l'exemple suivant, une constante nommée TEMP est déclarée comme ayant la valeur fractionnelle : const TEMP = ou const TEMP = 3.750E1 Character Constants Une constante de caractère (Character Constants) est un caractère renfermé dans des guillemets simples. Par exemple, une constante nommée First_Alpha est déclarée comme ayant la valeur du caractère A : const First_Alpha = A ; String Constants Les constantes de chaîne (String Constants ) sont des séquences fixes de caractères stockées dans la mémoire flash du microcontrôleur. La chaîne doit commencer et se terminer par un guillemet «"». Un exemple d une constante de type chaîne est la suivante : "Il s'agit d'un exemple de chaîne constante" Une constante chaîne peut être étendue à travers une frontière en ligne en utilisant une barre oblique inverse «"\"» : "C'est la première partie de la chaîne \ et c'est la poursuite de la chaîne " Cette déclaration de la constante chaîne est la même que : "C'est la première partie de la chaîne et c'est la poursuite de la chaîne "

25 Enumerated Constants Les constantes énumérées (Enumerated Constants) sont de type entier et sont utilisées pour faire un programme plus facile à suivre. Dans l'exemple suivant, une constante nommée couleur stocke les noms de couleurs. Le premier élément de couleur a la valeur 0: enum couleur noir, marron, rouge, orange, jaune, vert, bleu, gris, white; Séquences d'échappement Les séquences d'échappement (Escape Sequences) sont utilisées pour représenter les caractères ASCII non imprimables. Tableau 2.3 montre quelques séquences d'échappement couramment utilisés et de leur représentation en langage microc. Par exemple, la combinaison de caractères «\n» représente le caractère de nouvelle ligne. Un caractère ASCII peut également être représenté en précisant son code hexadécimal, après une barre oblique inverse. Par exemple, le caractère de nouvelle ligne peut également être représenté comme «\x0a». Tableau 2.3: Quelques séquences d'échappement Valeur de la Séquence séquence d'échappement Hex Caractère \ 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 Chaîne de chiffres Hex

26 2.2.4 Variables statiques Les variables statiques (Static variables ) sont des variables locales utilisées dans les fonctions lorsque la dernière valeur d'une variable entre les appels successifs de la fonction doit être préservée. Comme le montre l'exemple suivant, les variables statiques sont déclarées en utilisant le mot clé static : statique unsigned intcount ; Variables externes Utilisation du mot (extern) devant un nom de variable déclare cette variable comme externe. Il indique au compilateur que la variable est déclarée ailleurs dans un code-source distincte module. Dans l'exemple suivant, les variables sum1 et SUM2 sont déclarés comme externes entiers non signés : extern int sum1, SUM2 ; Variables volatiles Les variables volatiles (Volatile Variables ) sont importantes dans d'interruption des programmes et de routines d entrées-sorties. Utilisation de mot-clé volatile indique que la valeur de la variable peut changer au cours de la durée de vie du programme indépendant de l'écoulement normal du programme. Dans l'exemple suivant, la variable Led est déclarée comme un volatile non signé : volatile unsigned char Led; Variables énumérées Les variables énumérées sont utilisées pour rendre un programme plus lisible. Dans une variable énumérée, une liste de références est spécifiée et la valeur du premier élément est fixé à 0, l'autre élément est mis à 1, et ainsi de suite. Dans l'exemple suivant, la Semaine de type est déclaré comme un liste énumérée 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 éléments dans une liste énumérée. Dans le exemple suivant, noir = 2, bleu = 3, rouge = 4, et ainsi de suite. enum couleurs noir = 2, bleu, rouge, blanc, gris; De même, 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 déclarées par les spécifiant après la liste

27 des articles. Par exemple, pour déclarer la variable My_Week de la Semaine de type énuméré, utilisez la déclaration suivante: enum Semaine LUN, MAR, MER, JEU, VEN, SAM, DIM My_Week; Maintenant, nous pouvons utilisermy_week comme une variable dans un programme: My_Week = MER // assigne 2 à My_Week ou My_Week = 2 // le même que ci-dessus Après avoir défini Semaine comme un type énuméré, nous pouvons déclarer des variables This_Week et Next_Week de type Semaine : enum Semaine This_Week, Next_Week; Tableaux Les tableaux (Arrays) sont utilisés pour stocker des éléments liés dans le même bloc de mémoire et en vertu d'un nom spécifié. Un tableau est déclaré en spécifiant son type, le nom, et le nombre d éléments à stocker. Par exemple: unsigned int Total [5] ; Ce tableau de type unsigned int est nommé Total et dispose de cinq éléments. Le premier élément d'un tableau est indexé à 0. Ainsi, dans cet exemple, Total[0] se réfère au premier élément du tableau et Total[4] se réfère au dernier élément. Le tableau Total est stocké dans un mémoire ayant cinq emplacements consécutifs comme suit: Total[0] Total[1] Total[2] Total[3] Total[4] Les données peuvent être stockées dans le tableau en spécifiant le nom du tableau et de l'indice. Par exemple, pour stocker 25 dans le deuxième élément du tableau, nous devons écrire: Total[1] = 25; De même, le contenu d'un tableau peut être lu en spécifiant le nom du tableau et de son index. Par exemple, pour copier l'élément de tableau d index 2 à une variable appelée Temp, nous devons écrire: Temp = Total[2]; Le contenu d'un tableau peut être initialisé lors de la déclaration du tableau en attribuant d'une séquence de valeurs séparées par des virgules dans le tableau. Voici un exemple d un tableau ayant 12 éléments des mois[0] = 31, mois[1] = 28, et ainsi de suite:

28 unsigned char mois[12] = 31,28,31,30,31,30,31,31,30,31,30,31; Le même tableau peut également être déclaré sans spécifier sa taille: unsigned char mois[ ] = 31,28,31,30,31,30,31,31,30,31,30,31; Des tableaux de caractères peuvent être déclarés de manière similaire. Dans l'exemple suivant, un tableau de caractères nommés Hex_Letters est déclarée avec 6 éléments: unsigned char Hex_Letters[ ] = A, B, C, D, E, F ; Les chaînes sont des tableaux de caractères avec un terminateur null. Les chaînes peuvent être déclarées soit par enfermant la chaîne entre guillemets, ou en spécifiant chaque caractère du tableau au sein de apostrophes et puis en terminant la chaîne avec un caractère nul. La chaîne de deux déclarations 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 déclarer des tableaux aux dimensions multiples. Tableaux unidimensionnels sont généralement appelés vecteurs, et des tableaux bidimensionnels sont appelés matrices. Un réseau bidimensionnel est déclaré en spécifiant le type de données 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 éléments. Le premier élément de la matrice est P[0][0], et le dernier élément est P[2][3]. La structure de ce tableau est montrée 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]

29 Éléments d'un tableau multidimensionnel peut être spécifié lors de la déclaration du tableau. Dans l'exemple suivant, réseau bidimensionnel Q a deux rangées et deux colonnes, ses éléments diagonaux sont mis à 1, et de ses éléments non diagonaux sont remis à 0: unsigned char Q[2][2] = 1,0, 0,1 ; Pointeurs Les pointeurs (Pointers) sont une partie importante du langage microc, car ils occupent les adresses mémoire des autres variables. Les pointeurs sont déclarées de la même manière que d'autres variables, mais avec le caractère «*» en face du nom de variable. Dans l'exemple suivant, un pointeur de caractère non signé du nompnt est déclaré: unsigned char *pnt; Quand un nouveau pointeur est créé, son contenu est d'abord indéterminé et il ne tient pas l'adresse d'une variable. Nous pouvons attribuer l'adresse d'une variable à un pointeur à l'aide le «&» : pnt = &Count; Maintenantpnt affecte l'adresse de variable Count. La variablecount peut être affectée à une valeur en utilisant le caractère «*» en avant de son pointeur. Par exemple, le Count peut être attribuée à 10 à l'aide de son pointeur : * pnt = 10; // Count = 10 c est la même chose que Count = 10; // Count = 10 ou, la valeur du Count peut être copié à la variablecnt 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 premier ellément de la matrice. Ainsi, les deux énoncés suivants sont égaux: Total[2] = 0; et *(Total + 2) = 0; En outre, l'énoncé suivant est vrai: &Total[j] = Total + j ;

30 En langage microc, nous pouvons effectuer des opérations arithmétiques 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 zéro Par exemple, supposons que le pointeur P est affecté afin de contenir l'adresse du tableau d élément Z[2]: P = &Z[2]; Nous pouvons maintenant effacer les éléments 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 deuxième série de déclarations: *P = 0; // Z[2] = 0 P = P + 1; // maintenant P pointe l élément 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 l ensable de 10 éléments créés à l'aide de deux pointeurs différents: unsigned int *i, *j; // déclare 2 pointeurs unsigned int Cnt, Tot; i = &Cnt; // déclare deux variables // i pointe vers Cnt *i = 10; // Cnt = 10 j = i; // copy pointeur i vers pointeur j Tot = *j; // Tot = Structures

31 Une structure peut être utilisée pour recueillir des éléments connexes, qui sont ensuite traités comme un seul objet. Contrairement à un tableau, une structure peut contenir un mélange de types de données. Par exemple, un structure permet de stocker les données personnelles (nom, prénom, âge, date de naissance, etc) d'un étudiant. Une structure est créée en utilisant le mot-clé struct, suivie d'une structure de nom et d une liste des déclarations de membre. Éventuellement, des variables de même type que la structure peuvent déclarer à l'extrémité de la structure. L'exemple suivant déclare une structure nommée Personne : struct Personne unsigned char name[20]; unsigned char prénom[20]; unsigned char nationalité[20]; unsigned char âge; Nous pouvons déclarer des variables du même 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 créer par la déclaration: struct Personne Moi, Toi; Les variables de type Personne peuvent également être créées lors de la déclaration de la structure comme suit : struct Personne unsigned char name[20]; unsigned char prénom [20]; unsigned char nationalité [20]; unsigned char âge; Moi, Toi Nous pouvons attribuer des valeurs aux élements d'une structure en spécifiant le nom de la structure, suivi d'un point «.» et le nom de l'élément. Dans l'exemple suivant, l'âge des variables de structure Moi est mis à 25, et M variable est affecté à la valeur de l'âge dans variable de structure Vous: Moi.age = 25; M = Vous.age; Eléments de la structure peut être initialisé lors de la déclaration de la structure. Dans l'exemple suivant, le rayon et la hauteur de la structure sont initialisés Cylindre à 1.2 et 2.5 respectivement :

32 struct Cylindre valeur de rayon; valeur d hauteur; MienCylindre 1.2, 2.5; Les valeurs peuvent également être attribuées pour les éléments d'une structure à l ade des pointeurs en définissant les variable el les types des pointeurs. Par exemple, si LeCylindre est défini comme un pointeur vers la structurecylindre, alors nous pouvons écrire : struct Cylindre valeur de rayon; flotter d auteur; *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'opérateur sizeof pour obtenir la taille d'une structure. Considéront l'exemple ci-dessus : sizeof (MienCylindre) retours 8, étant donné que chaque variable de type float occupe 4 octets en mémoire. Les champs de bits peuvent être définis en utilisant les structures. Avec les champs de bits, nous pouvons attribuer des identificateurs pour les bits d une 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 accéder aux quartets bits de la variable MienVariable : MienVariable.LowNibble = 12; MienVariable.HighNibble = 8; En microc, nous pouvons utiliser les déclarations typedef pour créer de nouveaux types d une variable. Par exemple, une nouvelle structure type de données nommé Reg peut être créé comme suit :

33 typedef struct unsigned char nom[20]; unsigned char prenom[20]; unsigned âge; Reg; Les variables de type Reg peuvent ensuite être créés de la même manière que les autres types de variables. Dans l'exemple suivant, les variables MyReg, Reg1, etreg2 sont créés à partir de type de donnéesreg: Reg MyReg, REG1, REG2; Le contenu d une structure peut être copié dans une autre structure, à condition que des structures soient déterminées à partir du même modèle. 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; Unions Les unions sont utilisées pour les variables de recouvrement. Une union est similaire à une structure et il est même défini d'une manière similaire. Les deux sont basés sur des modèles, et les membres de tous les deux sont accessible à l'aide des opérateurs «.» ou «->». Une chausse diffère d'une structure en ce que tous variables dans une union occupent la même zone mémoire, ils partagent le même stockage. Un exemple de déclaration 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 même zone de mémoire, et la taille de ce l'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 même valeur que faible octet de y. Dans l'exemple suivant, y est chargé avec 16-bit valeur hexadécimale 0xAEFA, et x est chargé avec 0xFA: P.y = 0xAEFA ;

34 La taille d'une union est la taille (nombre d'octets) de son élément est le plus important. Ainsi, la déclaration: sizeof (P) renvoie 2. Cette union peut aussi être déclarée comme suit : union flags unsigned char x; unsigned int y; union flags P; Opérateurs et expressions en mikroc Les opérateurs sont appliqués 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 opérateurs. Exemple : x + 12 Dans le langage microc, il y a d autres opérateurs que les opérateurs arithmétiques qu on a l habitude de manipuler. Il y en a en fait plus de 40 opérateurs. Opérateurs et priorités Vous avez l habitude de manipuler des expressions arithmétiques : 2+3*4*5-2, On sait que ces expressions sons équivalentes à (2+(3*(4*5)))-2, (2-3)-4. Introduire les parenthèses permet de définir sans ambiguité l expression que l on manipule. Pour éviter l usage des parenthèses qui alourdissent la lecture, il existe des règles pour lever toute ambigüité : Exemple : 2+3*4 La sous expression 3*4 est évaluée en premier et le résultat obtenu est ajouté à la valeur 2 (forme avec parenthèse : 2+(3+4)). On dit que l opérateur «*» possède une priorité supérieur à la priorité de l opérateur «+»

35 La sous expression 2-3 est évaluée en premier et au résultat obtenu, on soustrait la valeur 4 (forme avec parenthèse : (2-3)-4). On dit que l ordre d évaluation de l opérateur est de gauche à droite. La donnée d une priorité et d un ordre d évaluation permet de fixer des règles communes d évaluation des expressions. Ces priorités et ordre d évaluation ne permettent évidement pas de se dispenser complètement des parenthèses : (2+3)*4 à comparer à 2+3*4 Caractéristiques de l opérateur ( ) : Opérateur Nom Notation Priorité Ordre ( ) parenthèses ( ) 15 gauche-droite Opérateur d affectation L opérateur la plus importante dans un langage de programmation est celle qui consiste à donner une valeur à une variable. Cette opération est désignée par le symbole «=». Comme l affectation range une valeur dans une variable (une zone mémoire), il est impératif que le membre gauche d une affectation représente une zone (left value). Une constante n est pas une left value car il ne désigne pas l adresse d une zone mémoire. Elle ne peut donc pas figurer en membre gauche d une affectation. Le membre droit d une affectation peut désigner soit une constante soit une zone mémoire soit une expression. Opérateur Nom Notation Priorité Ordre = affectation x = y 2 droite- gauche Les opérateurs arithmétiques Opérateur 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

36 % modulo x%y 13 gauche-droite Les opérateurs +, -, *, fonctionnent comme en arithmétique. Par contre, l opérateur / (division) se comporte de manière différente selon que les opérandes sont des entier ou des nombres flottants : Nombres flottants : le résultat est un nombre flottant obtenu en divisant les deux nombres. Nombres entiers : le résultat est un nombre entier obtenu en calculant la division entier ou division euclidienne. L opérateur % n est défini que pour les entiers et le résultat est le reste de la division entière des opérandes. Rappel sur la division entière : On appelle quotient et reste de la division entière de a et de b, les nombres entiers q et vérifiant : a = q*b +r ; 0 < r < B Exemple 1 : Si a = 20 et b = 3 alors q = 6 et r = 2 (on a vérifié : 20 = 6*3 + 2) Exemple 2 : int a, b, c ; float x, y, z ; a = b/c; //division entière a = x/y; //reste entier x = y/z; //division réelle x = 2/3; //division entière x = 2.0/3.0; //division réelle x = (float)((float)a)/y; //division réelle L opérateur unaire a une priorité supérieure aux opérateurs binaires arithmétiques : Opérateur Nom Notation Priorité Ordre -(unaire) négation -x 13 droite- gauche Les opérateurs de comparaison Opérateur Nom Notation Priorité Ordre == teste d égalité x == y 9 gauche-droite!= teste de non égalité x! = y 9 gauche-droite

37 <= teste inférieur ou égal x <= y 10 gauche-droite >= teste supérieur ou égal x >= y 10 gauche-droite < teste inférieur strict x < y 10 gauche-droite > teste supérieur strict x > y 10 gauche-droite Théoriquement, le résultat d une comparaison est une valeur booléenne (vrai ou faux). En microc, le résultat d une comparaison est 1 (!= 0) ou 0 selon que cette comparaison est vraie ou fausse. Il n existe pas de type booléen en microc : la valeur entière 0 sera considérée comme équivalente à la valeur faux et toute valeur différente de 0 équivalente à la valeur vrai. Les opérateurs logiques Une variable booléenne est une variable pouvant prendre la valeur vrai ou faux. La valeur d une expression booléenne est, comme le résultat des comparaisons, une valeur entière. Opérateur 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 opérateurs de manipulation de bits Opérateur 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 >> décalage à droite >> x 11 droite-gauche

38 << décalage à gauche << x 11 droite-gauche Les autres opérateurs binaires d affectation Les opérateurs suivants ne sont que des raccourcis de notation (pas d optimisation du code généré) : Opérateur Equivalent Notation Priorité Ordre += x = x + y x += y 2 droite-gauche -= x = x - y x -= y 2 droite-gauche *= x = x * y x *= y 2 droite-gauche /= x = x / y x /= y 2 droite-gauche %= x = x % y x %= y 2 droite-gauche = x = x y x = y 2 droite-gauche <<= x = x << y x <<= y 2 droite-gauche &= x = x & y x &= y 2 droite-gauche I= x = x I y x I= y 2 droite-gauche ^= x = x ^ y x ^= y 2 droite-gauche Autres opérateurs unaires d affectation Opérateur Equivalent Notation Priorité Ordre ++ x = x + 1 x++ ou ++x 14 droite-gauche -- x = x - 1 x-- ou --x 14 droite-gauche c est le raccourci pour y = x ; x = x+1 ; y = ++x ; c est le raccourci pour x = x + 1 ; y = x ; y = x++ ; Autres opérateurs Opérateur conditionnel Opérateur Equivalent Notation Priorité Ordre? opérateur conditionnel e? x : y 3 droite-gauche

39 Cette expression est une sorte de si alors sinon sous forme d expression : 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. Opérateur séquentiel Opérateur Equivalent Notation Priorité Ordre, opérateur séquentiel e1, e2 1 droite-gauche Cet opérateur permet de regrouper plusieurs expressions en une seule : l évaluation de l expression e1, e2 consiste en l évaluation successive (dans l ordre) des expressions e1 puis de e2. Opérateur de dimension Cet opérateur donne l occupation mémoire (en octets) d une variable ou d un type de donné. Opérateur Equivalent Notation Priorité Ordre sizeof opérateur de dimension sizeof (e) 14 droite-gauche Exemple : La valeur de l expression sizeof(c) est 1 si c est une variable de type char. L expression sizeof(char)donne également la valeur 1. Opérateur de parenthèse L opérateur de parenthèse ( ) permet de définir l ordre d évaluation d une expression. C est également ce même opérateur qui est utilisé pour encapsuler les parenthèses des fonctions. Même lorsqu une fonction n a pas d arguments, ces parenthèses sont obligatoires. Opérateur Equivalent Notation Priorité Ordre () opérateur d adressage () 15 gauche-droite Opérateur de sélection Ces opérateurs «.» et «->» servent à sélectionner des champs de données structurées

40 Opérateur Equivalent Notation Priorité Ordre. opérateur de sélection x,info 15 gauche-droite -> opérateur de sélection x->info 15 gauche-droite [] opérateur de sélection x[3] 15 gauche-droite Opérateurs du préprocesseur Toute ligne de code-source commence par «#» est considérée comme un opérateur de préprocesseur (ou l opérateur de prétraitement ou encore la ligne de commande). Les opérateurs du préprocesseur sont généralement placés au début du code-source, mais ils ont le droit d'être n'importe où dans le programme. Le préprocesseur permet à un programmeur de : Compiler un programme de sorte que les parties du code ne sont pas compilés Remplacer les symboles avec d'autres symboles ou des valeurs Insérer des fichiers texte dans un programme La syntaxe plus commune d'un opérateur du préprocesseur est : #include <math.h> MikroC compilateur prend en charge les commandes de préprocesseur suivantes: #define #undef #if #elif #endif #ifdef #ifndef #error #ligne Commande du préprocesseur#define La commande préprocesseur #define fournit une macro où chaque apparition de son nom dans 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 préprocesseur #define n occupe pas l espace en mémoire. Nous pouvons passer des paramètres à une définition de macro en précisant les paramètres entre les parenthèses après le nom de la macro. Par exemple : #define ADD (a, b) (a + b)

41 Lorsque cette macro est utilisée 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 même, nous pouvons définir 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 préprocesseur#include La commande #include est utilisé pour inclure un fichier source dans un programme. Habituellement les fichiers avec l'extension ". H" sont utilisés avec#include. Il y a deux formats pour l'utilisation de#include: #include <fichier> et #include "fichier" Dans la première option le fichier est recherché d'abord dans le répertoire d'installation mikroc, puis dans les chemins de recherche des utilisateurs. En seconde option le fichier spécifié est recherché dans le dossier de projet mikroc, puis dans le dossier d'installation mikroc, puis dans les chemins de recherche des utilisateurs. Il est également possible de spécifier un chemin de répertoire complet : #include "C: \ temp \ last.h" Le dossier dans ce cas n est recherché que dans le chemin du répertoire spécifié. Commande du préprocesseur#if, #elif, #else, #endif Les commandes préprocesseur #if, #elif, #else et #endif sont utilisée pour les compilations conditionnelles, où certaines parties du code-source peut être compilée si certaines conditions sont remplies. Dans l'exemple suivant, si M a une valeur différente de zéro la section de code où les variables A et B sont mis à zéro 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 M A = 0; B = 0; #else A = 1; B = 1; #endif

42 Nous pouvons également utiliser la condition #elif, qui teste une nouvelle condition si la condition précédente était fausse : #if M A = 0; B = 0; #elif N A = 1; B = 1; #else A = 2; B = 2; #endif Dans l'exemple ci-dessus, si M a une valeur différente de zéro, 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 à zéro, alors A = 2 ; B = 2. Notez qu une seule section de code est compilé entre #if et #endif et qu'une section de code peut contenir n'importe quel nombre d instructions Structure de contrôle de programme Les instructions sont normalement exécutées séquentiellement à partir du début à la fin d un programme. Nous pouvons utiliser des instructions de contrôle pour modifier ce flux séquentiel normal dans un programme C. Les instructions de contrôle suivantes sont disponibles dans les programmes en mikroc: De sélection if etswitch D'itération ou bouclage for Modifications inconditionnels d exécution Instructions de sélectionif etswitch Instruction if Cette instruction conditionnelle if permet d exécuter des instructions de manière sélective en fonction du résultat d un test. La déclaration du format général de l'instruction if est la suivante : if (expression) instruction1 else instruction2 ou if(expression) instruction1; else instruction2; Si l expression est vraie (valeur non nulle), l instruction1 s exécute sinon, dans le deuxième cas, c est l istruction2 qui s exécute

43 Le mot-cléelse est optionnel et peut être omis. Dans l'exemple suivant, si la valeur de x est supérieure à MAX alors la variable P est incrémentée de 1, sinon elle est décrémenté de 1: if (x > MAX) P++; else P--; Nous pouvons avoir plus d'une instruction en joignant les déclarations dans bouclés entre parenthèses. Par exemple: if (x> MAX) P++; Cnt = P; Sum = Sum = Cnt; else P--; Dans cet exemple, si x est supérieur à MAX, donc les trois instructions bouclés entre les parenthèses sont exécutés, sinon la déclarationp-- est exécuté. Un autre exemple en utilisant l'instruction if est la suivante: if (x> 0 && x <10) Total + = Sum; Sum++; else Total = 0; Sum = 0; Instructionswitch L'instruction switch (commutateur) est utilisé pour assurer le commutation entre des déférentes déclarations si un certain nombre des conditions son vraie ou faut. La syntaxe de commutation : switch (condition) case condition1: Instructions; break; case condition2: Instructions; break;

44 case condition: Instructions; break; default: Instructions; L instruction switch fonction comme suit : d'abord la condition est évaluée. La condition est ensuite comparée à condition1 et si une correspondance est trouvée, les déclarations contenues dans ce bloc sont évalués. Puis s effectuer le saut de contrôle en dehors de l'instructionswitch lorsque le motbreak est rencontré. Si la condition ne se trouve pas, la condition est comparée à condition2 et si une correspondance est trouvée, les déclarations de ce bloc sont évaluées et le saut de contrôle dehors d états de commutation s effectuer, et ainsi de suite. Lavaleur par défault est facultative, si la condition ne correspond à aucune des conditions spécifiées. 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: case 100: default: D =1; B=10 ; break ; C=100; break; Puisque les espaces blancs sont ignorés en langage C, nous pouvons également écrire le code précédent comme suit: switch (Cnt) case 1: A = 1; break; case 10: B = 1; break; case 100: C = 1; break; défault: D = 1;

45 Instructions d'itérationfor, while, do,goto, continue et break Les instructions d'itération nous permettent d'effectuer des boucles dans un programme, où une partie d'un code doit être répété un certain nombre de fois. Dans mikroc l'itération peut être effectuée de quatre façons. Nous se penchera sur chacun des exemples : Utilisation de for Utilisation dewhile Utilisation dedo Utilisation degoto, continue et break Instructionfor La syntaxe d'une instruction for est : for (expression initiale; expression de condition; expression incrément) Instructions; L'expression initiale définit la variable au départ de la boucle, et cette variable est comparée à l'expression de condition avant l'entrée dans la boucle. Déclarations à l'intérieur de la boucle sont exécutées de façon répétée, et après chaque itération la valeur d expression est incrémentée. L'itération se poursuit jusqu'à moment où l'expression de condition devient fausse. Une boucle sans fin est formée si l'expression condition est toujours vraie. L'exemple suivant montre comment une boucle peut être mise en place pour exécuter 10 fois. Dans cet exemple, la variable i commence par 0 et elle est augmentée de 1 à la fin de chaque itération. La boucle se termine quand i = 10, puisque dans ce cas, la condition i <10 devient fausse. À la sortie de la boucle, la valeur de i est de 10: for(i = 0; i < 10; i ++) Instructions; Cette boucle pourrait également être lancée par une expression initiale avec une valeur différente de zéro. Ici, i commence par 1 et la boucle se termine quand i = 11. La sortie de la boucle se produira lorsque la valeur dei sera de 11 : for (i = 1; i <= 10; i++) Instructions; Les paramètres d'une boucle for sont tous optionnels et peuvent être omises. Si la condition expression est laissée de côté, il est supposé pour être vrai. Dans l'exemple suivant, une boucle sans fin est formée par l'expression de condition qui est toujours vraie et la valeur de i commence avec 0 et est incrémenté après chaque itération : // Boucle sans fin avec incrémentation i for (i = 0;; i++) Instructions;

46 Dans l'exemple suivant d'une boucle sans fin où tous les paramètres sont omis : // Exemple de boucle sans fin for (;;) Instructions; Dans la boucle sans fin suivante, i commence par 1 et n'est pas incrémenté à l'intérieur de la boucle : // Boucle sans fin avec i = 1 for (i = 1;;) Instructions; S il n'y a qu'une seule instruction à l'intérieur de la boucle for, les accolades peuvent être omises comme c est montré dans l'exemple suivant : for (k = 0; k <10; k++) Total = Total + Sum; Les boucles imbriquées peuvent également être utilisés. Dans une boucle for imbriquée, la boucle intérieure est exécutée pour chaque itération de la boucle externe. Dans l'exemple suivant la boucle interne est exécutée 5 fois et la boucle extérieure est exécutée 10 fois. Le nombre d itérations totales est de cinquante : // Exemple de deux boucles imbriquées for (i = 0; i < 10; i++) for (j = 0; j < 5; j++) Instructions; Dans l'exemple suivant, la somme de tous les éléments d'un matrice M [3 x 4] est calculée et stockées dans une variable appeléesum : // Ajouter tous les éléments d'une matrice 3x4 Sum = 0; for (i = 0; i < 3; i++) for (j = 0; j < 4; j++) Sum = Sum + M[i][j]; Comme il n'y a qu'une seule instruction à exécuter, l'exemple précédent pourrait également être s'écrit : // Ajouter tous les éléments d'une matrice 3x4 Sum = 0; for (i = 0; i < 3; i++)

47 for (j = 0; j < 4; j++) Sum = Sum + M[i][j]; Instruction while La syntaxe d'une instructionwhile est la suivante : while (condition) Instructions; Ici, les instructions sont exécutées jusqu'à ce que la condition devienne fausse, ou les instructions sont exécutées de façon répétée aussi longtemps que la condition est vraie. Si la condition est fausse à l'entrée de la boucle, la boucle ne sera pas exécuté et le programme sera continuer de l'extrémité de la bouclewhile. Il est important que la condition est changé intérieur de la boucle, sinon une boucle sans fin sera formé. Le code suivant montre comment mettre en place une boucle d'exécuter 10 fois : // Une boucle qui s'exécute 10 fois k = 0; while (k <10) Instructions; k++; Au début du code, la variable k est égal à 0. Comme k est inférieur à 10, la boucle while commence. L'intérieur de la boucle, la valeur de k est incrémenté d un après chaque itération. La boucle se répète tant que k < 10 et se termine lorsque k = 10. À la fin la valeur de k est 10. Notez qu une boucle sans fin sera formé si k n'est pas incrémenté à l'intérieur de la boucle: // Une boucle sans fin k = 0; while (k <10) Instructions; Une boucle sans fin peut également être formée par réglage de la condition qui doit être toujours vrai : // Une boucle sans fin while (k = k) Instructions; Voici un exemple de calcul de la somme des nombres de 1 à 10 et le stockage du résultat d'une somme variable appeléesum :

48 // Calculer la somme des nombres de 1 à 10 unsigned int k, sum; k = 1; sum = 0; while (k <= 10) sum = sum + k; k++; Il est possible d'avoir une déclarationwhile sans corps. Une telle déclaration est utile, pour par exemple, si nous attendons un port d'entrée pour changer sa valeur. Voici un exemple où le programme va attendre aussi longtemps que le bit 0 de PORTB (PORTB.0) est au niveau logique 0. Le programme se poursuivra jusqu au changement à la valeur logique 1 sur les broches du port. while (PORTB.F0 == 0); // Attendre jusqu'à ce que PORTB.0 devient un ou while (PORTB.F0); Instructiondo Une déclaration do est similaire à une déclaration while sauf ce que la boucle exécute jusqu'à ce que la condition devient fausse, ou, la boucle s'exécute tant que la la condition est vraie. La condition est testée à la fin de la boucle. La syntaxe d'une déclaration do est la suivante : do Instructions; while (condition); La première itération est toujours effectuée si la condition est vraie ou fausse. Il s'agit de la principale différence entre une déclaration while et une déclaration do. Le code suivant montre comment mettre en place une boucle d'exécuter 10 fois en utilisant la déclaration do /*Exécute 10 fois */ k = 0; do Instructions; k++; while (k <10); La boucle commence avec k = 0, et la valeur de k est incrémenté intérieur de la boucle après chaque itération. À la fin de boucle k est testé, et si k n'est pas inférieur à 10, la boucle termine. Dans cet exemplek = 0 au début de la boucle, à la fin de la boucle la valeur de k est 10. Une boucle sans fin sera formée si la condition n'est pas modifiée à l'intérieur de la boucle, comme est illustré dans l'exemple ci-dessous. Icikest toujours inférieur à 10 :

49 /*Une boucle sans fin*/ k = 0 ; do Instructions; while (k < 10); Une boucle sans fin peut également être créée si la condition est réglée 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 utilisée pour modifier le flux normal de contrôle dans un programme. Elle provoque le programme à sauter à une étiquette spécifiée. Une étiquette peut être n'importe quel jeu de caractères alphanumériques commençant par une lettre et se terminant par le caractère «:». Bien que l instruction goto soit non recommandée, elle peut être utilisée conjointement avec une instruction if pour créer un programme en itérations. L'exemple suivant montre comment mettre en place une boucle pour l exécuter 10 fois en utilisantgoto etif : / * Exécute 10 fois * / k = 0; Boucle: Instructions; k++; if (k < 10) goto Boucle; La boucle commence par l étiquette Boucle et la variable k = 0. Les instructions sont exécutées à l'intérieur de la boucle et k est incrémenté de 1. La valeur de k est alors comparé à 10 et le programme retourne à l étiquette Boucle si k <10. Ainsi, la boucle est exécutée 10 fois jusqu'à ce que la condition à la fin devienne fausse. À la fin de la boucle la valeur de k est 10. Les instructions continue et break peuvent être utilisés à l'intérieur d itérations pour modifier le flux de commande. Une instruction continue est généralement utilisée avec une instruction if et provoque le saut de la boucle d itération. Voici un exemple qui calcule la somme des nombres de 1 à 10, sauf le nombre 5:

50 /* Calculer la somme des nombres 1,2,3,4,6,7,8,9,10 */ Sum = 0; i = 1; for (i = 1; i <= 10; i++) if (i == 5) continue; // Passer numéro 5 Sum = Sum + i; De même, une instruction break peut être utilisé pour mettre fin à une boucle à l'intérieur de la boucle. Dans l'exemple suivant, la somme des nombres de 1 à 5 est calculée, même si les paramètres de la boucle sont mis à parcourir 10 fois: / * Calculer la somme des nombres 1,2,3,4,5 * / Sum = 0; i = 1; for (i = 1; i <= 10; i++) if (i > 5) break; // Stop boucle si i > Utilisation mikroc avec des instructions en langage d assembleur Il devient parfois nécessaire d utiliser la langue assembleur pour microcontrôleurs PIC et des instructions en langage mikroc. Des instructions en langage assembleur peuvent être incluses dans un programme en utilisant mot-clé asm (ou_asm, ou asm). La syntaxe est la suivante: asm Instructions Commentaires du langage d assembleur (une ligne commençant par un point-virgule) ne sont pas autorisés, mais les deux types de commentaires en microc peuvent être utilisés dans les routines en langage d'assembleur : asm // Ce code introduit un temporisation MOVLW 6 // Charge W avec Les variables en microc peuvent être utilisées dans les routines en langage d'assembleur, mais elles doivent être déclarées et initialisées avant son utilisation. Par exemple, une variable Temp peut être initialisée et ensuite chargée dans le registre W :

51 unsigned char Temp = 10; asm MOVLW Temp // W = Temp = Exercices Exercice 2.1 Ecrire un programme pour mettre tous les 8 pattes du PORTB au niveau 1. Solution 2.1 PORTB est configuré comme un port de sortie (à l aide du registre TRISB), et ensuite tous les 8 bits du port sont mis au niveau logique 1 (en chargeant le registre PORTB par le nombre hexadécimal 0xFF) : void main () TRISB = 0; // Configurer PORTB en sortie PORTB = 0xFF; // Mettre toutes les bits du port à 1 Exercice 2.2 Écrire un programme pour mettre les pattes impaires (1, 3, 5 et 7) du niveau 1. PORTB au Solution 2.2 Repères impaires de port peuvent être mis au niveau logique 1 en envoyant la configuration binaire au registre PORTB. Cette configuration binaire est le nombre hexadécimal 0xAA et le programme nécessaire est : void main () TRISB = 0; PORTB = 0xAA; // Configurer PORTB en sortie // Activer les pattes impairs numérotés Exercice 2.3 Ecrire un programme pour compter en binaire sans fin et envoie ces données à PORTB :

52 Solution 2.3 Une boucle sans fin peut être utilisée, et à l'intérieur de cette boucle la valeur d'une variable peut être incrémentée, puis envoyée à PORTB: void main () unsigned char Cnt = 0; for (;;) PORTB = Cnt; Cnt++; // Boucle sans fin // Envoyer Cnt à PORTB // Incrémentation Cnt Exercice 2.4 Écrire un programme pour mettre tous les bits de PORTB au niveau logique 1, puis à la logique 0, et répéter ce procédé dix fois. L instruction for peut être utilisée pour créer une boucle à répéter les opérations requises dix fois void main () unsigned char j; for (j = 0; j < 10; j++) Solution 2.4 // Répéter 10 fois PORTB = 0xFF; // Mettre les bits de PORTB à 1 PORTB = 0; // Mettre les bits de PORTB à

53 Exercice 2.5 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. Solution 2.5 Le programme est : void main () float Rayon = 2.5, Hauteur = 10; float Volume; Volume = PI * Rayon * Rayon * Hauteur; Exercice 2.6 Ecrire un programme pour trouver le plus grand élément d'un tableau d'entiers ayant dix éléments. Solution 2.6 Au début, la variable m est affectée sur le premier élément de la matrice. Une boucle est alors formée et le plus grand élément de la matrice se trouve : void main () unsigned char j ; int m, A [10]; m = A [0]; for (j = 1; j < 10; j++) if (A [j]> m) m = A [j]; // Premier élément du tableau Exercice 2.7 Ecrire un programme en utilisant une boucle while pour effacer tous les dix éléments entiers dans un tableau M. Solution 2.7 Dans le programme qui suit, NUM est définie comme 10 et une variable j est utilisée comme le compteur de boucle:

54 #define NUM 10 void main () int M[NUM]; unsigned char j = 0; while (j < NUM) M[j] = 0; j++; Exercice 2.8 Ecrire un programme pour convertir la température de C à F à partir de 0 C, avec le pas de 1 C jusqu'à 100 C, et stocker les résultats dans un tableau appelé F. Solution 2.8 La température équivalente en F, est calculée selon la formule: F = ( C- 32.0)/1.08 Une boucle for est utilisée pour calculer la température en F et la ranger dans tableau F : void main () float F[100]; unsigned char C; for (C = 0; C <= 100; C++) F[C] =(C 32.0) / 1.8;

55 III. FONCTIONS ET BIBLIOTHEQUES DANS MIKROC 3.1 Fonctions dans mikroc Les fonctions sont généralement définies comme des sous-programmes qui renvoient une valeur fondée sur un certain nombre de paramètres d'entrée. Chaque programme doit avoir une seule fonction externe marquant le point d'entrée dans le programme principale. Les fonctions sont déclarés 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'idée principale est de diviser un programme en plusieurs parties qui utilisent ces fonctions afin de résoudre le problème réel plus facile. En outre, les fonctions nous permettent d'utiliser les compétences et les connaissances d'autres programmeurs. Par exemple, s il est nécessaire d'envoyer une chaîne de caractères à un écran LCD, il est beaucoup plus facile d'utiliser une partie déjà écrite du programme que de recommencer. Les fonctions consistent des commandes précisant ce qui doit être fait sur des variables. Elles peuvent être comparées à des sous-routines. En règle générale, il est beaucoup mieux d'avoir un programme composé d'un grand nombre de fonctions simples que de quelques fonctions importantes Déclaration d une fonction Chaque fonction doit être déclarée de manière à être correctement interprété au cours du processus de compilation. Déclaration contient les éléments suivants: Nom de la fonction Liste des paramètres Déclaration des paramètres Corps de la fonction Type de résultat de la fonction La syntaxe générale d'une définition de fonction est montrée ci-dessous : type_de_résultat nom_fonction(parameter1, parameter2,...)... corps de la fonction... Dans l exemple qui suit, la fonction, nommée Mult, reçoit deux arguments entiers, a et b, et renvoie leur produit. Notez que l'utilisation des parenthèses dans une instruction de retour est facultative : int Mult(int a, int b) return (a*b); Quand une fonction est appelée, elle s'attend généralement à donner le nombre d'arguments exprimés en liste d'arguments de la fonction. Par exemple, la fonction précédente peut être appelée :

56 z = Mult (x, y); où la variable z est le type de données int. Notez que les arguments déclarés dans la définition de la fonction et les arguments passés lorsque la fonction est appelée sont indépendants les uns des autres, même si elles ont le même nom. Dans l'exemple précédent, lorsque la fonction est appelée, variable x est copié à a et variable y et est copiée à b sur entrée en fonctionmult. Certaines fonctions ne renvoient pas de données. Le type de données de ces fonctions doit être déclarées comme nul. Par exemple void LED(unsigned char D) PORTB = D; Fonctions void peut être appelée sans aucune instruction d'affectation, mais les parenthèses sont nécessaire pour indiquer au compilateur que un appel de fonction est faite: LED (); En outre, certaines fonctions ne possèdent pas d'arguments. Dans l'exemple suivant, la fonction, nommée Compl, complète PORTC du microcontrôleur. Il ne renvoie pas de données et n'a pas d'arguments: void Compl() PORTC = PORTC; Cette fonction peut être appelée en tant que : Compl (); Les fonctions sont normalement définies avant le début du programme principal. Certaines définitions de fonction et de leur utilisation dans les programmes principaux sont illustrées dans les exemples suivants: Exercice 3.1 Écrire une fonction appelée 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 cette surface dans une variable appeléecercle. Solution 3.1 Le type de données de la fonction est déclaré comme float. La surface d'un cercle est calculée par la formule :

57 Surface = πr 2 où r est le rayon du cercle. La surface est calculée et stockée dans une variable appelée s, qui est ensuite retournée par la fonction : locale 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 utilisée dans un programme principal pour calculer la surface d'un cercle dont le rayon est de 2,5 cm. La fonction est définie avant le programme principal. La fonction est appelée à l'intérieur du programme principal pour calculer la surface et la stocker dans la variablecercle. Code-source 3.1 /**************************************************************************** SURFACE D'UN CERCLE ==================== Ce programme appelle la fonction Cercle_Surface pour calculer la surface d'un cercle. Microcontrôleur : PIC 18F452 Oscillateur : HS, Mhz Fichier: SURFACE_CERCLE.c Date: 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; /* Début 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);

58 Exercice3.2 Écrire une fonction appelée Surface et une fonction appelée 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 calculée par la formule: Surface = 2πrh où r et h sont le rayon et la hauteur du cylindre, respectivement. Le volume d'un cylindre est calculé par la formule: Volume = πr 2 h Le 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 appeléeminuscule_majuscule pour convertir un caractère de minuscule en majuscule. Solution 3.3 La valeur ASCII du caractère en majuscule du premier caractère ('A') est égale à 0x41. De même, la valeur l'ascii du premier caractère en minuscule ('a') est égale à 0x61. Un caractère minuscule peut être converti en son équivalent majuscule en soustrayant 0x20 du caractère en minuscule. Les fonctions nécessaires sont montrées 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

59 Solution 3.4 Le programme requis est indiqué dans le code-source 3.4. La fonction Minuscule_Majuscule est appelée pour convertir le caractère en minuscule de la variable Lc en majuscules et de stocker dans la variable Uc. Code-source 3.2 /************************************************************************** SURFACE ET VOLME D UN CYLINDRE ============================== Ce programme calcule la surface et le volume d'un cylindre dont le rayon est 2,0cm et la hauteur est 5,0cm. Microcontrôleur : PIC 18F452 Oscillateur : HS, Mhz Fichier: VOLUM_CYLINDRE.c Date: 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; // Début 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);

60 Code-source 3.3 /*********************************************************************** MINUSCULE MAJUSCULE =================== Ce programme convertit le caractère en minuscule de la variable Lc dans le caractère en majuscule et le sauvegarde dans la variable Uc. Microcontrôleur : PIC 16F84A Oscillateur : HS, Mhz Fichier: MINUSC_MAJUSC.c Date: Juillet 2012 *************************************************************************/ /* Fonction pour convertir un caractère en minuscule dans un caractère en majuscule*/ unsigned char Minuscule_Majuscule (unsigned char c) if(c > ='a' && c <= 'z') return(c - 0x20); else return c; // Début du programme principal void main () unsigned char Lc, Uc; Lc = r ; Uc = Minuscule_Majuscule (Lc); Prototypes de fonctions Si une fonction n'est pas définie avant qu'il ne soit appelé, le compilateur génère une erreur. Une façon de contourner ce problème est de créer un prototype de fonction. Une fonction prototype est construite facilement en faisant une copie de la tête de la fonction. Les paramètres ne sont pas obligatoires, mais le type de données et des paramètres doivent être définis. Dans un exemple, qui suit, le prototype de fonction appelée Area est déclarée et la fonction s'attend d avoir un paramètre de type en virgule flottante : float Area(float rayon); Ce prototype de fonction pourrait également être déclaré comme suit : float Area (float); Prototype de fonction doit être déclaré au début d'un programme. Les définitions et les appels de fonction peuvent alors être faits à n'importe quel point dans le programme

61 Code-source 3.4 /**************************************************************************** MINUSCULES EN MAJUSCULES ============================ Ce programme convertit le caractère en minuscule de la variable Lc en majuscule et le sauvegarde dans la variable Uc. Microcontrôleur : 16F84A Oscillateur : HS, Mhz Fichier: MINUSC_MAJUSCUL.c Date: Juillet 2012 ****************************************************************************/ // Fonction pour convertir un caractère de minuscule en majuscule unsigned char Minuscule_Majuscule(unsigned char c) if (c> = 'a' && c <= 'z') return (c - 0x20); else return c; // Début du programme principal void main () unsigned char Lc, Uc; Lc = r ; Uc = Minuscule_Majuscule(Lc); Exercice 3.5 Répéter l'exemple 3.4, mais déclarer que Minuscule_Majuscule est un prototype de fonction. Solution 3.5 Le code-source 3.5 présente le programme où la fonction Minuscule_Majuscule est déclarée comme un prototype de fonction au début du programme. Dans cet exemple, la fonction réelle est écrite après le programme principal. Un avantage important de l'utilisation des prototypes de fonction, c'est que si le prototype de fonction ne correspond pas à la définition de la fonction réelle, mikroc va détecter et modifier les types de données dans l'appel de fonction pour faire correspondre les types de données déclarés dans le prototype de fonction

62 Code-source 3.5 /**************************************************************************** MINUSCULES EN MAJUSCULES ============================ Ce programme convertit le caractère en minuscule de la variable Lc en majuscule et le sauvegarde dans la variable Uc. Microcontroller: 16F84A Oscillateur : HS, Mhz Fichier: MIN_MAJ_2.c Date: Juillet 2012 ***************************************************************************/ unsigned char Minuscule_Majuscule(unsigned char); // Début du programme principal void main () unsigned char Lc, Uc; Lc = r ; Uc = Minuscule_Majuscule (Lc); // Fonction pour convertir un caractère de minuscule en majuscule unsigned char Minuscule_Majuscule (unsigned char c) if (c> = 'a' && c <= 'z') return (c - 0x20); else return c; Supposons que nous ayons le code suivant : unsigned char c = A ; unsigned int x = 100; long Tmp; long MaFonc(long a, long b); void main () Tmp = MaFonc(c, x); // prototype de fonction Dans cet exemple, le prototype de fonction déclare les deux arguments long, les variables x et c sont convertis en long avant d'être utilisé à l'intérieur de la fonction MaFonc

63 3.1.3 Définition de fonction La fonction se compose de sa déclaration et de son corps de la fonction. Le corps de fonction est un bloc, représentant de définitions locales et des déclarations entre les accolades. Toutes les variables déclarées au sein de corps sont locales. La fonction elle-même peut être définie uniquement dans le cadre du fichier. Cela signifie que les déclarations ne peuvent pas être imbriquées. Pour revenir au résultat de la fonction, utilisez l'instruction de return. Déclaration à retour d une fonction de type void ne peut pas avoir un paramètre, vous pouvez omettre l instruction return si elle est la dernière instruction du corps de la fonction. Voici une définition 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 dépend des effets secondaires plutôt que de la valeur de retour : /* Fonction qui convertit coordonnées Descartes (x, y) en coordonnées polaires (r, fi): */ #include <math.h> 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 Appels de fonctions Une fonction est appelée avec des arguments réels placés dans la même séquence que leur correspondant paramètres formels. Utilisez un opérateur d'appel de fonction() : fonction_nom (expression_1, expression_2,..., expression_n) Chaque expression dans l'appel de fonction est un argument réel. Nombre et types des arguments réels doivent correspondre à ceux des paramètres de fonctions formelles. Arguments réels peuvent être de n'importe quelle complexité. Sur l appel de fonction, tous les paramètres formels sont créés en tant qu'objets locaux initialisé par des valeurs d'arguments réels. De retour d'une fonction, l objet temporaire est créé à la place de l'appel, et il est initialisé par l'expression de la déclaration de retour. Cela signifie que l'appel de fonction comme un opérande de l'expression complexe est traitée en résultat de fonction

64 Si la fonction est sans résultat (type void) ou vous n'avez pas besoin du résultat, vous pouvez écrire l'appel de fonction comme une expression autonome. En C, les paramètres scalaires sont toujours passés à la fonction par valeur. Une fonction peut modifier les valeurs de ses paramètres formels, mais cela n'a aucun effet sur le réel argument dans la routine d'appel. Vous pouvez passer objet scalaire par le discours de déclarer un paramètre formel d'être un pointeur. Ensuite, utilisez l'opérateur «*» pour accéder à l'objet pointu Conversion argument Quand un prototype de la fonction n'a pas été préalablement déclaré, mikroc convertit arguments intégraux à un appel de fonction de l'élargissement intégrante (l'expansion) Quand un prototype de fonction est en portée, mikroc convertit l'argument donné par le type de paramètre déclaré comme par affectation. Si un prototype est présent, le nombre d'arguments doivent correspondre. Les types doivent être 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 définition de la fonction réelle, mikroc permet le détecter si et seulement si cette définition se trouve dans la même 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); // prototype main () res = fonc(limit, ch); //... // fonction call (appeler) Comme il a le prototype de fonction pourfunc, ce programme convertitlimit et ch à long, en utilisant la règle 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 caractère, respectivement. Dans ce cas, la contenu de pile ne serait pas correspondre à la taille ou le contenu defonc, conduisant à un problème. L utilisation des prototypes de fonctions facilite grandement dans la révélation des erreurs

65 3.2 Fonctions intégrées Le compilateur mikroc fournit un ensemble de fonctions intégrées qui peuvent être appelées à partir du programme. Ces fonctions sont énumérées dans le tableau 3.1, avec une brève description de chacune. La plupart de ces fonctions peuvent être utilisées dans un programme sans avoir à inclure des fichiers d'en-tête. Fonction Tableau 3.1: Fonctions intégrées 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 élevée d'octet d'un nombre (bits 16 à 23) Highest Retourne le plus grand d'octets d'un nombre (bits 24 à 31) Delay_us Delay_ms Crée le retard dans les unités de microseconde Crée le retard constante dans les unités de millisecondes Vdelay_ms Crée le retard en millisecondes en utilisant des variables de programme Delay_Cyc Crée le retard basé sur l'horloge de microcontrôleur Clock_Khz Régler l horloge de microcontrôleur en KHz Clock_Mhz Régler l horloge de microcontrôleur en MHz Les exceptions sont des fonctions Lo, Hi, Higher, et Highest, qui exigent le fichier d en-tête built_in.h. De plus détails sur l'utilisation de ces fonctions sont disponibles dans le manuel de mikroc. Delay_us et delay_ms fonctions sont fréquemment utilisés 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 connectée au PORTB (broche RB0) d'un microcontrôleur PIC16F84A à travers d une résistance de limitation, comme indiqué dans la figure 3.1. Ecrire un programme qui fera clignoter le LED ON et OFF en permanence dans l intervalle d'une seconde

66 Solution 3.6 Une LED peut être connectée à un microcontrôleur 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 connectée à + 5 V à travers une résistance R de limitation de courant et l'autre patte est reliée à la patte de port de sortie du microcontrôleur. La LED sera allumée lorsque le port de sortie du microcontrôleur 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 reliée au port de sortie du microcontrôleur et l'autre patte est reliée à la masse à travers une résistance R de limitation de courant. La LED sera allumé lorsque le port de sortie du microcontrôleur est au niveau logique 1 (à savoir, environ +5 V). La même valeur de résistance R peut être utilisée en mode de source de courant. a) b) Fig.3.1 LED connectée au port RB0 d'un microcontrôleur 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 déclaration TRISB = 0. Une boucle sans fin est alors formée avec la déclaration for, et à l'intérieur de cette boucle la LED est allumée ou éteinte avec un délai d une 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 préprocesseur #define. 3.3 Fonctions de la bibliothèque mikroc Un vaste ensemble de fonctions de la bibliothèque est disponible avec le compilateur mikroc. Ces fonctions de la bibliothèque peuvent être appelées à partir de n'importe quel programme, et ils sont inclus dans le programme. Le manuel d'utilisation mikroc donne une description détaillée de chaque fonction de la bibliothèque, avec des exemples. Dans cette partie, les fonctions de la bibliothèque disponibles sont identifiées, et les fonctions de la bibliothèque importante et couramment utilisés sont décrites dans détail, avec des exemples

67 Le tableau 3.2 donne une liste des fonctions de la bibliothèque mikroc, organisée en ordre fonctionnel. Certaines des fonctions de la bibliothèque fréquemment utilisées sont les suivantes : EEPROM bibliothèque LCD bibliothèque Logiciel UART bibliothèque Matériel USART bibliothèque Sound bibliothèque ANSI C bibliothèque Divers bibliothèques Code-source 3.6 /**************************************************************************** LED CLIGNOTANTE ================ Ce programme fait clignoter d une LED connectée au port RB0 d'un microcontrôleur PIC avec l intervalle d une seconde. La fonction intégré Delay_ms est utilisé pour créer un délai de 1 seconde entre les clignotements. Microcontrôleur: 16F84A Oscillateur: HS, Mhz Fichier: LED_CLIGNOTE.c Date: Juillet 2012 ****************************************************************************/ void main () TRISB = 0; // Configurer PORTB en sortie for (;;) // Boucle sans fin PORTB = 1; // Activer LED Delay_ms (1000); // Retard 1 seconde PORTB = 0; // Désactiver LED Delay_ms (1000); // Retard 1 seconde Code-source 3.7 /*************************************************************************** LED CLIGNOTANTE_2 =================== Ce programme fait clignoter d une LED connectée au port RB0 d'un microcontrôleur PIC avec l intervalle d une seconde. En utilisant les commandes de préprocesseur #define le programme est devenu plus facile à suivre. Microcontrôleur: 16F84A Oscillateur: HS, Mhz Fichier: LED_CLIGNOTE2.c Date: Juillet 2012 **************************************************************************/ #define LED PORTB.0 #define ON 1 #define OFF 0 #define One_Second_Delay Delay_ms(1000)

68 void main() TRISB = 0; for(; ;) LED = ON; One_Second_Delay; LED = OFF; One_Second_Delay; // PORTB est configuré en sortie // Boucle sans fin // LED est allumée (ON) // Retard 1 seconde // LED est désactivée (OFF) // Retard 1 seconde Bibliothèque ADC CAN CANSPI Compact Flash EEPROM EthernetPIC18FxxJ60 Flash Memory Graphics LCD T6963C Graphics LCD I2C Keypad LCD Manchester Code Multi Media One Wire PS/2 PWM RS-485 Sound SPI UART SPI Graphics LCD Tableau 3.2: Bibliothèque mikroc Description Utilisé pour conversion analogique/numérique Utilisé pour le fonctionnement avec le module CAN Utilisé pour le fonctionnement avec le module extern CAN Utilisé pour les operations avec les cartes mémoire Compact Fash Utilisé pour les operations avec la mémoire EEPROM Utilisé pour les operations avec le module Ethernet Utilisé pour le fonctionnement avec mémoire integé Flash Utilisé pour le fonctionnement avec module LCD graphique avec une résolution de 128x64 Utilisé pour la communication avec module LCD graphiques T6963 Utilisé pour la simulation du protocole I2C Utilisé pour les operations avec le clavier Utilisé pour le fonctionnement avec LCD standard Utilisé pour les communication à l aide du code de Manchester Utilisé pour les operation avec les cartes multimedia flasch MMC Utilisé pour le bus 1-Wire Utilisé pour les operations avec le clavier PS/2 standard Utilisé pour les operations avec le module de PWM Utilisé pour les operations avec les modules à la communication série RS-485 Utilisé pour le fonctionnement du module sonore Utilisé pour les operations avec le module SPI Utilisé poue les operations avec le module de UART Utilisé pour la communication avec SPI graphique LCD Bibliothèque EEPROM La bibliothèque EEPROM inclut des fonctions pour lire les données non volatiles d EEPROM du PIC, ou pour écrire des données sur cette mémoire. Deux fonctions sont prévues : Eeprom_Read Eeprom_Write La fonctioneeprom_read lit un octet à partir d'une adresse spécifiée de la mémoire EEPROM. L adresse est de type entier, et donc la fonction prend en charge les microcontrôleurs PIC avec

69 plus de 256 octets. Un retard de 20 ms doit être utilisé entre lectures successives de l EEPROM pour garantir le retour des données correctes. Dans l'exemple suivant, l'octet d'adresse 0x1F de la mémoire EEPROM est lu et stocké dans variabletemp: Temp = Eeprom_Read (0x1F); La fonction Eeprom_Write écrit un octet à une adresse spécifiée de la mémoire EEPROM. L'adresse est de type entier et donc la fonction prend en charge les microcontrôleurs PIC avec plus de 256 octets. Un retard de 20 ms doit être utilisé entre écritures successives dans la mémoire EEPROM pour garantir le transfert correct de données dans la mémoire EEPROM. Dans l'exemple suivant, le nombre 0x05 est écrit à l'adresse 0x2F de l'eeprom : Eeprom_Write (0x2F, 0x05); Exercice 3.7 Ecrivez un programme pour lire le contenu de l'eeprom de l'adresse 0 à 0x2F puis envoyez ces données pour PORTB d'un microcontrôleur PIC. Solution 3.7 Le programme requis est donné dans le code-source 3.8 (fichier LECTURE DE L EEPROM). Une bouclefor est utilisée pour lire les données de l EEPROM et puis de l'envoyer au PORTB du microcontrôleur. Notez que quelques 20ms retardé sont utilisés entre chaque lecture successive. Code-source 3.8 /**************************************************************************** LECTURE DE L EEPROM ==================== Ce programme lit les données à partir d'adresses de 0 à 0x2F de l'eeprom et puis envoie ces données pour PORTB du microcontrôleur. Microcontrôleur: 16F84A Oscillateur: HS, Mhz Fichier: EEPROM.c Date: Juillet 2012 ****************************************************************************/ void main() unsigned int j; unsigned char Temp; TRISB = 0; for(j=0; j <= 0x2F; j++) Temp = Eeprom_Read(j); PORTB = Temp; Delay_ms(20); // PORTB est configuré en sortie

70 3.3.2 Bibliothèque pour LCD La programmation en assembleur d'un écran LCD en mode parallèle ou en série est généralement une tâche complexe et nécessite d une bonne compréhension du fonctionnement interne de l'écran LCD. La langue mikroc fournit des fonctions pour les deux modes de programmation basée sur le texte déjà préparé, ce qui simplifie l'utilisation d'écrans LCD. Le contrôleur LCD HD44780 Le HD44780 est l'un des contrôleurs de cristaux liquides les plus appréciés, étant utilisé dans l'industrie et dans les applications commerciales. Le module est monochrome et vient dans différentes formes et tailles. Des modules avec 8, 16, 20, 24, 32 et 40 caractères sont disponibles. Selon le modèle, l'écran LCD est fabriqué avec 14 ou 16 pattes pour l'interface. Le tableau 3.3 présente la configuration des pattes et les fonctions des pattes d un LCD à 14 pattes. La patte VSS est à 0V ou du sol. La patte VDD doit être connecté à la borne positive d alimentation. Bien que les fabricants spécifient une alimentation 5V DC, les modules travaillent habituellement aussi avec une alimentation un peu bas que 3V ou aussi haut que 6V. La patte 3 VEE est désigné pour réglage du contraste de l'affichage et doit être reliée à une alimentation en courant continu. Un potentiomètre est généralement connecté à l'alimentation avec son curseur raccordé à la patte VEE et l'autre patte du potentiomètre relié à la masse. De cette façon la tension à la patte VEE, et où le contraste de l'affichage, peut être réglée à volonté. La patte 4 est le registre de sélection (RS) et lorsque cette patte à 0 V, les données sont transférés à l'affichage à cristaux liquides. Lorsque RS est à +5 V, les données de caractères peuvent être transférés à partir du module LCD. La patte 5 est le registre de sélection de lecture / écriture (R / W). Cette patte est reliée avec la masse (état logique bas) afin d'écrire des données de caractères au module LCD. Lorsque cette broche est à +5 V (états logique haut) donc les informations sortants du module LCD peuvent être lues. La patte 6 est la validation (EN), qui est utilisé pour initier le transfert de commandes ou de données entre le module et le microcontrôleur. Lors de l'écriture à l'écran, les données sont transférés uniquement sur le front descendant (haut-bas) sur cette patte. Lors de la lecture de l affichage, les données deviennent accessibles après le front montant (bas-haut) de la patte de validation, et ces données demeurent tant que la patte de validation est au niveau logique haut. Les broches 7 à 14 sont les huit lignes de bus de données (D0 à D7). Les données peuvent être transférées entre le microcontrôleur et le module LCD à l'aide soit d'un seul octet de 8 bits soit de deux 4-bits. Dans ce dernier cas, seuls les quatre lignes de données supérieures (D4 à D7) sont utilisées. Le 4-bits mode a l'avantage de nécessiter moins de lignes d'e / S pour communiquer avec l'écran LCD

71 Tableau 3.3 : Les pattes du module LCD HD44780 Broche N Appellation Fonction 1 VSS Ground 2 VDD +ve supply 3 VEE Contrast 4 RS Register select 5 R/W Read/write 6 EN Enable 7 D0 Data bit 0 8 D1 Data bit 1 9 D2 Data bit 2 10 D3 Data bit 3 11 D4 Data bit 4 12 D5 Data bit 5 13 D6 Data bit 6 14 D7 Data bit 7 Le mikroc LCD bibliothèque fournit un grand nombre de fonctions pour contrôler du texte LCD avec 4-bits et les interfaces de données 8-bit, et pour les graphiques LCD. La plus courante sont les 4-bit interface en mode texte sur écran LCD. Ce qui suit sont les fonctions disponibles pour LCD 4-bit interface en mode texte LCD : Lcd_Config Lcd_Init Lcd_Out Lcd_Out_Cp Lcd_Chr Lcd_Chr_Cp Lcd_Cmd Lcd_Config La fonction Lcd_Config est utilisée pour configurer l'interface LCD. La connexion par défaut entre le LCD et le microcontrôleur est la suivante : LCD Patte du port de microcontrôleurs

72 RS 2 FR 3 D4 4 D5 5 D6 6 D7 7 La patte R / W de l'écran n'est pas utilisé et doit être reliée à la masse. Cette fonction devrait être utilisée pour modifier la connexion par défaut. Il devrait être appelé avec les paramètres dans l'ordre suivant : nom de port, RS patte, EN patte, R/W patte, D7 patte, D6 patte, D5 patte, D4 patte Le nom du port doit être spécifié en passant son adresse. Par exemple, si RS patte est connectée à RB0, EN patte à RB1, D7 patte à RB2, D6 patte à RB3, D5 patte à RB4, et D4 patte à RB5, alors la fonction doit être appelée comme suit : Lcd_Init La fonction Lcd_Init est appelée pour configurer l'interface entre le microcontrôleur et l'écran LCD lorsque les connexions sont faites par défaut que vient d'être illustré. Le nom du port doit être spécifié en passant son adresse. Par exemple, en supposant que LCD est reliée à PORTB et les connexions par défaut précédentes sont utilisées, la fonction doit être appelée en tant que : Lcd_Init(); Lcd_Out La fonction Lcd_Out affiche du texte à la ligne indiquée et la position des colonnes de l'écran LCD. La fonction doit être appelée avec des paramètres dans l'ordre suivant : ligne, colonne, texte Par exemple, pour afficher du texte "Ordinateur" à la ligne 1 et la colonne 2 de l'écran LCD nous devrions appeler la fonction comme suit : Lcd_Out (1, 2, "Ordinateur"); Lcd_Out_Cp La fonction Lcd_Out_Cp affiche le texte à la position actuelle du curseur. Par exemple, pour afficher le texte "Ordinateur" à la position actuelle du curseur, la fonction devrait être appelé en tant que : Lcd_Out_Cp ("Ordinateur"); Lcd_Chr La fonction Lcd_Chr affiche un caractère à la ligne indiquée et la colonne la position du curseur. La fonction doit être appelée avec les paramètres dans le l'ordre suivant :

73 ligne, colonne, caractère Par exemple, pour afficher caractère "K" à la ligne 2 et la colonne 4 de l'écran LCD nous devrions appeler la fonction de : Lcd_Chr(2, 4, K ); Lcd_Chr_Cp La fonction Lcd_Chr_Cp affiche un caractère à la position actuelle du courser. Par exemple, pour afficher le caractère "M" à la position actuelle du curseur, la fonction doit être appelée en tant que : Lcd_Chr_Cp ('M'); Lcd_Cmd La fonction Lcd_Cmd est utilisée pour envoyer une commande à l'écran LCD. Avec ce commande, nous pouvons déplacer le curseur vers n'importe quelle ligne, désactiver l'écran LCD, faire clignote le curseur, décaler l'affichage, etc. Une liste des plus couramment utilisés commandes LCD est donnée dans Tableau 3.4. Par exemple, pour effacer l'écran LCD nous devrions appeler la fonction comme suit : Lcd_Cmd (Lcd_Clear); Commande LCD LCD_CLEAR LCD_RETURN_HOME LCD_FIRST_ROW LCD_SECOND_ROW LCD_THIRD_ROW LCD_FOURTH_ROW LCD_BLINK_CURSOR_ON LCD_MOVE_CURSOR_LEFT LCD_MOVE_CURSOR_RIGHT LCD_SHIFT_LEFT LCD_SHIFT_RIGHT Tableau 3.4: Commandes LCD Description Effacer l'affichage Retourner vers la position du curseur Déplacer le curseur vers la première ligne Déplacer le curseur vers la deuxième ligne Déplacer le curseur vers la troisième ligne Déplacer le curseur vers la quatrième ligne Clignotement du curseur Déplacer le curseur à gauche Déplacer le curseur à droite Décaler l'affichage à gauche Décaler l'affichage à droite Un exercice ci-dessous illustre l'initialisation et l'utilisation de l'écran LCD

74 Exercice 3.8 Un contrôleur de texte LCD est relié à un microcontrôleur PIC16F84A dans le mode par défaut comme illustre la figure 3.2. Ecrire un programme pour envoyer le textemon Ordinateur à la ligne 1, à la colonne 4 de l écran LCD. Solution 3.8 Le programme est donné dans le code-source 3.9 (fichier : LCD.C). Au début le PORTB est configuré en sortie par la déclaration TRISB = 0. L'écran LCD est alors initialisé, l'affichage est effacé, et le texte «Mon Ordinateur "est affiché sur l'écran LCD. Code-source 3.9 /**************************************************************************** REDACTION D'UN TEXTE A L ECRAN LCD ================================== Un contrôleur de texte LCD est relié à un microcontrôleur PIC dans le mode (4,5,3,2,1,0). Ce programme affiche les textes "AFFICHAGE" sur la 1 ère ligne et display_lcd_4bit sur la 2ème ligne d'écran LCD. Microcontrôleur: 16F887 Oscillateur: HS, Mhz Compilateur: microc PRO v.1.56 Fichier: LCD.c Date: Juillet 2012 ***************************************************************************/ // Connections de LCD sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // Fin de connections

75 void main() TRISB = 0; PORTB = 0xFF; TRISB = 0xff; /* Configurer E/S du portb comme numériques*/ ANSELH = 0; ANSEL = 0; Lcd_Init(); // Initialiser LCD Lcd_Cmd(_LCD_CLEAR); // Effacer un texte sur l ecrant LCD Lcd_Cmd(_LCD_CURSOR_OFF); // Curseur est en off Lcd_Out(1,2,"-- AFFICHAGE -- "); // Ecrire le texte sur la 1ère ligne Lcd_Out(2,1,"display_LCD_4bit"); // Ecrire le texte sur la 2ème ligne Fig. 3.2 Connexion du PIC avec LCD (pour la simulation dans le PROTEUS) Bibliothèque pour UART (réalisation Software) L émetteur-récepteur asynchrone universel (UART) est un logiciel de bibliothèque

76 utilisé pour le bus RS232 de la communication série entre deux appareils électroniques. Dans la communication de série, seulement deux câbles (plus un câble de terre) sont nécessaires pour transférer des données dans les deux sens. Les données sont envoyés en format série bit par bit. Normalement, le dispositif de réception est au repos. Pour l émission la patte TX est au niveau logique 1, également connu sous le nom MARK. Transmission des données commence lorsque le niveau logique sur cette patte passe de 1 à 0, également connu sous le nom ESPACE. Le premier bit envoyé est le bit de départ à la logique 0. La suite de ce bit, 7 ou 8 bits de données sont envoyés, suivie par un bit de parité en option. Le dernier bit envoyé s appelle bit d'arrêt est au niveau logique 1. Les données en série est généralement envoyé sous forme de 10 bits : un bit de départ, 8 bits de données, et un bit d'arrêt, et aucun bits de parité. La figure 3.3 montre comment le caractère «A» peut être envoyée en utilisant la communication série. Caractère "A" a la configuration binaire ASCII est IDLE 1 1 STOP START Fig. 3.3 Envoi un caractère "A" par la communication série Comme montre cette figure, le premier bit de départ est envoyé, cela est suivi par 8 bits de données , et enfin le bit d'arrêt est envoyé. Le rythme binaire est très important dans la communication de série, et la transmission (TX) et réception (Rx) dispositifs doivent avoir la même rythme de bits. Le rythme binaire est mesuré par la vitesse de transmission, qui spécifie le nombre de bits transmis ou reçus par seconde. Les vitesses typiques de transmission sont : 4800, 9600, 19200, 38400, et ainsi de suite. Par exemple, lorsque exploitation à 9600 bauds avec une taille d'image de 10 bits, 960 caractères sont transmis ou reçus par seconde. La synchronisation entre les bits est alors d'environ 104ms. En RS232, basée sur la communication en série, les deux périphériques sont connectés les uns aux autres (voir figure 3.4) en utilisant soit un connecteur à 9 voies ou d'un connecteur à 25 voies. Normalement, seul le Broches TX, RX et GND sont nécessaires pour la communication. Les pattes nécessaires pour deux types de connecteurs sont données dans le tableau 3.5. Fig. 3.4 Les connecteurs RS232 Les niveaux de tension spécifiés par le protocole RS232 sont ± 12V. Un signal logique HIGH (haut) est à - 12V et un signal logique LOW (bas) est à + 12V. Les microcontrôleurs PIC, fonctionnent normalement à des niveaux de tension : 0 et 5 V. Donc les signaux pour RS232 doivent être convertie pour l'entrée d'un microcontrôleur. De même, la sortie du microcontrôleur

77 doit être convertie en ± 12V avant l'envoi au dispositif de réception RS232. La conversion de tension est généralement réalisée avec des circuits de conversion, comme le MAX232, fabriqué par Maxim Inc. La communication série peut être mis en œuvre dans un matériel utilisant une patte spécifique d'un microcontrôleur, ou les signaux nécessaires peuvent être générés par le logiciel pour toute patte nécessaire d un microcontrôleur. Mise en œuvre matérielle nécessite soit une carte intérieure de circuit UART (ou USART) ou d'une carte UART extérieure connectée au microcontrôleur. Le mikroc PRO pour PIC fournit des routines pour la mise en œuvre du logiciel de communication UART. Ces routines sont indépendantes du matériel et peut être utilisé avec n'importe quel microcontrôleur. Le compilateur mikroc PRO prend en charge les fonctions du logiciel UART suivantes: Soft_UART_Init Soft_UART_Read Soft_UART_Write Soft_UART_Break Soft_UART_Init La fonction UART1_Init dans l'ordre suivant : spécifie les paramètres de communication série et le fait port, rx patte, tx patte, vitesse de transmission, mode Ici : port est le port utilisé comme UART logiciel (par exemple, PORTB) ; rx est le receveur d un nombre de transmission ; tx est l émméteur de transmission ; vitesse de transmission est le taux de transmission choisi, où la valeur maximale dépend de la fréquence d'horloge du microcontrôleur ; mode spécifie si les données devraient être inversés ou non lors de la sortie. Un 0 indiquent qu ils ne devraient pas être inversés, et un 1 indique qu'ils devraient être inversés. Quand un RS232 est utilisé donc dans ce cas le mode doit être réglé à 1. Soft_Uart_Init doit être la première fonction appelée avant que le logiciel soit établié. L'exemple suivant configure l'uart à utiliser PORTC comme un port série, avec RC6 pour la patte TX et RC7 pour la patte RX. La vitesse de transmission est fixé à 9600 avec le mode non inversés:

78 Soft_Uart_Init (PORTB, 0, 1, 9600, 0); Soft_Uart_Read La fonction Soft_Uart_Read reçoit un octet à partir d'une patte du port série spécifié. La renvoie une condition d'erreur et les données sont lues à partir du port série. La fonction ne pas attendre que les données soient disponibles sur le port, et donc le paramètre d'erreur doit être testé si un octet est prévu. L'erreur est normalement de 1 et devient 0 quand un octet est lu à partir du port. L'exemple suivant illustre la lecture d'un octet à partir du port configuré en série en appelant la fonction Soft_Uart_Init. L'octet reçu est stocké dans une variabletemp: do Temp = Soft_Uart_Read(&Rx_Error); while (Rx_Error); Soft_Uart_Write La fonction Soft_Uart_Write transmet un octet à une patte de port configuré en série. Les données à envoyer doivent être spécifiés comme un paramètre dans l'appel de la fonction. Par exemple, pour envoyer un caractère "A" à la patte de port série : char MyData = A ; Soft_Uart_Write(MyData); L'exercice suivant illustre l'utilisation des fonctions du logiciel UART. Exercice 3.9 Le port série d'un ordinateur (par exemple, COM1) est relié à un microcontrôleur PIC16F887, et logiciel d'émulation de terminal (par exemple, HyperTerminal) est exploité sur le PC pour utiliser un port série. Pattes RC6 et RC7 du microcontrôleur sont les broches TX et RX respectivement. Le débit en bauds est de Ecrire un programme pour lire les données du terminal, puis les renvoyer vers le terminal. Par Un circuit intégré de conversion MAX232 est utilisé pour convertir les signaux du microcontrôleur à des niveaux RS232. La figure 3.5 montre le schéma du circuit de cet exercice. Solution 3.9 Le circuit MAX232 reçoit le signal TX de la patte RC6 du microcontrôleur et le convertit en niveaux RS232. Les données séries reçues du circuit MAX232 sont converties en niveaux de tension du microcontrôleur, puis envoyé à la patte RC7. Noter que le fonctionnement correct du circuit MAX232 nécessite quatre condensateurs à être connecté au circuit

79 Le programme requis est indiqué dans le code-source 3.10 (fichierserial.c). Au début du programme, la fonction Soft_Uart_Init est appelée pour configurer le port série. Puis une boucle sans fin est formée en utilisant l instruction while(1). La fonction Soft_Uart_Read est appelé à lire un caractère à partir du terminal. Après la lecture d'un caractère, il est renvoyé à la patte en appelant la fonctionsoft_uart_write. Fig. 3.5 Schéma du circuit d exercice 3.9 (pour la simulation dans le PROTEUS) Bibliothèques standards ANSI C Les bibliothèques standards ANSI C se compose des bibliothèques suivantes (plus de détails sur ces bibliothèques sont disponibles dans le manuel de l'utilisateur mikroc): Ctype bibliothèque Math bibliothèque Stdlib bibliothèque String bibliothèque BibliothèqueCtype Les fonctions de la bibliothèque Ctype sont principalement utilisées pour la conversion des essais ou des données. Tableau 3.5 dresse la liste des fonctions les plus couramment utilisés dans cette bibliothèque. BibliothèqueMath Les fonctions de la bibliothèque Math sont utilisées pour les opérations mathématiques en

80 virgule flottante. Le tableau 3.6 dresse la liste des fonctions les plus couramment utilisés dans cette bibliothèque. Code-source 3.10 /*************************************************************** LECTURE ET ÉCRITURE DE PORT SERIE ================================== Dans ce programme les pattes RC6 et RC7 du PORTC sont configurés comme série TX et RX, respectivement. La vitesse de transmission est fixée à Un caractère est reçu à partir du terminal, et ensuite il est renvoyé vers le terminal. Microcontrôleur: 16F887 Oscillateur: HS, Mhz Ficher: SERIAL_PORT.c Date: Juillet, 2012 ******************************************************************/ char error, byte_read; // Variables locales void main() ANSEL = 0; ANSELH = 0; TRISC = 0x00; PORTC = 0; // Configurer des pins AN en E/S numériques // Configurer PORTC en sortie // No error /* Initialiser Soft UART pour la vitesse de 9600 byts*/ error = Soft_UART_Init(&PORTC, 7, 6, 9600, 1); if (error > 0) PORTC = error; while(1); Delay_ms(100); while(1) // Signaler error d Initialisation // Stop programme // Boucle sans fin /* Lire octet, puis tester un drapeau d'erreur */ byte_read = Soft_UART_Read(&error); if (error) PORTC= error; else // Si l'erreur a été détectée // Envouer Le signale d error sur le PORTC /* Si l'erreur n'a pas été détectée, l'octet lu est en retoure */ Soft_UART_Write(byte_read);

81 Fonction Tableau 3.5 Fonctions de la bibliothèquectype Description isalnum Retourne 1 si le caractère spécifié est alphanumérique (a - z, A - Z, 0-9) isalpha Retourne 1 si le caractère spécifié est alphabétique ( a - z, A - Z) isntrl Retourne 1 si le caractère spécifié est un caractère de contrôle (décimale 0-31 et 127) isdigit Retourne 1 si le caractère spécifié est un chiffre (0-9) islower Retourne 1 si le caractère spécifié est en minuscules isprint Retourne 1 si le caractère spécifié est imprimable (décimal ) isupper toupper tolower Retourne 1 si le caractère spécifié est en majuscule Convertir un caractère en majuscules Convertir un caractère en minuscule BibliothèqueStdlib La bibliothèquestdlib contient des fonctions de bibliothèque standard. Tableau 3.7 dresse la liste des fonctions les plus utilisées dans cette bibliothèque. Fonction acos asin atan atan2 cos cosh exp fabs log Log10 pow sin sinh sqrt tan tanh Tableau 3.6 Fonctions de la bibliothèque Math Description Retours en radians de l'arc cosinus de son paramètre Retours en radians de l'arc sinus de son paramètre Retours en radians de l'arc tangent de son paramètre Retours en radians de l'arc tangent de son paramètre où les signes des paramètres sont utilisés pour déterminer le quadrant du résultat Retourne le cosinus de son paramètre en radians Renvoie le cosinus hyperbolique de son paramètre Renvoie la valeur exponentielle de son paramètre Retourne la valeur absolue de son paramètre Retourne le logarithme naturel de son paramètre Retourne le logarithme en base 10 de son paramètre Retourne la puissance d'un nombre Retourne le sinus de son paramètre en radians Retourne le sinus hyperbolique de son paramètre Retourne la racine carrée de ses paramètre Retourne la tangente de son paramètre en radians Retourne la tangente hyperbolique de son paramètre en radians Tableau 3.7 Fonctions de la bibliothèque Stdlib

82 Fonction Description abs atof atoi atol max min rand srand xtoi Retourne la valeur absolue Convertit des caractères ASCII en nombre à virgule flottante Convertit des caractères ASCII en nombre entier Convertit des caractères ASCII en entier long Retourne le plus grand des deux nombres entiers Retourne le plus petit de deux nombres entiers Retourne un nombre aléatoire compris entre 0 et 32767; la fonction stand doit être appelée à obtenir une séquence différente de nombres Génère une fonction rand donc une nouvelle séquence de nombres est générée Convertir chaîne d'entrée constitué de chiffres hexadécimaux en entier Exemple 3.10 Ecrire un programme pour calculer le sinus des angles de 0 à 90 avec le pas de 1 et stocker le résultat dans un tableau appelétrig_sine. Solution 3.10 Le programme requis est indiqué dans le code-source 3.11 (fichier SINE.C). Une boucle est créé en utilisant l instruction for, et à l'intérieur de cette boucle le sinus d'angles sont calculées et stockées dans le tableau Trig_Sine. Notez que les angles doivent être convertis en radians avant d'être utilisé dans les fonctions sin. Code-source 3.11 /************************************************************************** SINUS DES ANGLES DE 0 A 90 ============================= Ce programme calcule le sinus d'angles de 0 à 90. Les résultats sont stockés dans un tableau appelé Trig_Sine. Microcontrôleur: 16F887 Oscillateur: HS, Mhz Compilateur: microc PRO v.1.56 Ficher: SINE.C Date: Juillet, 2012 **************************************************************************/ void main() unsigned char j; double PI = , rads; for(j = 0; j <= 90; j++) rads = j*pi /180.0; angle = sin(rad); Trig_Sine[j] = angle;

83 BibliothèqueString La bibliothèque des fonctions string est utilisée pour effectuer la manipulation de chaînes de caractères et de la mémoire opérations. Tableau 3.8 dresse la liste des fonctions les plus couramment utilisés dans cette bibliothèque. Fonction Tableau 3.8 Fonctions de la bibliothèque String Description strcat,strncat Ajouter deux chaînes strchr, strpbrk Rechercher le premier caractère dans une chaîne strcmp, strncmp Comparer deux chaînes de caractères strcpy, strncpy Copier une chaîne de caractères dans une autre strlen Retourne la longueur d'une chaîne Exemple 3.11 Ecrire un programme pour illustrer comment les deux chaînes "MON PUISSANT» et «COMPUTER» peuvent être joints dans une nouvelle chaîne en utilisant les fonctions de la bibliothèquestring. Solution 3.11 Le programme requis est indiqué dans le code-source 3.12 (fichier JOIN.C). La mikroc bibliothèque String de la fonction strcat est utilisée pour joindre les deux chaînes pointées par p1 et p2 dans une nouvelle chaîne stockée dans un tableau de caractères appelée New_String. Code-source 3.12 /************************************************************************** ASSEMBLAGE DE DEUX LIGNES DE CARACTERES ================================= Ce programme montre comment deux chaînes peuvent être jointes pour obtenir une nouvelle chaîne de caractères. La fonction strcat est utilisé pour joindre les deux chaînes pointées par p1 et p2 dans une nouvelle chaîne stockée dans le tableau de caractères New_String. Microcontrôleur: 16F887 Oscillateur: HS, Mhz Fichier: JOIN.C Date:Juillet, 2012 ************************************************************************/ void main() const char *p1 = MON PUISSANT ; // Première ligne const char *p2 = COMPUTEUR ; // Deuxième ligne char New_String[80]; strcat(strcat(new_string, p1), p2); // Joindre les deux lignes

84 3.3.5 Divers bibliothèques Les divers bibliothèques se compose des bibliothèques suivantes (plus de détails sur ces bibliothèques sont disponibles dans le manuel de l'utilisateur mikroc): Bibliothèque de conversions Bibliothèque de fonctions trigonométriques Bibliothèque de fonctions de sortie sprint Bibliothèque de Setjmp Bibliothèque pour travailler avec le temps Le tableau 3.9 dresse la liste des fonctions les plus couramment utilisés dans la bibliothèque de conversions. Fonction ByteToStr ShortToStr WordToStr IntToStr LongToStr FloatToStr Bcd2Dec Dec2Bcd Description Convertir un octet en chaîne Convertir en une chaîne courte Convertir un mot non signé en chaîne Convertir un nombre entier en chaîne Convertir en une longue chaîne Convertir un float en chaîne Convertir un nombre BCD en décimal Convertir un nombre décimal en BCD Tableau

85 IV. EXEMPLES DE PROGRAMMATION EN mikroc MICROCONTROLEURS DE LA FAMILLE PIC POUR LES Exemple 1. Chenille à LEDs Dans ce projet les huit LEDs sont connectées à PORTC d'un microcontrôleur. Lorsqu'une tension est appliquée au microcontrôleur (ou est réinitialisé), les LEDs s'allument en alternance. Il y a le délai d une seconde de sorte qu une LED peut être vu tourner sur ON et OFF. Le schéma de principe du projet est illustré à la figure 4.1. Fig.4.1. Schéma de simulation pour l exemple 1 Le fichier désigné comme LED1.c et donné dans le code-source

86 Code-source 4.1 /**************************************************************************** Chenille à LEDs =============== Les huit LEDs sont connectées à PORTC du microcontrôleur 18f452. Lorsqu'une tension est appliquée au microcontrôleur (ou est réinitialisé), les LEDs s'allument en alternance. Microcontrôleur: 18F452 Oscillateur : HS, Mhz Fichier: LED1.c Date: Juillet 2012 ***************************************************************************/ void main() unsigned char J = 1; TRISC = 0; // PORTC est configure en sortie for(;;) // Boucle sans fin PORTC = J; // Envoyer J au PORTC Delay_ms(100); // Pause 100 ms J = J << 1; // Décalage à gauche J if(j == 0) J = 1; // Si la dernière LED, allumer la 1 ère LED Exemple 2. Clignotement des LEDs à deux façons différentes On propose de faire clignoter LEDs branchées au port B d un microcontrôleur (fig. 4.2) de deux façons différentes : 1. Dès que le microcontrôleur est activé, tous les LEDs clignotent avec une période d une seconde (voire la figure ci-dessous). Et ça doit répéter 10 fois. 2. Après cela, les LEDs doivent clignoter chaque 500 ms infiniment comme indiqué dans la figure ci-dessous. Le fichier nommé LED2.C qui réalise ce projet est représenté dans le code-source

87 Fig.4.2. Schéma de simulation pour l exemple 2 Code-source 4.2 /**************************************************************************** LEDs clignotantes différemment =============================== Les huit LEDs sont connectées à PORTB du microcontrôleur 16f887. Lorsqu'une tension est appliquée au microcontrôleur (ou est réinitialisé), les LEDs s'allument en alternance en deux façon différente. Microcontrôleur: 16F887 Oscillateur : HS, Mhz Fichier: LED2.c Date: Juillet 2012 ***************************************************************************/ void main() ANSEL = 0; ANSELH = 0; PORTB = 0xFF; TRISB= 0; Delay_ms(500); PORTB = 0; for(k=1; k<20; k++) switch(portb) case 0x00: PORTB = 0xFF; Delay_ms(500); break; case 0xFF: PORTB = 0x00;

88 Delay_ms(500); PORTB=0b ; while(1) PORTB= ~PORTB; Delay_ms(500); Exemple 3. RELAI Dans ce projet la minuterie, sur la base de registre TMR0, est utilisée comme un compteur. L'entrée de comptage est reliée à un bouton-poussoir Input (fig. 4.3) de sorte que toute pression sur Input provoque TMR0 à compter une impulsion. Lorsque le nombre d'impulsions correspond au nombre stocké dans le registre nommé TEST, la valeur logique 1 (5V) apparaît sur le pin3 de PORTD. Cette tension active un relais électromécanique, et ce bit est appelé «RELAI» dans le programme (voire le fichier RELAI.C de code-source 4.3). Dans le registre de TEST est stocké un nombre de 5 pour cet exemple. Bien sûr, il peut être n'importe quel nombre défini comme une constante. Par ailleurs, le microcontrôleur peut activer un autre appareil au lieu de relais, tandis que le capteur peut être utilisé à la place du boutonpoussoir. Cet exemple illustre l'une des applications les plus courantes du microcontrôleur dans l'industrie; quand quelque chose est effectué autant de fois que nécessaire, puis quelque chose d'autre doit être activé ou désactivé... Fig.4.3. Schéma de simulation pour l exemple

89 Code-source 4.3 /**************************************************************************** RELAI ======= Dans ce projet la minuterie, sur la base de registre TMR0, est utilisée comme un compteur. L'entrée de comptage est reliée à un bouton-poussoir Input de sorte que toute pression sur Input provoque TMR0 à compter une impulsion. Lorsque le nombre d'impulsions correspond au nombre stocké dans le registre nommé TEST, la valeur logique 1 (5V) apparaît sur le pin3 de PORTD. Cette tension active un relais électromécanique RELAI. Microcontrôleur: 16F887 Oscillateur : HS, Mhz Fichier: RELAI.c Date: Juillet 2012 ***********************************************************************************/ void main() char TEST = 5; // Constante TEST = 5 enum sortie RELAI = 3; // Constante RELAI = 3 ANSEL = 0; // Les E/S sont configurées en numériques ANSELH = 0; PORTA = 0; // Initialisation du porte A TRISA = 0xFF; // Porte A est configuré en entré PORTD = 0; // Initialisation du PORTD TRISD = 0b ; // Broche 3 du PORTD3 est configuré en sortie OPTION_REG.F5 = 1; /* Conteur TMR0 reçoit des impulsions par la broche RA4 * / OPTION_REG.F3 = 1; // Taux de prédiviseur est de 1:1 TMR0 = 0; // Initialisation du compteur TMR0 do if (TMR0 == TEST) /* Est-ce que le nombre d impulsion TMRO est (PORTD.RELAI = 1); while (1); égale à constante TEST? */ /* Nombre est égale à TEST. La broche RD3 est en 1(RELAIS est activé) */ // Restez dans la boucle sans fin Une selle constante énumérée RELAI est utilisée dans cet exemple. Il est attribué un valeur lorsqu elle est déclarée : enum sortie RELAI = 3; Si plusieurs broches du PORTD sont reliées à des RELAIS, l expression ci-dessus pourrait être écrite comme suit : enum sortie RELAI=3, CHAFFAGE, ECLAIRAGE =6, POMPE ; Toutes les constantes, après celle avec les valeurs affectées (RELAI = 3 et ECLARAGE = 6), sont des valeurs automatiquement incrémenté de 1 par rapport à la valeur précédente. Dans ce cas, la constantechauffage et cellepompe seront affectés les valeurs 4 et 7 respectivement (CHAUFFAGE = 4 et POMPE = 7)

90 Exemple 4. Registres TMR0 et TMR1 comme minuteries Dans l'exemple précédent, le microcontrôleur ne fait rien entre des impulsions de comptage en utilisant des boucles sans fin. Ces déchets du temps est un luxe inadmissible et par conséquent une autre méthode doit être appliquée. Considérons le schéma à microcontrôleur 16F887 de la figure 4.1 qui sera toujours le même pour réaliser les nouvelles fonctions. Le fichier INTERRUP_TMR0.C du code-source 4.4 montre l utilisation du registre TMRO avec prédiviseur pour générer une interruption. Une fois que le registre TMR0 est trop-plein le routin d interruption incrémente automatiquement la variable cnt par 1. Lorsque sa valeur atteint 400, le PORTB est incrémenté de 1. L'ensemble de la procédure est masqué, qui permet au microcontrôleur de faire autre chose. Code-source 4.4 /*************************************************************************** TMR0 ======= Une fois que le registre TMR0 est trop-plein le routin d interruption incrémente automatiquement la variable cnt par 1. Lorsque sa valeur atteint 400, le PORTB est incrémenté de 1. L'ensemble de la procédure est masqué, qui permet au microcontrôleur de faire autre chose. Microcontrôleur: 16F887 Oscillateur : HS, Mhz Fichier: INTERRUP_TMR0.c Date: Juillet 2012 ***************************************************************************/ unsigned cnt; // Définir la variable cnt void interrupt() cnt++; /* Interruption cause l incrémentation par 1 de la variable cnt*/ TMR0 = 100; // Valeur initiale du TMR0 INTCON = 0x20; // Bit T0IE est positionné à 1, bit T0IF est en 0 void main() OPTION_REG = 0x84; // Prédiviseur pour TMR0 ANSEL = 0; // Toutes les broches E/S sont configuré en digitale ANSELH = 0; TRISB = 0; // PORTB est configuré en sortie PORTB = 0x0; // Initialisation du PORTB TMR0 = 100; // TMR0 conte de 100 à 255 INTCON = 0xA0; // Interruption par TMR0 est autorisés cnt = 0; // Variable cnt est initialisée à 0 do // Boucle sans fin if (cnt == 400) // Incrémenter port B après 400 interruptions PORTB = PORTB++; // Incrémenter PORTB par 1 cnt = 0; // Initialiser la variable cnt while(1);

91 On voie que l Interruption se produit sur chaque débordement du registre TMR0. Le nombre d interruption à 400, dans cet exemple, provoque l incrémentation du PORTB comme indique la figure ci-dessous. Dans le code-source 4.5 (fichier INTERRUP_TMR1) on utilise l interruption produit par le débordement de registre TMR1(TMR1H, TMR1L). Après 76 d interruption se produit l évolution sur le PORTB comme indique la figure ci-dessous. Code-source 4.5 /**************************************************************************** TMR1 ======= Une fois que le registre TMR1 est trop-plein la routine d interruption incrémente automatiquement par 1 la variable cnt. Lorsque sa valeur atteint 76, les bits du PORTB sont inversés. Microcontrôleur: 16F887 Oscillateur : HS, Mhz Fichier: INTERRUP_TMR1.c Date: Juillet 2012 ****************************************************************************/ unsigned short cnt; // Définir la variable cnt void interrupt() cnt++ ; /* Interruption cause l incrémentation par 1 de la variable cnt*/ PIR1.TMR1IF = 0; TMR1H = 0x80; TMR1L = 0x00; void main() ANSEL = 0; ANSELH = 0; PORTB = 0xF0; TRISB = 0; T1CON = 1; PIR1.TMR1IF = 0; TMR1H = 0x80; TMR1L = 0x00; PIE1.TMR1IE = 1; // Remise à 0 bit TMR1IF // Valeurs initiales du TMR1H and TMR1L // Broches E/S sont configuré en numériques // Initialisation de PORTB // PORTB est configuré en sortie // Remise à 1 du TMR1 // Remise à 0 du TMR1IF // Initialisation du TMR1 cnt = 0; INTCON = 0xC0; do // Boucle sans fin /* Activer l interruption en cas de débordement du TMR1*/ // Remis à 0 la variable cnt // Activer interruption (bits GIE et PEIE)

92 if (cnt == 76) PORTB = ~PORTB; /* Bits du PORTB sont inversés après 76 d interruptions*/ cnt = 0; while (1); // Initialisation de la variable cnt Exemple 5. Module CCP1 comme générateur du signal PWM Cet exemple illustre l'utilisation de module CCP1 en mode PWM. Pour rendre les choses plus intéressantes, la durée d impulsions à la sortie P1A/CCP1 (PORTC, 2) peut être changée avec les touches symboliquement marqués comme "BRILLANT" et "NOIR", tandis que la durée est considérée comme la combinaison binaire sur le port B (fig.4.4). Remarque d auteur : La diode D1 dans le schéma de simulation dans le PROTEUS (fig. 4.4) signale que le module CCP1 est activé. Dans le montage réel son état corresponde à l état de la diode D2 pendant la simulation. Le fonctionnement de ce module est sous le contrôle des fonctions appartenant à la bibliothèque spécialisée PWM. Trois d'entre eux sont utilisés ici : PWM1_init a le prototype : void Pwm1_Init( long freq) ; Paramètre Freq détermine la fréquence du signal PWM exprimée en Hz. Dans cet exemple, elle est égale à 5 khz. PWM1_Start a le prototype : void Pwm1_Start( void ) ; PWM1_Set_Duty a le prototype: void Pwm1_Set_Duty( unsigned short duty_ratio); Duty_ratio paramètre définit la durée d'impulsion dans la séquence d'impulsions. Afin de rendre cet exemple fonctionne correctement, il est nécessaire de cocher les bibliothèques suivantes dans le gestionnaire de bibliothèque avant de compiler: PWM Bouton Le programme de ce projet est donné dans le code-source 4.6 (fichier : SIGNAL_PWM.C). Avant de compiler le fichier, SIGNAL_PWM.c, il est nécessaire de cocher PWM dans le gestionnaire de bibliothèque du compilateur mikroc PRO

93 Fig.4.4. Schéma de simulation de l exemple 5. Code-source 4.6 /**************************************************************************** Module CCP1 comme générateur du signal PWM ========================================== Cet exemple illustre l'utilisation de module CCP1 en mode PWM. La durée d impulsions à la sortie P1A/CCP1 (PORTC, 2) peut être changée avec les touches symboliquement marqués comme "BRILLANT" et "NOIR", tandis que la durée est considérée comme la combinaison binaire sur le PORTB. Microcontrôleur: 16F887 Oscillateur : HS, Mhz Fichier: SIGNAL_PWM.c Date: Juillet 2012 ****************************************************************************/ unsigned short current_duty, old_duty; /* Définition des variables current_duty and old_duty*/ void initmain() ANSEL = 0; // Toutes les E/S sont numériques ANSELH = 0; PORTA = 0x00; // Initialisation du PORTA TRISA = 0xFF; // PORTA est configuré en entrée PORTB = 0; // Initialisation du PORTB TRISB = 0; // PORTB est configuré en sortie PORTC = 0; // Initialisation du PORTC TRISC = 0xFF; // PORTC est configuré en entré

94 CCP1CON =0b ; /* Uniquement pour la simulation. Enlever cette instruction avant de programmer le microcontrôleur*/ PWM1_Init(5000); // Initialisation du module PWM (5KHz) void main() // Programme principal initmain(); current_duty = 155; /* Valeur initiale de variable current_duty*/ old_duty = 0; // RAZ de variable old_duty PWM1_Start(); // Start du module PWM1 while (1) // Boucle sans fin if (Button(&PORTA, 0,1,0)) /* Si le bouton connecté à RA0 est pressé*/ current_duty++ ; // incrémenter la valeur de current_duty if (Button(&PORTA, 1,1,0)) /* Si le bouton connecté à RA1 est pressé*/ current_duty-- ; // décrémenter la valeur de current_duty if (old_duty!= current_duty) /* Si les variables current_duty et old_duty ne sont pas égales*/ PWM1_Set_Duty(current_duty); // Charger PWM à la nouvelle valeur old_duty = current_duty; /* Sauvegarder la nouvelle valeur PORTB = old_duty; et l'afficher sur le PORTB*/ Delay_ms(150); // Retardement de 150ms Exemple 6. Convertisseur A/D Dans ce projet un signal analogique variable est appliqué à la broche AN2 de microcontrôleur 16F887, tandis que le résultat de conversion de 10 bits est localisée sur les ports B et D (8 LSB sur le PORTD et 2 MSB sur le PORTB). GND est utilisé comme référence de tension négative Vref-. Le convertisseur A / D génère toujours un résultat binaire de 10 bits, ce qui signifie qu'il détecte au total de 1024 niveaux de tension et donc il est capable de détecter de légères modifications de la tension. Le fichier CONVERT_A/D.C est donné dans le code source 4.7 et le schéma de simulation du projet est représenté sur la figure 4.5. Avant de compiler le fichier CONVERT_A/D.c, il est nécessaire de cocher ADC dans le gestionnaire de bibliothèque du compilateur mikroc PRO

95 Code-source 4.7 /**************************************************************************** CONVERTISSEUR A/D =================== Un signal analogique variable est appliqué à la broche AN2 du microcontrôleur 16F887, tandis que le résultat de conversion de 10 bits est localisée dans les PORTB et PORTD (8 LSB dans le PORTD et 2 MSB dans le PORTB). GND est utilisé comme référence de tension négative Vref-. Microcontrôleur: 16F887 Oscillateur : HS, Mhz Fichier: CONVERT_A/D.c Date: Juillet 2012 ****************************************************************************/ unsigned int temp_res; void main() ADCON1 = 0x80; ANSEL = 0x0C; TRISA = 0xFF; ANSELH = 0; TRISB = 0x3F; TRISD = 0; do temp_res = ADC_Read(2); // Configurer Vref /* Configurer la broche AN2 du PORTA en analogique */ // PORTA est configuré en entrée /* Configurer les autres broches du PORTA en numérique */ /* Broches de RB7, RB6 du PORTB sont en sortie */ // PORTD est configuré en sortie /* Résultat de la conversion A / D est copié dans temp_res */ PORTD = temp_res; // Envoyer 8 bits LSB au PORTD PORTB = Une temp_res >> 2; /* 2 bits MSB sont déplacés vers les broches RB7, RB6 du PORTB */ while(1); // Boucle sans fin Exemple 7. Mémoire EEPROM Dans cet exemple le registre du PORTB est incrémenté en permanence. Au moment de l'appui sur le bouton appelé MEMO_EEPROM, un nombre binaire du PORTB sera sauvegardé dans la mémoire EEPROM. Ce nombre doit être directement lu de l EEPROM et ensuite affiché sur PORTD sous forme binaire. Le fichier EEPROM.c est donné dans le code-source 4.8. Avant de compilation le fichier EEPROM.c, il est nécessaire de cocher EEPROM dans le gestionnaire de bibliothèque du compilateur mikroc PRO. Le schéma de simulation est représenté sur la figure 4.6. Afin de vérifier la simulation de circuit de la figure 4.5, il suffit d'appuyer sur la touche MEMO_EEPROM et éteindre la simulation. Après le redémarrage de la simulation, le programme affichera la valeur enregistrée sur le port D. Rappelez-vous qu au moment de l'écriture, cette valeur a été affiché sur le port B

96 Fig Schéma de simulation pour l exemple 6 Code-source 4.8 /**************************************************************************** Mémoire EEPROM =================== Le registre du PORTB est incrémenté en permanence. Au moment de l'appui sur le bouton appelé MEMO_EEPROM, un nombre binaire du PORTB sera sauvegardé dans la mémoire EEPROM. Ce nombre doit être directement lu de l EEPROM et ensuite affiché sur PORTD sous forme binaire. Microcontrôleur: 16F887 Oscillateur : HS, Mhz Fichier: EEPROM.c Date: Juillet 2012 ****************************************************************************/ void main() ANSEL = 0; //Toutes les E/S sont configurés en numériques ANSELH = 0; PORTB = 0; // Initialisation du PORTB TRISB = 0; // PORTB est configuré en sortie PORTD = 0; // Initialisation du PORTD TRISD = 0; // PORTD est configuré en sortie TRISA = 0xFF; // PORTA est configuré en entrée PORTD = EEPROM_Read(5); // Lecture d EEPROM à l adresse 5 do PORTB=PORTB++; // Incrémenter par 1 du registre de PORTB

97 Delay_ms(100); // Retardement de 100mS if (PORTA.F2 == 0) // Le bouton MEMO_EEPROM est pressé? EEPROM_Write(5,PORTB); /* Oui, sauvegarder des données dans EEPROM à l adresse 5 */ PORTD = EEPROM_Read(5); // Lecture des données écrites dans EEPROM do; while (PORTA.F2 ==0); while(1); /* Rester dans ce boucle aussi longtemps que le bouton MEMO_EEPROM est pressé */ // Boucle sans fin Fig Schéma de simulation de l exemple 7 Exemple 8. Affichage multiplexé pour deux afficheurs 7 segments à LEDs Dans ce projet de deux afficheurs 7 segments à LEDs (cathode commune) sont connectées à PORTC d'un microcontrôleur. La cathode de chiffre 1 (chiffre de gauche) est connecté au PORTB (broche RB0) et la cathode de chiffre 2 (chiffre de droite) est connecté au PORTB (broche RB1) du microcontrôleur

98 Le programme compte de 0 à 99 avec un retard d une seconde entre chaque comptage. L'affichage est multiplexé et est assuré par une routine d'interruption toutes les 5 ms. Le schéma de simulation pour cet exemple est donné par la figure 4.7. Le programme du projet (fichier : AFFICH_MULTIPLEX.c) est représenté dans le code-source 4.9. Fig.4.7. Schéma de simulation de l exemple 8 Code-source 4.9 /**************************************************************************** AFFICHAGE MULTIPLEXE ===================== Deux afficheurs 7 segments à LEDs (cathode commune) sont connectées à PORTC d'un microcontrôleur. La cathode de chiffre 1 (chiffre de gauche) est connecté au PORTB (broche RB0) et la cathode de chiffre 2 (chiffre de droite) est connecté au PORTB (broche RB1) du microcontrôleur. Le programme compte de 0 à 99 avec un retard d une second entre chaque comptage. L'affichage est multiplexé par une routine d'interruption toutes les 5 ms. Microcontrôleur: 18F452 Oscillateur : HS, Mhz Fichier: AFFICH_MULTIPLEXE.c Date: Juillet 2012 ****************************************************************************/ #define DIGIT1 PORTB.F0-97 -

99 #define DIGIT2 PORTB.F1 unsigned char Cnt = 0; unsigned char Flag = 0; // /* Cette fonction retrouve la configuration de bits à envoyer au port pour afficher un numéro sur la LED 7 segments. Le numéro est passé dans la liste des arguments de la fonction */ // unsigned char Display(unsigned char no) unsigned char Pattern; unsigned char SEGMENT[] = 0x3F,0x06,0x5B,0x4F,0x66,0x6D, 0x7D,0x07,0x7F,0x6F; Pattern = SEGMENT[no]; return (Pattern); // /* Routine de service d'interruption timer TMR0. Les sauts de programme à la à chaque 5ms.*/ void interrupt () unsigned char Msd, Lsd; TMR0L = 100; // Charger TMR0 INTCON = 0x20; // Set du drapeau T0IF et effacé T0IE Flag = ~ Flag; // Inverser ledrapeau Flag if(flag == 0) // 1èr chiffre DIGIT2 = 0; Msd = Cnt / 10; // Bit MSD if(msd!= 0) PORTC = Display(Msd); // Envoyer au PORTC DIGIT1 = 1; // Activer le chiffre 1 else // 2èm chiffre DIGIT1 = 0; // Désactiver le chiffre 1 Lsd = Cnt % 10; // Bit LSD PORTC = Display(Lsd); // Envoyer au PORTC DIGIT2 = 1; // Activer le chiffre 2 // /* Début du programme principal. Configurer PORTB et PORTC en sorties. Configurer l'interruption de TMR0 à toutes les 10ms */ void main() TRISC = 0; // PORTC est en sortie TRISB = 0; // RB0, RB1 est en sortie DIGIT1 = 0; // Désactiver le chiffre 1 DIGIT2 = 0; // Désactiver le chiffre 2 // // Configure l interruption du timer TMR0 // T0CON = 0xC4; // Prediviseur = 32 TMR0L = 100; // Charger TMR0 avec 100 INTCON = 0xA0; // Activer l interruption du TMR0-98 -

100 Delay_ms(1000); for(;;) // Boucle sans fin Cnt++; // Incrémentation de Cnt if(cnt == 100) Cnt = 0; // Comptage de 0 è 99 Delay_ms(1000); // Attendre 1 seconde Exemple 9. Multimètre avec l afficheur LCD Cet exemple illustre l'utilisation d'un écran LCD alphanumérique. Un message écrit en deux lignes apparaît sur l'afficheur : Multimètre - Mesure de - Deux secondes plus tard, le message dans la seconde ligne est modifié et affiche tension présenté sur l'entrée (la broche RA2) de convertisseur A / D. Multimetre Tension: Dans le dispositif vrai, le courant ou une autre valeur mesurée peut être affichée à la place de la tension. Le schéma de simulation de cet exemple est donné par la figure 4.8. Le fichier MULTIMETRE_LCD.c est donné dans le code-source Fig.4.8. Schéma de simulation de l exemple

101 Avant de compiler le fichier MULTIMETRE_LCD.c, il est nécessaire de cocher Lcd dans le gestionnaire de bibliothèque du compilateur mikroc PRO. Code-source 4.10 /**************************************************************************** MULTIMETRE AVEC L AFFICHEUR LCD ================================ Ce projet illustre l'utilisation d'un écran LCD alphanumérique. Un message écrit en deux lignes apparaît sur l'afficheur LCD : Multimètre - Mesure de - Deux secondes plus tard, le message dans la seconde ligne est modifié et affiche tension présenté sur l'entrée (broche RA2) de convertisseur A / D : Multimetre Tension: Microcontrôleur: 16F887 Oscillateur : HS, Mhz Fichier: MULTIMETRE_LCD.c Date: Juillet 2012 ****************************************************************************/ // Connections du module LCD sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // Fin des connexions du module LCD unsigned char ch; unsigned int adc_rd; char *text; long tlong; void main() INTCON = 0; ANSEL = 0x04; TRISA = 0x04; ANSELH = 0; Lcd_Init(); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Cmd(_LCD_CLEAR); text = "Multimetre"; Lcd_Out(1,1,text); text = "- Mesure de - "; Lcd_Out(2,1,text); // Déclarer les variables /* Toutes les interruptions sont désactivées */ /* Broche RA2 est configurée comme une entrée analogique */ /* Reste de broches sont configurées comme numériques */ // Initialisation d affichesur LCD // Commande LCD (curseur OFF) // Commande LCD (effacer l écran LCD) // Définir le premier message /* Ecrire le premier message dans la première ligne // Définir le deuxième message // Ecrire le deuxième message dans la deuxième ligne

102 ADCON1 = 0x82; TRISA = 0xFF; Delay_ms(2000); text = "Tension:"; // Une tension de référence A/D est GRD /* Toutes les broches du PORTA sont configurées en entrées */ // Définir le troisième message while (1) adc_rd = ADC_Read(2); // Conversion A / D. Pin RA2 est une entrée. Lcd_Out(2,1,text); // Ecrire résultat dans la deuxième ligne tlong = (long)adc_rd * 5000;// Convertir le résultat en millivolts tlong = tlong / 1023; // > mV ch = tlong / 1000; /* Extrait volts (en milliers de millivolts) à partir du résultat */ Lcd_Chr(2,9,48+ch); // Ecrire le résultat en format ASCII Lcd_Chr_CP('.'); ch = (tlong / 100) % 10; // Extrait des centaines de millivolts Lcd_Chr_CP(48+ch); // Ecrire le résultat en format ASCII ch = (tlong / 10) % 10; // Extrait des dizaines de millivolts Lcd_Chr_CP(48+ch); // Ecrire le résultat en format ASCII ch = tlong % 10; // Extrait chiffres pour millivolts Lcd_Chr_CP(48+ch); // Ecrire le résultat en format ASCII Lcd_Chr_CP('V'); Delay_ms(1); Exemple 10. Communication série RS232 Cet exemple illustre l'utilisation du module UART du microcontrôleur. La connexion à un PC est possible grâce à la norme RS232. Le programme fonctionne de la manière suivante. Chaque octet envoyé et reçu via la communication série est affiché sur l écran d ordinateur (voire la figure ci-dessous)

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Haute Ecole d Ingénierie et de Gestion Du Canton du Vaud MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Programmation en mode simulation 1. DOCUMENTS DE RÉFÉRENCE...

Plus en détail

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

Langage C. Patrick Corde. Patrick.Corde@idris.fr. 22 juin 2015. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289

Langage C. Patrick Corde. Patrick.Corde@idris.fr. 22 juin 2015. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289 Langage C Patrick Corde Patrick.Corde@idris.fr 22 juin 2015 Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289 Table des matières I 1 Présentation du langage C Historique Intérêts

Plus en détail

Programmation en langage C

Programmation en langage C Programmation en langage C Anne CANTEAUT INRIA - projet CODES B.P. 105 78153 Le Chesnay Cedex Anne.Canteaut@inria.fr http://www-rocq.inria.fr/codes/anne.canteaut/cours C 2 Table des matières 3 Table des

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

UE Programmation Impérative Licence 2ème Année 2014 2015

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B Excel : Réalisation d un classeur Compta Saisir les étiquettes Renommer la première feuille Compta Laisser la première ligne vide et sur la deuxième ligne saisir les étiquettes Se placer sur A2 et saisir

Plus en détail

Créer une base de données

Créer une base de données Access Créer une base de données SOMMAIRE Généralités sur les bases de données... 3 Création de la base de données... 4 A) Lancement d'access... 4 B) Enregistrement de la base de données vide... 4 Création

Plus en détail

Initiation à la programmation en Python

Initiation à la programmation en Python I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Table des matières 1 Les bases 3 2 Variables et constantes 5 3 Quelques fonctions indispensables

Plus en détail

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Interface PC Vivago Ultra. Pro. Guide d'utilisation Interface PC Vivago Ultra Pro Guide d'utilisation Version 1.03 Configuration de l'interface PC Vivago Ultra Configuration requise Avant d'installer Vivago Ultra sur votre ordinateur assurez-vous que celui-ci

Plus en détail

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs Dans la série Les tutoriels libres présentés par le site FRAMASOFT Automatisation d'une Facture 4 Liste Déroulante Remises Case à cocher Calculs Logiciel: Version: Licence: Site: OpenOffice.org Calc :

Plus en détail

SUPPORT DE COURS. Langage C

SUPPORT DE COURS. Langage C Dpt Informatique 2010-2011 SUPPORT DE COURS Langage C Semestre 1 par : «CaDePe» Marie-Françoise Canut Marianne de Michiel André Péninou Table des Matières 1 Généralités...8 1.1 Introduction aux langages

Plus en détail

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS CCS Sommaire Généralités sur le langage. 2 Structure d un programme en C.. 3 Les constantes et équivalences.. 4 Les variables...

Plus en détail

Qlik Sense Desktop. Qlik Sense 2.0.2 Copyright 1993-2015 QlikTech International AB. Tous droits réservés.

Qlik Sense Desktop. Qlik Sense 2.0.2 Copyright 1993-2015 QlikTech International AB. Tous droits réservés. Qlik Sense Desktop Qlik Sense 2.0.2 Copyright 1993-2015 QlikTech International AB. Tous droits réservés. Copyright 1993-2015 QlikTech International AB. Tous droits réservés. Qlik, QlikTech, Qlik Sense,

Plus en détail

Claude Delannoy. 3 e édition C++

Claude Delannoy. 3 e édition C++ Claude Delannoy 3 e édition Exercices Exercices C++ en en langage langage delc++ titre 4/07/07 15:19 Page 2 Exercices en langage C++ AUX EDITIONS EYROLLES Du même auteur C. Delannoy. Apprendre le C++.

Plus en détail

Informatique Générale

Informatique Générale Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) guillaume.hutzler@ibisc.univ-evry.fr Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html

Plus en détail

TABLEAU CROISE DYNAMIQUE

TABLEAU CROISE DYNAMIQUE EXCEL NIVEAU III Mireille DUCELLIER MARS 2003 BASE DE DONNEES RAPPEL Une base de données est une plage de cellules contiguës située sur une la feuille 1. Elle commence en A1. On parle alors de champs,

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5 1. Introduction... 2 2. Création d'une macro autonome... 2 3. Exécuter la macro pas à pas... 5 4. Modifier une macro... 5 5. Création d'une macro associée à un formulaire... 6 6. Exécuter des actions en

Plus en détail

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2 éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........

Plus en détail

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece

Plus en détail

EXCEL TUTORIEL 2012/2013

EXCEL TUTORIEL 2012/2013 EXCEL TUTORIEL 2012/2013 Excel est un tableur, c est-à-dire un logiciel de gestion de tableaux. Il permet de réaliser des calculs avec des valeurs numériques, mais aussi avec des dates et des textes. Ainsi

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE ARDUINO DOSSIER RESSOURCE POUR LA CLASSE Sommaire 1. Présentation 2. Exemple d apprentissage 3. Lexique de termes anglais 4. Reconnaître les composants 5. Rendre Arduino autonome 6. Les signaux d entrée

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

LibreOffice Calc : introduction aux tableaux croisés dynamiques

LibreOffice Calc : introduction aux tableaux croisés dynamiques Fiche logiciel LibreOffice Calc 3.x Tableur Niveau LibreOffice Calc : introduction aux tableaux croisés dynamiques Un tableau croisé dynamique (appelé Pilote de données dans LibreOffice) est un tableau

Plus en détail

La programmation des PIC en C. Les fonctions, les interruptions.

La programmation des PIC en C. Les fonctions, les interruptions. La programmation des PIC en C Les fonctions, les interruptions. Réalisation : HOLLARD Hervé. http://electronique-facile.com Date : 26 août 2004 Révision : 1.2 Sommaire Sommaire... 2 Introduction... 3 Structure

Plus en détail

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de

Plus en détail

LES TYPES DE DONNÉES DU LANGAGE PASCAL

LES TYPES DE DONNÉES DU LANGAGE PASCAL LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.

Plus en détail

Débuter avec OOo Base

Débuter avec OOo Base Open Office.org Cyril Beaussier Débuter avec OOo Base Version 1.0.7 Novembre 2005 COPYRIGHT ET DROIT DE REPRODUCTION Ce support est libre de droit pour une utilisation dans un cadre privé ou non commercial.

Plus en détail

Initiation à LabView : Les exemples d applications :

Initiation à LabView : Les exemples d applications : Initiation à LabView : Les exemples d applications : c) Type de variables : Créer un programme : Exemple 1 : Calcul de c= 2(a+b)(a-3b) ou a, b et c seront des réels. «Exemple1» nom du programme : «Exemple

Plus en détail

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE 2 ème partie : REQUÊTES Sommaire 1. Les REQUÊTES...2 1.1 Créer une requête simple...2 1.1.1 Requête de création de listage ouvrages...2 1.1.2 Procédure de

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

UE C avancé cours 1: introduction et révisions

UE C avancé cours 1: introduction et révisions Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple

Plus en détail

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX TABLE DES MATIERES Livret Utilisateur Excel 2007 Niveau 2 INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX... 4 Les tableaux croisés dynamiques... 4 Création d un tableau croisé... 5 Comparer des

Plus en détail

Guide de démarrage Janvier 2012

Guide de démarrage Janvier 2012 Guide de démarrage Janvier 2012 2012 Logicim Inc. Tous droits réservés. Table des Matières Table des Matières i Guide de Démarrage 1 Introduction 1 Respecter l ordre de la formation 1 Ouvrir XLGL 1 Différentes

Plus en détail

Asset Management Software Client Module. Manuel d utilisation

Asset Management Software Client Module. Manuel d utilisation Asset Management Software Client Module Manuel d utilisation Kodak Asset Management Software Client Module Etat et paramètres de l'actif... 1 Menu Asset Status (Etat de l'actif)... 2 Menu Asset settings

Plus en détail

l'ordinateur les bases

l'ordinateur les bases l'ordinateur les bases Démarrage de l'ordinateur - Le bureau, mon espace de travail - J'utilise la souris - Ouvertes ou fermées, les fenêtres - Dans l'ordinateur, tout est fichier - Le clavier : écrire,

Plus en détail

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION 145 NOTION DE PROGRAMMATION 1/ Complétons notre microprocesseur Nous avons, dans les leçons précédentes décrit un microprocesseur théorique, cependant il s inspire du 6800, premier microprocesseur conçu

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il

Plus en détail

INF 321 : mémento de la syntaxe de Java

INF 321 : mémento de la syntaxe de Java INF 321 : mémento de la syntaxe de Java Table des matières 1 La structure générale d un programme 3 2 Les composants élémentaires de Java 3 2.1 Les identificateurs.................................. 3 2.2

Plus en détail

PIC EVAL Dev Board PIC18F97J60

PIC EVAL Dev Board PIC18F97J60 PIC EVAL Dev Board PIC18F97J60 2 TP1 : Prise en main de l environnement de programmation pour la carte PIC EVAL-ANFA Pour répondre aux questions et justifier vos réponses, vous pouvez faire des copies

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur TIJARA 1 NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR Logiciel TIJARA Manuel d'utilisateur "TIJARA" 1 SOMMAIRE Introduction Première partie Chapitre 1 : Installation et démarrage Chapitre 2 : Architecture

Plus en détail

Introduction à l algorithmique et à la programmation M1102 CM n 3

Introduction à l algorithmique et à la programmation M1102 CM n 3 Introduction à l algorithmique et à la programmation M1102 CM n 3 DUT Informatique 1 re année Eric REMY eric.remy@univ-amu.fr IUT d Aix-Marseille, site d Arles Version du 2 octobre 2013 E. Remy (IUT d

Plus en détail

Algorithmique et programmation : les bases (VBA) Corrigé

Algorithmique et programmation : les bases (VBA) Corrigé PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage VBA des éléments vus en algorithmique. Table des matières 1 Pourquoi

Plus en détail

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons Guide d'utilisation OpenOffice Calc AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons 1 Table des matières Fiche 1 : Présentation de l'interface...3 Fiche 2 : Créer un nouveau classeur...4

Plus en détail

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE AMICUS 18 (2ème partie) Dans la première partie, nous avions présenté la platine Amicus 18 et nous avions réalisé quelques montages simples. Nous allons découvrir un peu mieux la programmation. Dans la

Plus en détail

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 SHERLOCK 7 Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 Cette note montre comment intégrer un script Java dans une investigation Sherlock et les différents aspects de Java script. S T E M M E R I M A G I N

Plus en détail

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. Sciences et Technologies de l Industrie et du Développement Durable Formation des enseignants parcours : ET24 Modèle de

Plus en détail

Débuter avec Excel. Excel 2007-2010

Débuter avec Excel. Excel 2007-2010 Débuter avec Excel Excel 2007-2010 Fabienne ROUX Conseils & Formation 10/04/2010 TABLE DES MATIÈRES LE RUBAN 4 LE CLASSEUR 4 RENOMMER LES FEUILLES DU CLASSEUR 4 SUPPRIMER DES FEUILLES D UN CLASSEUR 4 AJOUTER

Plus en détail

INITIATION A LA PROGRAMMATION

INITIATION A LA PROGRAMMATION 2004-2005 Université Paris Dauphine IUP Génie Mathématique et Informatique INITIATION A LA PROGRAMMATION PROCEDURALE, A L'ALGORITHMIQUE ET AUX STRUCTURES DE DONNEES PAR LE LANGAGE C Maude Manouvrier La

Plus en détail

Conversion d un entier. Méthode par soustraction

Conversion d un entier. Méthode par soustraction Conversion entre bases Pour passer d un nombre en base b à un nombre en base 10, on utilise l écriture polynomiale décrite précédemment. Pour passer d un nombre en base 10 à un nombre en base b, on peut

Plus en détail

L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante:

L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante: 420-183 Programmation 1 8. Les structures conditionnelles Dans l'écriture de tout programme informatique, une des premières nécessités que nous rencontrons est de pouvoir faire des choix. Dans une application

Plus en détail

Elle supporte entièrement la gestion de réseau sans fil sous Windows 98SE/ME/2000/XP.

Elle supporte entièrement la gestion de réseau sans fil sous Windows 98SE/ME/2000/XP. SAGEM Wi-Fi 11g USB ADAPTER Guide de mise en route rapide But de ce guide Ce guide décrit la méthode d'installation et de configuration de votre SAGEM Wi-Fi 11g USB ADAPTER pour réseau sans fil. Lisez-le

Plus en détail

STAGE IREM 0- Premiers pas en Python

STAGE IREM 0- Premiers pas en Python Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer

Plus en détail

Microsoft Excel 2007. Présentation du tableur Excel

Microsoft Excel 2007. Présentation du tableur Excel Microsoft Excel 2007 Présentation du tableur Excel 1 Interface d'excel 2007 Excel 2007 se distingue des versions précédentes par son interface plus intuitive et accessible. Les nouveautés sont multiples

Plus en détail

Mon aide mémoire traitement de texte (Microsoft Word)

Mon aide mémoire traitement de texte (Microsoft Word) . Philippe Ratat Mon aide mémoire traitement de texte (Microsoft Word) Département Ressources, Technologies et Communication Décembre 2006. Sommaire PRÉSENTATION DU DOCUMENT 1 Objectif principal 1 Deux

Plus en détail

Algorithme. Table des matières

Algorithme. Table des matières 1 Algorithme Table des matières 1 Codage 2 1.1 Système binaire.............................. 2 1.2 La numérotation de position en base décimale............ 2 1.3 La numérotation de position en base binaire..............

Plus en détail

L informatique en BCPST

L informatique en BCPST L informatique en BCPST Présentation générale Sylvain Pelletier Septembre 2014 Sylvain Pelletier L informatique en BCPST Septembre 2014 1 / 20 Informatique, algorithmique, programmation Utiliser la rapidité

Plus en détail

Traitement de texte : Quelques rappels de quelques notions de base

Traitement de texte : Quelques rappels de quelques notions de base Traitement de texte : Quelques rappels de quelques notions de base 1 Quelques rappels sur le fonctionnement du clavier Voici quelques rappels, ou quelques appels (selon un de mes profs, quelque chose qui

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Présentation du langage et premières fonctions

Présentation du langage et premières fonctions 1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en

Plus en détail

IV- Comment fonctionne un ordinateur?

IV- Comment fonctionne un ordinateur? 1 IV- Comment fonctionne un ordinateur? L ordinateur est une alliance du hardware (le matériel) et du software (les logiciels). Jusqu à présent, nous avons surtout vu l aspect «matériel», avec les interactions

Plus en détail

Didacticiel de mise à jour Web

Didacticiel de mise à jour Web Didacticiel de mise à jour Web Copyright 1995-2012 Esri All rights reserved. Table of Contents Didacticiel : Création d'une application de mise à jour Web.................. 0 Copyright 1995-2012 Esri.

Plus en détail

Le langage C. Introduction, guide de reference

Le langage C. Introduction, guide de reference Le langage C Introduction, guide de reference Ce document est une présentation du langage de programmation C, de sa syntaxe et de ses spécificités. Il est destiné essentiellement à servir de mémo-guide

Plus en détail

Organiser vos documents Windows XP

Organiser vos documents Windows XP Organiser vos documents Windows XP Dossier? Fichier? Qu'est ce que c'est? Un dossier (autrement appelé répertoire) est un élément dans lequel on peut mettre d'autres dossiers, ou des fichiers (ou les 2).

Plus en détail

Apprendre à manipuler le clavier Médiathèque de Bussy Saint-Georges APPRENDRE A MANIPULER LE CLAVIER

Apprendre à manipuler le clavier Médiathèque de Bussy Saint-Georges APPRENDRE A MANIPULER LE CLAVIER APPRENDRE A MANIPULER LE CLAVIER Apprendre à manipuler le clavier SOMMAIRE : I APPRENDRE A TAPER AU CLAVIER... PAGES 3-11 1.1 - Positionnement des touches d'un clavier... Page 3 1.2 - Les touches importantes

Plus en détail

SAGEM Wi-Fi 11g USB ADAPTER Guide de mise en route rapide

SAGEM Wi-Fi 11g USB ADAPTER Guide de mise en route rapide SAGEM Wi-Fi 11g USB ADAPTER Guide de mise en route rapide But de ce guide Ce guide décrit la méthode d'installation et de configuration de votre SAGEM Wi-Fi 11g USB ADAPTER pour réseau sans fil. Lisez-le

Plus en détail

Créer le schéma relationnel d une base de données ACCESS

Créer le schéma relationnel d une base de données ACCESS Utilisation du SGBD ACCESS Polycopié réalisé par Chihab Hanachi et Jean-Marc Thévenin Créer le schéma relationnel d une base de données ACCESS GENERALITES SUR ACCESS... 1 A PROPOS DE L UTILISATION D ACCESS...

Plus en détail

1.1 L EXPLORATEUR WINDOWS

1.1 L EXPLORATEUR WINDOWS Gérer les fichiers et les dossiers Cette partie du T.P. a pour objectifs de vous familiariser avec les méthodes pour copier, déplacer, effacer, renommer des dossiers et des fichiers. 1.1 L EXPLORATEUR

Plus en détail

Table des matières. F. Saint-Germain / S. Carasco Document réalisé avec OpenOffice.org Page 1/13

Table des matières. F. Saint-Germain / S. Carasco Document réalisé avec OpenOffice.org Page 1/13 Voici un petit tutoriel d'utilisation du tableau numérique de la marque promethean. Ce tutoriel est loin d'être complet, il permet juste une première approche simple des outils de base du logiciel ACTIVstudio.

Plus en détail

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES IMPRTATIN, CRÉATIN, MANIPULATIN, EXPRTATIN DE DNNÉES STATISTIQUES Bernard Dupont Bernard.Dupont@univ-lille1.fr ahm.bahah@yahoo.fr Bien que l'analyse et le traitement des données ne soient pas sa vocation

Plus en détail

Installation et paramétrage. Accès aux modèles, autotextes et clip- art partagés

Installation et paramétrage. Accès aux modèles, autotextes et clip- art partagés DSI Documentation utilisateurs Installation et paramétrage Accès aux modèles, autotextes et clip- art partagés Auteur : Yves Crausaz Date : 21 septembre 2006 Version : 1.04 Glossaire OOo : Abréviation

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER.

COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER. COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER. 1. Comment déplacer ou copier un fichier sur Windows Vous aurez régulièrement besoin de déplacer ou dupliquer des fichiers sur votre ordinateur. Par exemple

Plus en détail

Microsoft Excel. Tableur

Microsoft Excel. Tableur Microsoft Excel Tableur 1 Introduction à la notion du tableur Un tableur est un logiciel permettant de manipuler des données numériques et d'effectuer automatiquement des calculs sur des nombres stockés

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

On trouvera sur le site du CCDMD un exemple d album construit avec Cantare. (http://www.ccdmd.qc.ca/ri/cantare)

On trouvera sur le site du CCDMD un exemple d album construit avec Cantare. (http://www.ccdmd.qc.ca/ri/cantare) Cantare 2 Introduction L outil logiciel Cantare s adresse à toute personne qui veut construire des leçons visant l apprentissage d une langue par l écoute de chansons ou de fichiers sonores dont les paroles

Plus en détail

Numbers sur ipad. Atelier Formation Numbers sur ipad. [Notes extraitres de l'aide en ligne]

Numbers sur ipad. Atelier Formation Numbers sur ipad. [Notes extraitres de l'aide en ligne] Numbers sur ipad [Notes extraitres de l'aide en ligne] Table des matières Atelier Formation Numbers sur ipad Introduction à Numbers 4 Créer ou ouvrir une feuille de calcul 4 Créer ou ouvrir une feuille

Plus en détail

Guide de l'utilisateur. Linksys AE1000 Adaptateur USB sans fil - N hautes performances

Guide de l'utilisateur. Linksys AE1000 Adaptateur USB sans fil - N hautes performances Guide de l'utilisateur Linksys AE1000 Adaptateur USB sans fil - N hautes performances Table des matières Table des matières Chapitre 1 : Présentation du produit 1 Voyant 1 Chapitre 2 : Installation 2 Installation

Plus en détail

KeePass - Mise en œuvre et utilisation

KeePass - Mise en œuvre et utilisation www.rakforgeron.fr 08/04/2015 KeePass - Mise en œuvre et utilisation L'usage de mots de passe est nécessaire pour de nombreux accès ou pour la protection de données personnelles. Il convient d'en utiliser

Plus en détail

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page

Plus en détail

Utilisation de XnView

Utilisation de XnView http://www.rakforgeron.fr 27/02/2015 Utilisation de XnView Les photos d'actes généalogiques, les scans de documents réalisés par vous, ou vos saisies d'écran de documents téléchargés sur Internet, au-delà

Plus en détail

Notions fondamentales du langage C# Version 1.0

Notions fondamentales du langage C# Version 1.0 Notions fondamentales du langage C# Version 1.0 Z 2 [Notions fondamentales du langage Csharp] [Date : 25/03/09] Sommaire 1 Tout ce qu il faut savoir pour bien commencer... 3 1.1 Qu est ce qu un langage

Plus en détail