Vous êtes sur la page 1sur 4

08/03/2020

Ecole Nationale Polytechnique –Constantine.


Département EEA 1. Différents langages de programmation
Quatrième Année Ingénieurs –Semestre 2.
Automatique/Electrotechnique Quand on choisit de programmer un microcontrôleur,
Cours. Circuits Programmables il faut savoir que sauf exceptions, nous avons le choix
Chapitre III. (Partie 1) entre plusieurs langages de programmation.
Programmation des microcontrôleurs En ce qui concerne le PIC, les programmes se
développent avec le logiciel MPLAB, qui nous permet
Durée du Cours: 1h30
Présenté par: Dr. S. BENSEGUENI
de programmer le PIC dans divers langages. Parmi
(benskandix@gmail.com) ceux-ci, le principal langage est le C pour les langages
hauts niveaux, et l’assembleur pour les langages bas
niveaux.

Année Universitaire. 2019-2020 Circuits Programmables Dr. S. Bensegueni

1. Différents langages de programmation 1. Différents langages de programmation


Les langages bas niveaux sont les plus proches de la Les langages hauts niveaux sont des langages faciles à
machine, généralement l’équivalent de la langue comprendre et à mettre en œuvre, avec un minimum de
connaissance. Ce type de langage facilite la maintenance
natale du système : L’assembleur en fait partie. lors de problèmes, car il est aisé de comprendre un
Proche de la machine, ce langage permet d’optimiser programme haut niveau.
le programme. Il reste cependant difficile à mettre en Ce type de langage est, en effet, plus proche de
œuvre pour des programmes complexes, mais l’utilisateur que de la machine.
abordable pour des programmes de base. Ces langages utilisent des compilateurs, qui sont une
sorte de convertisseurs ou des dictionnaires
Adopté par un grand nombre d’industriels comme
automatiques. Ces compilateurs font la conversion directe
langage de référence, il reste cependant difficilement entre le langage haut niveau et le langage assembleur.
réparable pour une tierce personne.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

1. Différents langages de programmation 1. Différents langages de programmation


Plutôt que de traiter avec des registres, des adresses En comparant ces deux types de langage, et dans la
mémoire et des piles d’appels, un langage de haut mesure où les compilateurs sont performants, il apparaît
niveau traite des variables, des tableaux, des comme plus pratique de choisir le langage C, plutôt que le
expressions arithmétiques ou booléennes, des sous- langage assembleur, tant pour la simplicité de
programmes et des fonctions, des boucles et d’autres programmation, que pour la facilité d’utilisation.
concepts abstraits. Dans ce qui suit, on exposera les Instructions et les
commandes de bases de l’assembleur pour les
Dans un langage de haut niveau, la conception met
microcontrôleurs de type PIC, en proposant quelques
l’accent sur la convivialité plutôt que sur l’efficacité
exemples de programmes. Puis on détaillera le langage de
optimale du programme. programmation C pour les microcontrôleurs et on
montera les différences avec le C classique.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

1
08/03/2020

2. Langage assembleur du PIC 2. Langage assembleur du PIC


Les codes en assembleur de PIC consistent en un Des étiquettes indiquant un emplacement dans le
fichier texte ASCII comprenant les éléments suivants: code de langue d'assemblage. Les références à
Le code machine (avec les possibles opérandes) d'autres fichiers pouvant être chargés ou inclus lors
représentant les instructions matérielles faisant partie de l'assemblage. Les commentaires sous la forme de
du jeu d'instructions du processeur, y compris les
symboles et les opérateurs arithmétiques et logiques lignes de texte, ou de parties de lignes de texte, qui
reconnus par l'assembleur. Les directives sont ignorés par l'assembleur mais qui servent à
d'assemblage (y compris les macro-directives) sous la expliciter, documenter ou organiser le code.
forme de mots-clés reconnus par le programme
assembleur ou par d'autres composants du logiciel de
développement.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

2. Langage assembleur du PIC


