Vous êtes sur la page 1sur 99

Les systèmes embarqués

introduction

1
RST(S6)-ENSA -KENITRA
Définition Systèmes embarqués

 Un système embarqué est défini comme un système électronique et


informatique autonome, souvent temps réel, spécialisé dans une tâche
bien précise. Ses ressources sont généralement limitées.

 Le système comprend une partie matérielle et une partie logicielle

2
RST(S6)-ENSA -KENITRA
Spécificités d’un système embarqué
Caractéristiques générales:
 Dédié à une application spécifique

 Coût réduit, maximisation rapport performance/prix

 Volume restreint (compact, pas modulaire)

 Capacité mémoire adaptée

 Capacité de calcul appropriée à l'application

 Exécution temps réel

 Fiabilité et sécurité de fonctionnement

 Consommation d’énergie maitrisée (voir très faible en cas d’utilisation


sur batterie)
3
RST(S6)-ENSA -KENITRA
Spécificités d’un système embarqué
Différences avec un ordinateur de bureau :
 L'interface IHM (Interface Homme machine) est adaptée selon
l’application. Cela peut-être de simples leds et boutons jusqu’à un écran
tactile. Il doit être robuste.

 Généralement: pas de clavier, écran réduit.

 Le système embarqué dispose de périphériques et capteurs spécifiques


pour son application:
 Carte SD, mémoire flash, …

 Wifi, Bluetooth, GPS, …

 Température, pression, actuateurs (moteurs, …), …

4
RST(S6)-ENSA -KENITRA
Spécificités d’un système embarqué
Architecture d’un système embarqué :
 Réalisé autour d’un micro-contrôleur (uC)
 uC est un système à processeur dans un seul chip (SoC)

 comprend: processeur, mémoire, GPIO (entrées/sorties simples configurables),


contrôleur de bus, contrôleur d’interruption, contrôleur d’écran, USB, Ethernet, …

 très bon rapport performance/prix et performance/consommation.

 Ensemble compact (volume optimisé)

 Démarrage autonome du système (boot)


 pas de disque dur, utilisation de mémoire flash, …

5
RST(S6)-ENSA -KENITRA
Systèmes Embarqués
--Systèmes à Microcontrôleurs--

Chapitre I:
Introduction au PIC de Microchip

RST(S6)-ENSA
LP IS(S6)-EST -GUELMIM
-KENITRA 6
Plan

Introduction
Domaines d’application
Principaux constructeurs
Processus de compilation et de programmation
PIC de Microchip
Familles de PIC
Acronymes

7
RST(S6)-ENSA -KENITRA
Introduction

 Un microcontrôleur (en notation abrégée µc, ou uc ou encore MCU en anglais)


est un circuit intégré autonome
• Il est capable d’exécuter un programme contenu dans sa mémoire morte dès
qu'il est mis sous tension
• Il rassemble essentiellement :
 Un microprocesseur ( Unité de commande, UAL, Registres)
 Des mémoires (mémoire morte pour le programme, mémoire vive pour les
données)
 Interfaces d'entrées-sorties
 Des unités périphériques (CAN, CNA, Compteur/Timer …)

8
RST(S6)-ENSA -KENITRA
Introduction

9
RST(S6)-ENSA -KENITRA
Domaines d’application

Moyens de communication Moyens de transport Electronique de consommation

Electroménagers Technologie de sécurité


Modélisme

Robotique Jouets Médecine


10
RST(S6)-ENSA -KENITRA
Principaux constructeurs

11
RST(S6)-ENSA -KENITRA
Processus de compilation et de programmation

 À partir d’un programme écrit en langage C

12
RST(S6)-ENSA -KENITRA
Processus de compilation et de programmation

 À partir d’un programme écrit en assembleur

Program.asm

Program.hex
assembler/ (machine language)
translator 11 00xx 0010 0000 programmer

MOVLW 0x20

13
RST(S6)-ENSA -KENITRA
PIC de Microchip

 Les microcontrôleurs PIC forment une famille de microcontrôleurs de la société


Microchip
 Ces microcontrôleurs sont dérivés du PIC1650 développé à l'origine par la division
microélectronique de General Instrument
 Le nom PIC n'est pas officiellement un acronyme, bien que la traduction en
« Peripheral Interface Controller » soit généralement admise

14
RST(S6)-ENSA -KENITRA
PIC de Microchip

 Les PICs adoptent une architecture Harvard:


• Ils possèdent deux mémoires séparées : une pour le programme et l’autre pour les
données

 Les PICs sont des processeurs dits RISC (Reduced Instruction Set Computers):
