Vous êtes sur la page 1sur 50

PIC

ed
Cours de la première année cycle ingénieur

am
Mohamed Massour El Aoud

January �, ����

oh
M
d
ou
A

ENSA Khouribga
El
ur
so
as

A LATEX lover
M
ed
am
oh
M
d
ou
A

Disclaimer
El

Copyright

Colophon
ur

This document was typeset with the help of LATEX editing.


so

(You are welcome to contribute!)


For all your comments are welcome
massour@usms.ma
as

Publisher
First printed in January ���� by, ENSA Khouribga
M
ed
� Introduction

am
oh
La situation dans laquelle nous nous trouvons aujourd’hui dans le domaine des �.� Introduction . . . . . . . . . �
microcontrôleurs trouve ses origines dans le développement de la technologie ALL THE MICROCON-
des circuits intégrés. Il nous a permis de stocker des centaines de milliers de TROLLER CAN DO . . . . . . �

M
transistors dans une seule puce, ce qui était une condition préalable à la fabrication �.� Rappel logique de base . . �
de microprocesseurs. Les premiers ordinateurs ont été fabriqués en y ajoutant
des périphériques externes, tels que de la mémoire, des lignes d’entrée/sortie,
REGISTER . . . . . . . . . . �
SFR REGISTERS . . . . . . �
INPUT / OUTPUT PORTS �
d
des minuteries et d’autres circuits. L’augmentation supplémentaire de la densité INTERRUPT . . . . . . . . . �
des boîtiers a entraîné la conception d’un circuit intégré contenant à la fois un CENTRAL PROCESSOR
ou

processeur et des périphériques. C’est ainsi qu’a été développée la première puce UNIT (CPU) . . . . . . . . . . . �
contenant un micro-ordinateur connu plus tard sous le nom de microcontrôleur. BUS . . . . . . . . . . . . . . . �
SERIAL COMMUNICA-
TION . . . . . . . . . . . . . . . . �
A

�.� Introduction BAUD RATE . . . . . . . . . �


I�C (CIRCUIT INTER INTÉ-
GRÉ) . . . . . . . . . . . . . . . . �
El

Les novices en électronique pensent généralement que le microcontrôleur est le SPI (BUS D’INTERFACE PÉ-
même que le microprocesseur. Ce n’est pas vrai. Ils diffèrent les uns des autres RIPHÉRIQUE SÉRIE) . . . . . �
à bien des égards. La première et la plus importante différence en faveur du UART (RÉCEPTEUR/ÉMET-
microcontrôleur est sa fonctionnalité. Pour que le microprocesseur puisse être TEUR ASYNCHRONE UNI-
ur

utilisé, il faut lui ajouter d’autres composants, la mémoire en premier. Même s’il VERSEL) . . . . . . . . . . . . . �
est considéré comme une machine informatique puissante, il n’est pas adapté OSCILLATEUR . . . . . . . �
CIRCUIT
pour communiquer avec un environnement périphérique. Afin de permettre
so

D’ALIMENTATION . . . . . . �
au microprocesseur de communiquer avec l’environnement périphérique, des
MINUTEURS/COMP-
circuits spéciaux doivent être utilisés. C’était comme ça au début et c’est toujours TEURS . . . . . . . . . . . . . . . �
pareil aujourd’hui. D’autre part, le microcontrôleur est conçu pour être tout
as

UTILISATION
cela en un. Aucun autre composant externe spécialisé n’est nécessaire pour son D’UN PRÉDÉCAR-
application car tous les circuits nécessaires qui appartiennent par ailleurs aux TEUR(PRESCALER ) EN
M

