LE LANGAGE C POUR MICROCONTROLEURS

Documents pareils
INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Introduction au langage C

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


Rappels Entrées -Sorties

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)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Algorithmique et Programmation, IMA

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

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

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

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

Notions fondamentales du langage C# Version 1.0

V- Manipulations de nombres en binaire

Programmation en langage C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Programmation C++ (débutant)/instructions for, while et do...while

Java Licence Professionnelle CISII,

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Représentation d un entier en base b

Le langage C. Séance n 4

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

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

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Les structures. Chapitre 3

Chap III : Les tableaux

Claude Delannoy. 3 e édition C++

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

I. Introduction aux fonctions : les fonctions standards

Cours d Algorithmique et de Langage C v 3.0

TD3: tableaux avancées, première classe et chaînes

Langage Éric Guérin 5 octobre 2010

Initiation. àl algorithmique et à la programmation. en C

as Architecture des Systèmes d Information

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Programmer en JAVA. par Tama

Programmation Classique en langage C

Initiation à la programmation en Python

SUPPORT DE COURS. Langage C

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

INITIATION A LA PROGRAMMATION

Programmation système I Les entrées/sorties

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Les structures de données. Rajae El Ouazzani

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

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

INF 321 : mémento de la syntaxe de Java

Plan du cours. Historique du langage Nouveautés de Java 7

Les chaînes de caractères

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

Programmation impérative

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

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

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

Présentation du langage et premières fonctions

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

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

Le langage C. Introduction, guide de reference

Introduction au Langage de Programmation C

TP 1. Prise en main du langage Python

STAGE IREM 0- Premiers pas en Python

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Cours Informatique Master STEP

Licence Sciences et Technologies Examen janvier 2010

Notions de Langage C

Programmation C. J.-F. Lalande. 15 novembre 2012

Le prototype de la fonction main()

ALGORITHMIQUE ET PROGRAMMATION En C

Programmation en Java IUT GEII (MC-II1) 1

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Utilisation d objets : String et ArrayList

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

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

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

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

TP, première séquence d exercices.

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Programme Compte bancaire (code)

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

Cours d Informatique

Conventions d écriture et outils de mise au point

Algorithme. Table des matières

PROGRAMMER EN MQL4. Apprenez à automatiser vos stratégies sur MetaTrader 4

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

Cours de programmation avancée. Le langage C. Université du Luxembourg

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Java Licence Professionnelle CISII,

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES

Logiciel de Base. I. Représentation des nombres

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

Solutions du chapitre 4

Corrigé des TD 1 à 5

Travaux Dirigés n 1 : chaînes de caractères

Transcription:

LE LANGAGE C POUR MICROCONTROLEURS 1. ORGANISATION D UN PROGRAMME C POUR µc. La saisie d un programme en «C» répond pratiquement toujours à la même architecture. Le symbole «#» est suivi d une directive de compilation, le symbole «//» est suivi d un commentaire. Le texte compris entre le symbole «/*» et «*/» est pris pour un commentaire également. #include <mega16.h> #include <delay.h> #define DATA_LCD PORTB #define RS PORTC.0 // Directive de compilation indiquant d inclure le fichier de définition du µc ATmega16 // Directive de compilation indiquant d inclure la bibliothèque delay.h // Directive de compilation indiquant des équivalences // exemple : bit RS correspond au bit 0 du PORT C Unsigned char cap=0xa5; // Déclaration d une variable caractère non signé avec valeur initiale exprimée en hexa int wind; // Déclaration d une variable de type «entier» initialisée à 0 par défaut void Wr_LCD(unsigned char data,unsigned char LCD_RS) RS=LCD_RS; //déclaration d une fonction qui sera appelée une ou plusieurs fois par un autre // programme. Les paramètres entre parenthèses sont passés à la fonction. Void delay_ms(2); //signifie que la fonction ne retourne rien. Les prototypes de fonctions doivent //être placés avant le programme principal (main) unsigned int read_adc(unsigned char adc_input) ADMUX=adc_input ADC_VREF_TYPE; //le paramètre entre parenthèses unsigned char adc_input est passé à la ADCSRA =0x40; // fonction. La fonction renvoie une valeur de type unsigned int while ((ADCSRA & 0x10)==0); // ADCSRA =0x10; return ADCW; // return signifie qu une valeur doit être retournée par la fonction interrupt [TIM1_COMPA] void fonction(void) //sous-programme d interruption à placer avant le main PORTA=~PORTA; //void fonction(void) signifie que la fonction ne reçoit et ne renvoie pas //de valeur void main(void) // Programme principal DDRA=0xFF ; // initialisation d un port. while (1) //Boucle principale (les instructions entre les accolades sont exécutées indéfiniment) a= read_adc (0); a= a>>2; b=(50*a)/255; Remarques : Dans la déclaration de certaines fonctions, on emploie le type void qui signifie que la fonction ne renvoie ou n exige aucune valeur. Chaque ligne d instruction se termine par un ;. Le début d une suite d instructions est précédé du symbole. La fin d une suite d instructions est suivie du symbole. 1