• Processeur à jeu d’instruction réduit
• Plus on réduit le nombre d’instructions, plus facile et plus rapide en est le décodage, et plus
vite le composant fonctionne
• Cependant, il faut plus d'instructions pour réaliser une opération complexe

15
RST(S6)-ENSA -KENITRA
Familles de PIC

 Les modèles de PIC courants sont repérés par une référence de la forme :
• 2 chiffres : famille du PIC (10, 12, 16, 18, 24 ,32) ou dsPIC (30, 33)
• 1 lettre : type de mémoire de programme (C ou F).
 F indique en général qu'il s'agit d'une mémoire Flash (reprogrammable et
effaçable électriquement)
 C indique en général que la mémoire ne peut être effacée que par exposition
aux ultra-violets
o (exception pour le PIC16C84 qui utilise une mémoire EEPROM effaçable
électriquement)
 CR indique que la mémoire est une PROM
 L peut être ajouté devant cette première lettre pour indiquer qu'il s'agit d'un
modèle basse tension (exemple : 2 V à 5,5 V si LF — 4,2 V à 5,5 V si F).
• Un nombre de 2 à 4 chiffres : modèle du PIC au sein de la famille. Toutefois il y
a maintenant des exceptions : PIC18F25K20 ou PIC18F96J60 par exemple
• Un groupe de lettres pour indiquer le boîtier et la gamme de température
16
RST(S6)-ENSA -KENITRA
Familles de PIC

 Exemple 1 : PIC18LF4682-I/P
• Microcontrôleur de la famille PIC18
• Basse tension (L)
• Mémoire flash (F)
• Modèle 4682
• Gamme de température industrielle (I) (-40°/+85°)
• Boîtier DIL40 (p)

17
RST(S6)-ENSA -KENITRA
Familles de PIC

 Exemple 2 : PIC16F84-04
• Microcontrôleur de la famille PIC16
• Mémoire flash (F)
• Modèle 84
• Capable d’accepter une fréquence d’horloge de 4 MHz

18
RST(S6)-ENSA -KENITRA
Familles de PIC

19
RST(S6)-ENSA -KENITRA
Familles de PIC
--PIC 8 bits--
 PIC10 et PIC12
• Ce sont des composants récents. Ils ont comme particularités d'être
extrêmement petits (existe en boîtier SOT-23 à 6 broches de moins de 3×3 mm),
simples et économiques
 PIC16
• Les PICs de la famille 16C, 16F ou 16CR sont des composants de milieu de
gamme
• C'est la famille la plus riche en termes de dérivés
• La Famille 16 dispose de 3 sous-familles :
 La sous-famille avec le cœur Baseline : instructions sur 12 bits
 La sous-famille avec le cœur Middle-Range : instructions sur 14 bits
 La sous-famille avec le cœur High end : instructions sur 16 bits

20
RST(S6)-ENSA -KENITRA
Familles de PIC
--PIC 8 bits--
 PIC18
• Cette famille a un jeu d'instruction plus complet (75 instructions)
• On peut les utiliser avec un quartz fonctionnant jusqu'à 64 MHz (16 MIPS)
• Cette famille propose une multitude de dérivés intégrant l'USB, ETHERNET
(MAC(Medium Access Control)+PHY(PHYsical Layer)),CAN et canaux de
MLI (Modulation de largeur d’impulsion) dédiés au contrôle moteur

21
RST(S6)-ENSA -KENITRA
Familles de PIC
--PIC 8 bits--
 Exemple : Famille PIC16

22
RST(S6)-ENSA -KENITRA
Acronymes
 UAL : Unité Arithmétique et logique
 SOT : Small Outline Transistor
 DIL: Dual In Line
 MIPS: Million Instruction Per Second
 MAC: Medium Access Control
 PHY: PHYsical Layer
 MIPS : Microprocessor without Interlocked Pipeline Stages
 USB OTG: USB On The Go
 UART : Universal Asynchronous Receiver/Transmitter
 RTCC : Real time calendar/clock
 QVGA: Quarter Video Graphics Array
 WQVGA: Wide Quarter Video Graphics Array
 CAN : Convertisseur Analogique Numérique
 CNA : Convertisseur Numérique Analogique
 JTAG : Joint Test Action Group
 XLP: eXtreme Low Power
 FFT : Fast Fourier Transform
 DSP : Digital Signal Processor
 IIR : Infinite Impulse Response
 FIR : Finite Impulse Response
23
RST(S6)-ENSA -KENITRA
Acronymes
 CAN : Controller Area Network
 OSEK : Öffene Système und deren Schnittstellen für die Elektronik im
Kraftfahrzeug which stanads for « Ooen Systems and the Corresponding
Interfaces for Automotive Electronic »
 Kio : Kibioctet (1 Kio=1024 octets)