périphériques y sont déjà intégrés. Il permet d’économiser le temps et l’espace FONCTIONNEMENT PAR
nécessaires à la conception d’un appareil. MINUTERIE . . . . . . . . . . . �
UTILISATION DE
L’INTERRUPTION DANS
ALL THE MICROCONTROLLER CAN DO LE FONCTIONNEMENT DE
LA MINUTERIE . . . . . . . ��
Il y a une dizaine d’années, la conception d’un dispositif électronique contrôlant COMPTEURS . . . . . . . ��
MINUTERIE DE CHIEN
l’ascenseur dans un immeuble à plusieurs étages était extrêmement difficile,
(WATCHDOG )DE GARDE ��
même pour une équipe d’experts. Avez-vous déjà pensé aux exigences auxquelles
A/D CONVERTER . . . . ��
un ascenseur ordinaire doit répondre ? Comment gérer la situation lorsque
ARCHITECTURE IN-
deux personnes ou plus appellent l’ascenseur en même temps ? Quel appel TERNE . . . . . . . . . . . . . . ��
est prioritaire ? Comment gérer question de sécurité, perte d’électricité, panne, �.� INSTRUCTION SET . . . ��
mauvaise utilisation...? Ce qui vient après la résolution de ces questions de base RISC (ORDINATEUR DE
JEU D’INSTRUCTIONS RÉ-
DUIT) . . . . . . . . . . . . . . ��
CISC (ORDINATEUR
� Introduction �

ed
am
oh
Figure �.�: Microcontrôleur

M
est un processus minutieux de conception d’une électronique appropriée à l’aide
d’un grand nombre de puces spécialisées. Selon la complexité de l’appareil, ce
processus peut prendre des semaines ou des mois. Une fois terminé, il est temps
d
de concevoir une carte de circuit imprimé et d’assembler le dispositif. Un appareil
ou

énorme ! C’est un autre travail de longue haleine et éprouvant. Enfin, lorsque


tout est terminé et testé à maintes reprises, le moment crucial vient où vous vous
concentrez, respirez profondément et allumez l’alimentation.
A

C’est généralement à ce moment-là que la fête se transforme en un véritable travail,


car les appareils électroniques ne commencent presque jamais à fonctionner
immédiatement. Préparez-vous à de nombreuses nuits blanches, des corrections,
El

des améliorations... et n’oubliez pas que nous parlons toujours de faire fonctionner
un ascenseur ordinaire.
Lorsque votre appareil commence enfin à fonctionner parfaitement et que tout
ur

le monde est satisfait et que vous êtes enfin payé pour le travail que vous avez
effectué, de nombreuses entreprises de construction s’intéressent à votre travail.
Bien sûr, si vous avez de la chance, un autre jour vous apportera une offre de
so

verrouillage d’un nouvel investisseur. Cependant, un nouveau bâtiment a quatre


étages de plus. Vous savez de quoi il s’agit ? Vous pensez pouvoir contrôler le
destin ? Vous allez réaliser un appareil universel utilisable dans des immeubles
as

de � à �� étages, un chef d’œuvre de l’électronique ?


D’accord, même si vous parvenez à fabriquer un tel bijou électronique, votre in-
vestisseur attendra devant votre porte en demandant une caméra dans l’ascenseur
M

ou de la musique relaxante en cas de panne d’ascenseur ou d’ascenseur à deux


portes. Quoi qu’il en soit, la loi de Murphy est inexorable et vous ne pourrez
certainement pas profiter de tous les efforts que vous aurez fournis. Malheureuse-
ment, tout ce qui a été dit maintenant est vrai. C’est ce que signifie réellement
« manipuler l’électronique ». Non, attendez, corrigeons-nous, c’était comme ça
jusqu’à ce que les premiers microcontrôleurs soient conçus - des microcontrôleurs
petits, puissants et bon marché. Depuis le moment où leur programmation a cessé
d’être une science, tout a pris une autre direction...
L’électronique capable de contrôler un petit sous-marin, une grue ou l’ascenseur
mentionné ci-dessus est désormais intégrée dans une seule puce. Les microcon-
trôleurs offrent une large gamme d’applications et seules certaines d’entre elles
sont normalement utilisées. C’est à vous de décider ce que vous voulez que le
� Introduction �

microcontrôleur fasse et d’y déposer un programme contenant les instructions


appropriées. Avant d’allumer l’appareil, son fonctionnement doit être testé par un
simulateur. Si tout fonctionne bien, intégrez le microcontrôleur à votre appareil.
Si jamais vous avez besoin de modifier, d’améliorer ou de mettre à niveau le
programme, faites-le. Jusqu’a quand? Jusqu’à ce que vous vous sentiez satisfait.
C’est tout.

�.� Rappel logique de base

ed
Le fonctionnement de ces éléments est basé sur des principes établis par un
mathématicien britannique George Boole au milieu du ��ème siècle, avant même
que la première ampoule ne soit inventée. À l’origine, l’idée principale était

am
d’exprimer des formes logiques à travers des fonctions algébriques. Une telle
réflexion a rapidement été transformée en un produit pratique qui a été évalué
bien plus tard dans ce que l’on appelle aujourd’hui des circuits logiques ET, OU
et NON. Le principe de leur fonctionnement est connu sous le nom d’algèbre de

oh
Boole.

REGISTER

M
En bref, un registre ou une cellule mémoire est un circuit électronique qui peut
mémoriser l’état d’un octet.
d
SFR REGISTERS
ou

En plus des registres qui n’ont pas de fonction particulière et prédéterminée,


chaque microcontrôleur possède un certain nombre de registres (SFR) dont la
A

fonction est prédéterminée par le constructeur. Leurs bits sont connectés (littérale- Figure �.�: REGISTER
ment) à des circuits internes du microcontrôleur tels que des minuteries, des
convertisseurs A/N, des oscillateurs et autres, ce qui signifie qu’ils commandent
El

directement le fonctionnement de ces circuits, c’est-à-dire : le microcontrôleur.


Imaginez huit commutateurs qui contrôlent le fonctionnement d’un petit circuit
dans le microcontrôleur - les registres de fonctions spéciales font exactement cela.
ur

En d’autres termes, l’état des bits du registre est modifié à partir du programme,
les registres exécutent de petits circuits dans le microcontrôleur ; ces circuits sont
via des broches de microcontrôleur connectées à l’électronique périphérique qui
so

est utilisée pour... Eh bien, c’est à vous de décider.

INPUT / OUTPUT PORTS


as

Afin de rendre le microcontrôleur utile, il doit être connecté à une électronique


M

supplémentaire, à savoir : des périphériques. Chaque microcontrôleur possède un


ou plusieurs registres (appelés ports) connectés aux broches du microcontrôleur.
Pourquoi entrée/sortie ? Parce que vous pouvez modifier une fonction de broche
à votre guise. Par exemple, supposons que vous souhaitiez que votre appareil
allume/éteigne trois LED de signal et surveille simultanément l’état logique de
cinq capteurs ou boutons-poussoirs. Certains des ports doivent être configurés de
sorte qu’il y ait trois sorties (connectées aux LED) et cinq entrées (connectées aux
capteurs).
� Introduction �

ed
am
oh
Figure �.�: SFR REGISTERS

Il est simplement effectué par un logiciel, ce qui signifie qu’une fonction de broche

M
peut être modifiée pendant le fonctionnement.
L’une des spécifications importantes des broches d’entrée/sortie (E/S) est le
courant maximum qu’elles peuvent gérer. Pour la plupart des microcontrôleurs,
le courant obtenu à partir d’une broche est suffisant pour activer une LED ou
d
un autre dispositif à faible courant (��-�� mA). Plus il y a de broches d’E/S,
ou

plus le courant maximum d’une broche est faible. En d’autres termes, le courant
maximum indiqué dans la fiche technique du microprocesseur est partagé sur
tous les ports d’E/S. Une autre fonction importante de la broche est qu’elle peut Figure �.�: INPUT / OUTPUT PORTS

avoir des résistances de rappel. Ces résistances connectent les broches à la tension
A

d’alimentation positive et entrent en vigueur lorsque la broche est configurée


comme une entrée connectée à un interrupteur mécanique ou à un bouton
poussoir. Les nouvelles versions de microcontrôleurs ont des résistances de rappel
El

configurables par logiciel. Chaque port d’E/S est généralement sous le contrôle
du SFR spécialisé, ce qui signifie que chaque bit de ce registre détermine l’état
de la broche du microcontrôleur correspondante. Par exemple, en écrivant un (�)
ur

logique dans un bit du registre de contrôle (SFR), la broche de port appropriée est
automatiquement configurée comme une entrée et la tension qui lui est apportée
peut être lue comme � ou �. Sinon, en écrivant zéro au SFR, la broche de port
so

appropriée est configurée en tant que sortie. Sa tension (�V ou �V) correspond à
l’état du bit de registre de port approprié.
as

INTERRUPT
M

La plupart des programmes utilisent des interruptions dans leur exécution


régulière. Le but du microcontrôleur est principalement de répondre aux change-
ments de son environnement. En d’autres termes, lorsqu’un événement a lieu,
le microcontrôleur fait quelque chose... Par exemple, lorsque vous appuyez sur
un bouton d’une télécommande, le microcontrôleur l’enregistre et répondre en
changeant de chaîne, en montant ou en baissant le volume... etc. Si le microcon-
trôleur passait le plus clair de son temps à vérifier sans cesse quelques boutons
pendant des heures ou des jours, ce ne serait pas pratique du tout. C’est pourquoi
le microcontrôleur a appris un truc au cours de son évolution. Au lieu de vérifier
chaque broche ou bit en permanence, le microcontrôleur délègue le « problème
d’attente » à un « spécialiste » qui ne répondra que lorsque quelque chose digne
d’attention se produit. Le signal qui informe l’unité centrale d’un tel événement
est appelé INTERRUPTION.
� Introduction �

CENTRAL PROCESSOR UNIT (CPU)

Comme son nom l’indique, il s’agit d’une unité qui surveille et contrôle tous les
processus au sein du microcontrôleur. Il se compose de plusieurs sous-unités,
dont les plus importantes sont :
I Le décodeur d’instructions est une partie de l’électronique qui décode les
instructions du programme et exécute d’autres circuits sur cette base. Le «
jeu d’instructions » qui est différent pour chaque famille de microcontrôleurs
exprime les capacités de ce circuit.

ed
I L’unité arithmétique et logique (ALU) effectue toutes les opérations math-
ématiques et logiques sur les données ; et Accumulateur est une SFR
étroitement liée au fonctionnement de l’ALU. C’est une sorte de bureau de
travail utilisé pour stocker toutes les données sur lesquelles une opération

am
doit être effectuée (ajout, décalage/déplacement... etc.). Il stocke également
les résultats prêts à être utilisés dans un traitement ultérieur.
L’un des SFR, appelé Status Register (PSW), est étroitement lié à l’accumulateur. Il

oh
indique à tout moment le « statut » d’un nombre stocké dans l’accumulateur (le
nombre est supérieur ou inférieur à zéro... etc.). L’accumulateur est également
appelé registre de travail et est marqué comme registre W ou simplement W, par
conséquent.

M
d
ou
A

Figure �.�: CENTRAL PROCESSOR UNIT


(CPU)
El

BUS

Un bus se compose de �, �� fils ou plus. Il existe deux types de bus : le bus


ur

d’adresses et le bus de données. Le bus d’adresses est constitué d’autant de lignes


que nécessaire pour l’adressage mémoire. Il est utilisé pour transmettre l’adresse
de la CPU à la mémoire. Le bus de données est aussi large que les données, dans
so

notre cas il fait � bits ou fils de large. Il est utilisé pour connecter tous les circuits
du microcontrôleur.
as

SERIAL COMMUNICATION
M

La connexion en parallèle entre le microcontrôleur et les périphériques via des


ports d’entrée/sortie est la solution idéale sur des distances plus courtes jusqu’à
plusieurs mètres. Cependant, dans d’autres cas, lorsqu’il est nécessaire d’établir
une communication entre deux appareils sur de plus longues distances, il n’est pas
possible d’utiliser une connexion parallèle. Au lieu de cela, la communication série
est utilisée. Aujourd’hui, la plupart des microcontrôleurs ont intégré plusieurs
systèmes différents pour la communication série en tant qu’équipement standard.
Lequel de ces systèmes sera utilisé dépend de nombreux facteurs dont les plus
importants sont :
1! Avec combien d’appareils le microcontrôleur doit-il échanger des données ?
1! À quelle vitesse l’échange de données doit-il être ?
1! Quelle est la distance entre les appareils ?
� Introduction �

1! Est-il nécessaire d’envoyer et de recevoir des données simultanément ?


L’une des choses les plus importantes concernant la communication série est
le protocole qui doit être strictement respecté. C’est un ensemble de règles qui
doivent être appliquées afin que les appareils puissent interpréter correctement
les données qu’ils s’échangent mutuellement. Heureusement, le microcontrôleur
s’en charge automatiquement, de sorte que le travail du programmeur/utilisateur
se réduit à une simple écriture (données à envoyer) et lecture (données reçues).

BAUD RATE

ed
Le terme débit en bauds est utilisé pour désigner le nombre de bits transférés par
seconde [bps]. Notez qu’il fait référence à des bits, pas à des octets. Le protocole

am
exige généralement que chaque octet soit transféré avec plusieurs bits de contrôle.
Cela signifie qu’un octet dans le flux de données série peut être composé de ��
bits. Par exemple, si le débit en bauds est de ��� bps, alors un maximum de �� et
un minimum de �� octets peuvent être transférés par seconde. Les systèmes de

oh
communication série les plus couramment utilisés sont :

I�C (CIRCUIT INTER INTÉGRÉ)

M
Le circuit inter-intégré est un système d’échange de données série entre les
microcontrôleurs et les circuits intégrés spécialisés d’une nouvelle génération.
d
Il est utilisé lorsque la distance entre eux est courte (le récepteur et l’émetteur
sont généralement sur la même carte imprimée). La connexion est établie via
ou

deux conducteurs. L’un est utilisé pour le transfert de données et l’autre pour
la synchronisation (signal d’horloge). Comme le montre la figure ci-dessous, un
appareil est toujours un maître. Il effectue l’adressage d’une puce esclave avant le
début de la communication. De cette façon, un microcontrôleur peut communiquer
A

avec ��� appareils différents. La vitesse de transmission est généralement de ���


Kb/sec (mode standard) ou de �� Kb/sec (mode de vitesse de transmission lente).
Des systèmes avec un débit en bauds de �,� Mb/sec sont récemment apparus.
El

La distance entre les appareils qui communiquent sur un bus I�C est limitée à
plusieurs mètres.
ur
so
as

Figure �.�: I�C (CIRCUIT INTER INTÉGRÉ)


M

SPI (BUS D’INTERFACE PÉRIPHÉRIQUE SÉRIE)

Un bus d’interface périphérique série (SPI) est un système de communication


série qui utilise jusqu’à quatre conducteurs, généralement trois. Un conducteur
est utilisé pour la réception de données, un pour l’envoi de données, un pour la
synchronisation et un pour la sélection d’un appareil avec lequel communiquer. Il
s’agit d’une connexion full duplex, ce qui signifie que les données sont envoyées
et reçues simultanément. Le débit en bauds maximum est supérieur à celui du
système de communication I�C.
� Introduction �

ed
Figure �.�: BUS D’INTERFACE PÉ-
RIPHÉRIQUE SÉRIE

am
UART (RÉCEPTEUR/ÉMETTEUR ASYNCHRONE
UNIVERSEL)

Ce type de communication est asynchrone, ce qui signifie qu’une ligne spéciale

oh
pour le transfert du signal d’horloge n’est pas utilisée. Dans certaines applications,
telles que la connexion radio ou la télécommande par ondes infrarouges, cette
fonctionnalité est cruciale. Étant donné qu’une seule ligne de communication est
utilisée, le récepteur et l’émetteur fonctionnent à la même vitesse prédéfinie afin

M
de maintenir la synchronisation nécessaire. Il s’agit d’un moyen très simple de
transférer des données car il représente essentiellement la conversion de données
� bits du format parallèle au format série. Le débit en bauds n’est pas élevé, jusqu’à
d
� Mbit/s.
ou

OSCILLATEUR

Même les impulsions générées par l’oscillateur permettent un fonctionnement


A

harmonique et synchrone de tous les circuits du microcontrôleur. L’oscillateur est


généralement configuré de manière à utiliser un cristal de quartz ou un résonateur
en céramique pour la stabilité de la fréquence, mais il peut également fonctionner
El

comme un circuit autonome (comme un oscillateur RC). Il est important de dire


que les instructions ne sont pas exécutées au rythme imposé par l’oscillateur
lui-même, mais plusieurs fois plus lentement. Cela se produit parce que chaque
ur

instruction est exécutée en plusieurs étapes. Dans certains microcontrôleurs, le


même nombre de cycles est nécessaire pour exécuter toutes les instructions, tandis
que dans d’autres ; le nombre de cycles est différent pour différentes instructions. Figure �.�: OSCILLATEUR
so

Ainsi, si le système utilise du cristal de quartz avec une fréquence de �� MHz, le


temps d’exécution d’une instruction n’est pas de ��ns, mais de ���, ��� ou ��� ns,
selon le type de MCU !
as

CIRCUIT D’ALIMENTATION
M

Il y a deux choses dignes d’attention concernant le circuit d’alimentation du


microcontrôleur :
1! La baisse de tension est une condition potentiellement dangereuse qui se
produit au moment où le microcontrôleur est éteint ou lorsque la tension
d’alimentation chute au minimum en raison du bruit électrique. Comme le
microcontrôleur se compose de plusieurs circuits avec des niveaux de tension
de fonctionnement différents, cet état peut entraîner des performances in-
contrôlables. Afin de l’éviter, le microcontrôleur dispose généralement d’un
circuit intégré de réinitialisation du brown out qui réinitialise l’ensemble de
l’électronique dès que le microcontrôleur subit un état d’urgence.
� Introduction �

1! La broche de réinitialisation est généralement marquée comme MCLR


(Master Clear Reset). Il est utilisé pour la réinitialisation externe du micro-
contrôleur en lui appliquant un zéro logique (�) ou un (�), qui dépend du
type de microcontrôleur. Si le circuit de baisse de tension n’est pas intégré,
un simple circuit externe de réinitialisation de baisse de tension peut être
connecté à la broche MCLR.

MINUTEURS/COMPTEURS

ed
Il est facile de mesurer de courts intervalles de temps, jusqu’à ��� microsecondes,
de la manière décrite ci-dessus car c’est le plus grand nombre qu’un registre peut
stocker. Cette restriction peut être facilement surmontée de plusieurs manières,

am
par exemple en utilisant un oscillateur plus lent, des registres avec plus de
bits, un pré-échelonneur ou des interruptions. Les deux premières solutions ont
quelques faiblesses, il est donc plus recommandé d’utiliser des préscalers ou des
interruptions.

oh
M
d
ou

Figure �.�: MINUTEURS/COMPTEURS


A

UTILISATION D’UN PRÉDÉCARTEUR(PRESCALER ) EN


FONCTIONNEMENT PAR MINUTERIE
El

Un prédiviseur est un dispositif électronique utilisé pour réduire la fréquence d’un


facteur prédéterminé. Afin de générer une impulsion sur sa sortie, il faut apporter
�, �, � impulsions ou plus sur son entrée. La plupart des microcontrôleurs ont un
ou plusieurs prescalers intégrés et leur taux de division peut être modifié à partir
ur

du programme. Le prescaler est utilisé lorsqu’il est nécessaire de mesurer des


périodes de temps plus longues. Si un prescaler est partagé par le temporisateur
et le temporisateur de surveillance, il ne peut pas être utilisé par les deux
so

simultanément.
as
M

Figure �.��: MINUTEURS/COMPTEURS


� Introduction ��

UTILISATION DE L’INTERRUPTION DANS LE


FONCTIONNEMENT DE LA MINUTERIE

Si le registre du temporisateur est composé de � bits, le plus grand nombre qu’il


peut stocker est ���. Comme pour les registres de �� bits, c’est le nombre �����.
Si ce nombre est dépassé, le temporisateur sera automatiquement réinitialisé et le
comptage recommencera à zéro. Cette condition est appelée un débordement. S’il
est activé depuis le programme, le débordement peut provoquer une interruption,
ce qui donne des possibilités complètement nouvelles. Par exemple, l’état des
registres utilisés pour compter les secondes, les minutes ou les jours peut être

ed
modifié dans une routine d’interruption. L’ensemble du processus (à l’exception
de la routine d’interruption) est automatiquement exécuté dans les coulisses, ce qui
permet aux circuits principaux du microcontrôleur de fonctionner normalement.

am
La figure ?? illustre l’utilisation d’une interruption dans le fonctionnement du

oh
M
d
Figure �.��: MINUTEURS/COMPTEURS
ou

temporisateur. Des retards de durée arbitraire, n’ayant pratiquement aucune


influence sur l’exécution du programme principal, peuvent être facilement obtenus
A

en affectant le pré-échelonneur au temporisateur.

COMPTEURS
El

Si la minuterie reçoit des impulsions de la broche d’entrée du microcontrôleur,


elle se transforme en compteur. Il s’agit bien évidemment d’un même circuit élec-
ur

tronique capable de fonctionner selon deux modes différents. La seule différence


est que dans ce cas, les impulsions à compter arrivent sur la broche d’entrée
du microcontrôleur et leur durée (largeur) est pour la plupart indéfinie. C’est
so

pourquoi ils ne peuvent pas être utilisés pour la mesure du temps, mais à d’autres
fins telles que le comptage de produits sur une chaîne de montage, le nombre de
rotation d’axe, les passagers, ...etc. (selon le capteur utilisé).
as

MINUTERIE DE CHIEN (WATCHDOG )DE GARDE


M

Une minuterie de surveillance est une minuterie connectée à un oscillateur


RC complètement séparé au sein du microcontrôleur. Si le temporisateur de
chien de garde est activé, chaque fois qu’il compte jusqu’à la valeur maximale,
la réinitialisation du microcontrôleur se produit et l’exécution du programme
commence à partir de la première instruction. Le but est d’empêcher que cela se
produise en utilisant une commande spécifique. Quoi qu’il en soit, toute l’idée est
basée sur le fait que chaque programme est exécuté en plusieurs boucles plus ou
moins longues. Si des instructions qui réinitialisent le temporisateur de chien de
garde sont définies aux emplacements de programme appropriés, en plus des
commandes exécutées régulièrement, alors le fonctionnement du temporisateur
de chien de garde n’affectera pas l’exécution du programme. Si pour une raison
quelconque, généralement du bruit électrique dans l’industrie, le compteur de
� Introduction ��

programme « reste bloqué » à un emplacement de mémoire à partir duquel il n’y


a pas de retour, le temporisateur de chien de garde ne sera pas effacé, de sorte
que la valeur du registre constamment incrémentée atteindra le maximum et le
tour est joué ! La réinitialisation se produit !

ed
am
oh
Figure �.��: MINUTERIE DE CHIEN (WATCH-

M
DOG )DE GARDE

A/D CONVERTER
d
ou

Les signaux externes sont généralement fondamentalement différents de ceux


que le microcontrôleur comprend (uns et zéros) et doivent donc être convertis en
valeurs compréhensibles pour le microcontrôleur. Un convertisseur analogique-
numérique est un circuit électronique qui convertit des signaux continus en
A

nombres numériques discrets. En d’autres termes, ce circuit convertit une valeur


analogique en un nombre binaire et la transmet à la CPU pour un traitement
ultérieur. Ce module est donc utilisé pour la mesure de la tension des broches
El

d’entrée (valeur analogique). Le résultat de la mesure est un nombre (valeur


numérique) utilisé et traité ultérieurement dans le programme.
ur

ARCHITECTURE INTERNE

Tous les microcontrôleurs mis à niveau utilisent l’un des deux modèles de
so

conception de base appelés architecture Harvard et von-Neumann. Ils représentent


deux manières différentes d’échanger des données entre le processeur et la
as

mémoire.

VON-NEUMANN ARCHITECTURE
M

Les microcontrôleurs utilisant l’architecture von-Neumann n’ont qu’un seul bloc


mémoire et un seul bus de données � bits. Comme toutes les données sont
échangées via ces � lignes, le bus est surchargé et la communication est très lente
et inefficace. La CPU peut soit lire une instruction, soit lire/écrire des données
depuis/vers la mémoire. Les deux ne peuvent pas se produire en même temps
car les instructions et les données utilisent le même bus. Par exemple, si un
programme indique que le registre de la mémoire RAM appelé « SUM » doit
être incrémenté de un (instruction : incf SUM), le microcontrôleur effectuera les
opérations suivantes :
�. Lisez la partie de l’instruction du programme spécifiant CE QUI doit être Figure �.��: VON-NEUMANN ARCHITEC-
fait (dans ce cas, il s’agit de l’instruction « INCF» pour l’incrémentation). TURE
� Introduction ��

�. Lire l’autre partie de la même instruction en précisant sur QUELLEs données


elle doit être exécutée (dans ce cas, il s’agit du registre « SUM »).
�. Après avoir été incrémenté, le contenu de ce registre doit être écrit dans le
registre à partir duquel il a été lu (adresse du registre ‘SUM’).
Le même bus de données est utilisé pour toutes ces opérations intermédiaires.

HARVARD ARCHITECTURE

Les microcontrôleurs utilisant l’architecture Harvard ont deux bus de données

ed
différents. L’un a une largeur de � bits et connecte le processeur à la RAM. L’autre
se compose de ��, �� ou �� lignes et connecte le CPU à la ROM. Par conséquent;
la CPU peut lire une instruction et accéder à la mémoire de données en même

am
temps. Étant donné que tous les registres de mémoire RAM ont une largeur de �
bits, toutes les données échangées sont de la même largeur. Lors du processus
d’écriture d’un programme, seules les données � bits sont prises en compte. En
d’autres termes, tout ce que vous pouvez modifier à partir du programme et tout Figure �.��: HARVARD ARCHITECTURE

oh
ce que vous pouvez influencer est de � bits. Tous les programmes écrits pour
ces microcontrôleurs seront stockés dans la ROM interne du microcontrôleur
après avoir été compilés en code machine. Cependant, les emplacements mémoire
ROM n’ont pas �, mais ��, �� ou �� bits. Le reste des bits �, � ou � représente une

avantages d’une telle conception sont les suivants :


M
instruction spécifiant pour le CPU ce qu’il faut faire avec les données � bits. Les

> Toutes les données du programme ont une largeur d’un octet (� bits). Comme
d
le bus de données utilisé pour la lecture du programme comporte ��, �� ou
�� lignes, les instructions et les données peuvent être lues simultanément à
ou

l’aide de ces bits de réserve. Pour cette raison, toutes les instructions sont
des instructions à cycle unique, à l’exception de l’instruction de saut qui est
une instruction à deux cycles.
A

> Du fait que le programme (ROM) et les données temporaires (RAM) sont
séparés, la CPU peut exécuter deux instructions à la fois. En termes simples,
pendant que la lecture ou l’écriture de la RAM est en cours (la fin d’une
El

instruction), l’instruction de programme suivante est lue via l’autre bus.


> Lors de l’utilisation de microcontrôleurs avec une architecture von-Neumann,
on ne sait jamais combien de mémoire doit être occupée par le programme.
Fondamentalement, la plupart des instructions de programme occupent
ur

deux emplacements de mémoire (l’un contient des informations sur QUOI


faire, tandis que l’autre contient des informations sur QUELLES données il
faut faire). Cependant, ce n’est pas une règle absolue, mais le cas le plus
so

courant. Dans les microcontrôleurs à architecture Harvard, le bus de mots


de programme est plus large qu’un octet, ce qui permet à chaque mot de
programme de se composer d’instructions et de données, c’est-à-dire un
as

emplacement mémoire - une instruction de programme.


M

�.� INSTRUCTION SET

Toutes les instructions compréhensibles par le microcontrôleur sont appelées


ensemble le jeu d’instructions. Lorsque vous écrivez un programme en lan-
gage assembleur, vous spécifiez en fait les instructions dans l’ordre dans lequel
elles doivent être exécutées. La principale restriction ici est un certain nombre
d’instructions disponibles. Les fabricants adoptent généralement l’une ou l’autre
des approches décrites ci-dessous :

Figure �.��: HARVARD ARCHITECTURE


� Introduction ��

RISC (ORDINATEUR DE JEU D’INSTRUCTIONS RÉDUIT)

Dans ce cas, le microcontrôleur ne reconnaît et n’exécute que les opérations de


base (addition, soustraction, copie...etc.). D’autres opérations plus compliquées
sont effectuées en les combinant. Par exemple, la multiplication est effectuée en
effectuant des additions successives. C’est comme si vous essayiez d’expliquer à
quelqu’un, en utilisant seulement quelques mots différents, comment rejoindre
l’aéroport d’une nouvelle ville. Cependant, il n’est pas aussi noir qu’il est peint.
Tout d’abord, cette langue est facile à apprendre. Le microcontrôleur est très rapide
de sorte qu’il n’est pas possible de voir toutes les « acrobaties » arithmétiques

ed
qu’il exécute. L’utilisateur ne peut voir que les résultats finaux. Enfin, il n’est pas
si difficile d’expliquer où se trouve l’aéroport si vous utilisez les bons mots tels
que gauche, droite, kilomètres...etc.

am
CISC (ORDINATEUR COMPLEXE D’ENSEMBLE
D’INSTRUCTIONS)

oh
CISC est l’opposé de RISC ! Les microcontrôleurs conçus pour reconnaître plus
de ��� instructions différentes peuvent faire beaucoup de choses à grande vitesse.
Cependant, il faut comprendre comment prendre tout ce qu’offre une langue aussi

M
riche, ce qui n’est pas du tout facile... COMMENT FAIRE LE BON CHOIX ? Ok,
vous êtes débutant et vous avez pris la décision de vous lancer dans l’aventure de
travailler avec les microcontrôleurs. Félicitations pour votre choix ! Cependant, il
n’est pas aussi facile de choisir le bon microcontrôleur qu’il y paraît. Le problème
d
n’est pas une gamme limitée d’appareils, mais le contraire !
ou

Avant de commencer à concevoir un appareil basé sur le microcontrôleur, pensez


à ce qui suit : De combien de lignes d’entrée/sortie ai-je besoin pour fonctionner
? Doit-il effectuer d’autres opérations que simplement activer/désactiver les
A

relais ? A-t-il besoin d’un module spécialisé tel qu’une communication série, un
convertisseur A/N, etc. ? Lorsque vous créez une image claire de ce dont vous
avez besoin, la gamme de sélection est considérablement réduite et il est temps de
El

penser au prix. Envisagez-vous d’avoir plusieurs appareils identiques ? Plusieurs


centaines? Un million? Quoi qu’il en soit, vous obtenez le point. Si vous pensez à
toutes ces choses pour la toute première fois, tout semble un peu confus. Pour cette
raison, allez-y étape par étape. Tout d’abord, sélectionnez le fabricant, c’est-à-dire :
ur

la famille de microcontrôleurs que vous pouvez facilement vous procurer. Étudiez


un modèle en particulier. Apprenez autant que vous en avez besoin et n’entrez pas
dans les détails. Résolvez un problème spécifique et quelque chose d’incroyable
so

se produira - vous pourrez gérer n’importe quel modèle appartenant à cette


famille de microcontrôleurs. N’oubliez pas d’apprendre à faire du vélo. Après
plusieurs ecchymoses au début, vous avez réussi à garder l’équilibre, puis à
as

monter facilement n’importe quel autre


M

�.� MICROCONTROLEURS PIC

Les microcontrôleurs PIC conçus par Microchip Technology sont probablement


le meilleur choix pour les débutants. Voici pourquoi... Le nom d’origine de ce
microcontrôleur est PICmicro (Peripheral Interface Controller), mais il est mieux
connu sous le nom de PIC. Son ancêtre, le PIC����, a été conçu en ���� par
General Instruments. Il était destiné à des fins totalement différentes. Une dizaine
d’années plus tard, ce circuit a été transformé en un véritable microcontrôleur PIC
en ajoutant de la mémoire EEPROM. Aujourd’hui, Microchip Technology annonce
la fabrication du � milliardième échantillon. Si vous souhaitez en savoir plus à ce
sujet, continuez à lire. L’idée principale de ce cours est de fournir à l’utilisateur
les informations nécessaires pour qu’il soit capable d’utiliser les microcontrôleurs
� Introduction ��

en pratique après l’avoir lu. Afin d’éviter des explications fastidieuses et des
histoires sans fin sur les fonctionnalités utiles de différents microcontrôleurs, ce
cours décrit le fonctionnement d’un modèle particulier appartenant à la « haute
classe moyenne ». C’est le PIC��F��� - assez puissant pour mériter l’attention et
assez simple pour être facilement présenté à tout le monde. Ainsi, les chapitres
suivants décrivent ce microcontrôleur en détail, mais font également référence à
l’ensemble de la famille PIC.
Table �.�: Base-Line �-bit architecture, ��-bit Instruction Word Length

Family ROM RAM PINS Clock A/D Reso Compa �/�� Serial PWM Others

ed
[Kbytes] [bytes] Freq. In- lution rators – bit Comm. Out-
[MHz] putsof Timers puts
A/D

am
Con-
verter
Base-Line �-bit architecture, ��-bit Instruction Word Length
PIC��FXXX �.��� - �� - �-� �-� �-� � �-� �x� - - -

oh
�.�� ��

PIC��FXXX �.�� - �� - � �-� �-� � �-� �x� - - EEPROM


�.� ��

PIC��FXXX �.�� - � �� -
���
�� �-� � �-�
M �x� - - EEPROM
d
PIC��HVXXX �.� �� ��- �� - - - �x� - - Vdd =
�� ��V
ou

Mid-Range �-bit architecture, ��-bit Instruction World Length


PIC��FXXX �.�� - �� - � �� �-� �� � �-�x� � x - �-� EEPROM
�.� ��� ��
A

PIC��HVXXX �.�� �� � �� �-� �� � �-�x� � x - �-� -


��
El

PIC��FXXX �.�� - �� �� - ��- �� � - �� � or �� �-� �-�x� � x USART �-� -


��� �� �� I�C SPI
ur

PIC��HVXXX �.�� - �� - ��- �� � - �� �� � �x��x �� USART - -


�.� ��� �� I�C SPI
High-End �-bit architecture, ��-bit Instruction Word Length
so

PIC��FXXX � - ��� ��� - �� - �� - �� � - �� �� or �-� �-�x� �- USB�.� �-� -


���� �� �� �x �� CAN�.�
USART
as

I�C SPI

PIC��FXXJXX � - ��� ���� - �� - �� - �� �� - �� � �-�x� �- USB�.� �-� -


M

���� ��� �� �x �� USART


Ether-
net I�C
SPI

PIC��FXXKXX � - �� ��� - �� - �� - �� �� - �� � �-�x� �- USB�.� �-� -


���� ��� �� �x �� USART
Ether-
net I�C
SPI

Tous les microcontrôleurs PIC utilisent l’architecture Harvard, ce qui signifie que
leur mémoire programme est connectée au CPU sur plus de � lignes. Selon la
� Introduction ��

largeur du bus, il existe des microcontrôleurs ��, �� et �� bits. Le tableau ci-dessus


présente les principales caractéristiques de ces trois catégories. Comme le montre
le tableau de la page précédente, à l’exception des "monstres �� bits" - PIC��FXXX
et PIC��HXXX - tous les microcontrôleurs PIC ont une architecture Harvard �
bits et appartiennent à l’un des trois grands groupes. Ainsi, en fonction de la taille
du mot de programme, il existe une première, une deuxième et une troisième
catégorie de microcontrôleurs, c’est-à-dire : des microcontrôleurs ��, �� ou �� bits.
Ayant un cœur de � bits similaire, tous utilisent le même jeu d’instructions et le «
squelette » matériel de base connecté à plus ou moins d’unités périphériques.

ed
JEU D’INSTRUCTIONS

am
Le jeu d’instructions pour le ��F�XX comprend �� instructions au total. La
raison d’un si petit nombre d’instructions réside dans l’architecture RISC. Cela
signifie que les instructions sont bien optimisées du point de vue de la vitesse
de fonctionnement, de la simplicité de l’architecture et de la compacité du code.
La mauvaise chose à propos de l’architecture RISC est que le programmeur

oh
est censé faire face à ces instructions. Bien sûr, cela n’est pertinent que si vous
utilisez le langage assembleur pour la programmation. Ce cours fait référence à la
programmation dans le langage de programmation supérieur C, ce qui signifie

M
que la plupart des travaux ont été effectués par quelqu’un d’autre. Il suffit d’utiliser
des instructions relativement simples.
d
TEMPS D’EXECUTION DES INSTRUCTIONS
ou

Toutes les instructions sont des instructions à cycle unique. La seule exception
peut-être des instructions de branchement conditionnel (si la condition est remplie)
ou des instructions exécutées sur le compteur de programme. Dans les deux
A

cas, deux cycles sont nécessaires pour l’exécution de l’instruction, tandis que le
deuxième cycle est exécuté en tant que NOP (No Operation). Les instructions à
cycle unique consistent en quatre cycles d’horloge. Si un oscillateur �MHz est
El

utilisé, le temps nominal d’exécution de l’instruction est de �⇠s. Comme pour


les instructions de saut, le temps d’exécution de l’instruction est de �⇠s. Jeu
d’instructions de microcontrôleurs PIC �� bits :
ur

Table �.�: Base-Line �-bit architecture, ��-bit Instruction Word Length

Instruction Description Operation Flag CLK *


so

Data Transfer Instructions


MOVLW k Move constant to W k -> w �
as

La figure �.�� représente l’architecture des microcontrôleurs PIC � bits. Lequel de


ces modules doit appartenir à un microcontrôleur dépend de son type.
M
� Introduction ��

ed
am
oh
M
d
ou
A
El
ur
so
as
M

Figure �.��: Architecture of �-bit PIC microcon-


trollers
ed
am
oh
P���������� M���������������

M
d
ou
A
El
ur
so
as
M
ed
� Programming Microcontrollers

am
oh
Vous savez certainement qu’il ne suffit pas de connecter le microcontrôleur à �.� LANGUES DE PROGRAM-
d’autres composants et d’allumer l’alimentation pour le faire fonctionner, n’est-ce MATION . . . . . . . . . . . . ��
pas ? Il y a autre chose qui doit être fait. Le microcontrôleur doit être programmé AVANTAGES DES

M
LANGUES DE PROGRAMMA-
pour être capable d’effectuer tout ce qui est utile. Si vous pensez que c’est
TION SUPÉRIEURES . . . . ��
compliqué, alors vous vous trompez. Toute la procédure est très simple. Lisez
�.� Langages de programma-
simplement le texte suivant et vous changerez d’avis.
tion . . . . . . . . . . . . . . . . ��
d
Langage machine . . . . . ��
Langage assembleur . . . ��
ou

�.� LANGUES DE PROGRAMMATION Différents langages de pro-


grammation . . . . . . . . . . ��
LES BASES DU LANGAGE
DE PROGRAMMATION C ��
A

�.� Notre premier programme ��


Bonne pratique de program-
mation . . . . . . . . . . . . . . ��
El

L’algorithme . . . . . . . . ��
Utilisation de MPLABX
IDE . . . . . . . . . . . . . . . . ��
Création du projet dans
ur

MPLABX . . . . . . . . . . . . ��
Le premier programme
d’activation et de désactivation
so

d’une sortie . . . . . . . . . . . ��
Les principaux aspects d’un
programme « C » . . . . . . . ��
as

Les commentaires et la config-


uration PIC . . . . . . . . . . . ��
Tester le programme . . . ��
M

Compiler et exécuter le pro-


gramme . . . . . . . . . . . . . ��
Figure
Tester leProgramming
�.�: programmeMicrocontrollers
en pra-
tique . . . . . . . . . . . . . . . ��
Le microcontrôleur exécute le programme chargé dans sa mémoire Flash. C’est
le soi-disant code exécutable composé d’une séquence de zéros et de uns ap-
paremment sans signification. Il est organisé en mots de ��, �� ou �� bits, selon
l’architecture du microcontrôleur. Chaque mot est considéré par la CPU comme
une commande en cours d’exécution pendant le fonctionnement du microcon-
trôleur. Pour des raisons pratiques, comme il est beaucoup plus facile pour nous
de traiter le système de nombres hexadécimaux, le code exécutable est souvent
représenté comme une séquence de nombres hexadécimaux appelée code Hex.
Il était écrit par le programmeur. Toutes les instructions que le microcontrôleur
� Programming Microcontrollers ��

peut reconnaître sont appelées ensemble le jeu d’instructions. Quant aux micro-
contrôleurs PIC dont les mots de programmation sont composés de �� bits, le jeu
d’instructions compte au total �� instructions différentes.
Comme le processus d’écriture de code exécutable était infiniment fatigant, le
premier langage de programmation « supérieur » appelé langage d’assemblage
a été créé. La vérité est que cela a rendu le processus de programmation plus
compliqué, mais d’un autre côté, le processus d’écriture du programme a cessé
d’être un cauchemar. Les instructions en langage assembleur sont représentées
sous la forme d’abréviations significatives, et le processus de leur compilation en

ed
code exécutable est confié à un programme spécial sur un PC appelé compilateur.
Le principal avantage de ce langage de programmation est sa simplicité, c’est-
à-dire que chaque instruction de programme correspond à un emplacement
mémoire dans le microcontrôleur. Il permet un contrôle complet de ce qui se passe

am
dans la puce, rendant ainsi ce langage couramment utilisé aujourd’hui. Cependant,

oh
M
d
ou

Figure �.�: Programming Microcontrollers

les programmeurs ont toujours eu besoin d’un langage de programmation proche


du langage utilisé dans la vie de tous les jours. En conséquence, les langages de
A

programmation supérieurs ont été créés. L’un d’eux est le C. Le principal avantage
de ces langages est la simplicité d’écriture du programme. Il n’est plus possible de
savoir exactement comment s’exécute chaque commande, mais cela n’a de toute
El

façon plus d’intérêt. Dans ce cas, une séquence écrite en langage assembleur peut
toujours être insérée dans le programme, l’activant ainsi.
Semblable au langage assembleur, un programme spécialisé dans un PC appelé
ur

compilateur est chargé de compiler le programme en langage machine. Contraire-


ment aux compilateurs assembleurs, ceux-ci créent un code exécutable qui n’est
pas toujours le plus court possible. Les figures �.� donnent une illustration approx-
so
as
M

Figure �.�: Programming Microcontrollers

imative de ce qui se passe pendant le processus de compilation du programme du


langage de programmation supérieur au langage de programmation inférieur.
Voici un exemple de programme simple écrit en langage C, figure �.�.
� Programming Microcontrollers ��

ed
am
oh
M
d
ou
A

Figure �.�: Programming Microcontrollers


El

AVANTAGES DES LANGUES DE PROGRAMMATION


SUPÉRIEURES
ur

Si vous avez déjà écrit un programme pour le microcontrôleur en langage assem-


bleur, vous savez probablement que l’architecture RISC manque d’instructions.
so

Par exemple, il n’y a pas d’instruction appropriée pour multiplier deux nombres,
mais il n’y a également aucune raison de s’en inquiéter. Chaque problème a
as

une solution et celle-ci ne fait pas exception grâce aux mathématiques qui nous
permettent d’effectuer des opérations complexes en les décomposant en un certain
nombre d’opérations simples. Concrètement, la multiplication peut être facilement
M

substituée par des additions successives (a ◊ b = a + a + a + ... + a). Et nous


voici, juste au début d’une très longue histoire... Ne vous inquiétez pas en ce qui
concerne les langages de programmation supérieurs, tels que C, car quelqu’un a
déjà résolu ce problème et bien d’autres problèmes similaires pour vous. Il suffira
d’écrire a ◊ b.
� Programming Microcontrollers ��

ed
am
oh
M Figure �.�: Programming Microcontrollers
d
�.� Langages de programmation
ou

Il existe une grande variété de langages de programmation pour les systèmes


à microprocesseur. Cependant, tous les microprocesseurs ne comprennent que
A

niveaux de tension, idéalement �V et �V. Ces deux niveaux de tension sont la


façon dont tous les microprocesseurs comprennent la logique qui n’a que deux
états qui sont « oui ou non », � V ou � V, et maintenant �,� V et � V comme
avec les PIC �� bits. C’est pour cette raison que le système de nombres binaires
El

est couramment utilisé dans les systèmes à microprocesseur. C’est parce que le
binaire n’a que deux chiffres discrets « � » et « � ». Considérons le nombre binaire
suivant : �������� Cela représente vraiment �v�v�v�v�v�v�v�v Le �v et le �v est
ur

vraiment le seul langage que tous les microprocesseurs comprennent. Cependant,


nous pouvons facilement utiliser le binaire pour représenter le �v et le �v comme
« � » et « � ». Donc écrire en binaire est plus facile que d’écrire �v et �v.
so

Langage machine
as

C’est alors la naissance du "code machine", le langage de programmation le plus


basique appelé bas niveau car il est au niveau que le micro comprend. Considérez
M

maintenant ce qui suit : A� Il s’agit d’une représentation hexadécimale des �


bits binaires ��������. Elle est utilisée pour permettre aux programmeurs de
représenter des nombres binaires de manière moins compliquée afin d’éviter
les erreurs, car il est très facile d’écrire un « � » au lieu d’un « � ». Cependant,
les premiers programmeurs écrivaient en fait leurs programmes dans le code
machine binaire pour les rendre plus rapides. Il y a une section dans l’annexe qui
couvre les systèmes de nombres binaires et hexadécimaux, ce que vous devez
comprendre. Voir l’annexe �. Considérez maintenant ce qui suit : LDA# Ceci est en
fait appelé « mnémonique » qui représente un code alphanumérique utilisé pour
représenter l’instruction. Le mnémonique LDA# représente l’instruction Chargez
immédiatement l’accumulateur avec le numéro qui suit : « LD » pour la charge,
« A » pour l’accumulateur et « # » pour immédiatement. Il est assez évident que
nous, en tant qu’humains, pouvons apprendre à comprendre les mnémoniques
� Programming Microcontrollers ��

plus rapidement que l’hexadécimal ou le binaire du code machine. Cependant, le


microprocesseur ne comprend pas ces mnémoniques. D’une manière ou d’une
autre, les mnémoniques doivent être convertis en code machine. Considérer ce
qui suit: LDA # A� �������� La première colonne est le code ou les mnémoniques ;
les deux colonnes suivantes sont la conversion en code machine via hexadécimal
puis en binaire. Chaque instruction du jeu d’instructions micros a son équivalent
hexadécimal ou binaire. Avec les systèmes EMMA, les étudiants ont en fait converti
le code mnémotechnique en code machine, mais cela prend beaucoup de temps.
L’acte de convertir les mnémoniques en code machine est appelé « compilation »
et avec les EMMA, nous demandons aux étudiants de compiler les mnémoniques.

ed
En programmation réelle, nous utilisons un programme appelé un compilateur
pour ce faire.

am
Langage assembleur

Différents micros utilisent différents mnémoniques pour représenter les instruc-


tions dans leur jeu d’instructions. Tous ces différents mnémoniques sont main-

oh
tenant collectivement appelés langage assembleur. Il en existe différents pour
différents systèmes tels que TASAM pour TINA avec les EMMA, MASAM pour
Microsoft utilisé dans les programmes DOS et l’assembleur MPLAB de Microchip.

M
Lors de l’utilisation du langage assembleur, toutes les instructions comportent
deux parties :
I L’OPCODE. C’est la partie qui décrit l’opération (c’est-à-dire, LDA charge
d
l’accumulateur).
I L’OPÉRANDE. Où le micro obtient les données à utiliser dans l’opération
ou

(c’est-à-dire ´ # ˇ)
Cela signifie que les données sont ce qui suit immédiatement dans la mémoire
micros. Comme ce cours est basé sur le langage de programmation C, il n’y
A

a pas de réel besoin pour le lecteur de comprendre le langage assembleur,


mais il est important de réaliser que tous les langages de programme, même
visual basic, doivent être convertis en code machine avant d’être chargés dans
El

le micro. Ce processus est appelé compilation et implique généralement la


conversion des instructions du programme en assembleur avant de passer en code
machine. Langage de programmation C C et maintenant C++ sont des langages de
programmation génériques que de nombreux programmeurs étudient maintenant.
ur

Comme cela a signifié qu’il y a beaucoup d’ingénieurs qui peuvent programmer


dans ce langage, alors Microchip, le fabricant des PIC, ont produit des compilateurs
« C » qui peuvent être utilisés pour convertir un programme « C » en code machine
so

pour leurs PIC. En effet, comme le nombre de programmeurs qui écrivent en


assembleur a diminué et que le nombre de programmeurs "C" a augmenté,
Microchip a cessé d’écrire des compilateurs en assembleur pour leurs PIC plus
as

avancés tels que les PIC �� bits. De plus, je pense que Siemens s’oriente maintenant Table �.�: Langages de programmation les plus
vers la programmation de ses automates en « C ». Les langages plus modernes courants
M

tels que Python et C# ont leurs racines en « C ».


Example Language
Machine code
Différents langages de programmation Assembly Language
Cobol
Le tableau �.� présente certains des langages de programmation les plus courants. Fortran
C, pascal
L’IDE Le terme IDE signifie environnement de développement intégré. Il s’agit ada ��
en fait d’une collection des différents programmes nécessaires pour écrire des C++,
instructions de programme dans notre langage choisi. Ensuite, convertissez-les en C#
code machine réel que le micro comprend, et reliez également tous les morceaux Python
de programme que nous souhaitons utiliser. Les programmes dont nous avons Basic
besoin dans l’IDE sont Visual Basic
� Programming Microcontrollers ��

I Un éditeur de texte pour écrire les instructions du programme. Remarque


: L’éditeur de texte simple « Notepad » peut être utilisé, mais l’éditeur de
texte de MPLABX est de loin un éditeur de texte plus avancé.
I Un compilateur pour changer les instructions dans un format que le micro
peut comprendre.
I Un éditeur de liens pour combiner tous les fichiers que le programmeur
souhaite utiliser.
I Un driver qui permettra à l’outil de programmation utilisé de charger le
programme dans le micro.
I Une variété d’outils de simulation pour permettre au programmeur de

ed
tester des aspects du programme.
I Une variété d’outils de débogage pour permettre au programmeur de tester
le programme en direct dans le micro.

am
Tout cela se trouve dans l’IDE que nous choisissons ; Microsoft a Visual Studio,
Microchip a MPLABX et Freescale utilise CodeWarrior. Notez que CODEBLOCK
est un IDE pour écrire des programmes ’C’ génériques qui s’exécuteront sur votre
PC. Comme ce cours est basé sur le micro PIC, il se concentrera sur MPLABX et

oh
Micro C. MPLABX dispose d’un éditeur de texte amélioré pour donner au texte
des codes de couleur différents lorsque nous enregistrons le fichier en tant que
fichier de programme .asm ou .c pour c tel que le bleu clair pour les mots-clés, le

M
gris clair pour les commentaires, etc.
Il existe d’autres programmes d’organisation dans MPLABX, tels que la possibilité
d’écrire dans les registres de configuration du PIC. Il y a aussi la possibilité de
simuler vos programmes au sein de l’IDE. Tout cela fait de MPLABX un outil
d
utile pour programmer des PIC. Il existe également un programme appelé MCC
ou

Microchip Code Configurator. Cela produira en fait une grande partie du code
dont vous avez besoin, pour utiliser divers aspects du PIC, pour vous. Cependant,
je crois fermement que vous devez produire vous-même le code que vous utilisez
afin de bien comprendre le code que vous utilisez. Je ne couvrirai pas l’utilisation
A

du MCC. De plus, Microchip n’a pas écrit le MCC pour tous leurs PIC, et le
��F���� est celui qu’ils ont manqué jusqu’à présent. Vraiment, lorsqu’on vous
demande qui est le programmeur, vous devriez pouvoir dire que vous êtes et non
El

le MCC. Lorsque vous prenez le temps d’étudier comment écrire votre propre
code, vous constaterez que ce n’est pas aussi difficile que vous le pensiez au
départ. De plus, vous obtiendrez une meilleure récompense personnelle si vous
ur

écrivez tout vous-même. Le seul aspect des programmes que je laisse Microchip
faire pour moi est d’écrire les bits de configuration du code qui configurent le
PIC. C’est uniquement parce que c’est si simple à faire et que cela couvre toutes
so

les déclarations #pragma.

LES BASES DU LANGAGE DE PROGRAMMATION C


as

L’idée principale de l’écriture d’un programme en langage C est de décomposer


M

un problème plus important en plusieurs morceaux plus petits. Supposons qu’il


soit nécessaire d’écrire un programme pour le microcontrôleur qui va mesurer la
température et afficher les résultats sur un écran LCD. Le processus de mesure est
effectué par un capteur qui convertit la température en tension. Le microcontrôleur
utilise son convertisseur A/N pour convertir cette tension (valeur analogique) en
un nombre (valeur numérique) qui est ensuite envoyé à l’écran LCD via plusieurs
conducteurs.
En conséquence, le programme est divisé en quatre parties que vous devez
parcourir dans l’ordre suivant :
�. Activez et réglez le convertisseur A/N intégré.
�. Mesurer la valeur analogique.
�. Calculez la température. Figure �.�: Programme
� Programming Microcontrollers ��

�. Envoyez les données sous la forme appropriée à l’écran LCD.


Comme on le voit, les langages de programmation supérieurs tels que C vous
permettent de résoudre facilement ce problème en écrivant quatre fonctions à
exécuter cycliquement et encore et encore.
Ce document décrit une application très concrète du langage de programmation
C, à savoir : le langage C utilisé pour le compilateur mikroC PRO pour PIC.
Dans ce cas, le compilateur est utilisé pour programmer les microcontrôleurs
PIC. Quoi qu’il en soit, cette note fait référence à des détails sur le langage
de programmation qui sont intentionnellement omis ici car ils n’ont aucune

ed
application pratique, plutôt qu’à des variantes du langage C standard (en gros, il
n’y a pas de différences).
La figure �.� illustre la structure d’un programme simple, en soulignant les parties

am
qui le composent.

oh
M
d
ou
A
El
ur
so
as

Figure �.�: Programming Microcontrollers


M

�.� Notre premier programme

Après avoir lu ce chapitre, vous devriez être capable de créer un projet et d’écrire
un programme qui utilise les entrées des commutateurs et active les sorties. Nous
allons commencer par écrire un programme qui fera attendre le PIC jusqu’à
ce qu’un interrupteur connecté au bit � de PORTA passe au niveau haut. il
s’allumera alors une LED sur le bit � du PORTB. Le PIC attendra alors qu’un
deuxième interrupteur, connecté cette fois au bit � de PORTA, passe à l’état haut.
Lorsque cela se produit, la LED du bit � de PORTB s’éteint. Notez que les deux
commutateurs seront des commutateurs momentanés simples, c’est-à-dire qu’ils
� Programming Microcontrollers ��

ne resteront élevés que lorsqu’ils sont enfoncés ; quand ils seront relâchés, leur
logique baissera.

Bonne pratique de programmation

Tous les programmes doivent être planifiés. Le programmeur ne doit pas simple-
ment commencer à écrire du code dans l’IDE. Un bon programmeur doit écrire un
algorithme puis construire un organigramme puis écrire la liste du programme.

ed
L’algorithme

Il s’agit en fait de mettre simplement vos pensées sur la façon dont vous allez

am
amener le CIP à faire ce qui lui est demandé, sur papier. Le but est de concentrer
votre esprit sur la façon d’accomplir la tâche. Il vous permettra également de
choisir le bon PIC pour le travail. L’algorithme doit couvrir au moins les éléments
suivants :

oh
1! Vous devez expliquer la séquence d’événements que vous souhaitez con-
trôler.
1! Vous devez ensuite identifier tous les périphériques d’entrée et de sortie

M
dont vous aurez besoin.
1! Vous devez ensuite créer une liste d’attribution pour la commande et
identifier toutes les entrées ou sorties spéciales ou commandes dont vous
d
aurez besoin, telles que les entrées analogiques, les sorties PWM et toutes
les minuteries.
ou

Utilisation de MPLABX IDE


A

Avant d’aller trop loin dans les profondeurs de MPLABX, je vais discuter de
l’utilisation de MCC et MPLAB Harmony. Microchip s’est rendu compte qu’il y a
de nombreux aspects de l’écriture de programmes pour le PIC qui doivent être
El

effectués dans chaque programme. Par conséquent, ils vous donnent la possibilité
d’utiliser leurs programmes de génération de code pour écrire le code pour
vous. MCC, MPLABX Code Configurator, est le programme qui le fait pour vous.
MPLAB Harmony fait cela pour les micros �� bits. Wow, n’est-ce pas génial? Ben
ur

oui et non. L’utilisation de MCC crée une myriade de fichiers et de fonctions


qui ne sont pas faciles à comprendre. Si vous écrivez vous-même tout le code de
votre programme, vous savez alors où se trouvent tous les bits et vous comprenez
so

comment ils fonctionnent. Ce cours vous apprend également à utiliser la fiche


technique pour vous aider à rédiger les instructions. Vous apprendrez comment
le PIC fonctionne réellement et comment il utilise les simples logiques « � » et « � »
as

pour contrôler son fonctionnement. Je crois fermement qu’il est important pour
vous, en tant que programmeur, de comprendre ce que vous contrôlez et comment
M

les instructions de votre programme le contrôlent réellement. Si vous utilisez


MCC directement, vous risquez de perdre cette compréhension et de savoir qui
est le programmeur, vous ou Microchip. Si vous écrivez tout votre propre code,
alors vous êtes le programmeur. MPLABX est le nouvel IDE de Microchip. Il est
écrit en Java et comporte de nombreuses améliorations par rapport au MPLAB
précédent. Le cours est écrit en utilisant MPLABX version �.�. Le texte est basé
sur l’utilisation du PIC��f����, mais il peut facilement être adapté pour n’importe
quel micro PIC. Le PIC ��F���� est un PIC très polyvalent dans la mesure où il a
:
⇧ �� E/S;
⇧ �� canaux ADC;
⇧ � modules CCP ainsi qu’un UART et un SPI
� Programming Microcontrollers ��

Il dispose de �� Ko de mémoire programme ainsi que d’une EEPROM interne.


Tout cela fait de ce PIC un PIC très polyvalent à utiliser. De plus, le fait qu’il
soit disponible dans un dispositif à �� broches en ligne double signifie que vous
pouvez facilement créer un prototype de carte basé sur ce PIC.

Création du projet dans MPLABX

ed
am
oh
M
Il est à noter que Microchip sort constamment de nouvelles versions de son IDE.
Figure �.�: L’écran d’ouverture pour MPLABX
d
Cependant, les bases ne changent pas vraiment, et si vous apprenez à utiliser
une version de l’IDE, vous comprendrez très rapidement comment passer à la
ou

nouvelle version. Ce cours est basé sur la version �.� qui peut être téléchargée sur
le site Web de Microchip.
Après avoir installé le logiciel et ouvert le programme, un écran qui ressemble à
A

celui de Figure �.�.


Nous devons créer un projet dans lequel tous les fichiers de la tâche seront stockés ;
ceux-ci incluront, entre autres, le fichier asm ou ’c’ que nous écrirons et surtout
El

le fichier hexadécimal que le compilateur dans MPLABX créera. C’est ce fichier


hexadécimal qui sera chargé dans le PIC pour que le PIC exécute notre programme.
ur
so
as
M

Figure �.�: La fenêtre Nouveau projet

Pour créer un nouveau projet, cliquez avec la souris sur le deuxième symbole,
� Programming Microcontrollers ��

le carré orange avec la petite croix verte, dans la barre de menu, comme illustré
à la Figure �.�. Vous pouvez également sélectionner un fichier dans la barre de

ed
am
oh
Figure �.��: Sélectionnez la fenêtre de

M
l’appareil

menus, puis sélectionner « Nouveau projet », l’option supérieure dans le menu


déroulant qui apparaît. La nouvelle fenêtre de projet s’ouvrira comme le montre
d
la Figure �.�. Cliquez avec la souris sur la sélection « Microchip Embedded »
« Projet autonome » si ce n’est pas la sélection par défaut. Si le « Projet autonome »
ou

« Microchip Embedded » n’est pas mis en surbrillance, sélectionnez-le d’abord,


puis sélectionnez Suivant. Une fenêtre qui ressemble à celle illustrée à la Figure
s’affichera maintenant.
A
El
ur
so
as
M

Figure �.��: Sélectionnez la fenêtre de


l’appareil

Nous pouvons maintenant choisir quel PIC nous utiliserons réellement. À côté
de la fenêtre « Famille », cliquez sur la flèche et sélectionnez les MCU � bits
avancés (PIC��) comme indiqué précédemment. Ensuite, à côté de la fenêtre
"Périphérique", cliquez sur la flèche et sélectionnez le périphérique PIC��f����
comme indiqué ou le microcôntrolleur de votre choix. Notez que vous pouvez
taper le numéro du PIC dans la boîte de l’appareil et le programme déplacera la
fenêtre vers le PIC pertinent. Une fois que vous êtes satisfait de votre sélection,
� Programming Microcontrollers ��

cliquez sur Suivant pour passer à la fenêtre suivante, comme illustré à la Figure .

ed
am
oh
M
Figure �.��: La fenêtre d’outil de sélection

À partir de cette fenêtre, le programmeur peut sélectionner le type d’outil qu’il


souhaite utiliser pour télécharger le programme sur le PIC et également déboguer
d
et exécuter le programme. Normalement, nous utiliserions l’ICD �, mais comme il
s’agit de la première utilisation de ce logiciel, nous utiliserons l’outil de simulation
ou

de l’IDE pour examiner le programme pendant son exécution. Par conséquent,


sélectionnez l’option Simulateur comme indiqué précédemment. Cliquez sur
Suivant pour confirmer la sélection et passer à l’écran suivant. Ceci est montré
A

dans la Figure
El
ur
so
as
M

Figure �.��: La fenêtre de sélection du compi-


lateur

Cette fenêtre montre quels compilateurs ont été installés sur votre système. En
supposant que vous ayez un compilateur XC� approprié, vous devriez pouvoir
le sélectionner comme illustré à la Figure . Une fois que vous l’avez sélectionné,
cliquez sur Suivant et la fenêtre illustrée à la Figure s’affiche.
Cette fenêtre est l’endroit où vous donnez un nom à votre projet et décidez où
vous voulez l’enregistrer. Assurez-vous de savoir où vous enregistrez votre projet
� Programming Microcontrollers ��

ed
am
Figure �.��: Nommer le projet

oh
et nommez-le « myFirst��F », comme illustré à la Figure . Notez que j’utiliserai la
méthode d’utilisation de camel Font pour écrire des étiquettes. Cela permet au

M
programmeur d’écrire plusieurs mots en un seul mot. le la première lettre du mot
complet est en minuscule, mais la première lettre de tous les mots suivants est
en majuscule comme dans « myFirst��F ». Cliquez maintenant sur Terminer et le
d
projet sera créé. La fenêtre principale s’affichera maintenant, comme illustré à la
Figure .
ou

Nous devons maintenant ajouter le document texte qui contiendra toutes les
instructions « C » pour le programme. Ce sera le fichier source, et nous devons
donc cliquer avec le bouton droit de la souris sur les fichiers source des éléments
A

dans l’arborescence du projet sur le côté gauche. Cliquez maintenant avec la souris
sur Nouveau, puis sélectionnez main.c dans la fenêtre contextuelle qui apparaît.
Après avoir sélectionné le fichier main.c dans la fenêtre contextuelle, la fenêtre
El

suivante illustrée à la Figure apparaît.


ur
so
as
M

Figure �.��: La nouvelle fenêtre de fichier vide

Nommez le fichier myFirst��FProg et cliquez sur Terminer. Notez que l’extension


doit être, comme indiqué, ’.c’ pour en faire un fichier programme ’C’. La fenêtre
d’édition principale apparaît maintenant, comme illustré à la Figure .
� Programming Microcontrollers ��

ed
am
Figure �.��: La fenêtre d’édition

C’est dans cet écran que vous taperez toutes les instructions de votre programme.
Le logiciel a déjà inséré des commentaires des lignes � à �. C’est parce que le

oh
logiciel utilise intelli-sense qui est comme un texte prédictif sur votre téléphone.
Ce logiciel a également automatiquement ajouté une directive « include » à la ligne
�, et il a inclus la boucle principale entre les lignes �� et ��. Nous en dirons plus à ce

M
sujet plus tard. Si les numéros de ligne ne sont pas affichés dans l’éditeur de texte
et que vous souhaitez les voir, comme je le fais, cliquez simplement sur le mot
« Affichage » dans la barre de menu principale. Cochez ensuite la case "Afficher
les numéros de ligne" qui apparaît dans le menu déroulant, ou décochez-la selon
d
vos préférences. Cependant, par expérience, je pense qu’il est utile d’afficher les
numéros de ligne car cela aide à trouver les erreurs dans votre codage. Nous
ou

pouvons modifier certaines des polices si vous le souhaitez en sélectionnant le


mot « Options » dans le menu déroulant qui apparaît lorsque vous sélectionnez
le choix « Outils » dans la barre de menu principale. Vous obtiendrez la fenêtre
A

illustrée à la Figure .
El
ur
so
as
M

Figure �.��: Modification de la police des com-


mentaires

Une fois que vous êtes satisfait de votre choix, cliquez sur OK. J’ai sélectionné les
polices et les couleurs, puis j’ai changé la couleur des commentaires en magenta.
� Programming Microcontrollers ��

Vous venez de créer votre premier projet dans MPLABX. Vous devez pratiquer le
processus de création d’un projet afin que vous soyez à l’aise avec le processus.
Cela prendra du temps mais cela en vaut vraiment la peine. Ne vous contentez
pas de modifier un ancien projet.

Le premier programme d’activation et de désactivation d’une


sortie

Nous sommes maintenant prêts à passer à la partie réelle de ce processus, en

ed
écrivant le code du programme. Si vous n’avez jamais écrit de programme en
« C », vous devrez peut-être lire certaines choses à ce stade.

am
Les principaux aspects d’un programme « C »

Le langage de programmation « C » est un langage générique en ce sens qu’il


peut être appliqué à de nombreux environnements différents tels que DOS,

oh
les applications Windows et maintenant les microcontrôleurs. Le programme
« C » pour les PIC possède toutes les fonctions de base d’un programme « C »,
mais il existe également des instructions spécifiques liées aux PIC, telles que

M
PORTAbits.RA�.
L’aspect principal d’un programme « C » est qu’il s’exécute à l’intérieur d’une série
de boucles. Il existe une boucle « principale » à partir de laquelle toutes les autres
d
boucles, parfois appelées fonctions, mais je préfère les appeler sous-routines,
sont appelées. La boucle principale doit être présente dans le programme car
ou

c’est la boucle "principale" vers laquelle le micro doit aller au tout début du
programme pour obtenir la première instruction du programme. Le micro exécute
ensuite les instructions de manière séquentielle les unes après les autres jusqu’à
ce qu’il atteigne la dernière instruction de la boucle principale. A moins que cette
A

instruction force le micro à aller ailleurs, le micro reviendra alors à la première


instruction de la boucle puis exécute à nouveau toutes les instructions de la même
manière.
El

Les commentaires et la configuration PIC


ur

Le premier programme que nous examinerons est une tâche très courante, celle
d’attendre qu’un interrupteur soit enfoncé ou allumé, puis d’allumer une LED
so

connectée à une sortie. Cependant, avant de pouvoir commencer notre programme,


nous devons nous assurer que ce programme est le nôtre. Cela se fait en insérant
des commentaires dans la fenêtre d’édition. Les programmes C utilisent deux
as

types principaux de commentaires : des commentaires sur une seule ligne, qui
expliquent généralement ce que fait l’instruction en cours, et plusieurs lignes ou
un paragraphe de commentaires, qui donnent une explication plus approfondie.
M

Les commentaires simples sont tout ce qui est écrit sur la ligne en cours après
deux barres obliques telles que //. Les commentaires sur plusieurs lignes sont
tout ce qui est écrit entre les symboles suivants /⇤ ⇤ /comme indiqué ici, par
exemple, /⇤ Vos commentaires vont ici ⇤/. Après avoir créé votre nouveau fichier
’C’, la première chose que vous devez faire est d’insérer des commentaires pour
dire à tout le monde qu’il s’agit de votre programme et quand vous l’avez écrit.
Cependant, comme il s’agit d’un point de départ courant pour les programmeurs,
l’intelli-sense a déjà fait quelques commentaires. Vous pouvez ou non les modifier.
Cependant, pour essayer de conserver tout ce que vous voyez sur vos écrans
comme dans mes captures d’écran, je vous suggère de supprimer tout ce qui se
trouve actuellement dans la fenêtre d’édition de texte afin d’avoir une fenêtre
de texte vide dans l’éditeur. Vous devez maintenant saisir les commentaires et
� Programming Microcontrollers ��

commandes suivants afin que votre écran soit exactement le même que le mien et
que mes références correspondent à vos écrans.
1 /* Un programme de base pour allumer et teindre une LED. R d i g par M. �.�: Premier programme.
Listing
Alpha en date du 22/12/2021 pour le 18f4525 PIC */
2 /*Aucune modification ce jour */
3
4 \#include <xc.h>
5 vide principal (vide)
6 {
7 retourner;

ed
8 }

Évidemment, vous devez utiliser votre propre nom et la date du jour. Notez
également que lorsque vous écrivez le texte dans l’éditeur de texte, l’intelli-sense

am
donnera au texte les couleurs appropriées car il existe différentes couleurs pour
différents types de mots-clés. Ceux-ci doivent être placés en haut de votre fichier
programme dans la fenêtre principale de l’éditeur. Cela devrait occuper les neuf
premières lignes et le curseur devrait maintenant clignoter à la ligne dix, prêt

oh
pour la prochaine entrée.
Notez que vous pouvez utiliser ces commentaires pour garder une trace de
toutes les modifications qui sont apportées et quand elles ont été apportées. La

M
prochaine chose que vous devez faire est de dire au PIC comment nous avons
l’intention d’utiliser certains de ses principaux attributs de variables. C’est parce
que tous les PIC sont très polyvalents dans la mesure où, entre autres, ils peuvent
être exécutés à partir d’une grande variété d’oscillateurs. Notez que toutes les
d
instructions du programme et toutes les autres actions sont synchronisées sur un
ou

signal d’horloge. Ce signal d’horloge peut obtenir sa source d’une grande variété
d’oscillateurs différents, du simple RC basse fréquence, résistance-condensateur,
oscillateur à l’oscillateur à cristal haute fréquence précis. Ces sources d’oscillateur
peuvent être externes ou internes à L’image. Le programmeur doit indiquer au PIC
A

quel oscillateur il voulez utiliser. Le programmeur doit également choisir parmi


d’autres paramètres. Tout cela est réalisé en écrivant les données correctes dans
les registres de configuration du PIC car ce sont les données de ces registres qui
El

configurent comment nous allons utiliser le PIC. Ceci peut être réalisé en utilisant
une fenêtre spéciale dans l’IDE MPLABX. Pour ouvrir cette fenêtre, cliquez sur le
mot « Fenêtre » dans la barre de menu principale, puis sélectionnez « Vues de la
mémoire cible » dans le menu déroulant, puis sélectionnez Bits de configuration
ur

dans le menu déroulant qui apparaît. Une fois cela fait, votre fenêtre principale
deviendra celle illustrée à la Figure �.��.
so
as
M

Figure �.��: La fenêtre d’édition principale avec


la fenêtre Bits de configuration ouverte

Vous devrez peut-être faire glisser la fenêtre vers le haut pour l’agrandir, comme
indiqué. Je dois m’excuser à ce stade, car je ne vais pas vous montrer comment
� Programming Microcontrollers ��

déplacer les fenêtres à l’intérieur de l’IDE MPLABX. Cette fenêtre de configu-


ration vous permet, en tant que programmeur, de sélectionner des options très
importantes pour le PIC, la plus importante étant le type d’oscillateur principal et
la source utilisée et si nous voulons ou non le temporisateur de chien de garde.
Il y a trois options principales que nous devons changer à ce stade. Vous devez
changer l’OSC en ’INTIO��’ cela se fait en sélectionnant la petite flèche à côté
de la case à côté de l’option OSC. Le réglage par défaut est généralement RCI��,
l’oscillateur résistance-condensateur avec le bit � sur PORTA laissé comme bit
d’entrée-sortie normal. Nous avons besoin de changer ça. Lorsque vous cliquez

ed
sur la petite flèche, une petite fenêtre s’ouvre. Si vous déplacez la sélection vers la
suivante, ce sera celle que nous voulons, INTIO��, ce qui signifie utiliser le bloc
oscillateur interne comme source principale et laisser les bits � et � sur PORTA
comme bits d’entrée-sortie normaux. Par conséquent, cliquez avec la souris sur le

am
terme INTIO�� pour changer l’oscillateur en cette option.
Les autres changements sont plus simples car nous devons régler le WDT sur
« OFF ». Il est important de désactiver le WDT, la minuterie du chien de garde,

oh
comme si rien ne se passait pendant une période de temps prédéfinie dans un
programme, le WDT arrêtera le programme. Nous ne voulons pas que cela se
produise, nous devons donc désactiver le WDT. Cela se fait en cliquant avec la
souris sur la petite flèche à côté du WDT et en cliquant avec la souris sur l’option off.

M
La dernière option que je change habituellement est l’option LVP, "Programmation
basse tension". J’ai l’habitude de désactiver cela. Ceci est désactivé de la même
manière que le WDT a été désactivé.
d
Une fois que vous avez modifié ces paramètres, nous pouvons générer le code
source, puis coller ce code dans notre programme. Cliquez sur l’onglet "Générer le
ou

code source vers la sortie" affiché en bas de l’IDE. Le code source doit apparaître
dans la fenêtre de sortie à l’écran. Utilisez la souris pour sélectionner tout ce code,
puis copiez-le tout et collez-le dans le fichier c "myFirst��FProg.c" que vous avez
A

dans la fenêtre ouverte. Vous devez également coller tous les différents mots de
configuration et les commentaires dans votre fichier « C », mais vous n’avez pas
besoin de copier la ligne « include <xc.h> » car intelli-sense l’a déjà inséré. Nous
El

apprendrons bientôt l’importance de cette ligne « include <xc.h> ». J’ai collé ces
instructions source dans ma fenêtre de fichier ouvert à partir de la ligne � et se
terminant à la ligne ��. Cela déplace le "include <xc.h> " jusqu’à la ligne ��. Le
vôtre peut différer en raison des commentaires que vous avez mis. Votre écran
ur

devrait ressembler à ceci, comme illustré à la Figure �.��.


so
as
M

Figure �.��: La liste des configurations

Le include <xc.h> est important car nous devons dire au compilateur nous voulons
utiliser des étiquettes pour représenter toutes les adresses que nous utiliserons.
Les adresses les plus importantes que nous utiliserons sont les adresses des SFR,
Special Function Registers. C’est avec ces SFR que le programmeur peut contrôler
� Programming Microcontrollers ��

chaque aspect du PIC avec les "�" et les "�" qu’ils écrivent dans ces registres de
contrôle. Le compilateur veut vraiment utiliser l’adresse des registres. Cependant,
nous, les humains, pouvons vouloir utiliser des étiquettes pour donner les noms
du registre au lieu d’utiliser le numéro d’adresse réel.
Un exemple d’utilisation d’une étiquette est PORTA. Il s’agit d’un SFR à l’adresse
�XF�� dans ce PIC. Le compilateur n’a besoin que du nombre hexadécimal « F�� » ;
notez que le « �X » signifie hexadécimal. Cependant, pour rendre le programme
plus facile à lire pour nous, les humains, nous voudrions utiliser l’étiquette PORTA.
Pour permettre cela, nous devons indiquer au compilateur que cette étiquette, et

ed
les autres étiquettes, représentent la bonne adresse des SFR. Il y a une instruction
simple qui fait cela qui est EQU PORTA �XF��. Cela indique au compilateur que
l’étiquette PORTA signifie en fait le nombre F�� au format hexadécimal. Pour
nous aider à faire cela, et économiser beaucoup de travail, quelqu’un a écrit les

am
EQU pour toutes les étiquettes pour tous les SFR que nous pourrions utiliser.
Cependant, pour utiliser ces équivalences, nous devons dire au compilateur de les
inclure dans notre programme. Cela se fait en utilisant la ligne « include <xc.h> »
dans notre programme. N’oubliez pas qu’il existe un programme « Linker » dans

oh
l’IDE. Cela relie notre propre programme et tous les fichiers d’en-tête que nous
indiquons au programme Linker dans « include » ; mais nous DEVONS dire au
programme de liaison de les inclure. Celui-ci est inséré maintenant dans notre

M
fichier programme. Plus tard, nous devrons peut-être utiliser d’autres fichiers
d’inclusion. Nous expliquerons l’importance de ce « include <xc.h> » avec un
exemple plus tard.
Nous sommes presque prêts à commencer à écrire notre programme. Une chose
d
très importante à retenir est que tous les programmes « C » et « C++ » utilisent
ou

une collection de boucles ou de fonctions ou de sous-programmes. Cela signifie


que nous devons placer toutes les instructions à l’intérieur de ces boucles. La
boucle la plus importante est la "boucle principale" car c’est la première boucle à
laquelle le micro se dirige lorsque le programme est lancé. À partir de cette boucle
A

principale, toutes les autres boucles, que j’appellerai des sous-programmes, qui
sont utilisées pour exécuter différents aspects du programme, sont appelées.
El

Le TRISA et le TRIB

Le programme va utiliser deux ports pour communiquer avec le monde extérieur.


ur

Nous utiliserons PORTA comme port d’entrée, auquel les deux commutateurs
seront connectés, et PORTB comme port de sortie, auquel toutes les LEDS sera
connecté à. Cependant, le PIC n’a aucune idée de la manière dont nous voulons
so

utiliser les PORTS. Chaque port peut être un port d’entrée ou de sortie. En effet,
nous pouvons les mélanger beaucoup plus car chaque bit individuel du port
peut être soit en entrée, soit en sortie et avec le ��F����, chaque PORT a � bits.
as

Nous, en tant que programmeurs, devons dire au PIC comment nous voulons
utiliser les PORTS et leurs bits. Cela nécessite de régler certaines des broches
d’E/S en entrée et d’autres en sortie. Notez que tous les PIC ont au moins deux
M

PORTS qui peuvent être utilisés pour permettre au PIC de communiquer avec le
monde extérieur. Les PORTS sont identifiés comme PORT A, B, C, etc. Chaque
PORT aura un certain nombre de bits individuels qui peuvent être définis pour
prendre des données dans le PIC, c’est-à-dire être des entrées, ou pour envoyer
des données hors du PIC, c’est-à-dire être des sorties. Un PIC � bits tel que le
��F���� a jusqu’à � bits sur chaque PORT, tandis que les PICS �� bits ont jusqu’à
�� bits par PORT. Le PIC ne sait pas quel type vous voulez que les bits soient, en
entrée ou en sortie.
En tant que programmeur, vous devez indiquer au PIC, au moyen d’instructions
dans votre programme, quel type vous voulez que les bits de chaque port soient.
Pour vous permettre de faire cela, il existe des SFR, Special Function Registers,
appelés TRIS qui permettent de le faire. Il y a un TRIS pour chaque PORT, et
� Programming Microcontrollers ��

chaque TRIS a le même nombre de bits que chaque PORT. Le bit particulier de
chaque TRIS est mappé sur le même bit dans le PORT correspondant, comme
illustré à la Figure �.��.

Réglage des PORTS

Dans notre premier programme, nous allons faire tous les bits sur les entrées
PORTA et tous les bits dans PORTB comme sortie.
Les instructions suivantes, avec leurs commentaires respectifs, feront le néces-

ed
saire. Figure �.��: La cartographie du TRIS sur le
PORT
1 rend �.�: Premier programme.
TRISA = 0 x F F ; //Faire de tous les bits de TRISA un ’1’ logique qui Listing

am
2 tous les bits sur les e n t r e s PORTA
3 TRISB = 0 x 0 0 ; //Faire de tous les bits de TRISB un ’0’ logique qui rend
4 tous les bits sur les sorties PORTB

Notez que le �x devant les données signifie que nous utilisons des nombres
hexadécimaux. En effet, nous n’avons besoin d’utiliser que � chiffres, car � chiffre

oh
hexadécimal représente � bits binaires. Peu importe si nous utilisons des lettres
minuscules ou majuscules pour ces chiffres. Notez également que nous utilisons
le point-virgule, ’;’ après les données OXFF. Ceci indique la fin de l’instruction en

M
cours. Notez également l’utilisation de commentaires sur une seule ligne pour
expliquer ce que fait l’instruction ; veuillez noter que dans l’éditeur de texte de
MPLABX, ces commentaires seraient sur une seule ligne. La dernière des deux
instructions aurait pu s’écrire comme suit : TRISB = � ; Cela fera de tous les bits
d
de TRISB un « � » logique qui définit tous les bits de PORTB sur les sorties. Cela
ou

utilise la base par défaut, ou le système de nombres, utilisé dans MPLABX, qui
est décimal. L’instruction TRISB = � ; signifie que la valeur stockée dans le TRISB
serait zéro, c’est-à-dire �b�������� ou �X��. Une chose très importante à noter
est que nous utilisons des majuscules dans le mot TRISA et TRISB ; c’est parce
A

que c’est ainsi que les étiquettes ont été définies dans le fichier d’inclusion que
nous utilisons. Vraiment, le micro voit TRISA comme la valeur numérique de
�XF�� qui est l’endroit où se trouve le SFR dans la mémoire du PIC. NB : Notez
El

que « �X » devant un nombre signifie qu’il s’agit d’un nombre hexadécimal, « �b »


signifie qu’il s’agit d’un nombre binaire et qu’aucun préfixe signifie qu’il s’agit
d’un nombre décimal. C’est le même concept que MPLABX utilise. Le fichier
ur

d’inclusion contient toutes les étiquettes que nous utiliserons pour les SFR, et elles
sont toutes en majuscules. Par exemple, si nous voulons allumer toutes les LED ou
tous les appareils connectés au PORTB, nous devrons écrire PORTB = �b��������;
Noter portb = �b��������; ne fonctionnerait pas car l’étiquette pour PORTB doit
so

être en majuscules. Notez que le « �b » signifie binaire car nous déclarons le


nombre dans son format binaire. Nous aurions pu écrire PORTB = ���, car cela en
as

équivalent décimal de �b�������� et decimal est la base par défaut pour MPLABX
.
M

L’ADC (convertisseur analogique-numérique)

La plupart des PIC, y compris le nôtre, auront un convertisseur analogique-


numérique ADC. Celui-ci sera affecté à l’un des PORTS, ce qui signifie que les
entrées des bits de ce PORT peuvent être analogiques ou numériques. En tant
que programmeurs, nous devons dire au PIC quelles sont les entrées que nous
voulons : analogiques ou numériques. Dans ce cas, nous voulons que tous les bits
soient numériques car ce sont simplement des commutateurs haut ou bas. Pour
notre PIC ��f����, c’est PORTA qui est affecté à l’ADC et une partie de PORTB,
car ce PIC dispose de �� canaux analogiques. Cela signifie que les bits sur PORTA,
et certains de PORTB, pourraient être analogiques ou numérique.
� Programming Microcontrollers ��

Table �.�: Les paramètres des bits �, �, � et � du registre � bits ADCON�

Bit � Bit � Bit � Bit � Bit � Bit � Bit � Bit �

Not Used Not Used VCFG� VCFG� VCFG� VCFG� VCFG� VCFG�

Bit � Not used read as �


Bit � Not used read as �
Bit � � negative reference from AN�
� negative reference from VSS
Bit � � negative reference from AN�

ed
� negative reference from VDD

Table �.�: Suite de la table

am
B� B� B� B� AN� AN� AN AN� AN� AN� AN� AN� AN� AN� AN� AN� AN�
�� �� ��
� � � � A A A A A A A A A A A A A
� � � � A A A A A A A A A A A A A

oh
� � � � A A A A A A A A A A A A A
� � � � D A A A A A A A A A A A A
� � � � D D A A A A A A A A A A A
� � � � D D D A A A A A A A A A A

M
� � � � D D D D A A A A A A A A A
� � � � D D D D D A A A A A A A A
� � � � D D D D D D A A A A A A A
� � � � D D D D D D D A A A A A A
d
� � � � D D D D D D D D A A A A A
� � � � D D D D D D D D D A A A A
ou

� � � � D D D D D D D D D D A A A
� � � � D D D D D D D D D D D A A
� � � � D D D D D D D D D D D D A
A

� � � � D D D D D D D D D D D D D

Le réglage par défaut est qu’ils sont tous analogiques. Notez qu’une entrée
El

analogique serait une entrée connectée à un transducteur tel qu’un transducteur de


pression ou de température et serait une tension variable utilisée pour représenter
le signal surveillé. Nous voulons que tous les bits sur PORTA soient numériques,
ur

c’est-à-dire simplement des signaux d’activation et de désactivation, qui seraient


des entrées logiques « � » ou « � ». Par conséquent, nous devons dire au PIC
que nous voulons que les bits sur PORTA soient numériques. Le tableau �-�
so

nous montre que nous pouvons programmer le PORT pour qu’il soit l’une des
nombreuses variantes de tous les bits étant analogiques à tous les bits étant
numériques.
as

Le tableau �.�fait référence aux bits du registre ADCON� qui est un registre à �
bits qui contrôle certains aspects de l’ADC. Le principe derrière l’ADC est qu’il
M

n’y a qu’un seul circuit ADC à l’intérieur du PIC qui peut être commuté sur l’une
des �� entrées pouvant avoir une entrée analogique connectée. Il s’agit d’une
méthode appelée « multiplexage » où le � CAN dessert �� entrées analogiques
possibles. L’ADC créera alors un nombre binaire qui représente la tension réelle
appliquée à l’entrée. L’ADC utilisé dans le PIC est un ADC �� bits qui donne au
programmeur une résolution possible des éléments suivants : La résolution de
l’ADC est la plus petite valeur qu’il puisse reconnaître. Cela peut être calculé en
utilisant l’expression suivante.

'0= 64
'4 B>;DC8>= =
2=
5
'4 B>;DC8>= = = 4.833<+
210
� Programming Microcontrollers ��

C’est-à-dire si nous utilisions tous les �� bits, et comme il s’agit d’un micro � bits, il
y a un problème avec cela, mais nous y reviendrons plus tard. L’ADC est contrôlé
par trois registres ; ADCON�, ADCON� et ADCON�. L’ADCON� contrôle quelle
plage de tension est utilisée et si le bit sur le port est analogique ou numérique.
L’ADCON� contrôle si l’ADC est allumé et à quel bit ou canal l’ADC est connecté.
Le registre ADCON� contrôle la synchronisation de l’ADC ; nous examinerons
tous ces registres plus tard.
En fait, nous ne voulons pas utiliser l’ADC et nous voulons que tous les bits
connectés à PORTA soient numériques ; par conséquent, nous devons désactiver

ed
l’ADC et rendre tous les bits sur PORTA et PORTB numériques. C’est le bit �
du registre ADCON� qui active l’ADC, c’est-à-dire le bit � = �, ou le désactive,
c’est-à-dire le bit � = �. Par conséquent, mettez tous les bits du registre ADCON�
sur � logique. Cela définira b� à un « � » logique et ainsi désactiver l’ADC.

am
Ce sont les bits �, �, � et � du registre ADCON� qui déterminent si les bits sur
PORTA et PORTB sont des bits analogiques ou numériques. Ceci est montré
dans le Tableau �-�. Si le bit dans le registre ADCON� est un « � » logique, alors

oh
l’entrée serait une entrée analogique. Si le bit est un "�" logique, alors l’entrée
serait numérique. C’est un bon exemple de la façon dont les bits réels sont utilisés
pour contrôler les actions du PIC.

M
Comme nous avons besoin que toutes les entrées soient numériques, nous devons
nous assurer que tous ces quatre bits, les bits �, �, � et �, dans le registre ADCON�
sont définis sur le « � » logique.
Les instructions suivantes configureront l’ADC comme nous le souhaitons.
d
1 ADCON0 = 0x00; //This turns the ADC off Listing �.�: Premier programme.
ou

2 ADCON1 = 0x0F; //This sets all the bits on PORTA and PORTB as digital

Notez que ces instructions ont des commentaires qui sont séparés de la fin de
l’instruction, signifiés par le point-virgule « ; », avec l’utilisation de deux barres
A

obliques « // ». Cela signifie que tout ce qui est écrit après ces barres obliques sur
cette ligne courante sont des commentaires et ne sont pas compilés par le logiciel
de compilation. Les commentaires peuvent être utilisés pour aider à décrire ce
El

que fait l’instruction. La combinaison des quatre instructions suivantes définira


les deux ports comme nous le souhaitons :
1 on �.�: Premier programme.
TRISA = 0xFF;//Make all bits in TRISA a logic ’1’ which makes all bitsListing
ur

2 PORTA inputs
3 TRISB = 0x00;//Make all bits in TRISB a logic ’0’ which makes all bits on
4 PORTB outputs
so

5 ADCON0 = 0x00;//Makes all the bits in the ADCON0 logic ’0’ This turns the
6 ADC off
7 ADCON1 = 0x0F;//This make bits 7,6,5 and 4 logic ’0’//This make bits 7,6,5
as

8 and 4 logic ’0’ and bits 3,2,1and 0 logic ’1’This sets


9 all the bits on PORTA and PORTB as digital bits
M

Configuration de l’oscillateur

Nous avons utilisé les mots de configuration pour indiquer au PIC que nous
voulons utiliser le bloc d’oscillateur interne comme source d’oscillateur principal,
c’est-à-dire INTIO��. Cependant, nous n’avons pas dit au PIC quel oscillateur
nous voulons utiliser. Ce sont les bits du registre OSCCON , OSCillator CONtrol,
qui contrôlent le bloc oscillateur interne. Nous pouvons utiliser huit fréquences
d’oscillateur possibles et ce sont les bits b�, b� et b� qui contrôlent les paramètres.
Nous allons régler l’oscillateur sur �Mhz et rendre la fréquence stable. Pour régler
la fréquence de l’oscillateur sur � Mhz, nous réglons les trois bits, b�, b� et b�, sur
un « � » logique. Pour rendre la fréquence stable, nous définissons le bit � sur un
« � » logique.
� Programming Microcontrollers ��

Table �.�: Use of OSCCON� Register

Bit � Bit � Bit � Bit � Bit � Bit � Bit � Bit �


IDLEN IRCF� IRCF� IRCF� IOSTS IOFS SCS� SCS�
LOGIC � See Table �.� Logic � Logic � See Table �.�
Device Time-out for osc Internal
Enters startup Oscillator
Sleep Primary oscillator is stable
running
Logic � Logic � No time Logic �
Device out primary internal

ed
Does not oscillator not oscillator
enter sleep running not stable

am
Table �.�: Bits �, �, and � of OSCON� Register
Bit � Bit � Bit � Oscillator frequency Setting the Oscillator Frequency
ICRF� ICRF� ICRF�
a Le �� kHz peut provenir de l’oscillateur
� � � ��Khza
principal divisé par ��� ou directement de
� � � ���Khz l’oscillateur RC interne

oh
� � � ���Khz
� � � ���Khz
� � � �Mhz
� � � �Mhz

M
� � � �Mhz
� � � �Mhz
d
Nous devons dire au PIC où il obtiendra le signal pour l’horloge système. Il
y a trois options possibles contrôlées par les bits b� et b� de ce registre. Cela
ou

nous donnerait trois options, en fait quatre, mais nous n’en voulons que trois.
Cependant, comme nous avons défini la source de l’oscillateur principal dans les
mots de configuration comme étant l’oscillateur interne, les deux options sont
A

les mêmes. Nous pouvons simplement définir ces deux bits sur logique ’�’ car la
source principale est le bloc oscillateur interne. Le bit � du registre OSCCON est
le bit IDLEN qui est utilisé pour le mode veille. Nous n’utiliserons ce mode que
El

bien plus tard ; par conséquent, définissez ce bit sur un « � » logique. Le bit � est
en fait un signal du micro au programmeur afin que celui-ci puisse également
être réglé sur un « � » logique.
ur

Cela signifie que les huit bits du registre OSCCON peuvent être définis comme
suit :
1 Listing �.�: Premier programme.
OSCCON = 0b01110100;//This sets the internal oscillator to 8MHz and makes
so

2 it stable.

Les tableaux �.� à �.� devraient aider à expliquer ces paramètres L’appareil se
as

met en veille lorsqu’il y est invité et l’horloge système provient de l’oscillateur


principal. Le processus de décision sur les données à écrire dans l’ADCON�,
M

Table �.�: L’utilisation des bits � et � du reg-


Bit � Bit � Oscillator source istre OSCCON� pour sélectionner la source du
SCS� SCS� signal de fréquence de l’oscillateur
� � Primary oscillator as defined in configuration words
� � Secondary timer block
� � Internal oscillator block
� � Internal oscillator block

l’ADCON� et l’OSCCON illustré précédemment est un exemple de la façon dont


vous devez déterminer quelles données sont écrites dans toutes les SRF. Vous
devez décider quelle fonction vous voulez que le SRF particulier exécute et écrire
sur papier comment vous pouvez le définir, écrire un "�" logique, ou l’effacer,
écrire un "�" logique, à chaque bit du SRF à atteindre De quoi as-tu besoin. Ensuite,
� Programming Microcontrollers ��

écrivez l’instruction dans votre programme. C’est un processus qui demande


beaucoup de pratique.

En attente d’une entrée

Maintenant que nous avons configuré les PORTS, nous devons faire attendre le
PIC jusqu’à ce que le commutateur connecté au bit � de PORTA passe à un "�"
logique. Cela se produira si l’interrupteur est configuré de telle sorte que lorsqu’il
est enfoncé, le niveau logique passe à un niveau élevé, c’est-à-dire à � V ou à « � »

ed
logique.
Il existe un certain nombre de façons de le faire, mais il s’agit essentiellement
de tester le bit pour voir s’il a atteint un niveau élevé. Le moyen le plus simple

am
consiste à faire attendre le micro jusqu’à ce que l’entrée passe au niveau haut.
Ensuite, lorsque l’entrée devient élevée, passez à autre chose et faites quelque
chose. Vous pensez peut-être que vous devriez continuer à vous poser la question
: est-ce que la contribution est devenue élevée ? Le problème avec cette approche

oh
est que vous devez faire reculer le micro et poser à nouveau la question si l’entrée
n’est pas montée au niveau haut. Cependant, une autre façon de considérer ce
test est de dire que tant que l’entrée est faible ou faible, ne faites rien. En effet,
c’est l’approche que nous utilisons dans un programme "C". Cela peut être fait en

1
2
utilisant une commande while comme indiqué ici :
while (PORTAbits.RA0 == 0)
{ M
d
3 }
ou

Le concept de cette instruction while est que tandis que la condition de test, écrite
en GRAS seulement cette fois-ci pour rendre évident ce que l’on entend par le test,
exprimée à l’intérieur des accolades normales est vraie, exécute les instructions
qui sont écrites entre les accolades . Dans ce cas, il n’y a pas d’instructions entre
A

les accolades, et donc le micro ne fait rien. Nous utilisons le signe double = =
pour dire qu’il devient égal à. Cela signifie que le test est alors que PORTA bit �
devient égal à �, le test est vrai, et donc faites ce que je dis ; dans ce cas, ce qui est
El

à l’intérieur des accolades, ce qui n’est rien. De cette façon, l’instruction dit que
tant que l’entrée sur le bit � de PORTA est au "�" logique, ne faites rien.
Notez que vous pouvez signifier le bit d’un PORT comme indiqué précédemment,
ur

c’est-à-dire que RA� signifie le bit � de PORTA.


Notez également la syntaxe spécifique en spécifiant le bit réel du PORT. Cela doit
so

être correct, sinon le compilateur générera une erreur.


Une autre façon d’écrire la même instruction est :
as

1 while (PORTAbits.RA0 == 0) continue; //Do nothing while the logic at b0 of


2 PORTA is at logic

Cela fait exactement la même chose. Notez également que nous utilisons le ’;’
M

pour donner la fin de l’instruction, et la seule chose que nous demandons au


programme de faire est de continuer, ce qui fait revenir le micro au début de
l’instruction. Une autre alternative serait que (!PORTAbits.RA�) continue ; Dans
ce cas, l’opérateur Not ’!’ est utilisé. Le test est alors que le bit n’est PAS un "�"
logique, faites ce que je vous dis de faire. Une dernière alternative pour faire
attendre le PIC jusqu’à ce que quelque chose se passe, comme la logique au niveau
du bit d’entrée passe au niveau haut, est tandis que (!PORTAbits.RA�) ; Cela
fonctionne de la même manière que le premier exemple. Il n’y a pas d’instructions
entre la parenthèse normale fermante du test et la fin de l’instruction, signifiée
par le point-virgule « ; ».
Cela dit alors au micro de ne rien faire tant que le test à l’intérieur des accolades
est vrai. C’est une manière très succincte d’amener le PIC à attendre que quelque
� Programming Microcontrollers ��

ed
am
oh
M
Figure �.��: La fenêtre d’édition

chose se passe. Cependant, si vous placez par inadvertance un point-virgule après


d
le crochet fermant de l’instruction de test, cela pourrait bloquer le programme ici.
Rappelez-vous ceci lorsque vous essayez de déboguer un programme qui ne fait
ou

pas ce que vous voulez.


En utilisant le format de votre choix, le micro resterait dans la boucle while
jusqu’à ce que la logique au bit � de PORTA soit élevée. Le micro passerait alors à
A

l’instruction suivante du programme.


Cela consisterait simplement à activer la sortie au bit PORTB �. Cela peut être fait
El

en utilisant
1 PORTBbits.RB0 = 1; //Turn on what is connected to b0 of PORTB
ur

En attente d’éteindre la LED

Nous pouvons maintenant faire attendre le PIC qu’un interrupteur d’arrêt soit
so

enfoncé pour que le micro puisse ensuite désactiver la sortie sur le bit � du PORTB.
Cela peut être fait comme suit:
as

1 while (PORTAbits.RA1 == 0);//Do nothing while the logic at bit 1 of PORTA


2 is at logic ’0’.
3 PORTBbits.RB0 = 0; //Turn off what is connected to b0 of PORTB.
M

Notez que nous devons mettre toutes les instructions à l’intérieur de la boucle
principale. Les instructions de programme réelles qui commencent à �� et se
terminent à la ligne �� du programme du Listing �-� doivent aller à l’intérieur des
accolades de la fenêtre d’édition. Pour vous aider à apprécier, cet écran devrait se
terminer comme illustré à la Figure �.��.
Une fois que nous avons écrit toutes les instructions pour le premier programme,
le La fenêtre de l’éditeur doit ressembler à celle montrée ici dans le Listing �-�.
1 /*A basic program to turn on and off a led. Listing �.�: The Completed LED Start Stop
2 Program Instructions
3 No modifications at this date*/
4 // PIC18F4525 Configuration Bit Settings
5 // C’ source line config statements.
� Programming Microcontrollers ��

6
7 // CONFIG1H
8 #pragma config OSC = INTIO67 // Oscillator Selection bits (Internal
9 oscillator block, port function on RA6
10 and RA7)
11 #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable bit
12 (Fail-Safe Clock Monitor disabled)
13 #pragma config IESO = OFF // Internal/External Oscillator Switchover
14 bit (Oscillator Switchover mode disabled)
15 // CONFIG2L

ed
16 #pragma config PWRT = OFF // Power-up Timer Enable bit (PWRT disabled)
17 #pragma config BOREN = SBORDIS// Brown-out Reset Enable bits (Brown-out
18 Reset enabled in hardware only
19 (SBOREN is disabled))

