0% ont trouvé ce document utile (0 vote)
2 vues45 pages

Cours Microcontrôleur

Le document présente un cours sur les microcontrôleurs, en se concentrant sur le modèle PIC16F84A, qui est un microcontrôleur de la famille Mid-Range. Il détaille les caractéristiques techniques, les registres, les ports d'entrée/sortie, ainsi que les fonctionnalités telles que les timers et les interruptions. Ce cours est destiné aux étudiants de la filière Ingénieur en Energies renouvelables et mobilité électrique à la Faculté des Sciences et Techniques de Marrakech pour l'année 2023/2024.

Transféré par

nohayla.nassif
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues45 pages

Cours Microcontrôleur

Le document présente un cours sur les microcontrôleurs, en se concentrant sur le modèle PIC16F84A, qui est un microcontrôleur de la famille Mid-Range. Il détaille les caractéristiques techniques, les registres, les ports d'entrée/sortie, ainsi que les fonctionnalités telles que les timers et les interruptions. Ce cours est destiné aux étudiants de la filière Ingénieur en Energies renouvelables et mobilité électrique à la Faculté des Sciences et Techniques de Marrakech pour l'année 2023/2024.

Transféré par

nohayla.nassif
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Faculté des Sciences et Technique de Marrakech

Filière d’Ingénieur Energies renouvelables & mobilité électrique (ER&ME)

Cours sur les


Microcontrôleurs

Le responsable : [Link]

Année : 2023/2024

[Link] 1
Sommaire

INTRODUCTION
I- Le PIC16F84A
I.1 Aspect externe du 16F84
I.2 La mémoire programme (flash)
I.3 La mémoire RAM – Registres
I.4 L'ALU et le registre W
I.5 L'Horloge
I.6 Le port d' E/S PORTA
I.7 Le port d' E/S PORTB
I.8 Le Timer TMR0
I.9 Le Watchdog Timer WDT (Chien de garde)
I.10 Le mode SLEEP
I.11 La mémoire EEPROM de configuration
I.12 La mémoire EEPROM de données
I.12.1 Procédure de lecture dans l'EEPROM de données
I.12.2 Procédure d'écriture dans l'EEPROM de données
I.13 Les interruptions
I.13.1 Déroulement d'une interruption
I.13.2 L'interruption INT (Entrée RB0 du port B)
I.13.3 L'interruption RBI (RB4 A RB7 du port B)
I.13.4 L'interruption T0I : Débordement du Timer TMR0
I.13.5 L'interruption EEI : Fin d'écriture dans l'EEPROM
I.14 L'adressage indirect
I.15 Le conteur programme
I.15.1 GOTO calculé
I.16 Les indicateurs
I.17 Les instructions du 16F84
I.17.1 Les instructions « orientées octet » (adressage direct)

[Link] 2
I.17.2 Les instructions « orientées bits »
I.17.3 Les instructions opérant sur une donnée (adressage immédiat)
I.17.4 Les instructions de saut et appel de procédures
I.17.5 Exemples d'instruction
I.17.6 Le jeu d'instructions

II- Le registre STATUS


III- Le registre INTCON (INTerrupt CONtrol)
IV- Le registre OPTION
V- Le registre EEDATA
VI- Le registre EEADR
VII- Le registre EECON1
VIII- Le registre EECON2
IX - LCD
IX-1 La connexion du LCD au microcontrôleur
IX-2 Initialisation du LCD
IX-3 Les instructions
a) Les instructions d’écriture (RS=0 R/W=0)
b) Les instructions de lecture (R/W=1)
IX-4 L’émission

X- Le Convertisseur

[Link] 3
INTRODUCTION

Un PIC est un microcontrôleur, c’est une unité de traitement de l’information de type


microprocesseur à laquelle on a ajouté des périphériques internes permettant de faciliter
l'interfaçage avec le monde extérieur sans nécessiter l’ajout de composants externes. Ce modèle de
PIC (Programmable Interface Controler) est un circuit de petite taille, fabriqué par la Société
américaine Arizona MICROCHIP Technology.
Les PICs sont des composants RISC (Reduce Instructions Construction Set), ou encore composant
à jeu d’instructions réduit. L'avantage est que plus on réduit le nombre d’instructions, plus facile et
plus rapide en est le décodage, et plus vite le composant fonctionne. La famille des PICs est
subdivisée en 3 grandes familles : La famille Base-Line, qui utilise des mots d’instructions de 12
bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876),
et la famille High-End, qui utilise des mots de 16 bits. Nous nous limiterons dans ce document à
la famille Mid-Range et particulièrement au PIC 16F84, sachant que si on a tout assimilé, on pourra
facilement passer à une autre famille, et même à un autre microcontrôleur.

Pour identifier un PIC, on utilise simplement son numéro :


• Les 2 premiers chiffres indiquent la catégorie du PIC, 16 indique un PIC Mid-Range.
• Vient ensuite parfois une lettre L, celle-ci indique que le PIC peut fonctionner avec une plage
de tension beaucoup plus tolérante.
• Vient en suite une ou deux lettres pour indiquer le type de mémoire programme :
- C indique que la mémoire programme est une EPROM ou plus rarement une EEPROM
- CR pour indiquer une mémoire de type ROM
- F pour indiquer une mémoire de type FLASH.
• On trouve ensuite un nombre qui constitue la référence du PIC.
• On trouve ensuite un tiret suivi de deux chiffres indiquant la fréquence d’horloge maximale que
le PIC peut recevoir.

Donc, un 16F84-04 est un PIC Mid-Range donc la mémoire programme est de type FLASH de

[Link] 4
référence 84 et capable d’accepter une fréquence d’horloge de 4MHz.
Notez que les PICs sont des composants STATIQUES, c’est à dire que la fréquence d’horloge
peut être abaissée jusque l’arrêt complet sans perte de données et sans dysfonctionnement. Une
version –10 peut donc toujours être employée sans problème en lieu et place d’une –04. Pas
l’inverse, naturellement.

Pourquoi choisir un PIC ?