24
RST(S6)-ENSA -KENITRA
Systèmes Embarqués
--Systèmes à Microcontrôleurs

Chapitre II:
Architecture :PIC 16F84A

RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 25
Plan

Brochage
Principales caractéristiques
Architecture interne
Organisation de la mémoire
L’ALU et le registre W
Horloge

LP IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 26
Brochage

 Le PIC 16F84A dispose de 18 broches


• 13 broches entrées/sorties, avec contrôle de direction individuel, et répartis en
deux ports A (5 bits) et B (8 bits)
• 2 broches pour l’alimentation VDD et la masse VSS
• 1 broche pour la mise à zéro, MCLR/, du PIC
• 2 broches pour la connexion de l’oscillateur (OSC1/CLKIN et OSC1/CLKOUT)
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 27
Brochage

Port A

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 28
Brochage

Port B

RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 29
Principales caractéristiques
 Seulement 35 instructions
 Tout les instructions se font en un cycle machine (4 cycles d’horloges) sauf les
instructions de branchement qui se font en deux cycles machine
 Vitesse allant jusqu’à 20 MHz, soit une instruction sur 200 ns
 14 bits pour coder les instructions
 8 bits pour les données
 15 registres pour les fonctions spéciales
 1K mots de mémoire Flash
 68 octets de mémoires de données RAM
 64 octets de mémoire de données EEPROM
 1 Timer/compteur 8 bits avec une prédivision programmable et cadencé par une
horloge interne ou externe
 4 sources d’horloge sélectionnable
 Mode sleep (pour une faible consommation)

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 30
Principales caractéristiques
 8 niveaux de pile
 4 sources d’interruptions
 1000 cycles d’effacements/écriture possible dans la mémoire du programme
Flash
 10 000 000 cycles d’effacements/écriture possible dans la mémoire de données
EEPROM
 Programmation par ICSP ( In Circuit Serial Programming) via deux broches RB6
(clock) et RB7 (data)
 Protection de code

RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 31
Architecture interne

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 32
Architecture interne

 L’architecture générale du PIC16F84A est constitué des éléments suivants:


• Un système d’initialisation à la mise sous tension (Power up Timer…)
• Un système de génération d’horloge (Timing generation)
• Une unité arithmétique et logique ALU
• Une mémoire de programme Flash de 1K mots de 14 bits
• un compteur de programme (Program Counter) et une pile (Stack)
• Un bus spécifique pour le programme (Program bus) sur 14 bits
• Un registre contenant le code de l’instruction à exécuter
• Un bus spécifique pour les données (data bus) sur 8 bits

RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 33
Architecture interne

• Une mémoire de données RAM (File registers)


• Une mémoire de données EEPROM de 64 octets pour le stockage de données
permanentes
• 2 ports d’entrées/sorties A et B
• Un chien de garde (Watchdog) : compteur/Timer 8 bits incrémenté en
permanence

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 34
Organisation de la mémoire

 Le PIC 16F84A possède deux types de mémoires:


• Mémoire de programme
• Mémoire de données

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 35
Organisation de la mémoire

 Mémoire de programme
• Le compteur programme de 13 bits
est capable d’adresser 213=8K mots
de 14 bits
• Seulement le premier 1K mots de 14
bits (0000h à 03FFh) qui est
physiquement implémenté et
accessible
• L’adresse 0000h contient le vecteur
du reset (Il s’agit du branchement
vers début du programme)
• L’adresse 0004h contient le vecteur
d’interruption (Il s’agit Branchement
vers début du programme
d’interruption)

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 36
Organisation de la mémoire

 Mémoire de la pile
• La pile est une zone mémoire qui permet de stocker les adresses (contenu du
compteur programme) de retour d’un sous programme ou d’une routine
d’interruption
• Elle peut contenir 8 valeurs (adresses de retours) de 13 bits chacune
• Elle n’a pas d’adresse dans la plan mémoire
• Ce sont des zones réservées par le système

RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM *
Organisation de la mémoire
 Mémoire de données Mémoire de données RAM
• La mémoire RAM est constituée de deux
parties :
 Les registres SFR : ce sont les registres
utilisés par le CPU et les périphériques
pour contrôler une opération désirée par
le PIC
o Ils sont situés dans les zones 00h-0Bh
et 80h-8Bh
 Les registres GPR (General Purpose
Registers) sont des positions mémoire que
l'utilisateur peut utiliser pour stocker ses
variables et ces données
oIls sont situés dans la zone 0Ch-4Fh et
mappés dans la zone 8Ch-CFh
• Les zones 07h,87h, 4Fh-7Fh et CFh-FFh
ne sont pas implémentées
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 38
Organisation de la mémoire
STATUS Registre d’état
• La mémoire RAM est organisée en deux banques (pages): Bank0 et Bank1
 Pour accéder à un registre, il faut d'abord se placer dans la banque où il se