am
20 #pragma config BORV = 3 // Brown Out Reset Voltage bits (Minimum
21 setting)
22 // CONFIG2H
23 #pragma config WDT = OFF // Watchdog Timer Enable bit(WDT disabled
24 (control is placed on the SWDTEN bit))

oh
25 #pragma config WDTPS = 32768 // Watchdog Timer Postscale Select bits
26 (1:32768)
27 // CONFIG3H

M
28 #pragma config CCP2MX = PORTC // CCP2 MUX bit (CCP2 input/output is
29 multiplexed with RC1)
30 #pragma config PBADEN = ON // PORTB A/D Enable B<4:0> pins are
31 configured as analog input channels
d
32 on Reset)
33 #pragma config LPT1OSC = OFF // Low-Power Timer1 Oscillator Enable bit
ou
34 (Timer1 configured for higher power
35 operation)
36 #pragma config MCLRE = ON // MCLR Pin Enable bit (MCLR pin enabled;
37 RE3 input pin disabled)
A

38 // CONFIG4L
39 #pragma config STVREN = ON // Stack Full/Underflow Reset Enable bit
40 (Stack full/underflow will cause Reset)
#pragma config LVP = ON // Single-Supply ICSP Enable bit (Single-
El

41
42 Supply ICSP enabled)
43 #pragma config XINST = OFF // Extended Instruction Set Enable bit
44 (Instruction set extension and
ur

45 Indexed Addressing mode disabled


46 (Legacy mode))
47 // CONFIG5L
48 #pragma config CP0 = OFF // Code Protection bit (Block 0
so