• Les performances sont identiques voir supérieurs à ses concurrents
• Les prix sont les plus bas du marché
• Très utilisé donc très disponible
• Les outils de développement sont gratuits et téléchargeables sur le WEB
• Le jeu d'instruction réduit est souple, puissant et facile à maîtriser
• Les versions avec mémoire flash présentent une souplesse d'utilisation et des avantages
pratiques indéniables
• La communauté des utilisateurs des PICs est très présente sur le WEB. On trouve sur le net
quasiment tout ce dont on a besoin, tutoriaux pour démarrer, documents plus approfondis, schémas
de programmeurs avec les logiciels qui vont avec, librairies de routines, forums de discussion . . .

Les caractéristiques principales du 16F84 sont :

• Une mémoire programme de type flash de 1K (1024) mots de 14 bits


• Une mémoire RAM constituée :
• Des registres de control SFR (Special Function Registers) 68 octets de RAM utilisateur
appelés aussi GPR (General Propose Resisters)
• Une mémoire EEPROM de donnée de 64 octets
• Deux ports d'entrée sortie, un de 8 bits et un de 5 bits
• Un timer/Compteur cadencé par une horloge interne ou externe
• Un chien de garde / compteur qui est un timer particulier
• 4 sources d'interruption
• Un prédiviseur de fréquence programmable permettant d'étendre les possibilités du Timer
[Link] 5
• TMR0 et du chien de garde WDT
• L'horloge peut être générée par 4 types d'oscillateurs sélectionnables
• Protection de code
• Fonctionnement en mode sleep pour réduction de la consommation
• Programmation par mode ICSP ( In Circuit Serial Programming)

I- Le PIC16F84A

I.1 Aspect externe du 16F84


[Link] 6
Le 16F84 est commercialisé dans un boîtier 18 broches classique

I.2 La mémoire programme (flash)

Cette mémoire de 1024 mots stocke le programme. Elle est non volatile et reprogrammable à
souhait. Chaque position de 14 bits contient une instruction. L'emplacement du programme peut se
situer à n'importe quel endroit de la mémoire. Cependant il faut savoir que suite à un RESET ou
lors de la mise sous tension, le PIC commence l'exécution à l'adresse 0000H. De plus, lorsqu'il y a
une interruption, le PIC va à l'adresse 0004H. Il est donc conseillé de placer le début du programme
après l'adresse 0004H et de mettre un branchement au début du programme à l'adresse 0000H et
un branchement au début de la routine d'interruption s'il y en a une à l'adresse 0004H. Le
programme est implanté dans la flash à l'aide d'un programmateur (hard+soft) sur lequel nous
reviendrons dans la suite de ce document.

I.3 La mémoire RAM – Registres

[Link] 7
La mémoire RAM est constituée de deux parties :

• Les registres SFR (Special Function Register), ce sont les registres de fonctionnement du PIC.
L'ensemble de ces registres est souvent appelé fichier des registres. Nous reviendrons sur ces
registres tout le long de ce document.

• Les registres GPR (General Propose Register) sont des positions mémoire que l'utilisateur peut
utiliser pour stocker ses variables et ces données. On remarquera donc que, indépendamment de
leur nature, les position de la RAM sont toujours appelé registres La mémoire RAM est organisée
en deux banks, pour accéder à un registre, il faut d'abord se placer dans le bank où il se trouve.
Ceci est réalisé en positionnant le bit RP0 du registre STATUS. (RP0 = 0 → Bank 0, RP0 = 1 →
Bank 1).

Registre STATUS
[Link] 8
IRP RP1 RP0 TO PD Z DC C

Pour la mémoire utilisateur, l'utilisation des pages (Bank ) n'est pas nécessaire puisque le Bank 1
est "mapped" avec le Bank0. Cela signifie qu'écrire une donnée à l'adresse 0CH ou à l'adresse 8CH
revient au même.

I.4 L'ALU et le registre W

C'est une ALU 8 Bits qui réalise les opérations arithmétique et logique entre l'accumulateur W et
n'importe quel autre registre 'F' ou constante K. L'accumulateur W est un registre de travail 8 bits,
il n'a pas d'adresse comme les autres SFR. Pour les instructions à deux opérandes, c'est toujours lui
qui contient un des deux opérandes. Pour les instructions à un opérande, celui-ci peut être soit W
soit n'importe quel registre F. Le résultat de l'opération peut être placé soit dans le registre de travail
W soit dans le registre F.

I.5 L'Horloge

L'horloge peut être soit interne soit externe. L'horloge interne est constituée d'un oscillateur à quartz
ou d'un oscillateur RC. Avec l'oscillateur à Quartz, on peut avoir des fréquences allant jusqu'à 4,
10 ou 20 MHz selon le type de µC. Le filtre passe bas RS, C2 limite les harmoniques dus à
l’écrêtage et Réduit l’amplitude de l’oscillation. (il n'est pas obligatoire). Avec un oscillateur RC,
la fréquence de l'oscillation est fixée par Vdd, Rext et Cext. Elle peut varier légèrement d'un circuit
à l'autre. Dans certains cas, une horloge externe au microcontrôleur peut être utilisée pour
synchroniser le PIC sur un processus particulier. Quelque soit l'oscillateur utilisé, l'horloge système
dite aussi horloge instruction est obtenue en divisant la fréquence par 4. Dans la suite de ce
document on utilisera le terme Fosc/4 pour désigner l'horloge système. Avec un quartz de 4 MHz,
on obtient une horloge instruction de 1 MHz, soit le temps pour exécuter une instruction de 1µs.

Différents types d’oscillateurs :

[Link] 9
I.6 Le port d' E/S PORTA
Le port A désigné par PORTA est un port de 5 bits (RA0 à RA4). Chaque E/S est compatible TTL.
La configuration de direction pour chaque bit du port est déterminée avec le registre TRISA.

• Bit i de TRISA = 0 → bit i de PORTA configuré en sortie


• Bit i de TRISA = 1 → bit i de PORTA configuré en entrée

La broche RA4 est multiplexée avec l'entrée horloge du timer TMR0, elle peut donc être utilisée
soit comme E/S normale du port A, soit comme entrée horloge pour le Timer TMR0, le choix se
fait à l'aide du bit T0CS du registre OPTION_REG.

• T0CS = 0 → RA4 est une E/S normale


• T0CS = 1 → RA4 = horloge externe pour le timerTMR0

[Link] 10
RA4 est une E/S à drain ouvert, si on veut l'utiliser comme sortie (pour allumer une LED par
exemple), il ne faut pas oublier de mettre une résistance externe vers Vdd. Le schéma ci contre
illustre (pour les non électronicien) le principe d'une sortie drain ouvert (ou collecteur ouvert) : si
RA4 est positionnée à 0, l'interrupteur est fermé, la sortie est reliée à la masse. Si RA4 est placée à
1, l'interrupteur est ouvert, la sortie est déconnectée d'où la nécessite de la résistance externe pour
amener le courant de l'alimentation vers la LED. (la valeur de 1k est donnée à titre
indicatif, à vous d'ajuster selon votre application)