La notation des nombres peut se faire en décimal de façon normale, en hexadécimal avec le préfixe 0x ou en binaire avec le préfixe «0b». 2. LES TYPES DE DONNEES DU LANGAGE C. Il existe, dans le langage C, plusieurs types de données classés selon leurs tailles et leurs représentations. On ne détaillera que ceux utilisés dans le cadre des microcontrôleurs. 2.1 TYPES DE BASE. On en rencontre généralement trois types qui peuvent être signés ou non signés. Dans ce dernier cas la déclaration sera précédée du mot clé unsigned. TYPE DEFINITION TAILLE DOMAINE NON SIGNE DOMAINE SIGNE char Variable de type caractère utilisée pour les nombres entiers 8 bits 0 à 255-128 à +127 int Variable de type nombre entier 16 bits 0 à 65536-32768 à 32767 Long int Variable de type nombre entier 32 bits 0 à +4294967295-2147483647 à +2147483647 float Variable de type nombre réel 32 bits 2.2 TYPES STRUCTURES. +/- 3,4.10-38 à 3,4.10 38 X Les types structurés sont en fait une association de plusieurs variables de base de même type. Il en existe deux types : Les types tableau dont la taille est définie - ex : int tableau[10] ; tableau de 10 entiers. Les types pointeurs dont la taille n est pas définie - ex : char *chaine ; pointeur de cacactères. Les chaines de caractères peuvent être définies par les 2 types. On préfère cependant le pointeur pour sa taille indéfinie. Remarque : Le pointeur est comparable à un registre d index qui contient non pas une donnée mais l adresse de cette donnée. L adresse d une variable affectant un pointeur, s obtient en précédant son nom du symbole &. Une chaîne de caractère se termine toujours par le caractère nul \0. 3. LES S. 3.1 LES S ARITHMETIQUES. Ces opérateurs permettent d effectuer les opérations arithmétiques traditionnelles : Addition, soustraction, multiplication et division entière. + Addition - Soustraction * Multiplication / Division entière % Reste de la division entière 2

3.2 LES S D AFFECTATION. L opérateur indispensable au langage C est l affectation définie principalement par le signe =. Il permet de charger une variable avec la valeur définie par une constante ou par une autre variable. Il en existe d autres qui, en plus de l affectation, effectuent une opération arithmétique. EQUIVALENCE = Affectation ordinaire X=Y += Additionner à _ X+=Y équivalent à X=X+Y -= Soustraire à_ X-=Y équivalent à X=X-Y *= Multiplier par _ X*=Y équivalent à X=X*Y /= Diviser par _ X/=Y équivalent à X=X/Y %= Modulo X%=Y équivalent à X=X%Y -- Soustraire de 1 (Décrémentation) X-- équivalent à X=X-1 ++ Ajouter 1 (Incrémentation) X++ équivalent à X=X+1 REMARQUE Bien que les instructions «variable» ++ et «variable» produisent les mêmes effets sur une variable que les instructions «variable» +=1 et «variable» -=1, les premières peuvent, selon la performance du compilateur, être exécutées plus rapidement (simple incrémentation dans le premier cas et addition dans le second). 3.3 LES S LOGIQUES. Ces opérateurs s adressent uniquement aux opérations de test conditionnel. Le résultat de ces opérations est binaire : 0 ou 1. && 3.4 LES S LOGIQUES BIT A BIT. ET logique OU logique! NON logique Ces opérateurs agissent sur des mots binaires. Ils effectuent, entre deux mots, une opération logique sur les bits de même rang. & ET OU ^ OU exclusif ~ NON >> Décalage à droite des bits << Décalage à gauche des bits 3

3.5 S DE COMPARAISON. Ces opérateurs renvoient la valeur 0 si la condition vérifiée est fausse, sinon ils renvoient 1. 4. LES STRUCTURES REPETITIVES. == Egale à!= Différent de > Supérieur à < Inférieur à >= Supérieur ou égal à <= Inférieur ou égal Le langage C possède des instructions permettant de répéter plusieurs fois une même séquence en fonction de certaines conditions. 4.1 STRUCTURE WHILE : TANT QUE FAIRE Avec ce type d instruction le nombre de répétitions n est pas défini et dépend du résultat du test effectué sur la condition. Si cette dernière n est jamais vérifiée, la séquence n est pas exécutée. while (THETA==0) séquence d instructions La structure ci-dessus répète la suite d instructions comprise entre crochets tant que la variable entière THETA est égale à 0. 4.2 STRUCTURE DO WHILE : FAIRE TANT QUE Cette structure ressemble fortement à la précédente à la seule différence que la séquence à répéter est au moins exécutée une fois même si la condition n est jamais vérifiée. do while (THETA==0); 4