trouve
 L’accès à la page est réalisé en positionnant le bit RP0 du registre STATUS
(Adresse 03h ou 83h)
RP0 = 0 → Bank 0
RP0 = 1 → Bank 1

o Les bits 7 et 6 ne sont pas utilisés pour le PIC16F84A


o TO(Time Out) : débordement du timer WDT
o PD (Power Down) : Ce bit va passer à «0» lorsque le uc recontre
l’instruction « Sleep »(mise en veille)
o Z (zéro) :résultat nul pour une opération arithmétique et logique.
o DC (digit carry): retenue sur un quartet ( 4 bits )
o C (carry): retenue sur un octet ( 8 bits ).

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 39
Organisation de la mémoire

INTCON (0B et 8B ): Contrôle des 4 interruptions

 GIE (Global Interrupt Enable) : masque global d’inter.


 EEIE (EEProm Interrupt Enable): autorise l'interruption venant de
l'EEPROM.
 T0IE (Timer 0 Interrupt Enable): autorise l'interruption provoquée par
le débordement du TIMER0
 INTE (Interrupt Enable): autorise l’interruption provoquée par un
changement d'état sur broche RB0/INT
.

40
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA
Organisation de la mémoire

RBIE (RB Interrupt Enable): autorise les interruptions provoquées par un


changement d'états sur l'une des broches RB4 à RB7.
Si ces bits sont mis à 1 , ils autorisent les interruptions pour lesquels ils
sont dédiés .
Drapeaux :
T0IF (Timer 0 Interrupt Flag): débordement du timer
INTF ( Interrupt Flag) : interruption provoquée par la broche RB0/INT
RBIF ( RB Interrupt Flag): interruption provoquée par les broches RB4-
RB7
 Pour les 68 octets de la mémoire utilisateur, l'utilisation des pages (Bank )
n'est pas nécessaire puisque Bank0 est mappé dans Bank1. Cela signifie
qu'écrire une donnée à l'adresse 0CH ou à l'adresse 8CH revient au même.

41
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA
OPTION REGISTER (81h):
8 bits (tous à 1 au RESET) affectant le comportement des E/S et des timers.

RBPU(RB Pull Up) :Résistances de tirage à Vdd des entrées du port B. Si


RBPU=0 les résistances de pull-up sont connectées en interne sur
l'ensemble du port B.
INTEDG ( Interrupt Edge select bit) :
1 = Interruption si front montant sur la broche PB0/IRQ (pin 6).
0 = Interruption si front descendant sur PB0/IRQ.
T0CS(TMR0 Clock Source Select ): sélection du signal alimentant le timer 0 :
0 pour horloge interne, 1 pour RA4/T0CLK
T0SE(TMR0 Source Edge Select): sélection du front actif du signal timer (
0 pour front montant).
PSA (Prescaler assignment) :0 pour Timer 0 et 1 pour chien de garde WDT.
PS2:0 :sélection de la valeur du diviseur de fréquence pour les timers.

42
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA
Organisation de la mémoire
• Registres SFRs du PIC16F84A

SFRs du BANK0
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 43
Organisation de la mémoire

SFRs du BANK1
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 44
Organisation de la mémoire

 INDF (00h ou 80h) : Utilise le contenu de FSR (File Select Register) pour
l’accès indirect à la mémoire
 TM0(01h) : Registre lié au Compteur/Timer0
 PCL (02h ou 82h) : Contient les 8 bits du poids faible du compteur programme
(PC)
 STATUS (03h ou 83h) : Il contient l’état de l’unité arithmétique et logique ainsi
que le bit de sélection des banques
 FSR (04h ou 84h) : Permet l’adressage indirect
 PORTA (05h) : Donne l’accès en lecture ou en écriture du port A
 PORTB (06h) : Donne l’accès en lecture ou en écriture du port B
 EEDATA (08h) : Permet l’accès aux donnés dans la mémoire EEPROM
 EEADR (09h) : Permet l’accès aux adresses de la mémoire EEPROM

RST(S6)-ENSA
LP_IS -KENITRA
(S6)-EST-GUELMIM 45
Organisation de la mémoire

 PCLATH (0Ah ou 8Ah) : Contient les 5 bits du poids fort du compteur


programme (PC)
 INTCON (0Bh ou 8Bh) : Registre de contrôle des 4 sources d’interruptions . Il
contient les masques et les drapeaux
 OPTION_REG (81h) : Contient les bits de configurations pour divers