Registre OPTION_REG
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

I.7 Le port d' E/S PORTB

[Link] 11
Le port port B désigné par PORTB est un port bidirectionnel de 8 bits (RB0 à RB7). Toutes les
broches sont compatibles TTL. La configuration de direction se fait à l'aide du registre TRISB.
En entrée, la ligne RB0 appelée aussi INT peut déclencher l’interruption externe INT. En entrée,
une quelconque des lignes RB4 à RB7 peut déclencher l'interruption RBI. Nous reviendrons là-
dessus dans le paragraphe réservé aux interruptions.

I.8 Le Timer TMR0

C’est un compteur 8 bits ayant les caractéristiques suivantes :


• Il est incrémenté en permanence soit par l’horloge interne Fosc/4 (mode timer) soit par une
horloge externe appliquée à la broche RA4 du port A (mode compteur). Le chois de l'horloge se
fait à l'aide du bit T0CS du registre OPTION_REG.

o TOCS = 0 horloge interne


o TOCS = 1 horloge externe appliquée à RA4

• Dans le cas de l'horloge externe, on peut choisir le front sur lequel le TIMER s'incrémente.
o TOSE = 0 incrémentation sur fronts montants
o TOSE = 1 incrémentation sur fronts descendants
• Quelque soit l'horloge choisie, on peut la passer dans un diviseur de fréquence programmable (
prescaler) dont le rapport est fixés par les bits PS0, PS1 et PS2 du registre OPTION_REG (tableau
ci-contre). L'affectation ou non du prédiviseur se fait à l'aide du bit PSA du registre
OPTION_REG.

o PSA = 0 → on utilise le prédiviseur


o PSA = 1 → pas de prédiviseur (affecté au chien de garde)

• Le contenu du timer TMR0 est accessible par le registre qui porte le même nom. Il peut être lu
ou écrit à n'importe quel moment. Après une écriture, l'incrémentation est inhibée pendant deux
cycles instruction

[Link] 12
• Au débordement de TMR0 (FF → 00), le drapeau T0IF est placé à 1. Ceci peut déclencher
l'interruption T0I si celle-ci est validée.

Registre OPTION_REG :
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

I.9 Le Watchdog Timer WDT (Chien de garde)

C’est un compteur 8 bits incrémenté en permanence (même si le µC est en mode sleep) par une
horloge RC intégrée indépendante de l'horloge système. Lorsqu’il déborde, (WDT TimeOut), deux
situations sont possibles :

• Si le µC est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci permet


d’éviter de rester planté en cas de blocage du microcontrôleur par un processus indésirable
non contrôlé
• Si le µC est en mode SLEEP, le WDT time-out provoque un WAKE-UP, l'exécution du
programme continue normalement là où elle s'est arrêtée avant de rentrer en mode SLEEP. Cette
situation est souvent exploitée pour réaliser des temporisations.
L'horloge du WDT est ajustée pour que Le Time-Out arrive toutes les 18 ms. Il est cependant
possible d'augmenter cette durée en faisant passer le signal Time-Out dans un prédiviseur
[Link] 13
programmable (partagé avec le timer TMR0). l'affectation se fait à l'aide du bit PSA du registre
OPTION_REG
o PSA = 1 on utilise le prédiviseur
o PSA = 0 pas de prédiviseur (affecté à TMR0)
Le rapport du prédiviseur est fixé par les bits PS0, PS1 et PS2 du registre OPTION_REG (voir
tableau ci-contre).
L'utilisation du WDT doit se faire avec précaution pour éviter la réinitialisation (inattendue) répétée
du programme. Pour éviter un WDT timeOut lors de l'exécution d'un programme, on a deux
possibilités :

• Inhiber le WDT d'une façon permanente en mettant à 0 le bit WDTE dans l'EEPROM de
configuration
• Remettre le WDT à 0 périodiquement dans le programme à l'aide de l'instruction CLRWDT pour
éviter qu'il ne déborde

I.10 Le mode SLEEP

Le PIC peut être placé en mode faible consommation à l'aide de l'instruction SLEEP. Dans ce
mode, l'horloge système est arrêtée ce qui arrête l'exécution du programme.
Pour sortir du mode SLEEP, il faut provoquer un WAKE-UP, pour cela il y a 3 possibilités :

• RESET externe dû à l'initialisation du PIC en mettant l'entrée MCLR à 0. Le PIC reprend


l'exécution du programme à partir du début.
• Timeout du chien de garde WDT si celui-ci est validé. Le PIC reprend le programme à partir de
l'instruction qui suit l'instruction SLEEP
• Interruption INT (sur RB0) ou RBI (sur RB4-RB7) ou EEI (fin d'écriture en EEPROM de
données). Le bit de validation de l'interruption en question doit être validé, par contre, le
WAKE-UP a lieu quelque soit la position de bit de validation globale GIE. On a alors deux
situations :

o GIE = 0, Le PIC reprend l'exécution du programme à partir de l'instruction qui suit

[Link] 14
l'instruction SLEEP, l'interruption n'est pas prise en compte
o GIE = 1, Le PIC exécute l'instruction qui se trouve juste après l'instruction SLEEP puis se
branche à l'adresse 0004 pour exécuter la procédure d'interruption. Dans le cas où
l'instruction suivant SLEEP n'est pas désirée, il faut utiliser l'instruction NOP.

I.11 La mémoire EEPROM de configuration

Pendant la phase d'implantation d'un programme dans la mémoire programme du PIC, on


