Академический Документы
Профессиональный Документы
Культура Документы
Le microcontrleur
PIC 16F84
OUATTARA ALI
(Structure interne)
OUATTARA ALI
RA0..........pin 17
RA1..........pin 18
RA2..........pin 1
RA3..........pin 2
RA4..........pin 3 (RA4/T0CKI)
(NB : RA = Register A)
RB0..........pin 6 (RB0/INT)
RB1..........pin 7
RB2..........pin 8
RB3..........pin 9
RB4..........pin 10
RB5..........pin 11
RB6..........pin 12
RB7..........pin 13
(NB: RB = Register B)
A remarquer que RB0 (pin 6) et RA4 (pin 3), outre qu pouvoir servir dentres/sorties, selon la faon dont on les programme peuvent
respectivement servir lune comme entre dinterruption et lautre comme entre dhorloge externe pour le pilotage du timer (TMR0).
OUATTARA ALI
a-
La mmoire de programme
La mmoire de programme est de type EEPROM flash, de 1K mots de 14 bits. Elle va de ladresse 000 ladresse 3FF selon le plan
suivant :
000 Vecteur de Reset
001
002
003
004 Vecteur dInterruption
Cette mmoire est celle dans laquelle le programmeur crit les instructions du programme sachant que les cinq premires adresses (000,
001, 002, 003 et 004) sont rserves au microcontrleur. Deux dentre ces cinq adresses sont particulirement remarquables :
- ladresse 000 :
Elle correspond au vecteur de Reset. A la mise sous tension, ou chaque fois que des instructions spcifiques lobligent, le Program
Counter (PC) se rend cette adresse et cest l que le systme trouve la premire instruction excuter.
Cest une case devant obligatoirement tre remplie et contenir lorigine du programme (ORG).
Si cette adresse tait vide, le microcontrleur ne ferait rien, car aucun programme ne serait excut.
- ladresse 004 :
Elle correspond au vecteur dinterruption.
b-
La mmoire de donnes
La mmoire de donnes (Data Memory) est du type EEPROM flash, de 64 octets, allant de ladresse 00 ladresse 3F, auxquels on
accde uniquement par lintermdiaire de quatre registres spciaux :
- EEADR (EEprom ADRess) pour ce qui concerne les adresses
- EEDATA (EEprom DATA) pour ce qui concerne les donnes
- EECON1 (EEprom CONtrol1)
permettant de dfinir le mode de fonctionnement de cette mmoire (lecture ou criture)
- EECON2 (EEprom CONtrol2)
b1- Procdure de lecture dans la mmoire de donnes
Ecriture ladresse relative dans EEADR
Mettre le bit RD (Read Data) de EECON1 1 (ce qui provoque le transfert de la donne dans le registre EEDATA)
Lire le contenu du registre EEDATA
b2- Procdure d'criture dans la mmoire de donnes
- L'criture dans L'EEPROM doit tre autorise : bit WREN = 1
- Placer ladresse relative dans EEADR
- Placer la donne crire dans EEDATA
- Placer 55H dans EECON2
- Placer AAH dans EECON2
- Dmarrer l'criture en positionnant le bit WR
- Attendre la fin de l'criture, (10 ms) (EEIF=1 ou WR=0)
- Recommencer au point 2 si on a d'autres donnes crire
EECON1
DR-0C
DR-0C
DR-0C
EEIF
WRERR
WREN
DWRC
RRDC
EECON2 nen est pas vritablement un Registre. Microchip lutilise en tant que registre de commande. Lcriture de valeurs spcifiques dans
EECON2 provoque lexcution dune commande spcifique dans llectronique interne du PIC.
c-
La mmoire RAM
une zone RAM de 24 octets forme de registres spciaux (Special Function Register : SFR).
Les registres SFR sont les registres de fonctionnement du PIC (pour configurer tous les modules internes : les PORTS, le TIMER,
la gestion des interruptions, etc...). L'ensemble de ces registres est appel fichier des registres (Register File).
une zone RAM de donnes, constitue de 68 octets appels registres gnraux (General Propose Register : GPR).
Les registres GPR sont des positions mmoire que l'utilisateur peut utiliser pour stocker ses variables et ses donnes.
NB : On remarquera donc que, indpendamment de leur nature, les positions de la RAM sont toujours appel registres.
OUATTARA ALI
DIRPC
DRP1C
DRP0C
DTOC
DPDC
ZZZZ
DDCC
CCC
Pour la mmoire utilisateur (registres gnraux), l'utilisation des pages n'est pas ncessaire puisque le Bank1 est "mappe" avec le Bank 0.
Cela signifie qu'crire une donne l'adresse 0C ou l'adresse 8C revient au mme. Ainsi les 68 octets de la mmoire utilisateur situe
juste en dessous des registres spciaux vont de 0C 4F.
Lorganisation de la mmoire RAM est faite selon la mappe suivante :
Mapped in bank 0
Remarque :
Il existe par ailleurs une toute petite mmoire EEPROM, contenant seulement 8 emplacements 14 bits, de ladresse 2000 ladresse
2007, rserves au microcontrleur. Cette mmoire se programme surtout pour configurer le microcontrleur pendant la phase dimplantation
dun programme dans la mmoire de programme.
Particulirement parmi ces emplacements :
-
Les adresses 2000, 2001, 2002 et 2003 correspondent aux emplacements dans lesquels lutilisateur peut stocker un code
didentification (en nutilisant que les quatre bits de poids faible de chacun de ces quatre mots 14 bits).
Ladresse 2007 correspond au registre de configuration du microcontrleur. Seulement les cinq premiers bits de ce mot de 14
bits sont utilisables :
4
CPPP
PWRTE
WDTE
FOSC1
FOSC0
o Les bit 0 : FOSC0 (OSCillateur zro) et bit 1 : FOSC1 (OSCillateur un) sont programmer en fonction du type
doscillateur utilis, conformment aux spcifications du tableau suivant :
FOSC1
0
0
1
1
FOSC0
0
1
0
1
Type doscillateur
LP
XT
HS
RC
Caractristiques
(Low Power), faible consommation, jusqu 200 KHz
Quartz jusqu 4 MHz (mode le plus utilis)
(High Speed), quartz haute frquence, jusqu 10 MHz
Oscillateur RC, jusqu 4 MHz
OUATTARA ALI
Registre de 8 b it s dans lequel on crit ladresse de la mmoire de donnes EEPROM (mmoire flash de 64 octets, allant de ladresse
00 ladresse 4F) laquelle on veut accder pour y lire ou pour y crire.
Contrairement lEEPROM de programme qui - en plus de la tension dalimentation du microcontrleur - ncessite une tension
externe pour la programmation, cette EEPROM fonctionne avec la seule tension dalimentation, dans toute sa plage.
b-
C'est un registre de contrle qui permet d'excuter une lecture ou une criture dans l'EEPROM (mmoire flash de 64 octets, allant de
ladresse 00 ladresse 4F).
Seuls les 5 bits de poids faible sont utiliss.
7
GIE
EEIE
TOIE
EEIF
WRERR
WREN
WR
RD
N de
bit
Nom du bit
RD (ReaD)
Il est normalement 0. Il naccepte pas dtre programm zro. Lorsque ce bit est mis
"1", il indique au microcontrleur que l'on souhaite une lecture de l'EEPROM.
Apres le cycle de lecture, il est mis automatiquement 0.
WR (WRite)
Il est normalement 0. Il naccepte pas dtre programm zro. Lorsque ce bit est mis
"1", il indique au microcontrleur que l'on souhaite une criture de l'EEPROM.
Apres le cycle de lecture, il est mis automatiquement 0.
C'est un bit de confirmation d'criture dans l'EEPROM. En effet, il ne suffit pas de dfinir
un cycle d'criture uniquement avec le bit WR. Il faut imprativement valider le bit
WREN (WREN=1) pour autoriser une criture en mmoire. Mis zro, il interdit toute
criture en mmoire.
c-
Fonction
Flag derreur
Normalement zro il passe 1 (WRERR=1) pour signaler quune erreur sest produite
juste au moment o une criture tait en cours (Celle-ci na pu aboutir parce quun
vnement inopin sest produit ; par exemple un Reset).
WRERR=0 le cycle d'criture c'est droul normalement.
Il est automatiquement mis 1 lorsque la programmation de lEEPROM de donnes est
termine. Doit tre mis zro par programmation.
EEIF=1 l'opration s'est droule correctement.
EEIF=0 soit l'opration n'a pas commenc, soit n'est pas termine.
Ce registre est exclusivement utilis pour les squences d'critures dans l'EEPROM. Il n'a pas d'adresse physique et la lecture de ce registre
retourne une valeur nulle.
d-
Pendant une opration de lecture : registre dans lequel est disponible la donne quon est all chercher une certaine adresse
de la mmoire EEPROM.
Pendant une opration dcriture : registre dans lequel on place la donne quon veut crire dans la mmoire EEPROM.
e-
OUATTARA ALI
Le registre INTCON contient tous les bits de validation de chaque source d'interruption ainsi que leur drapeau (Flag).
Les drapeaux doivent tre mis 0 aprs l'interruption.
Dans le 16F84 il y a quatre sources possibles dinterruptions. Chaque fois que lune delles surgit, le microcontrleur (aprs avoir not
dans la pile ladresse de retour) abandonne momentanment (interrompt) le programme quil avait en cours dexcution et saute
ladresse 004 (adresse prdfinie par le fabricant).
En lisant le contenu de ce registre, on peut dterminer la provenance de la demande dinterruption et aiguiller le programme de manire
y rpondre de faon adquate.
Les quatre sources dinterruption possibles sont :
-
un changement dtat sur lune des pins 10, 11, 12 ou 13 (respectivement RB4, RB5, RB6, RB7).
Dans ce cas, seule une configuration des lignes en entre peut donner lieu une ventuelle demande dinterruption.
7
GIE
EEIE
TOIE
INTE
RBIE
TOIF
INTF
RBIF
N de
bit
Nom du bit
Fonction
Bit de validation qui autorise une interruption lors d'un changement d'tat du PORT B
(RB4 RB7).
RBIE=1 Autorise l'interruption.
RBIE=0 Les changement d'tat du PORT B (RB4 RB7) ne gnreront pas
d'interruption.
Ce bit autorise ou non une interruption lorsqu'un cycle d'criture dans L'EEPROM c'est
droul normalement.
EEIE=1 Gnre une interruption lorsqu'un cycle d'criture c'est droul
EEIE (EEprom Interrupt Enable)
normalement.
EEIE=0 Pas d'interruption.
OUATTARA ALI
OPTION
RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
N de
bit
7
Nom du bit
RBPU (Register B Pull Up)
Fonction
Mis zro (actif ltat bas) valide les rsistances de pull-up prsentes, lintrieur du
botier, sur les lignes du port B.
Dtermine le front du signal dhorloge sur lequel on veut que soit prise en compte une
demande dinterruption provenant de lextrieur (commande applique sur la pin 6 :
RB0/INT). Car on peut faire agir une telle demande soit lapparition dun front montant
(passage de zro 1), soit lapparition dun front descendant (passage de 1 zro).
INTEDG = 1 interruption programme pour se dclencher sur un front montant ()
INTEDG = 0 interruption programme pour se dclencher sur un front descendant ()
T0SE = 1
2,
1
et
PS2
PS1
PS0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
Facteur de division
Pour le TMR0
Pour le Watch-Dog
2
4
8
16
32
64
128
256
1
2
4
8
16
32
64
128
Pour crire dans ce registre on utilise soit linstruction BSF,bit, soit linstruction BCF,bit.
Reprsentation image du fonctionnement du timer TMR0 et du Watch-Dog (chien de garde) :
i-
OUATTARA ALI
Ladresse du compteur de programme est obtenue en mettant ensemble la partie basse fournie par PCL (Program Counter Low) et
la partie haute fournie par PCLATH.
Contrairement ce quon pourrait penser, ce registre ne fournit pas un nombre complmentaire fixe de bits, mais un nombre de bits
variable, en fonction des instructions qui sont traites.
k-
PORT A
PORT B
Alors que TRIS A et TRIS B se limitent dfinir le sens de chaque ligne des ports (entre ou
permettent concrtement au microcontrleur de communiquer avec lextrieur.
sortie),
PORT A
et PORT B
l-
Les cinq premiers bits de ce registre (bits 0 4) correspondent des flags que le programmeur peut interroger pour obtenir des
informations lui permettant dcrire correctement la suite des instructions de son programme ; tandis que les bits 5, 6 et 7 (RP0,
RP1, RP2), daprs la faon dont on les programme, pourraient slectionner 8 pages de registres internes (chacune de 128 octets).
Comme dans le 16F84 il ny a que deux pages de registres (Page 0 et Page 1), seul le bit 5 (RP0) sert. (Les bits 6 et 7 sont
ignorer purement et simplement).
Bit 0 : C (Carry)
Flag indiquant si une retenue a eu lieu dans un octet lors dune addition ou dune soustraction.
Si une retenue a t gnre, ce bit passe 1.
Bit 1 : DC (Digit Carry)
Flag fonctionnant comme le bit de Carry, sauf quici la surveillance de la retenue sexerce non pas sur loctet entier,
mais sur le premier demi-octet.
Ce flag se positionne 1 si une retenue est gnre du bit 3 (bit de poids fort du quartet infrieur) vers le bit 0 du quartet suprieur.
Il est utile pour corriger le rsultat doprations effectues en code BCD.
Bit 2 : Z (Zero)
Ce flag passe 1 si le rsultat dune opration (arithmtique ou logique) est 0.
OUATTARA ALI
m-
n-
TRIS A - TRIS B
Ce sont les registres qui dfinissent le sens de chacune des lignes des ports A et B.
Toute ligne mise 1 est programme comme entre, tandis que toute ligne mise 0 est programme comme sortie.
Il ny a aucune instruction permettant dcrire directement dans ces registres : on y accde en transitant par le registre de travail W.
En programmation, on commence donc par charger loctet de configuration dans le registre W, puis on copie celui-ci dans TRIS A ou
TRIS B.
Exemple :
Le bit 0 du port A est dfini comme entre, tandis que les sept autres lignes sont dfinies comme sorties.
Remarque :
Le chien de garde, "WATCHDOG TIMER" (WDT), permet d'assurer, de manire simple, le bon droulement d'un programme. Si le
programme " plante ", le WDT gnre un RESET ou un autre vnement permettant, soit l'utilisateur, soit au logiciel, de ragir en
consquence.
Le WDT du PIC16F84 est compos d'un oscillateur interne rseau RC indpendant et d'un compteur 8bits. La priode de loscillateur
varie en fonction de la temprature et de la tension d'alimentation (de 10ms 60ms dans les cas extrmes).
A chaque cycle dhorloge de loscillateur, le compteur sincrmente de 1. A la fin du comptage, cest dire lorsque le compteur passe de
FF 00, le WDT met le bit TO (Time Out) du registre STATUS 0. Si lon souhaite augmenter le temps du chien de garde, on peut utiliser
le prescaler. Il est important de noter que le prescaler est partag avec le TIMER. Il nest donc pas possible de les utiliser simultanment.
Le WDT est configurable uniquement lors de la programmation du microcontrleur, cest dire dans le "mot de configuration".
OUATTARA ALI
10
XXXX
A remarquer qutant donn que les deux bits de poids fort (bits 12 et 13) ne peuvent prendre que seulement quatre valeurs binaires (00 01 -10 et 11), il en rsulte que la premire valeur de toute instruction code en hexadcimal ne peut dpasser 3.
Autrement dit : eu gard la premire valeur de chaque instruction code en hexadcimal, les seuls formats possibles sont :
0XXX...
1XXX...
2XXX...
3XXX...
avec une tendue comprise entre 0000 et 3FFF.
La plupart des instructions oprent en utilisant le registre de travail W (Working register) comparable laccumulateur des anciens
microprocesseurs, et soit un registre soit une valeur immdiate code sur 8 bits appele literal.
Le rsultat des oprations peut tre envoy soit dans le registre W (accumulateur), soit dans le registre sollicit, soit dans les deux (avec
certaines instructions).
Un petit nombre dinstructions oprent en utilisant uniquement un registre (cest le cas des instructions BCF, BSF, BTFSC, BTFSS, CLRW,
CLRWT et SLEEP).
OUATTARA ALI
11
Les 37
-
instructions du 16F84 peuvent tre classes de plusieurs manires ; telles que entre autres :
Classement par ordre alphabtique
Classement par genre
Classement par type
ADD Literal to W
DECF
DECrement File
RETFIE
ADDWF
ADD W to File
DECFSZ
RETLW
ANDLW
RETURN
ANDWF
RLF
RRF
GOTO
BCF
INCF
INCrement File
BSF
INCFSZ
SLEEP
BTFSC
IORLW
SUBLW
BTFSS
IORWF
SUBWF
SWAPF
SWAP File
TRIS
TRIState port
XORLW
XORWF
CALL
CALL subroutine
MOVF
MOVe File
CLRF
CLeaR File
MOVLW
MOVe Literal to W
CLRW
CleaR W
MOVWF
MOVe W to File
CLRWDT
COMF
COMplement File
NOP
No OPeration
OPTION
Instructions de mouvement
ADDLW
ADDWF
SUBLW
SUBWF
MOVF
MOVLW
MOVWF
CALL
GOTO
RETFIE
RETLW
RETURN
Instructions dincrmentation
Instructions de rotation
DECF
DECFSZ
INCF
INCFSZ
RLF
RRF
BCF
BSF
BTFSC
BTFSS
Instructions deffacement
Instructions logiques
Instructions diverses
CLRF
CLRW
CLRWDT
ADDLW
ADDWF
COMF
IORLW
IORWF
XORLW
XORWF
NOP
OPTION
SLEEP
SWAPF
TRIS
OUATTARA ALI
12
ADDWF f,d
ANDWF f,d
COMF f,d
DECF f,d
DECFSZ f,d
INCF f,d
INCFSZ f,d
IORWF f,d
MOVF f,d
RLF f,d
SUBWF f,d
SWAPF f,d
XORWF f,d
OUATTARA ALI
13
- 1 cycle dhorloge
- Encodage de linstruction :
13
-1 cycle dhorloge
- Encodage de linstruction :
13
0 1 1
3
1 1 1 x k k k k k k k k
E
Valeur de loctet que
lon veut ajouter W
(valeur pouvant
aller de 00 et FF)
- Exemple de programmation :
ANDLW
- Exemple de programmation :
ADDLW
A7
06
avant
A7 = 10100111
5C = 01011100
AND = 00000100 (04 en hexa)
Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle ?
Elle sert lorsque dans un octet on a besoin de
rcuprer un bit en particulier (ou certains bits en particulier).
Pour cela il suffit de prparer un masque, cest dire on octet
compos de 0 (aux emplacements o se trouvent les bits
liminer) et de 1 (aux emplacements o se trouvent les bits
rcuprer).
Exemple : on souhaite rcuprer uniquement le bit 5 de loctet
01111010. On prpare alors le masque 00100000 et on fait un
ET logique entre loctet et le masque. Comme ceci :
01111010 (octet)
00100000 (masque)
Ce qui donne : 00100000 (rsultat)
Le rsultat de lopration permet donc bien de rcuprer
uniquement le bit 5 de loctet : ici cest un 1 (00100000).
Une fois rcupr, on peut utiliser ce bit comme on veut.
OUATTARA ALI
14
- Exemples de programmation :
- Exemples de programmation :
ANDWF,0
ANDWF,1
Adresse
Adresse
Ou BSF 1C,1
Ou BSF 1C,2
Etc
- Encodage de linstruction:
Position
du bit
dans
loctet
0 0 0 1 1 0 b b
b f f f
b f f f
De
0 0 0 1 1 0 0
1 0 0 1 1 1 1
Adresse de la RAM
(entre 0C et 4F)
o se trouve loctet
sur lequel on veut oprer
- 1 cycle dhorloge
- Encodage de linstruction:
- Organigramme du traitement :
- Exemples de programmation :
En supposant quon veuille mettre zro (Clear) un certain bit
de loctet situ ladresse 27 de la mmoire RAM, la
programmation serait :
BCF 27,0
Ou BCF 27,1
Ou BCF 27,2
Etc
OUATTARA ALI
- Exemples de programmation :
En supposant que loctet dont on veut tester un bit soit situ
ladresse 1A, la programmation serait la suivante :
BTFSC 1A,0
Ou BTFSC 1A,1
Ou BTFSC 1A,2
Etc
15
- Appel sous-programme.
- Organigramme du traitement :
- Organigramme du traitement :
- Exemples de programmation :
En supposant que loctet dont on veut tester un bit soit situ
ladresse 1C, la programmation serait la suivante :
BTFSS 1C,0
Ou BTFSS 1C,1
Ou BTFSS 1C,2
- Exemple de programmation :
CALL Tempo
Etc
CLRW : CLeaR W
- 1 cycle dhorloge
- 1 cycle dhorloge
- Encodage de linstruction :
- Encodage de linstruction :
- Exemple de programmation :
CLR W
INTCON
CLRF
PORTB
CLRF
1E
OUATTARA ALI
16
- Exemple de programmation :
CLWDT
- Exemples de programmation :
COMF
2B,0
COMF
2B,1
- 1 cycle dhorloge
- Encodage de linstruction:
- 1 cycle dhorloge
- Encodage de linstruction :
- Exemples de programmation :
COMF
2B,0
2B,1
- Exemples de programmation :
DECF
COMPTEUR,0
DECF
COMPTEUR,1
OUATTARA ALI
17
- Encodage de linstruction :
- Encodage de linstruction:
- Exemples de programmation :
INCF
NOMBRE,0
INCF
NOMBRE,1
2F,0
DECFSZ
2F,1
GOTO
- Branchement inconditionnel.
Va de faon inconditionnelle ladresse indique de suite
(adresse de dmarrage du sous-programme). Il peut sagir aussi
bien dune adresse que dun label.
Cette instruction interrompt lexcution squentielle des
instructions et oblige poursuivre le programme dune adresse
compltement ailleurs.
A la diffrence de linstruction CALL (qui fait toujours revenir le
programme principal lendroit o il avait t abandonn),
linstruction GOTO provoque labandon complet de la squence
et peut conduire soit une toute autre action, soit larrt total
du programme.
DATE,0
- Exemple de programmation
GOTO
ALLUMAGE
OUATTARA ALI
INCFSZ
DATE,1
18
- Exemple de programmation :
IORLW
B5
(10110101)
(octet)
11000000
(masque)
11111010
(rsultat)
IORWF
29,0
29,1
OUATTARA ALI
19
NOP : No OPeration
- 1 cycle dhorloge
- Encodage de linstruction:
- Exemple de programme :
NOP
- 1 cycle dhorloge
- Encodage de linstruction:
- Exemples de programmation :
MOVF
PORTB,0
MOVF
18,1
- 1 cycle dhorloge
- Encodage de linstruction :
- Exemple de programmation :
MOVLW
F5
- Exemple de programme :
- Exemple de programmation :
MOVWF
0D
OUATTARA ALI
RETFIE
20
SLEEP
- Rotation gauche.
- Mise en veilleuse.
OUATTARA ALI
21
Le flag C (Carry)
Le flag DC (Digit Carry)
Le flag Z (Zero)
- 1 cycle dhorloge
- Encodage de linstruction:
Le flag Z (Zero)
MOVLW
MOVWF
- 1 cycle dhorloge
- Encodage de linstruction:
OUATTARA ALI
22
Exemple :
Exemple :
- 1 cycle dhorloge
- 1 cycle dhorloge
- Encodage de linstruction:
- Encodage de linstruction:
OUATTARA ALI
23