périphériques
 TRISA(85h) : Indique la direction (entrée ou sortie) du port A
 TRISB (86h) : Indique la direction (entrée ou sortie) du port B
 EECON1 (88h) et EECON1 (89h) : Permettent le contrôle d’accès à la
mémoire EEPROM

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 46
Organisation de la mémoire
 Mémoire EEPROM
• Le PIC possède une zone EEPROM de 64 octets
• Accessible en lecture et en écriture par le programme
• Les données sont conservées même si l’alimentation est éteinte
• L’accès à cette mémoire requiert l’utilisation des registres dédiés
• La lecture et l’écriture ne peuvent s’exécuter que selon des séquences
particulières

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 47
L’ALU et le registre W
 C'est une ALU 8 Bits qui réalise les opérations arithmétique et logique entre
l'accumulateur W (Work register) et n'importe quel autre registre 'F‘ (File registre)
ou constante K
 L'accumulateur W est un registre de travail 8 bits, il n'a pas d'adresse comme les
autres SFR
 Pour les instructions à deux opérandes, c'est toujours lui qui contient un des
deux opérandes
 Pour les instructions à un opérande, celui-ci peut être soit W soit n'importe quel
registre F
 Le résultat de l'opération peut être placé soit dans le registre de travail W soit
dans le registre F
Exemple :

ADDWF 0x1C,W ; Ajouter le contenu de l’adresse 0X1C au registre W et mettre le résultat


;dans W

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 48
Horloge
 Le PIC16F84A peut fonctionner avec 4 sources d’oscillateurs différentes :
• LP : Low Power Crystal
• XT : Crystal/Resonator
• HS : High Speed Crystal
• RC : Resistor/Capacitor
 Le choix de la source d’horloge se fait par les deux bits de configurations Fosc1
et Fosc0
 L’horloge peut être externe ou interne. Cette dernière est constituée d'un
oscillateur à quartz ou d'un oscillateur RC

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 49
Horloge

 Avec l'oscillateur à Quartz, on peut avoir des fréquences allant jusqu'à 20 MHz
selon le type du μC
 Avec un oscillateur RC, la fréquence de l'oscillation est fixée par Vdd, Rext et
Cext. Elle peut varier légèrement d'un circuit à l'autre

LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA 50
 https://www.microchip.com/wwwprod
ucts/en/PIC16F84A

51
LP_IS (S6)-EST-GUELMIM
RST(S6)-ENSA -KENITRA
Systèmes Embarqués
--Systèmes à Microcontrôleurs--

Jeu d’instructions du PIC 16F84A

RST(S6)-ENSA -KENITRA 52
Plan

Introduction
Instructions opérant sur registre
Instructions opérant sur un bit
Instructions opérant sur une constante
Instructions de saut et d’appel de procédures

RST(S6)-ENSA -KENITRA 53
introduction

 Le PIC 16F84A possède 35 instructions


 Chaque instruction du PIC16F84A est codé sur 14 bits divisés en:
• Un Code opération qui spécifie le type d’instruction
• Un Opérande
 On distingue :
• Instructions opérant sur registre
• Instructions opérant sur un bit
• Instructions opérant sur une constante
• Instructions de saut et d’appel de procédures

RST(S6)-ENSA -KENITRA 54
Instructions opérant sur registre
 Ce sont des instructions qui manipulent un octet se trouvant dans la RAM. Ça
peut être un registre de configuration SFR ou une case mémoire quelconque
(Registre GPR)

RST(S6)-ENSA -KENITRA 55
Instructions opérant sur registre

 F (File) désigne une adresse, qui appartient (0x00 à 0x7F), de n'importe quel
registre SFR ou GPR
 Pour les registres SFR, on peut utiliser leurs noms à condition d'inclure le fichier
p16F84A.inc dans le programme
 W (Work register) : registre de travail qui fait la fonction d’un accumulateur
 d (Destination select)
• d=0 ou W : Stockage du résultat dans W
• d=1 ou f : Stockage du résultat dans F(File)

RST(S6)-ENSA -KENITRA 56
Instructions opérant sur registre
• Exemples
 Écrire la partie du programme qui permet de faire l’addition des contenus des
cases mémoires d’adresses 0x1Ch et 0x1Dh et mettre le résultat dans la case
mémoire d’adresse 0x1Eh

MOVF 0x1C, 0 ; recopie le contenu de l’adresse 1Ch dans le registre de travail W


ADDWF 0x1D, 0 ; faire l’addition entre W et le contenu de l’adresse ;0x1D et mettre le
résultat dans W
MOVWF 0x1E ; copier le contenu de W dans la case mémoire 0x1E

 Écrire la partie du programme qui permet de mettre à zéro le port A et le port B