programme aussi une EEPROM de configuration constituée de 5 mots de 14 bits :
• 4 mots d’identification ( ID) à partir de l’adresse 0x2000 pouvant contenir un repérage
quelconque que nous n'utiliserons pas,
• 1 mot de configuration (adresse 0x2007) qui permet :
o de choisir le type de l'oscillateur pour l'horloge
o de valider ou non le WDT timer
o d’interdire la lecture des mémoires EEPROM de programme et de données.

• bits 1:0 FOSC1:FOSC0 (Sélection du type d'oscillateur pour l'horloge)


11 : Oscillateur RC
10 : Oscillateur HS (High speed) : quartz haute fréquence (jusqu'à 10 MHz)
01 : Oscillateur XT, c'est le mode le plus utilisé, quartz jusqu'à 4 MHz
00 : Oscillateur LP (Low power), consommation réduite, jusqu'à 200 kHz

• bit 2 WDTE (validation du timer WDT (chien de garde))


1 : WDT validé
0 : WDT inhibé
• Bit 3 PWRTE validation d'une temporisation à la mise sous tension
1 : temporisation inhibée

[Link] 15
0 : temporisation validée
• Bit 13:4 CP (Protection en lecture du code programme)
1 : pas de protection
0 : protection activée

I.12 La mémoire EEPROM de données

La mémoire EEPROM de données est constituée de 64 octets commençant à l'adresse 0x2100 que
l'on peut lire et écrire depuis un programme. Ces octets sont conservés après une coupure de
courant et sont très utiles pour conserver des paramètres semi permanents.
On y accède à l'aide des registres EEADR et EEDATA : toute lecture écriture dans le registre
EEDATA se fait dans la position mémoire pointée par EEADR. En fait EEADR contient l'adresse
relative par rapport à la page qui commence en 0x2100, autrement dit, l'adresse va de 0 à 63.
Deux registres de contrôle (EECON1 et EECON2) sont associés à la mémoire EEMROM.
La durée d’écriture d’un octet est de l’ordre de 10 ms, la fin de chaque écriture réussie est annoncé
par le drapeau EEIF et la remise à zéro du bit RW du registre EECON1. Le drapeau EEIF peut
déclencher l'interruption EEI si elle a été validée.

I.12.1 Procédure de lecture dans l'EEPROM de données

• Placer l’adresse relative dans EEADR


• Mettre le bit RD de EECON1 à 1
• Lire le contenu du registre EEDATA

I.12.2 Procédure d'écriture dans l'EEPROM de données

1. L'écriture dans L'EEPROM doit être autorisée : bit WREN = 1


2. Placer l’adresse relative dans EEADR
3. Placer la donnée à écrire dans EEDATA
4. Placer 0x55 dans EECON2

[Link] 16
5. Placer 0xAA dans EECON2
6. Démarrer l'écriture en positionnant le bit WR
7. Attendre la fin de l'écriture, (10 ms) (EEIF=1 ou WR=0)
8. recommencer au point 2 si on a d'autres données à écrire
Le drapeau WRERR est positionné si une erreur d'écriture intervient

EECON2 n’en est pas véritablement un Registre. Microchip l’utilise en tant que registre de
commande. L’écriture de valeurs spécifiques dans EECON2 provoque l’exécution d’une
commande spécifique dans l’électronique interne du PIC.

I.13 Les interruptions

Une interruption provoque l’arrêt du programme principal pour aller exécuter une procédure
d'interruption. A la fin de cette procédure, le microcontrôleur reprend le programme à l’endroit où
il s’était arrêté. Le PIC16F84 possède 4 sources d'interruption. A chaque interruption sont associés
deux bits: un bit de validation et un drapeau. Le premier permet d'autoriser ou non l'interruption,
le second permet au programmeur de savoir de quelle interruption il s'agit. Tous ces bits sont dans
le registre INTCON à part le drapeau EEIF de l'interruption EEI qui se trouve dans le registre
EECON1.

I.13.1 Déroulement d'une interruption

Lorsque l'événement déclencheur d'une interruption intervient, alors son drapeau est
positionné à un (levé). Si l'interruption correspondante a été validée, elle est alors déclenchée : le
programme arrête ce qu'il est en train de faire et va exécuter la procédure d'interruption qui se
trouve à l'adresse 4 en exécutant les étapes suivantes :

[Link] 17
• l'adresse contenue dans le PC (Program Counter) est sauvegardée dans la pile, puis remplacée
par la valeur 0004 (adresse de la routine d'interruption).
• Le bit GIE est placé "0" pour inhiber toutes les interruptions (afin qu'on ne soit pas dérangés
pendant l'exécution de la procédure d'interruption).
• A la fin de la procédure d'interruption (instruction RETFIE) :
o le bit GIE est replacé à l'état haut (autorisant ainsi un autre événement)
o le contenu du PC est rechargé à partir de la pile ce qui permet au programme de reprendre
là où il s'est arrêté

Deux remarques importantes sont à faire :

➢ Le drapeau reste à l’état haut même après le traitement de l’interruption. Par conséquent, il
faut toujours le remettre à "0" à la fin de la routine d'interruption sinon l'interruption sera
déclenchée de nouveau juste après l'instruction RETFI

➢ Seul le PC est empilé automatiquement. Si cela est nécessaire, les registres W et STATUS
doivent être sauvegardés en RAM puis restaurés à la fin de la routine pour que le
microcontrôleur puisse reprendre le programme dans les mêmes conditions où il l'a laissé.

I.13.2 L'interruption INT (Entrée RB0 du port B)

Cette interruption est provoquée par un changement d'état sur l'entrée RB0 du port B quand
elle est programmée en entrée. Elle est gérée par les bits :
- INTE : bit de validation (1=oui, 0=non)
- INTF : drapeau

[Link] 18
- INTEDG : front de déclenchement, 1=montant, 0=descendant (registre OPTION_REG)

I.13.3 L'interruption RBI (RB4 A RB7 du port B)

Cette interruption est provoquée par un changement d'état sur l'une des entrées RB4 à RB7 du
port B, Le front n'a pas d'importance. Les bits associés sont RBIE (validation) et RBIF (drapeau)

I.13.4 L'interruption T0I : Débordement du Timer TMR0

Cette interruption est provoquée par le débordement du timer TMR0. Les bits associés sont
T0IE (validation) et T0IF (drapeau)

I.13.5 L'interruption EEI : Fin d'écriture dans l'EEPROM

Cette interruption est déclenchée à la fin d'une écriture réussie dans l'EEPROM.
Les bits associés sont EEIE (validation) et EEIF (drapeau).

GIE : ce bit permet de valider ou d'interdire (globalement) toutes les interruptions

I.14 L'adressage indirect

L'adressage indirect se fait par l'intermédiaire des registres FSR et INDF. Le registre INDF n'est
pas un vrai registre mais représente la case mémoire pointée par le registre d'index FSR. Pour lire
ou écrire dans une case mémoire en utilisant l'adressage indirect, on commence par placer
l'adresse dans le registre FSR, ensuite on lit/écrit dans le registre INDF

I.15 Le conteur programme

Le Program Counter est un registre de 13 bits qui s'incrémente automatiquement lors de

[Link] 19
l'exécution du programme. On peut toutefois le modifier par programme pour réaliser ce qu'on
appelle un goto calculé. On y accède par les registres PCL et PCLATH

• PCL (8 bits) est la partie basse de PC, il est accessible en lecture écriture
• PCH (5 bits) est la partie haute de PC, il n'est pas accessible directement. On peut toutefois le
modifier indirectement à l'aide du registre PCLATH qui est une registre SFR accessible en
lecture écriture et où seuls 5 bits sont utilisés.

I.15.1 GOTO calculé

Si on veut modifier le Program Counter pour réaliser un saut, il faut d'abord placer la partie
haute dans le registre PCLATH, ensuite on écrit la partie basse dans PCL. Au moment de l'écriture
dans PCL, le contenu de PCLATH est recopié automatiquement dans PCH
11 bits venant de l'instruction PCLATH

Dans les instructions de branchement, l'adresse de destination est codée sur 11 bits. Lors de
l'exécution de telles instruction, les 11 bits sont copiés dans PC les deux bits manquants sont pris
dans PCLATH. Pour le 16F84, On n'aura pas besoin de ces bits car pour adresser 1024 lignes de
programme, seuls 10 bits du Programme Counter sont utilisés.

[Link] 20
I.16 Les indicateurs

Les indicateurs C, DC, et Z sont des bits qui nous informent sur le résultat d'une instruction. Ils
sont situés dans le registre STATUS :

• C (Carry) : ce bit Il passe à "1" lorsque le résultat d'une opération dépasse la valeur FF ou si
le résultat est négatif.
• DC (Digital Carry) : ce bit passe à "1" lorsque une retenue s'est produite entre les bit 3 et 4.
• Z (Zero) : Ce bit passe à "1", pour indiquer que le résultat de l'opération est nul.

I.17 Les instructions du 16F84

Tous les PICs Mid-Range ont un jeu de 35 instructions. Chaque instruction est codée sur un mot
de 14 bits qui contient le code opération (OC) ainsi que l'opérande. A part les instructions de saut,
toutes les instructions sont exécutées en un cycle d'horloge. Sachant que l’horloge fournie au PIC
est prédivisée par 4, si on utilise par exemple un quartz de 4MHz, on obtient donc 1000000
cycles/seconde, cela nous donne une puissance de l’ordre de 1MIPS (1 Million d’ Instructions Par
Seconde). Avec une horloge de 20MHz, on obtient une vitesse de traitement plus qu’honorable.

I.17.1 Les instructions « orientées octet » (adressage direct)

[Link] 21
Ce sont des instructions qui manipulent les données sous forme d’octets. Elles sont codées de
la manière suivante :

- 6 bits pour l’instruction : logique, car comme il y a 35 instructions, il faut 6 bits pour pouvoir
les coder toutes

- 1 bit (d) pour indiquer si le résultat obtenu doit être conservé dans le registre de travail
(accumulateur) W de l’unité de calcul (W pour Work) ou sauvé dans un registre F (F pour File).

- Reste 7 bits pour encoder l'adresse de l’opérande (128 positions au total)

Problème ! 7 bits ne donnent pas accès à la mémoire RAM totale, donc voici l’explication de la
division de la RAM en deux banks. Pour remplacer le bit manquant, on utilise le bit RP0 du registre
STATUS.
Bien qu'on ne l'utilise pas sur le 16F84, le bit RP1 est aussi réservé pour le changement de
bank, le 16F876 par exemple possède 4 banks.

I.17.2 Les instructions « orientées bits »

Ce sont des instructions destinées à manipuler directement les bits d’un registre d'une case
mémoire. Elles sont codées de la manière suivante :

- 4 bits pour l’instruction


- 3 bits pour indiquer le numéro du bit à manipuler (de 0 à 7)
- 7 bits pour indiquer l’opérande.

I.17.3 Les instructions opérant sur une donnée (adressage immédiat)

Ce sont les instructions qui manipulent des données qui sont codées dans l’instruction
directement. Elles sont codées de la manière suivante :

[Link] 22
- L’instruction est codée sur 6 bits
- Elle est suivie d’une valeur IMMEDIATE codée sur 8 bits (donc de 0 à 255).

I.17.4 Les instructions de saut et appel de procédures

Ce sont les instructions qui provoquent une rupture dans la séquence de déroulement du
programme. Elles sont codées de la manière suivante :

- Les instructions sont codées sur 3 bits


- La destination est codée sur 11 bits

Nous pouvons déjà en déduire que les sauts ne donnent accès qu’à 2K de mémoire
programme (211). Pas de problème pour le 16F84 qui ne possède que 1k de mémoire programme.

I.17.5 Exemples d'instruction

MOVWF F ; recopie W dans le registre d'adresse F :


F (File) désigne l'adresse de n'importe quel registre SFR ou GPR. Pour les registres SFR, on peut
utiliser leurs noms à condition d'inclure le fichier [Link] dans le programme

MOVWF 0x2C ; recopie W dans la case mémoire d'adresse 2Ch


MOVWF EEDATA ; recopie W dans le registre EEDATA
MOVF 0x08 ; recopie W dans le registre EEDATA

MOVF F,d ; recopie le registre F soit dans W soit dans lui-même Recopier un registre sur lui-même
peut paraître sans intérêt, mais comme l'instruction positionne les indicateurs, cela peut s'avérer
intéressant

[Link] 23
[Link] 24
I.17.6 Le jeu d'instructions

{W,F ? d} signifie que le résultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f

[Link] 25
II- Le registre STATUS

Le registre STATUS est principalement utilisé pour tout ce qui concerne les tests.

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0


IRP RP RP TO PD Z DC C
1 0
b0 : C Carry (report)

Ce bit est en fait le 9ème bit d’une opération.


Par exemple, si une addition de 2 octets donne une valeur >255 (0xFF), ce bit sera positionné.

b1 : DC Digit Carry

Ce bit est utilisé principalement lorsque l’on travaille avec nombres BCD. Il indique un report du
bit 3 vers le bit 4.

b2 : Z Zero

Ce bit est positionné à 1 si le résultat de la dernière opération vaut 0. Rappelez-vous cependant


que ces flags ne sont positionnés que pour les instructions qui le précisent (Status bit affected).

b3 : PD Power down

Indique quel événement a entraîner le dernier arrêt de la PIC (instruction sleep ou dépassement
du temps du watchdog). Il est actif à l’état bas. Donc que 0 = bit validé.

b4 : TO Time-Out bit

Ce bit indique (si 0), que la mise en service suit un arrêt provoqué par un dépassement de temps
ou une mise en sommeil. Dans ce cas, PD effectue la distinction.

b5 : RP0 Register Bank Select0

Permet d’indiquer dans quelle banque de RAM on travaille.


0 = banque 0.
1 = banque 1.

[Link] 26
b6 : RP1 Register Bank Select1

Permet la sélection des banques 2 et 3. Inutilisé pour la 16F84, doit être laissé à 0.

B7 : IRP Indirect RP
Permet de décider quelle banque on adresse dans le cas de l’adressage indirect.

III- Le registre INTCON (INTerrupt CONtrol)

Ce registre se situe à l’adresse 0x0B, dans les 2 banques. Il est donc toujours accessible.

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0


GIE EEIE TOIE INTE RBIE TOIF INTF RBIF

b7 : GIE Global Interrupt Enable bit

Il permet de valider ou d’invalider toutes les interruptions d’une seule fois.

b6 : EEIE Eeprom write complete Interrupt Enable bit

Ce bit permet de valider l’interruption de fin d’écriture en eeprom

b5 : T0IE Tmr0 Interrupt Enable bit

Valide l’interruption générée par le débordement du timer0.

b4 : INTE INTerrupt pin Enable bit

Valide l’interruption dans le cas d’une modification de niveau de la pin RB0.


Le bit 6 du registre OPTION détermine quel est le sens de transition (positive ou negative) qui
provoque l’interruption.

b3 : RBIE RB port change Interrupt Enable bit

[Link] 27
Valide les interruptions si on a changement de niveau sur une des entrées RB4 à RB7.

b2 : T0IF Tmr0 Interrupt Flag bit

Ce Flag signale s’il y a débordement du timer0.

b1 : INTF INTerrupt pin Flag bit

Signale une transition sur la pin RB0 dans le sens déterminé par INTEDG du registre OPTION
(b6)

b0 : RBIF Port Interrupt Flag bit

Signale qu’une des entrées RB4 à RB7 a été modifiée.

Remarque :
Rappelez-vous que les flags ne se remettent pas à 0 tout seuls. C’est votre programme qui doit
s’en charger, sous peine de rester indéfiniment bloqué dans une routine d’interruption. Le bit
EEIF se trouve dans le registre EECON1.

IV- Le registre OPTION

Ce registre se trouve à l’adresse 0x81, donc dans la banque1. Dans les fichiers include de
MPLAB, ce registre est déclaré avec le nom OPTION_REG.

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0


RBPU INTED TOC TOS PS PS2 PS1 PS0
G S E A

b7 : RBPU

Quand ce bit est mis à 0 (actif niveau bas en italique), une résistance de rappel au +5 volt
est placée sur chaque pin du PORTB.
La résistance interne force la pin RB0 à 1 lorsque le bouton n’est pas pressé. Notez que
cette option valide les résistance sur toutes les pins du PORTB. Il n’est donc pas possible de
choisir certaines résistances en particulier. De même cette fonction n’existe que pour le PORTB.
[Link] 28
b6 : INTEDG Interrupt Edge Select Bit

Donne, dans le cas où on utilise les interruptions sur RB0, le sens de déclenchement de
l’interruption.
Si b6 = 1, on a interruption si le niveau sur RB0 passe de 0 vers 1.
Si b6 = 0, l’interruption s’effectuera lors de la transition de 1 vers 0.

b5 : TOCS Timer 0 Clock Source Select Bit

Ce bit détermine le fonctionnement du timer0. Retenez que le timer0 est incrémenté soit
en fonction de l’horloge interne (synchronisé au programme), dans ce cas b5 = 0, soit il compte
les impulsions reçues sur la pin RA4, dans ce cas b5=1.

b4 : TOSE Timer 0 Source Edge Select Bit

Donne, pour le cas ou le bit 5 serait 1, le sens de la transition qui détermine le comptage
de tmr0. Si b4 = 1, on a comptage si le signal passe de 5V à 0V sur RA4.
Si on a b4 = 0, ce sera le contraire.

b3 : PSA Prescler Assignment Bit

Un prédiviseur indique le nombre de pulses qui devra être reçu pour provoquer une
incrémentation de la destination.
Il effectue une prédivision au niveau du timer du watchdog (b3 = 1), soit il effectue une
prédivision au niveau du tmr0 (timer0) (b3=0).

[Link] 29
b2, b1,b0 : PS2,PS1,PS0

Ces trois bits déterminent la valeur de prédivision.

V- Le registre EEDATA

C’est dans ce registre que va transiter la donnée à écrire vers ou la donnée lue en provenance
de l’eeprom. Ce registre est situé à l’adresse 0x08 banque0.

VI- Le registre EEADR

Dans ce registre, situé à l’adresse 0x09 banque0, nous allons préciser sur 8 bits l’adresse
concernée par l’opération de lecture ou d’écriture en eeprom. Nous voyons déjà que pour cette
famille de PICs, nous ne pourrons pas dépasser 256 emplacements d’eeprom. Pour la 16F84, la
zone admissible va de 0x00 à 0x3F, soit 64 emplacements.

VII- Le registre EECON1


Ce registre, situé à l’adresse 0x88 en banque1, contient 5 bits qui définissent ou indiquent le
fonctionnement des cycles de lecture/écriture en eeprom.

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit bit 0


EEIF WRER WRE 1 RD
R N WR
bits 7/6/5 non utilisés

bit 4 : EEIF Eeprom write operation Interrupt Flag bit

[Link] 30
C’est le flag qui est en liaison avec l’interruption EEPROM. Il passe à 1 une fois l’écriture en
eeprom terminée. Si le bit EEIE du registre INTCON est à 1, une interruption sera générée

bit 3 : WRERR WRite Error

C’est un bit d’erreur. Il passe à 1 si une opération d’écriture en eeprom a été interrompue, par
exemple par un reset.

bit 2 : WREN WRite ENable.

Autorisation de démarrage du cycle d’écriture

bit 1 : WR WRite

Démarrage du cycle d’écriture. Remis à 0 automatiquement une fois l’écriture terminée.

bit 0 : RD ReaD

Démarrage d’un cycle de lecture. Reste à 1 durant un cycle, puis est remis à 0 automatiquement

Remarque : Dans le cas où le cycle d’écriture serait interrompu suite au dépassement du


watchdog ou à un reset, vous pouvez lire le bit WRERR qui vous le signalera. Dans ce cas les
registres EEDATA et EEADR demeurent inchangés et vous pouvez relancer le cycle d’écriture.
Ceci ne fonctionne évidemment pas pour une coupure de tension.

VIII- Le registre EECON2

Il sert à envoyer des commandes à la PIC concernant les procédures eeprom.

[Link] 31
IX- LCD

IX-1 la connexion du LCD

Ports du LCD :

[Link] 32
IX-2 Initialisation du LCD

Avant de pouvoir utiliser le LCD, nous devons le configurer après chaque mise sous tension.

Première étape : Le microcontrôleur émet trois octets identiques

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 1 1 X X X X
0 0 0 0 1 1 X X X X
0 0 0 0 1 1 X X X X

Deuxième étape : configuration

Pour utiliser que 4 ports, il faut envoyer :


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 0 n/c n/c n/c n/c

Le bit DB4 indique que nous utilisons que 4 ports de données.

[Link] 33
a) Configuration 8 ports de données

Ensuite nous indiquons le nombre de lignes à utiliser (N), la qualité (F)

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 1 DL N F X X

DL=0 -----> 4 ports de données


DL =1 -----> 8 ports de données (ici DL=1)
N=0 -----> afficher 1 ligne
N=1 -----> afficher 2 lignes
F=0 -----> 1/8 duty
F=1 -----> 1/11 duty

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 0 0 1 D C B

D=display
D=0 -> éteindre le LCD
D=1 -> allumer le LCD
C = curseur
C=0-> ne pas afficher le curseur
C=1-> afficher le curseur
B=blinking

Troisième étape : effacer l’écran


Effacer l’écran et retour du curseur à la position d’origine (0)
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 0 0 1

Indication du sens d’écriture


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 1 1/D S

1/D=0-> décrémenter
1/D=1-> incrémenter
S=0-> the display is not shifted
S=1-> the display is shifted
[Link] 34
b) Configuration 4 ports de données