2. Langage assembleur du PIC
(Directives d’assemblage du PIC)
La programmation dans n'importe quelle langue peut Les directives d’assemblage sont des mots clés reconnus par le
programme assembleur mais ils ne seront pas traduite par un code
être facilitée en utilisant des fragments de code ou machine. Parmi les directives d’assemblage utilisées par les
programmes en PIC, on cite :
des sous-programmes prédéveloppés et pré-testés LIST : qui indiquera le processeur ‘p’ (ou le type de microcontrôleur)
pour effectuer des opérations courantes ou utilisé dans l’application programmée, ‘f’ le format du fichier .hex à
produire, ‘r’ la base numérique utilisée par défaut.
fréquentes. Plus cette bibliothèque personnelle est INCLUDE : est utilisée pour insérer un fichier source.
organisée, codée et testée, plus il sera facile de CONFIG : utilisée pour configurer le fonctionnement de plusieurs
développer une nouvelle application. paramètres du PIC, comme : le debugging, le watchdog, la protection
du programme, l’oscillateur utilisé (XS, LP, HS),…
En programmation, la réutilisabilité favorise la EQU : affecte une valeur à un nom de constante.
productivité, comme dans beaucoup d'autres #DEFINE : remplacer un texte plus complexe par une chaine de
caractères.
domaines. MCROS : remplacer des mots de code par une chaîne de caractères.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

2. Langage assembleur du PIC 2. Langage assembleur du PIC


(Directives d’assemblage du PIC) (Jeu d’instruction en assembleur du PIC)
ORG : suivie d’une adresse pour déterminer l’adresse Le langage assembleur est très nécessaire, parce qu’il
du début du programme. permet d’optimiser les programmes et de gagner de
END : montre la fin du programme. l’espace, qui très précieuse sur les PIC et en particularité
sur le 16F877A. Il faut noter que, quand on lit le mot
instruction sur la documentation technique de Microchip,
Exemple 3.3. celle-ci fait référence à une instruction assembleur. Car
LIST p=16f877A, f=inhx8m, r=dec c’est le langage par défaut du PIC.
INCLUDE “p16f877A.inc” Le PIC 16F877A est caractérisé par 35 instructions
__CONFIG _CR_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF pouvant être des instructions de transfert, arithmétiques,
logiques, de saut,... Le registre (f) se comportant comme
un dossier (file : f) qui contient des fichiers (littérals : k).
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

2
08/03/2020

2. Langage assembleur du PIC 2. Langage assembleur du PIC


(Jeu d’instruction en assembleur du PIC) (Jeu d’instruction en assembleur du PIC)
Une instruction est codée en binaire sur un mot de 14 bits Opérations orientées octet du dossier :
représentant un cycle d’opération ou quatre périodes ou cycles Le code opération pour ce genre d’instruction a la
de l’oscillateur (Q) :
structure suivante :

Une instruction est scindée en plusieurs champs (code


opération, registre du dossier,…), comme suit : addwf f,d : ajouter f à w. Si d=0 le résultat sera mis dans
w, si d=1 le résultat sera mis dans f.
andwf f,d : génere le ET logique de f et w. Si d=0 le
résultat sera mis dans w, si d=1 le résultat sera mis dans f.
clrw : efface le rgistre w.
. clrf f : efface le rgistre f.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

2. Langage assembleur du PIC 2. Langage assembleur du PIC


(Jeu d’instruction en assembleur du PIC) (Jeu d’instruction en assembleur du PIC)
Opérations orientées octet du dossier : Opérations orientées octet du dossier :
comf f,d : complémentaire du registre f. Si d=0 le résultat sera iorwf f,d : génère un OU (inclusif) logique de f et w. Si
mis dans w, si d=1 le résultat sera mis dans f.
decf f,d : décrémenter le registre f d’une unité. Si d=0 le d=0 le résultat sera mis dans w, si d=1 le résultat sera mis
résultat sera mis dans w, si d=1 le résultat sera mis dans f. dans f.
decfsz f,d : décrémenter le registre f d’une unité et ignorer movf f,d : copier le registre f dans w si d=0, ou copier le
l’instruction suivante si le résultat est nul. Si d=0 le résultat sera registre w dans f si d=1.
mis dans w, si d=1 le résultat sera mis dans f.
incf f,d : incrémenter le registre f d’une unité. Si d=0 le résultat movwf f : copier le registre w dans le registre f.
sera mis dans w, si d=1 le résultat sera mis dans f. nop : pas d’opération.
incfsz f,d : incrémenter le registre f d’une unité et ignorer rlf f,d : rotation d’un bit à gauche du registre f à travers
l’instruction suivante si le résultat est nul. Si d=0 le résultat sera
mis dans w, si d=1 le résultat sera mis dans f. le carry. Si d=0 le résultat sera mis dans w, si d=1 le
résultat sera mis dans f.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