CLRF 0x5 ; l’écriture CLRF PORTA est aussi valable


CLRF 0x6 ; l’écriture CLRF PORTB est aussi valable

 Écrire la partie du programme qui permet de complémenter le contenu du port


B
COMF PORTB ; Inverser les bits du port B

RST(S6)-ENSA -KENITRA 57
Instructions opérant sur un bit

 Ce sont des instructions destinées à manipuler directement un bit d’un registre


que se soit un registre de configuration SFR ou une case mémoire quelconque
(registre GPR). Tous les bits de la RAM peuvent être manipulé individuellement

 b : numéro du bit dans un registre de 8 bits, qui peut être remplacé le nom du
bit si le fichier p16F84A.inc est inclus dans le programme

RST(S6)-ENSA -KENITRA 58
Instructions opérant sur un bit

• Exemples
 Écrire la partie du programme qui permettra de mettre 1 le bit RB5 du PORTB
BSF 0x06, 5 ; on peut aussi faire BSF PORTB,RB5
 Écrire la partie du programme qui permet de mettre à zéro le bit 3 du port A et
le bit 5 du port B
BCF PORTA,3 ; mettre à 0 le bit 3 du port A
BCF PORTB,5 ; mettre à 0 le bit 5 du port B

 Écrire la partie du programme qui permet de mettre à 1 le bit de sélection de


page, RP0, du registre STATUS

BSF STATUS, RP0 ; Mettre à 1 le bit RP0 du STATUS: se mettre sur ;BANK1

RST(S6)-ENSA -KENITRA 59
Instructions opérant sur une constante

 Elles manipulent les données qui sont codés directement dans l’instruction. Ce
sont les instructions entre l’accumulateur W est une constante K

RST(S6)-ENSA -KENITRA 60
Instructions opérant sur une constante

• Exemples
 Écrire la partie du programme qui permettra de faire l’addition entre la valeur
0x55 et le contenu du registre W
ADDLW 0x55 ; W contiendra le résultat W+0x55

 Écrire la partie du programme qui permet d’écrire la valeur 0x12 sur le port B
MOVLW 0x12 ; mettre 0x12 dans le registre W
MOVWF PORTB ; transférer W=0x55 sur PORTB

 Écrire la partie du programme qui permet de faire un « ET » logique entre 0x55


et 0x2D et écrire le résultat dans le port B

MOVLW 0x55 ; mettre 0x55 dans W


ANDLW 0x2D ; faire un ET logique entre W=0x55 et 0x2D et mettre le ;résultat dans W
MOVWF PORTB ; transférer W dans le port B

RST(S6)-ENSA -KENITRA 61
Instructions de saut et d’appel de procédures

 Ce sont des instructions qui provoque une rupture dans la séquence de


déroulement du programme comme CALL et GOTO

RST(S6)-ENSA -KENITRA 62
Instructions de saut et d’appel de procédures

• L’instruction GOTO

 Permet de transférer l’exécution à une autre position du programme repérée par


une étiquette (label)

Instruction 1
Instruction 2
Goto bonjour
Instruction 3
Instruction 4
Instruction 5
bonjour Instruction 6
Instruction 7

RST(S6)-ENSA -KENITRA 63
Instructions de saut et d’appel de procédures

• L’instruction CALL
 L’instruction call permet d’appeler une fonction
 Une fonction est un sous programme écrit à la
suite du programme principal. Sa première ligne
doit comporter une étiquette et elle doit se
terminer par return

 La différence en call et goto est que :


o quant le processeur rencontre l’instruction
call, il sauvegarde l’adresse de la ligne
suivante dans la pille avant d’aller exécuter
les instructions constituant la fonction
o Comme ça, quand il rencontre l’instruction
return, il sait où il doit retourner pour
continuer l’exécution du programme principal

RST(S6)-ENSA -KENITRA 64
Systèmes Embarqués
--Systèmes à Microcontrôleurs--

Bases de la programmation en langage C


Usage de mikroC PRO for PIC

RST(S6)-ENSA -KENITRA 65
Plan

Programmation en langage machine


Programmation en langage Assembleur
Programmation en langage haut niveau
Premier programme en langage C
Types de données
Les variables
Les pointeurs
Les constantes

RST(S6)-ENSA -KENITRA 66
Plan

Opérateurs, opérations et expressions


Structures conditionnelles
Les instructions de boucles
Les tableaux et les chaines de caractères
Les fonctions
Les spécificités du compilateur mikroC Pro
Compilateur mikroC PRO for PIC
Simulation sous PROTEUS ISIS
Exemples