Ensuite nous indiquons le nombre de lignes à utiliser (N), la qualité (F)

RS R/W DB7 DB6 DB5 DB4


0 0 0 0 1 DL
0 0 N F X X

DL=0 ->4 ports de données


DL =1 ->8 ports de données (ici DL=0)
N=0 -> afficher 1 ligne
N=1 -> afficher 2 lignes
F=0 -> 1/8 duty
F=1 -> 1/11 duty

RS R/W DB7 DB6 DB5 DB4


0 0 0 0 0 0
0 0 1 D C B

D=display
D=0 -> éteindre le LCD
D=1 -> allumer le LCD
C = curseur
C=0-> ne pas afficher le curseur
C=1-> afficher le curseur
B=blinking

Troisième étape : nettoyage de l’écran


Effacer l’écran et retour du curseur à la position d’origine (0)

RS R/W DB7 DB6 DB5 DB4


0 0 0 0 0 0
0 0 0 0 0 1

[Link] 35
Indication du sens d’écriture
RS R/W DB7 DB6 DB5 DB4
0 0 0 0 0 0
0 0 0 1 1/D S

1/D=0-> décrémenter
1/D=1-> incrémenter
S=0-> the display is not shifted (non souligné)
S=1-> the display is shifted (souligné)

IX-3 Les instructions