49 (000800-003FFFh) not code-protected)


50 #pragma config CP1 = OFF // Code Protection bit(Block 1
51 (004000-007FFFh) not code-protected)
as

52 #pragma config CP2 = OFF // Code Protection bit (Block 2


53 (008000-00BFFFh) not code- protected)
54 // CONFIG5H
M

55 #pragma config CPB = OFF // Boot Block Code Protection bit (Boot
56 block (000000-0007FFh)
57 not code- protected)
58 #pragma config CPD = OFF // Data EEPROM Code Protection bit (Data
59 EEPROM not code-protected)
60 // CONFIG6L
61 #pragma config WRT0 = OFF // Write Protection bit (Block 0
62 (000800-003FFFh) not write-protected)
63 #pragma config WRT1 = OFF // Write Protection bit (Block 1
64 (004000-007FFFh) not write-protected)
65 #pragma config WRT2 = OFF // Write Protection bit (Block 2
66 (008000-00BFFFh) not write- protected)
67 // CONFIG6H
68 #pragma config WRTC = OFF // Configuration Register Write Protection
� Programming Microcontrollers ��

69 bit (Configuration registers


70 (300000-3000FFh) not write- protected)
71 #pragma config WRTB = OFF // Boot Block Write Protection bit (Boot
72 Block (000000-0007FFh)
73 not write- protected)
74 #pragma config WRTD = OFF // Data EEPROM Write Protection bit (Data
75 EEPROM not write-protected)
76 // CONFIG7L
77 #pragma config EBTR0 = OFF // Table Read Protection bit (Block 0
78 (000800- 003FFFh) not protected from