RST(S6)-ENSA -KENITRA 67
Programmation en langage machine

 Le microcontrôleur exécute le programme chargé dans sa mémoire programme


 Le code se trouvant dans la mémoire programme est un code exécutable
composé des « 1 » et des « 0 », appelé code machine
 Chaque mot dans la mémoire peut avoir 12, 14 ou 16 bits selon l’architecture du
PIC
 Chaque mot est considéré par la CPU comme une commande à exécuter pendant
le fonctionnement du PIC
 Le code exécutable est souvent représenté comme une séquence de
nombres hexadécimaux appelé code hexadécimal.

RST(S6)-ENSA -KENITRA 68
Programmation en langage machine

RST(S6)-ENSA -KENITRA 69
Programmation en langage Assembleur

 L’écriture du code exécutable est difficile et fatigante


 Le premier langage de programmation « haut niveau » des PIC est l’assembleur
 Le langage représente le langage machine sous une forme lisible par un humain
 Les combinaisons de bits du langage machine sont remplacés par des symboles
appelés mnémoniques
 Le code exécutable est obtenu, à partir du programme assembleur, par un
programme spécial appelé compilateur
 Chaque instruction du programme assembleur correspond à une location
mémoire du PIC

RST(S6)-ENSA -KENITRA 70
Programmation en langage Assembleur

RST(S6)-ENSA -KENITRA 71
Programmation en langage haut niveau

 Les programmeurs ont toujours besoin d'un langage de programmation proche


de la langue utilisée dans la vie de tous les jours
 Un langage haut niveau est nécessaire : l’un d’eux est le langage C ( qui sera
étudié par la suite)
 Le principal avantage de ces langages est la simplicité de l'écriture du
programme
 Les instructions d’un langage haut niveau sont encapsulées dans des fonctions
• Une fonction privilégiée du langage C est la fonction main() qui est le point
d’entrée de tout programme C
 Comme dans le langage assembleur, un programme spécial appelé compilateur
s’occupe de la traduction en langage machine

RST(S6)-ENSA -KENITRA 72
Programmation en langage haut niveau

RST(S6)-ENSA -KENITRA 73
Programmation en langage haut niveau

Exemple de programme écrit en langage C destiné a un PIC

RST(S6)-ENSA -KENITRA 74
Programmation en langage haut niveau

Programme compilé ( sous mikroC for PIC : Menu: View / Assembly)

RST(S6)-ENSA -KENITRA 75
Programmation en langage haut niveau

Programmation du MCU

RST(S6)-ENSA -KENITRA 76
Premier programme en langage C

RST(S6)-ENSA -KENITRA 77
Types de données

RST(S6)-ENSA -KENITRA 79
Les variables
 Le nom de la variable peut contenir des caractères alphabétiques de A à Z (a -z),
les chiffres 0-9 et le caractère de soulignement '_'. Le compilateur est sensible à
la casse
 Les noms de variables ne doivent pas commencer par un chiffre
 Un nom d’une variable ne peut pas prendre le nom d’un nom réservé du langage
: exemple if , while …
 Chaque variable doit être déclarée en spécifiant son type au début du
programme avant son utilisation

 Le processus d'attribution d'une valeur initiale et le type déclarant peut être


effectuée en une seule étape

RST(S6)-ENSA -KENITRA 80
Les pointeurs
 La valeur contenue dans une variable de type pointeur est l’adresse d’une
donnée stockée en mémoire
 Une variable pointeur est déclaré comme suit :

 Exemples :

RST(S6)-ENSA -KENITRA 81
Les pointeurs
 L’opérateur & permet d’initialiser le pointeur qui obtient ainsi l’adresse de
n’importe quelle variable (on parle également de référence) et retourne ainsi un
pointeur sur la variable manipulée. Il convient de vérifier que la variable et le
pointeur sont de type compatible
 L’opérateur * permet à un pointeur sur une variable, de lire et de modifier la
valeur de celle-ci

 La représentation en mémoire d’un pointeur p sur un entier i est donnée comme


suit :

RST(S6)-ENSA -KENITRA 82
Les pointeurs

 Exemple 1 :

RST(S6)-ENSA -KENITRA 83
Les pointeurs

 Exemple 2 :

RST(S6)-ENSA -KENITRA 84
Les constantes

 Une constante est un nombre ou un caractère ayant une valeur fixe qui ne peut
être modifiée pendant l'exécution du programme
 Contrairement aux variables, les constantes sont stockées dans la mémoire flash
de programme du microcontrôleur dans le but d'économiser l'espace RAM
 Le compilateur les reconnaît par le préfixe const :

 Constantes entières

RST(S6)-ENSA -KENITRA 85
Les constantes

 Constantes avec virgules flottante