a) Les instructions d’écriture (RS=0 R/W=0)

Clear display 1.64ms

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 0 0 0 0 0 1
Efface l’affichage et le curseur retourne à l’adresse 0

Home cursor 1.64ms

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 0 0 0 0 1 X

Le curseur retourne à l’adresse 0 et retour de shifted display


Display Data RAM (DD RAM ou “l’affichage”) n’est pas affectée

Entry Mode Set 40µs

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 0 0 0 1 I S

Indique la direction du mouvement du curseur et spécifie le soulignement du caractère


I=1 incrément, I=0 décrément l’adresse RAM après lecture ou écriture de la (CG/DD)
RAM
S=1 : caractère souligné

[Link] 36
On/off control 40µs
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 1 D C B
D=1 : display on
C=1 : curseur affiché
B=1 : encadre le caractère à la position du curseur

Cursor/shift 40µs

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 0 1 S R X X

Déplace le curseur ou le scroll display sans changer le DD RAM ( « l’affichage »)


S=1 : sélectionne scroll display
0 : sélectionne le curseur
R=1 : vers la droite
0 : vers la gauche

Function set 40µs

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 1 D N F X X

D=1 : interface de 8 bit


0 : interface de 4 bit
N=1 : 2 lignes pour les afficheurs 2 lignes
0 : 1 ligne
F=1 : 5*11 dots
0 : 5*8 dots