4.3 STRUCTURE FOR : POUR <VARIABLE> ALLANT DE <VALEUR INITIALE> A <VALEUR FINALE> FAIRE Cette instruction permet de répéter, un nombre de fois déterminé, une même séquence. for (i=0;i<5;i++) La structure précédente répète 5 fois la suite d instructions comprise entre crochets. La variable i prendra les valeurs successives de : 0, 1, 2, 3 et 4. 5. LES STRUCTURES ALTERNATIVES. Ces structures permettent d exécuter des séquences différentes en fonction de certaines conditions. 5.1 STRUCTURE IF ELSE : SI <CONDITION> FAIRE SINON FAIRE Avec cette structure on peut réaliser deux séquences différentes en fonction du résultat du test sur une condition. Syntaxe: if (condition) instruction; ou : if (condition) instruction1; instructionn; Ou encore: if (condition) instruction1; else instruction2; 5

ou: if (condition) instruction1; else instruction2; Exemple: if (a<b) c=b-a; else c=a-b; La structure précédente affecte la valeur b-a à c si a est inférieur à b sinon c est affecté par la valeur ab. 5.2 STRUCTURE SWITCH CASE. Cette structure remplace une suite de if else if else et permet de réaliser différentes séquences appropriées à la valeur de la variable testée. Si aucune valeur n'est trouvée, alors ce sont les instructions qui suivent default qui sont exécutées. Syntaxe: switch (identificateur) case valeur1 : instruction_1 ; ou instructions_1 ; case valeuurm : instruction_2 ; ou instructions_2 ; case valeurk: instruction_j ; ou instructions_j ; default : instruction_i ; ou instructions_i ; switch (a) case 1 : b=16; case 2 : b=8; case 3 : b=4; case 4 : b=2; Dans la structure précédente b=16 si a=1, b=8 si a=2 etc. 6. LES S. Afin de réduire la taille du programme il est souvent préférable de définir sous forme de fonction une même suite d instructions appelée plus d une fois dans le programme. La fonction principale d un programme C est définie grâce au mot clé main. Les fonctions du langage C peuvent renvoyer des valeurs de même qu elles peuvent prendre en compte des arguments provenant de la procédure d appel. S il n y a pas de renvoi ou aucun argument, on saisit le mot clé void en remplacement. La valeur renvoyée est définie après le mot clé return. 6

Lorsque l on veut, dans une fonction, modifier une variable passée en argument il est obligatoire d utiliser un pointeur. Une fonction doit toujours être définie avant sa procédure d appel. Dans le cas contraire une simple déclaration doit être faite dans l en tête du programme. Exemples : 1) Fonction faisant appel au convertisseur analogique numérique unsigned int read_adc(unsigned char adc_input) ADMUX=adc_input ADC_VREF_TYPE; //fixe la voie d'entrée ADCSRA =0x40; // démarre la conversion while ((ADCSRA & 0x10)==0); // attente fin conversion ADCSRA =0x10; return ADCW; // renvoie le résultat void main(void); // Programme principal While(1) // boucle principale a= read_adc (0); //appel de la fonction 7. S PREDEFINIES. Il existe dans tous les compilateurs C des bibliothèques de fonctions prédéfinies. La plus utilisée parmi elles est <stdio.h> qui est propre aux organes d entrées / sorties standards. Dans le cas des ordinateurs ces organes sont le clavier et l écran. Dans le cas d un microcontrôleur ces organes sont généralement les interfaces séries du composant (interface RS232C). Dans cette bibliothèque on trouve les fonctions suivantes : Printf() : écriture formatée de données. scanf() : lecture formatée de données. Putchar() : écriture d'un caractère. getchar() : lecture d'un caractère. 8. LES POINTEURS. Ce sont des variables contenant l'adresse d'autres variables. Ces variables sont déclarées en rajoutant le signe «*» devant. Exemple pour le pointeur a : unsigned int *a ; Pour pouvoir accéder à la valeur d'un pointeur il suffit de rajouter une étoile * devant l'identificateur de pointeur. Exemples : *a=c; // le contenu de c est stocké à l'adresse située dans a d=*a; // d prend la valeur du contenu pointé par a 8.1 L'opérateur d'adresse &. Il permet de connaître l'adresse de n'importe quelle variable ou constante. Exemple : b=&c ; // b prend la valeur de l adresse de la variable c. c=30; a=0x160; b=&tab[2]; //b prend la valeur de l'adresse de la variable tab[2] *a=c; // le contenu de c est stocké à l'adresse située dans a (le contenu de l'adresse 0x160 prendra la valeur 30) d=*a; // ici d prendra la valeur du contenu de l'adresse 0x160 soit 30 7