• Elles se composent d'une partie entière, un point, une partie fractionnaire et
en option, un e ou E suivie d'un exposant entier signé

 Constantes caractère (ASCII)


• Une constante caractère est un caractère entre guillemets simples

RST(S6)-ENSA -KENITRA 86
Les constantes

 Constantes chaine de caractères

 Constantes énumérées
• C’est un type spécial de constantes entières qui permet de rendre un programme
plus complet et plus facile à suivre en assignant aux éléments des nombres
ordinaux
• Dans l'exemple suivant, on attribue automatiquement au premier élément
la valeur 0, au second la valeur 1, au troisième la valeur 2, etc :

RST(S6)-ENSA -KENITRA 87
Les constantes

• Sur chaque occurrence des mots «UP», «DOWN» ,«LEFT» et «RIGHT», dans le
programme, le compilateur va les remplacer par les numéros appropriés (0-3)
• Concrètement, si les broches 0, 1, 2 et 3 du port B sont reliés à des moteurs, la
commande pour démarrer le moteur 'RIGHT' relié à bit 3 du port B se présente
comme suit :

RST(S6)-ENSA -KENITRA 88
Opérateurs, opérations et expressions
 La valeur contenue dans une variable de type pointeur est l’adresse d’une
donnée stockée en mémoire 0101 1010
 Une variable pointeur est déclaré comme suit :

b=11110011 a=00001100

RST(S6)-ENSA -KENITRA 89
Structures conditionnelles

 Instruction if-else

RST(S6)-ENSA -KENITRA 90
Structures conditionnelles
 Instruction switch

RST(S6)-ENSA -KENITRA 91
Les instructions de boucles

 Instruction while

 Instruction for

RST(S6)-ENSA -KENITRA 92
Les instructions de boucles

 Instruction do-while

 Instruction break utilisé dans une boucle


• Le mot-clé break, utilisé dans une boucle, permet d’interrompre une boucle et
d’en sortir même si l’expression conditionnelle d’arrêt de boucle n’a pas été
vérifiée. Ce mot-clé est à utiliser avec prudence

RST(S6)-ENSA -KENITRA 93
Les tableaux et les chaines de caractères

 Les tableaux
• Un tableau est un regroupement consécutif de données de même type et de
taille fixe
• À chaque entrée du tableau correspond un indice pouvant prendre une valeur
dans l’intervalle [0, taille – 1]
• Il est possible de déclarer des tableaux avec de multiples indices (tableaux à
plusieurs dimensions) comme les matrices

RST(S6)-ENSA -KENITRA 94
Les tableaux et les chaines de caractères
• Exemple

RST(S6)-ENSA -KENITRA 95
Les tableaux et les chaines de caractères

 Les chaines de caractère


• Une chaîne de caractères est un cas particulier de tableau contenant des
éléments de type char uniquement et contenant systématiquement 0 comme
dernière valeur que l’on nomme zéro terminal ou caractère nul noté '\0'
• En tenant compte du zéro terminal, la taille exacte d'une chaîne de caractère
est égale à nb de caractères + 1
• Un tableau peut être initialisé à l’aide d’une chaîne de caractères entre guillemets
: le zéro terminal est ajouté automatiquement par le compilateur
• Une chaîne caractère est affichable à l’aide de la fonction printf en utilisant la
chaîne de formatage %s
• Il existe des fonctions particulières pour manipuler les chaînes de caractères,
comme la concaténation

RST(S6)-ENSA -KENITRA 96
Les tableaux et les chaines de caractères
• Exemple

RST(S6)-ENSA -KENITRA 97
Les fonctions
 Une fonction consiste en un sous-programme appliquant des commandes précises
sur des variables données
 En règle générale, il est recommandé d'avoir un programme composé d'un grand
nombre de fonctions simples que de quelques fonctions complexes
 Chaque fonction doit être correctement déclarée afin d'être correctement interprétés
lors du processus de compilation. La déclaration contient les éléments suivants :
• Nom de la fonction
• Corps de la fonction
• Liste des paramètres
• Déclaration des paramètres
• Type du résultat de la fonction

RST(S6)-ENSA -KENITRA 98
Les fonctions
 Exemple

 Notez que la fonction peut ne pas avoir besoin des paramètres, mais les
parenthèses restent obligatoires pour que le compilateur interprète la fonction
 La fonction peut aussi ne pas retourner de résultats. Le compilateur reconnaît
ces fonctions par le type void de leur résultat :

RST(S6)-ENSA -KENITRA 99
Les fonctions

 Les prototypes ,définitions et appels


• Exemple

RST(S6)-ENSA -KENITRA 100

Vous aimerez peut-être aussi