ed
79 table reads executed in other blocks)
80 #pragma config EBTR1 = OFF // Table Read Protection bit (Block 1
81 (004000- 007FFFh) not protected from
82 table reads executed in other blocks)

am
83 #pragma config EBTR2 = OFF // Table Read Protection bit (Block 2
84 (008000-00BFFFh) not protected from
85 table reads executed in other blocks)
86 // CONFIG7H
87 #pragma config EBTRB = OFF // Boot Block Table Read Protection bit

oh
88 (Boot Block (000000-0007FFh) not
89 protected from table reads executed
90 in other blocks)

M
91
92 #include <xc.h>. // the directive to include the header
93 file xc.h
94 void main(). // this is where the micro goes to
d
95 find the first instruction of the
96 program
ou
97 { // the opening of the main loop
98 TRISA = 0xFF; // Make all bits on PORTA inputs
99 TRISB = 0x00; // Make all bits on PORTB outputs
100 ADCON0 = 0x00; // This turns the ADC off
A

101 ADCON1 = 0x0F; // This sets all the bits on PORTA and
102 PORTB as digital
103 OSCCON = 0b01110100; // set the internal oscillator to 8 Mhz
stable
El

104
105 while (PORTAbits.RA0 == 0);// Do nothing while the logic at b0 of
106 PORTA is atlogic ’0’ When it goes to a
107 logic ’1’ move to next instruction.
ur

108 PORTBbits.RB0 = 1; // Turn on what is connected to b0 of


109 PORTB
110 while (PORTAbits.RA1 == 0);// Do nothing while the logic at b1 o
111 PORTA is at logic ’0’. When it goes to
so

112 a logic ’1’ move to next instruction.


113 PORTBbits.RB0 = 0 ; // Turn off what is connected to b0 of
114 PORTB
as

115 } // the closing of the main loop