Character RAM Address Set 40µs

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 1 a a a a a A

Positionne le pointeur à l’adresse aa aaaa en mémoire CG RAM


Le LCD contient déjà des caractères ANSI dans la mémoire CG RAM (Character Generator RAM)
[Link] 37
Un espace a été réservé pour créer ses propres caractères dans cette mémoire.
aa aaaa : adresse CG RAM à pointer

Display RAM Address Set 40µs

Repositionne le pointeur à l’adresse aaa aaaa en mémoire DD RAM


aaa aaaa : adresse DD RAM à pointer

Write Data to CG or DD RAM ( 46µs pour afficher dans DD RAM, 120µs pour écrire dans CG RAM)

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


1 0 d d d d d d d d

La donnée est écrite dans la position actuelle du curseur en (DD/CG) RAM (Cela dépend de la
dernière commande d’adressage de la RAM (CG/DD)).
L’adresse de la RAM en question est incrémentée ou décrémenté ensuite.
dddd dddd : indique le caractère en mémoire CG RAM à écrire en mémoire DD RAM ou permet
de créer un caractère en mémoire CG RAM

Exemple :
Ecrire "A" sur la première ligne et au premier caractère (DD RAM 00)

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 1 a a a a a a A

Le code ASCII de A est B’0100 0001’ (41 hexa)