2. Langage assembleur du PIC 2. Langage assembleur du PIC


(Jeu d’instruction en assembleur du PIC) (Jeu d’instruction en assembleur du PIC)
Opérations orientées octet du dossier : Opérations orientées bit du dossier :
rrf f,d : rotation d’un bit à droite du registre f à travers le Le code opération pour ce genre d’instruction a la structure
carry. Si d=0 le résultat sera mis dans w, si d=1 le résultat suivante :
sera mis dans f.
subwf f,d : soustraire le registre w du registre f et mettre
le résultat dans w si d=0, et mettre le résultat dans f si
d=1.
swapf f,d : échanger le digit de poids fort avec le digit de addlw k : ajouter une littéral k à w et mettre le résultat dans w.
poids faible de f. Si d=0 le résultat sera mis dans w, si d=1 andlw k : générer un ET logique d’une littéral k et w et mettre
le résultat sera mis dans f. le résultat dans w.
xorwf f,d : génère un OU logique exclusif de f et w. Si clrwdt : effacer le chien de garde.
d=0 le résultat sera mis dans w, si d=1 le résultat sera mis call k : appeler un sous-programme se trouvant à l’étiquette k.
dans f.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

3
08/03/2020

2. Langage assembleur du PIC 2. Langage assembleur du PIC


(Jeu d’instruction en assembleur du PIC) (Jeu d’instruction en assembleur du PIC)
Opérations orientées bit du dossier : Opérations orientées bit du dossier :
goto k : saut non-conditionnelle à l’étiquette k. retfie : retour de de sous-programme d’interruption.
retlw k : retour du sous-programme avec la mis de k dans
w.
return : retour du sous-programme.
sleep : mettre le microcontrôleur en mode de veille (sleep
iorlw k : génère un OU (inclusif) logique de la littéral mode).
k et le registre w. sublw k : sustraire le registre w de la littéral k et mettre
le résultat dans w.
movlw k : copier la littéral k dans le registre w. xorlw k : génère un OU logique exclusif de la littéral k et
w.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

2. Langage assembleur du PIC 2. Langage assembleur du PIC


(Jeu d’instruction en assembleur du PIC) (Types d’adressage du PIC)
Opérations sur les littérals et de contrôle : Avant de définir les types d’adressage, il faut décrire
Le code opération pour ce genre d’instruction a la le registre INDF. Ce registre est physiquement
structure suivante : inexistant, mais pour réaliser un adressage indirect, il
bcf f,b : mettre à zéro le bit b du registre f. faut adresser le registre INDF. Chaque instruction
utilisant le registre INDF va pointer l’adresse mémoire
bsf f,b : mettre à un le bit b du registre f. ayant comme valeur le contenu du FSR (File select
btfsc f,b : tester le bit b du registre f, s’il est nul, register).
ignorer l’instruction suivante.
btfss f,b : tester le bit b du registre f, s’il est égal à
un, ignorer l’instruction suivante.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

2. Langage assembleur du PIC 2. Langage assembleur du PIC


(Types d’adressage du PIC) (Types d’adressage du PIC)
Exemple. Donc, la différence entre l’adressage direct et indirect est
Le programme suivant utilise un adressage indirect pour que pour le direct on utilise la valeur directe du code
effacer la zone mémoire de 20h à 2Fh : opération avec la présélection des RP1 et RP0, alors que
MOVLW 0x20 ;initialization du pointeur pour l’indirect on va concaténer les 8 bits du registre FSR
MOVWF FSR ;mettre 0x20 dans FSR et IRP, de la manière schématisée dans la figure suivante :
NEXT CLRF INDF ; la case memoire pointée par 0x20
INCF FSR,1 ;incremente le pointeur
BTFSS FSR,4 ;si égal toutes les cases sont
;effacées
GOTO NEXT ;non effacées reboucler à next
.
Circuits Programmables Dr. S. Bensegueni Circuits Programmables Dr. S. Bensegueni

Vous aimerez peut-être aussi