Notez que c’est la seule fois où je montrerai toutes les instructions, y compris les
M

mots de configuration et les lignes de directive d’inclusion � à ��. Cependant,


chaque programme aura besoin de ces mots de configuration et de cette ligne
include <xc.h>, ils doivent être dans tous les programmes. Plus tard, je vous
montrerai comment créer un fichier d’en-tête pour ces instructions.
Il y a un problème assez subtil dans ce programme. Le problème est que lorsque le
micro atteint la dernière instruction de la boucle, il revient à la première instruction
de cette boucle et recommence. Cela signifie qu’il configurera à nouveau les ports,
l’ADC et l’oscillateur même si nous les avons déjà configurés comme requis, et
cela n’est pas nécessaire. Pour éviter que cela ne se reproduise, nous pouvons
insérer une boucle inconditionnelle qui permet au micro d’utiliser toutes les autres
instructions pour toujours, mais n’exécute qu’une seule fois les cinq premières
instructions de configuration.
� Programming Microcontrollers ��

Cela se fait en utilisant une autre instruction while. Le format est indiqué dans le
listing �-�.
1 void main() Listing �.�: La boucle While (�) insérée
//this is where the micro goes to find the first
2 instruction of the program
3 { //the opening of the main loop
4 TRISA = 0xFF; //Make all bits on PORTA inputs
5 TRISB = 0x00; //Make all bits on PORTB outputs
6 ADCON0 = 0x00; //This turns the ADC off
7 ADCON1 = 0x0F; //This sets all the bits on PORTA as digital
8 OSCCON = 0b01110100; //set the internal oscillator to 8Mhz stable

ed
9
10 while (1) //While the result of the test is true do what is
11 inside the curly brackets. Note the result of

am
12 the test will be a logic’1’ if it were true and
13 a logic’0’ if it were untrue. The test is
14 specified inside the normal brackets. This test
15 is simply a logic’1’ which will always be true
16 as it is always a logic ’1’ This means the micro

oh
17 will always carry out the instruction inside the
18 curly brackets. That is why it is called the
19 forever loop. It will always be true and the
20 micro will carryout the instructions written

M
21 between the two curly brackets forever.
22 { //the opening curly bracket of the for ever loop
23 while (PORTAbits.RA0 == 0); //Do nothing while the logic at b0 of PORTA
24 is at logic ’0’
d
25 PORTBbits.RB0 = 1; //Turn on what is connected to b0 of PORTB
26 while (PORTAbits.RA1 == 0); //Do nothing while the logic at b1 of PORTA
ou

27 is at logic ’0’.
28 PORTBbits.RB0 = 0; //Turn on what is connected to b0 of PORTB
29 } //the closing of the for ever loop
A

30 } //the closing of the main loop