Nous plaçons le curseur à l’adresse DD RAM 00 :


Ensuite nous lui indiquons d’afficher "A" :
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 0 0 1 0 0 0 0 0 1 0x41

Créer un caractère en mémoire CG RAM

La mémoire CG RAM comporte une zone réservée pour créer des caractères.
Pendant l’initialisation du LCD, nous choisissons la résolution du caractère ( 5*7 ou 5*11 pour
le LCD). Le caractère sera donc issu d’une matrice de 7 ou 11 octets qui contiennent 5 bits utiles
de résolution 5*7
[Link] 38
Adresse CG donnée CG affichage LCD
A+0 xxx11100 ***
A+1 xxx10000 *
A+2 xxx11100 ***
A+3 xxx10100 **
A+4 xxx11100 ***
A+5 xxx00000
A+6 xxx00001 * (ligne du curseur)

A : adresse de début de caractère

Instruction pour écrire en mémoire CG RAM

[Link] 39
b) Les instructions de lecture (R/W=1)

Read Busy Flag 40µs


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 1 BF a a a a a a a

Vérifier si la dernière instruction a été acceptée.


Récupérer l’adresse actuellement pointée dans la mémoire RAM
b=1 : busy (instruction non acceptée)
0 : OK pour envoyer
aaa aaaa : pointeur de l’adresse RAM
Read Data from CG or DD RAM (46µs pour la lecture à l’affichage, 120µs pour la lecture en CG
RAM)
La donnée est lue directement à l’adresse pointée dans la RAM (CG/DD).
Puis l’adresse est automatiquement incrémentée ou décrémentée.

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


1 1 z z z z z z z z

IX-4 l’émission

L’émission est effectuée en position les ports DB0-7 ou DB4-7 du LCD à l’état voulu. La
validation des bits est réalisée par le passage de l’état 1 à l’état 0 de E. Une suite de messages doit
être espacé de 0,5 µs minimum.

[Link] 40
No. Instruction Hex
1 Function Set: Mode 8-bit, 1 Line, 5x7 Dots 0x30
2 Function Set: Mode 8-bit, 2 Line, 5x7 Dots 0x38
3 Function Set: Mode 4-bit, 1 Line, 5x7 Dots 0x20
4 Function Set: Mode 4-bit, 2 Line, 5x7 Dots 0x28
5 Entry Mode 0x06
Display off Cursor off
6 0x08
(clearing display without clearing DDRAM content)
7 Display on Cursor on 0x0E
8 Display on Cursor off 0x0C
9 Display on Cursor blinking 0x0F
10 Shift entire display left 0x18
12 Shift entire display right 0x1C
13 Move cursor left by one character 0x10
14 Move cursor right by one character 0x14
15 Clear Display (also clear DDRAM content) 0x01
16 Set DDRAM address or coursor position on display 0x80+add
17 Set CGRAM address or set pointer to CGRAM location 0x40+add

[Link] 41
[Link] 42
X- Le Convertisseur

La gestion de la conversion se fait grâce à 4 registres 8 bits :


 ADRESH et ADRESL (Analog to Digital result High and Low), contiennent le résultat de la
conversion sur 10 bits. Rem: un octet ne contiendra que 2 bits.
 ADCON0 et ADCON1 (Analog to Digital Control 0, 1), permettent de configurer la conversion.
✓ La tension de référence peut être interne (GND ou 5v), ou externe (RA2 et RA3) selon la
configuration. En aucun cas elle ne doit dépasser la tension d’alimentation.
✓ Le temps de conversion minimum est d’environ 20 μs. La durée du signal d’horloge TAD ne doit
pas être en dessous de 1,6 μs.

REGISTRE ADCON0

[Link] 43
Sélection fréquence d’horloge du C.A.N. :

La fréquence FAD engendrée par le RC est d’environ 250 KHz.

Sélection entrée de conversion :

Lancement et fin de conversion :

Le bit GO/DONE lance la conversion lorsqu’il est positionné à “1”. Il passe à “0” lorsque la
conversion est terminé. Il est nommé ADGO dans le langage C HI-TECH .

Activation du C.A.N. :

Le positionnement à “1” du bit ADON active le convertisseur A/N. Dans le cas contraire le C.A.N.
Est inopérant.

REGISTRE ADCON1

ADFM : Sélection du Format du résultat de la conversion:

Le résultat de la conversion sur 10 bits peut se présenter de 2 façons :


[Link] 44
- ADFM = 0 justification à gauche (dans ce cas ADRESH donne un résultat sur 8 bits,
correspondant à la partie la plus significative = poids fort). Ce mode est surtout utilisé lorsque l’on
se contente d’un résultat sur 8 bits (variable de type “unsigned char”).

ADFM = 1 justification à droite. Le résultat correspond directement à un entier de type “unsigned


int” en langage C. Ce mode est donc tout indiqué lorsque l’on souhaite utiliser le résultat sur 10
bits

Sélection de la tension de référence et du nombre d’entrées analogiques :

[Link] 45

Vous aimerez peut-être aussi