La boucle while (�), entre les lignes �� et ��, exécutera les instructions données
à l’intérieur des accolades s’il y a plus d’une instruction tant que le test est vrai.
El

Pour que le test soit vrai, le résultat logique du test doit être un "�" logique. Il est
assez évident que le résultat du test (�) sera toujours un ’�’ logique, et donc le
micro doit toujours exécuter les instructions écrites à l’intérieur des accolades.
C’est-à-dire qu’il s’agit d’une boucle permanente ou, plus correctement, d’une
ur

boucle inconditionnelle. Cela signifie que le micro exécutera les cinq premières
instructions qui sont en dehors de cette boucle while (�), mais à partir de là, le
micro sera coincé à l’intérieur de la boucle while (�), et donc il n’exécutera jamais
so

les cinq premières instructions encore. Génial car c’est exactement ce que nous
voulons.
as

Notez également qu’aux lignes �� et ��, le mot continuer a été supprimé car il
n’est pas nécessaire. L’instruction ne fait toujours rien, alors que le test est true
car il n’y a pas d’instructions entre le crochet fermant de l’instruction de test et le
M

point-virgule. Notez que le point-virgule indique la fin de l’instruction en cours.

Tester le programme

Évidemment, nous testerons la plupart des programmes à l’aide de la carte


prototype ou d’un programme ECAD approprié, mais dans ce cas, nous utiliserons
l’outil de débogage de simulation pour tester le programme.
Pour tester le programme, nous avons besoin de deux commutateurs ; l’interrupteur
« on » connecté à RA� et l’interrupteur « arrêt » connecté à RA�. Le logiciel MPLABX
nous permet de définir des commutateurs à l’aide de l’option « Stimulus » que
� Programming Microcontrollers ��

nous pouvons trouver à partir de l’option « Fenêtre » de la barre de menu princi-


pale et de l’élément « Simulateur » du menu déroulant, comme illustré à la Figure
�.��.
!h
Lorsque nous sélectionnons cette option, l’écran devrait ressembler à celui illustré
à la Figure �.��. Nous pouvons ajouter les deux broches RA� et RA� et définir

ed
am
oh
M
Figure �.��: L’écran d’édition avec la fenêtre
de stimulation ouverte
Figure �.��: L’option de fenêtre de stimulation
quelle action a lieu lorsque les entrées sont déclenchées. Pour ajouter RA�, cliquez
simplement avec la souris sur la case vide sous le mot pin. Ce qui est montré dans
d
la Figure �.�� vous sera présenté.
ou
A
El

Figure �.��: Selecting the PIN RA�

Vous pouvez faire défiler la petite fenêtre vers le bas pour trouver la broche RA�.
ur

Nous devons définir l’action pour basculer. Nous pouvons maintenant ajouter
une autre ligne à l’aide de la deuxième icône d’outil dans la fenêtre de stimulus,
comme illustré à la figure �.��.
so
as
M

Figure �.��: The Add Row Button

Vous devriez vous retrouver avec ce qui est montré dans la Figure �-��.
Notez qu’il y a deux commentaires, un pour chaque bouton qui décrit ce que
fait le bouton ; vous devez taper un commentaire pour le commutateur. Nous
pouvons observer ce qui se passe en utilisant l’option de broche d’E/S de la même
option de simulateur dans le menu déroulant de l’option Windows dans la barre
de menu principale illustrée à la Figure �.��. Notez que cela peut ressembler un
peu à ��Pin dans la barre de menu, mais c’est I O pour Input/Output. Lorsque
vous utilisez la fenêtre des broches d’E/S, nous pouvons ajouter les broches que
� Programming Microcontrollers ��

Figure �.��: The Completed Stimulus Window

nous voulons examiner. Nous devons sélectionner RA�, RA� et RB�. Ceci est

ed
illustré à la figure �.��.

am
Figure �.��: The Input Output PIN Selection

oh
Window

Ce serait utile si nous pouvions voir la fenêtre du programme, la fenêtre du

M
stimulus et la fenêtre des broches d’E/S en même temps. Vous pouvez faire glisser
et déplacer la fenêtre de stimulus pour essayer de les organiser comme illustré à
la Figure �.��.
d
ou
A
El
ur

Figure �.��: Showing All the Active Windows


so

Nous sommes maintenant prêts à exécuter notre programme et à voir ce qui se


passe.
as

Compiler et exécuter le programme


M

Nous avons déjà sélectionné la simulation comme outil de programmation, ce qui


a été fait dans la section « Création du projet dans MPLABX », comme le montre
la figure �-�. Pour exécuter le programme, nous devons compiler le programme
et l’exécuter. La compilation du programme testera la syntaxe des instructions et
générera des erreurs, s’il y en a. Il exécutera également le programme d’éditeur
de liens qui garantit que tous les fichiers d’inclusion, tels que include <xc.h>, sont
compilés en même temps. Le résultat créera un fichier hexadécimal qui est utilisé
pour programmer le PIC réel. Cependant, dans ce cas, il programmera le PIC du
simulateur MPLABX.
Nous pouvons, si vous le souhaitez, tester d’abord la syntaxe du programme en
construisant simplement le programme. Cela se fait en sélectionnant l’option de
� Programming Microcontrollers ��

construction, qui est un symbole de marteau, dans la barre de menu principale.


Ceci est illustré à la figure �.��.

Figure �.��: The Build the Project Icon

ed
Cependant, nous pourrions construire et démarrer la simulation en une seule
opération. Pour effectuer ce processus, il vous suffit de cliquer avec la souris sur
l’icône Debug Main Project dans la barre de menu, comme illustré à la Figure
�.��.

am
oh
Figure �.��: The Debug Main Project Icon

M
Lors de la compilation, une nouvelle fenêtre de sortie devrait apparaître en bas
de la fenêtre MPLABX. Cela montre la progression de la compilation. Une fois
terminé, il indiquera où se trouvent les erreurs s’il y en a. Si la compilation est
d
réussie, elle doit montrer que le programme utilisateur est en cours d’exécution.
ou

Nous devons maintenant simuler l’action de commutation des commutateurs


et puis examinez la réaction des sorties. Nous pouvons soit ajouter une table de
surveillance pour examiner les sorties ou simplement regarder les broches d’E/S.
Après avoir compilé le programme avec succès, vous devriez pouvoir tester le
A

fonctionnement du programme.
Cliquez sur l’icône Debug Main Project, comme illustré à la Figure �.��, et attendez
El

que le programme se compile avec succès. S’il y a des erreurs, vous devez revenir
en arrière et vérifier que vous avez tout tapé exactement comme indiqué ci-dessus
ou dans la liste complète des programmes présentée en annexe. Si une erreur se
produit, la ligne sera affichée en bleu avec un message d’erreur affiché dans la
ur

fenêtre de sortie. Si vous cliquez avec la souris sur cette ligne bleue, vous devriez
allez directement à cette ligne dans la fenêtre d’édition où se trouve l’erreur. Vous
devez être très prudent et vous assurer que vous avez tout tapé, à l’exception des
so

commentaires, exactement comme indiqué dans le texte, comme indiqué dans le


programme Listing �-�.
as

En supposant que votre programme se compile correctement, la fenêtre de sortie


doit indiquer que le programme est en cours d’exécution. Vous devez maintenant
tirer sur le bouton marche, marche, puis sur le bouton arrêt, arrêt. Notez que vous
M

essayez de simuler des interrupteurs momentanés qui ne se ferment que tant que
vous gardez votre doigt sur le bouton.
Pour simuler cela avec le stimulus, vous devez cliquer deux fois avec la souris sur
le bouton de tir de ce commutateur. Le premier clic envoie la logique haut. Le
deuxième clic remet la logique à zéro. Lorsque vous faites cela, vous devriez voir
les broches d’E/S sur RB� et RA� passer au vert, ce qui signifie qu’il est allumé.
Vous devez maintenant cliquer à nouveau avec la souris sur la broche RA�, ce
qui fera passer la logique de cette broche à la logique « � ». Vous devriez voir
le voyant vert sur la broche d’E/S RA� s’éteindre mais le voyant vert sur le RB�
rester vert.
De cette façon, vous avez simulé l’appui sur l’interrupteur de démarrage mo-
mentané. Si vous effectuez maintenant le même processus sur le bouton d’arrêt,
� Programming Microcontrollers ��

ed
am
oh
M
d
ou

Figure �.��: The Proteus Schematic for myFirst��fProg


A

vous devriez voir le voyant vert sur RB� s’éteindre et le voyant vert sur RA�
s’allumer puis s’éteindre. De cette façon, vous avez simulé l’appui momentané de
El

l’interrupteur d’arrêt.
Si vous répétez maintenant tout le processus, vous devriez voir les voyants verts
sur les E/S s’allumer et s’éteindre correctement. Cela signifie que vous avez créé
ur

et écrit avec succès votre premier programme C PIC.


so

Tester le programme en pratique

Ce programme est probablement l’un des programmes les plus simples que vous
as

puissiez écrire ; J’espère que vous l’avez trouvé assez simple. Il n’est donc vraiment
pas nécessaire de construire un circuit pratique pour cela. Il peut être plus excitant
de construire un circuit pratique d’un ensemble de feux de circulation qui est un
M

programme que nous écrirons très bientôt.


Cependant, j’utiliserai ce programme pour vous présenter le processus d’utilisation
d’un package ECAD pour tester le programme. Le package ECAD que j’utiliserai
est PROTEUS avec le micro-package � bits ajouté. Ce texte ne vous apprend pas
à utiliser PROTEUS ; c’est un cours à part entière. Cependant, il vous montrera
comment télécharger votre programme sur le PIC dans le logiciel et vous expli-
quera comment vous pouvez connecter les commutateurs au PIC. Les schémas
PROTEUS pour ce premier programme sont montrés ici dans la Figure �.��.
Pour télécharger le programme sur le PIC dans le schéma, vous devez cliquer
sur la souris sur le PIC pour le sélectionner. Notez que la simulation ne doit pas
être en cours d’exécution et que le PIC deviendra rouge lorsqu’il sera sélectionné.
� Programming Microcontrollers ��

Maintenant, cliquez sur le bouton droit de la souris, sur le PIC, et sélectionnez


modifier les propriétés dans le menu déroulant qui apparaît. Vous devriez
maintenant avoir la fenêtre suivante, illustrée à la Figure �.��, affichée.

ed
am
oh
M
Figure �.��: The Edit Properties Window for
the PIC��f����

Vous verrez le symbole du répertoire à côté de la zone Program File dans la fenêtre.
d
Vous devez ouvrir la fenêtre du répertoire en cliquant avec la souris sur le symbole
de répertoire jaune, puis vous devez rechercher le fichier hexadécimal du projet.
ou

Si vous regardez la fenêtre de sortie après avoir construit le projet dans MPLABX,
vous trouverez en fait l’emplacement du fichier hexadécimal que vous recherchez.
Ceci est illustré à la figure �.��. Ce devrait être le seul fichier hexadécimal de ce
A
El

Figure �.��: The Path for the Hex File to Down-


load to PROTEUS

répertoire. Tu devrais cliquer sur Ouvrir pour insérer cet emplacement dans la
ur

boîte de fichier programme dans la fenêtre des propriétés dans PROTÉE. Une fois
que vous l’avez là-dedans, cliquez sur le bouton OK, et vous devrait revenir à la
fenêtre schématique. Vous devriez maintenant pouvoir exécuter la simulation
so

en cliquant sur le bouton de lecture. Le programme devrait fonctionner comme


prévu.
as

Si vous avez le bon logiciel pour PROTEUS, cela devrait devenir une méthode
très utile pour exécuter votre programme sans acheter beaucoup d’équipement.
Vous pouvez simuler presque tous les programmes PIC que vous écrivez à l’aide
M

de ce logiciel.
Un aspect très important que nous pouvons apprendre du schéma est l’utilisation
des résistances R�, R�, R� et R�. R� et R� sont liés aux deux entrées. L’entrée du
PIC est numérique, ce qui signifie que ce sera un « � » logique, c’est-à-dire � V
ou un « � » logique, c’est-à-dire � V. Cela signifie qu’il doit y avoir un chemin
vers l’une de ces deux tensions pour l’entrée. Un chemin devient actif lorsque le
bouton est enfoncé, et l’autre doit être actif lorsque le bouton n’est pas enfoncé.
Notez que vous ne devez jamais laisser un peu sur le port que votre programme
utilise non connecté. C’est ce qu’on appelle le flottement.
Si vous le laissez flotter, il flottera inévitablement au mauvais niveau logique et
peut perturber votre programme. Avec l’entrée RA�, l’entrée passe au �V logique
’�’ si le bouton n’est pas enfoncé. Cela doit être vrai car aucun courant ne sort du
� Programming Microcontrollers ��

PIC car il s’agit d’une entrée, et donc aucun courant ne traverse R�. Cela signifie
que la tension au sommet de R�, c’est-à-dire à l’entrée RA�, est la même que la
tension au bas de la résistance, car aucun courant ne la traverse. Comme la tension
au bas de R� est à la masse, la tension d’entrée de RA� est également à la masse
ou �V.
Lorsque le bouton de démarrage est enfoncé, le haut de R� qui est connecté à
l’entrée de RA� est connecté directement à VCC qui est de +�V. Cela signifie que
la tension à RA� passe à +�V, ce qui est le « � » logique. Notez que la résistance R�
est là pour limiter le courant à travers le commutateur à � mA, et ainsi protéger

ed
le commutateur lui-même. Cet agencement est appelé pull up car la fermeture
de l’interrupteur fait monter la tension jusqu’à VCC lorsque l’interrupteur est
fermé.

am
Lorsque le bouton de démarrage est enfoncé, le haut de R� qui est connecté à
l’entrée de RA� est connecté directement à VCC qui est de +�V. Cela signifie que
la tension à RA� passe à +�V, ce qui est le « � » logique. La même disposition
est utilisée pour RA� et même l’entrée MCLR. Cependant, le commutateur à

oh
l’entrée MCLR est appelé pull down car il abaisse le commutateur à � V lorsque
le commutateur est fermé.
Avec la sortie, sur RB�, la condition logique « � » met � V en haut de la LED verte.

M
Pour s’allumer réellement, la LED chute d’environ �,� V mais n’a besoin que
d’environ �� mA de courant direct pour briller. Cela signifie qu’il reste �,� volts à
laisser tomber sur la résistance R� ; puis sa valeur est fixée à ��� pour limiter le
courant à ��mA.
d
NB : Par mesure de précaution contre les étincelles ou les bruits à haute fréquence
ou

affectant l’alimentation du PIC, vous devez connecter un condensateur de ���nF


entre le VCC et la masse, en plaçant le condensateur très près de la broche VCC
du PIC. Ceci n’est pas montré dans la simulation PROTEUS, mais c’est là.
A
El
ur
so
as
M

Vous aimerez peut-être aussi