OUATTARA ALI
Le pic16F84
CHAP. III- PROGRAMMATION DU PIC
I.
Fentre dun diteur standard pour raliser un programme en assembleur
; programme qui permet d'allumer une LED
; sur la sortie RB0
List p=16F84A
#include <[Link]>
; processeur utilis
; initialisation des noms de variables
__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ; configuration des fusibles
org
goto
0x00
debut
; le programme dmarre toujours cette adresse 00
; saut au programme principal
org
0x05
; la premire instruction du programme se trouve ladresse 05
bsf
movlw
movwf
STATUS,5
B00000000
TRISB
; selection du bank 1 pour accder au registre TRIS
; 0 = sortie
; le port b est entirement en sortie
bcf
bsf
STATUS,5
PORTB,0
; retour au bank 0
; met le bit 0 du port B 1 (allume la LED)
debut
end
Champ Champ
Champ
tiquette code
oprande
opratoire
; directive de fin de programme
Champ
commentaire
On remarque que l'cran se dcoupe en 4 champs :
Champ tiquette
Champ code opratoire (mnmonique). Dans ce champ on trouve aussi des directives d'assemblage
Champ oprande
Champ commentaire
Pour passer d'un champ un autre, il suffit de mettre un espace avec la touche espace ou tabulation.
Plusieurs espaces accols correspondent un seul et mme espace.
II.
Directives d'assemblage
Une directive ne doit pas tre confondue avec les instructions du programme.
Elle indique tout simplement lassembleur la manire dont on veut quil travaille.
Les directives ne sont pas sensibles la casse des caractres.
END (pas sur colonne 1) : Fin du fichier contenant le programme.
EQU (sur colonne 1) : Permet de donner des quivalences (pour des valeurs). C.--d. associer un nombre
une tiquette.
Page1/10
OUATTARA ALI
Le pic16F84
Exemple :
ITES_IGN_TLC2
EQU
H0D
Quelque part dans le programme on peut utiliser ITES_IGN_TLC2.
Lassembleur comprendra quil sagit du nombre H0D.
MOVWF
ITES_IGN_TLC2
; Ecriture du contenu de W dans le registre
; en RAM nomm ITES_IGN_TLC2
#DEFINE (sur colonne 1) : Permet de donner des quivalences (pour des chanes de caractres).
Cest dire remplacer un texte difficile mmoriser par quelque chose de plus simple.
Exemple :
#DEFINE
LAMPE PORTA,1
Quelque part dans le programme on peut utiliser LAMPE :
BCF LAMPE ; Met le bit 1 du port A 0 (quivalent BCF
ORG (pas sur colonne 1) :
PORTA,1)
Dtermine ladresse partir de laquelle le compilateur doit mettre les
instructions qui suivent cette commande
Exemple :
ORG 0x00
GOTO debut
Linstruction GOTO est loge ladresse 00 de la mmoire de programme. Son excution renvoie se brancher
inconditionnellement au label debut qui se trouverait une certaine adresse.
__CONFIG (pas sur colonne 1) :
Dtermine les fusibles qui fixeront le fonctionnement du PIC.
NB : il y a 2 tirets de 8 avant config
Exemple :
__CONFIG
_CP_OFF & _PWRTE_ON & _WDT_ON & _HS_OSC
_CP_OFF :
_WDT_ON :
_PWRTE_ON :
_HS_OSC :
Aucune protection en lecture du pic (choix par dfaut).
WatchDog en service (choix par dfaut).
Dlai de dmarrage (72 ms) du pic la mise sous tension (OFF par dfaut).
Oscillateur quartz grande vitesse (10 MHz max) ; si cest _XT_OSC : quartz
moyenne vitesse (4 MHz maxi) ; si cest _RC_OSC : oscillateur RC 4 Mhz maxi (choix
par dfaut).
La configuration peut tre faite automatiquement par le programmateur de PIC en cochant les cases
correspondantes.
#INCLUDE (pas sur colonne 1) : Dtermine pour le compilateur toutes les quivalences lies la
structure du pic (pour lassembleur).
Cette directive dviter lcriture dune multitude de lignes dassignation au dbut de
chaque programme. On peut les regrouper dans un tel fichier et les appeler par une seule
commande : #include "[Link]" ou #include <[Link]>
Page2/10
OUATTARA ALI
Le pic16F84
Exemple :
#INCLUDE
<[Link]>
CBLOCK (pas sur colonne 1) :
ENDC
Dtermine un bloc mmoire pour rserver des octets pour diffrentes
variables. Elle se ferme par ENDC.
Fin de la dclaration pour le bloc mmoire ouvert par CBLOCK.
Exemple :
CBLOCK
DELAI
ZONE :
TABLE
ENDC
0x20
: 1
3
: 8
;
;
;
;
;
Dclaration dun bloc mmoire ladresse 0x20 de la RAM.
Rservation de 1 octet ladresse 0x20
Rservation de 3 octets partir de ladresse 0x21
Rservation de 8 octets partir de ladresse 0x24
Fin de la dclaration du bloc mmoire
Remarque : Cette directive quivaut une srie de EQU
MACRO (sur colonne 1) :
ENDM
Dtermine un bloc dinstructions qui va sexcuter lors de lappel de la
macro par le nom donn celle-ci. Elle se ferme par la directive ENDM.
Fin de la macro.
Exemple :
BANK0
macro
BCF STATUS,5
endm
Quelque part dans le programme on peut utiliser BANK0 comme une instruction.
III.
Modes dadressage
1. Adressage inhrent
Ce mode nest pas proprement parler un mode dadressage, mais tous les fabricants le dcomptent comme tel.
Les instructions agissent sur les registres internes du microprocesseur. Les instructions comportent donc un
code oprateur seul sans oprande.
Par exemple :
CLRW
Met le registre de travail W 0 et met le bit Z 1.
2. Adressage immdiat ou littral
Dans ce mode dadressage, le code opratoire est suivi par la donne manipuler cest--dire le code oprande.
Linstruction est donc compose dun code oprateur et dun code oprande seul.
Une instruction litteral se reconnat facilement car elle se termine toujours par LW.
Exemple :
MOVLW
MOVLW
SUBLW
53
B00110101
5Ah
; Stocke la valeur 53 en dcimale dans le registre W.
; Stocke la valeur 53 en dcimale dans le registre W.
; Soustraction 5A-W rsultat dans W.
Page3/10
OUATTARA ALI
Le pic16F84
Remarque :
Les chiffres hexadcimaux peuvent tre crits aussi de la manire suivante : 0x5A ou H5A.
3. Adressage direct
Par dfaut, le microcontrleur travail en adressage direct. Le code opratoire est suivi dun octet non sign qui
est ladresse effective pour une page prcise (bank 0 1) de la donne, ou oprande, manipuler. Il peut tre
suivi dune valeur prcde par une virgule.
Exemple :
ANDWF 0x20,0
ANDWF 0x20,1
MOVF
MOVF
; ET logique entre W et le contenu de ladresse 0x20, rsultat dans W.
; ET logique entre W et le contenu ladresse 0x20, rsultat ladresse 0x20
;(autre criture possible ANDWF 0x20 car par dfaut la valeur vaut 1 si
;absente).
;Lecture du registre 0x0C (RAM utilisateur), rsultat dans W.
;Lecture du registre 0x3A (RAM utilisateur), rsultat dans 0x3A. Permet de
;tester le bit Z.
0x0C,0
0x3A
4. Adressage indirect
Dans ce mode dadressage, loprande est constitu par INDF. Il suffit de spcifier la valeur dadresse sur 8 bits
dans le registre FSR.
Exemple :
Movlw 0x1A
Movwf FSR
MOVF
INDF,0
IV.
; Charge 1Ah dans W
; Charge W, contenant 1Ah, dans FSR
; Lecture du registre point par la valeur contenu dans INDF
;(c--d le registre situ l'adresse 1Ah), rsultat dans W.
Jeu dinstructions du PIC 16F84
1. Rsum des mnmoniques (en ordre alphabtique)
addlw
: Additionne une constante k W. Rsultat dans W.
addwf
f,d
: Additionne une variable ladresse f avec W. Rsultat dans f si d=1 ou dans W si d=0.
andlw
: ET logique entre une constante k et W. Rsultat dans W.
andwf
f,d
: ET logique entre une variable ladresse f et W. Rsultat dans f si d=1 ou dans W si
d=0.
bcf
f,b
: Met le bit b de f 0.
bsf
f,b
: Met le bit b de f 1.
btfsc
f,b
: Teste le bit b de f. Si ce bit vaut 0 alors linstruction suivante est ignore (instruction
NOP excut la place).
btfss
f,b
: Teste le bit b de f. Si ce bit vaut 1 alors linstruction suivante est ignore (instruction
NOP excut la place).
call
: Appel un sous-programme (PC mmoris dans la pile systme).
clrf
: Met 0 dans f.
Page4/10
OUATTARA ALI
Le pic16F84
clrw
: Met 0 dans W.
clrwdt
: Fait un reset du chien de garde (registre WDT counter mis 0).
comf
f,d
: Complment 1 de f. Rsultat dans f si d=1 ou dans W si d=0.
decf
f,d
: Dcrmente de 1 la variable f. Rsultat dans f si d=1 ou dans W si d=0.
decfsz
f,d
: Dcrmente de 1 la variable f. Rsultat dans f si d=1 ou dans W si d=0.
Si le rsultat de lopration vaut 0, alors linstruction suivante est ignore (instruction
NOP excut la place).
goto
: Branchement inconditionnel ladresse k.
incf
f,d
: Incrmente de +1 la variable f. Rsultat dans f si d=1 ou dans W si d=0.
incfsz
f,d
: Incrmente de +1 la variable f. Rsultat dans f si d=1 ou dans W si d=0.
Si le rsultat de lopration vaut 0, alors linstruction suivante est ignore (instruction
NOP excut la place).
iorlw
: OU logique entre une constante k et W. Rsultat dans W.
iorwf
f,d
: OU logique entre une variable ladresse f et W. Rsultat dans f si d=1 ou dans W si
d=0.
movf
f,d
: Met la variable contenu ladresse f dans W si d=0 ou dans f si d=1.
movlw
: Met la variable k dans W
movwf
: Met la variable contenu dans W ladresse f.
nop
: Aucune opration effectu (1 cycle machine excut).
retfie
: Fin du programme interruption (dpile la pile systme).
retlw
: Fin dun sous-programme (associe call).
return
rlf
: Fin dun sous-programme (associe call). Met la variable k dans W.
f,d
: Rotation logique gauche de la variable stocke ladresse f. Rsultat dans f si d=1 ou
dans W si d=0.
rrf
f,d
: Rotation logique droite de la variable stocke ladresse f. Rsultat dans f si d=1 ou
dans W si d=0.
sleep
: Met le microprocesseur en mode sommeil.
sublw
: Soustraction : k-W, rsultat dans W.
subwf
f,d
: Soustraction : une variable ladresse f-W, rsultat dans f si d=1 ou dans W si d=0.
swapf
f,d
: Permute les deux quartets de f. Rsultat dans f si d=1 ou dans W si d=0.
xorlw
: OU Exclusif entre une constante k et W. Rsultat dans W.
xorwf
f,d
: OU Exclusif entre une variable ladresse f et W. Rsultat dans f si d=1 ou dans W si
d=0.
Page5/10
OUATTARA ALI
Le pic16F84
2. Rsum des mnmoniques par catgorie
Lgende des oprandes
Page6/10
OUATTARA ALI
Le pic16F84
Note :
1. Quand la sortie est modifie par elle-mme, par exemple MOWF PORTB,1 la valeur utilise est ltat
rel de laccs correspondant. Si par exemple ltat du latch associ est 1 mais que la broche soit force
0 par un court-circuit extrieur la valeur affecte par linstruction est zro.
2. Si linstruction est excute sur le compteur du TIMER (TMR0) le pr-diviseur est remis zro sil est
utilis.
3. Si un saut est effectu, cette instruction ncessite deux cycles machine, le second est excut comme un
NOP.
V.
Structures algorithmiques fondamentales
1. Dfinitions
Organigramme (en anglais flowchart), se dit aussi ordinogramme : cest un schma synoptique qui analyse
dans le dtail les diffrentes phases du problme traiter.
Algorithgramme : Cest la transposition dun organigramme en tches simplifies.
2. Structure linaire ou squentielle
Exemple : P = U x I
Page7/10
OUATTARA ALI
Le pic16F84
3. Structure itrative
Structure itrative : boucle tant que
Tant que < condition ralise >
Faire quelque chose
Rpter
Remarque : Le travail peut ne jamais tre effectu
Structure itrative : boucle jusqu :
Faire quelque chose
Jusqu ce que < condition ralise >
Remarque : Le travail effectuer lest au moins une fois.
4. Structure alternative
Exemple : Un candidat est reu si M > 10
Page8/10
OUATTARA ALI
Le pic16F84
5. Structures algorithmiques lmentaires pour pic
TYPE DE STRUCTURE
If N=5 Then
action
End If
If N5 Then
action
End If
If N > 5 Then
action
End If
If N < 5 Then
action
End If
FORMAT POUR PIC
Dbut
MOVF
N,0
SUBLW 5
BTFSS
STATUS,Z
GOTO
FinSi
action
FinSi
..
Dbut
MOVF
N,0
SUBLW 5
BTFSC STATUS,Z
GOTO
FinSi
action
FinSi
..
Dbut
MOVF
N,0
SUBLW 5
BTFSC STATUS,C
GOTO
FinSi
action
FinSi
.
Dbut
MOVF
N,0
SUBLW 5
BTFSS STATUS,C
GOTO
FinSi
action
FinSi
.
Commentaires
; N dans W
; 5 - W dans W
; Si le rsultat est nul, (c..d. bit Z du registre statut=1) il
; y a skip (On excute l'action)
; Si le rsultat est 0, (c..d. bit Z du registre statut=0),
; on saute au label FinSi (on sort de la structure)
; N dans W
; 5 - W dans W
; Si le rsultat est 0, (c..d. bit Z du registre statut=0)
; il y a skip (on excute l'action)
; Si le rsultat est nul, (c..d. bit Z du registre statut=1),
; on saute au label FinSi (on sort de la structure)
; N dans W
; 5 - W dans W
; Si le rsultat 5-W est ngatif (c..d. bit C du registre
; statut=1), il y a skip (on excute l'action)
; Si le rsultat 5-W est positif, on sort de la structure
; N dans W
; 5 - W dans W
; Si le rsultat 5-W est positif (c..d. bit C du registre
; statut=0) , il y a skip (on excute l'action)
; Si le rsultat 5-W est ngatif, on sort de la structure
Page9/10
OUATTARA ALI
If N=5 Then
action1
Else
action2
End If
Dbut
MOVF
N,0
SUBLW 5
BTFSS STATUS,Z
GOTO Sinon
action1
GOTO FinSi
Sinon
action2
FinSi
..
If N=5 And M=3 Then
action
End If
Dbut
MOVF
N,0
SUBLW 5
BTFSS
STATUS,Z
GOTO
FinSi
MOVF M,0
SUBLW 3
BTFSS
STATUS,Z
GOTO
FinSi
action
FinSi
..
Dbut
MOVLW 1
MOVWF A
Test
action
MOVF
A,0
ADDLW 1
MOVWF A
SUBLW 5
BTFSC
STATUS,C
GOTO
Test
FinFor
..
For A=1 To 5
action
Next A
A=1
Do
A=A+1
Loop While A<5
Excution de l'action
(A=A+1)
au moins une fois
A=1
Do While A<5
A=A+1
Loop
Si le rsultat du test est
vrai, on excute l'action.
Dbut
MOVLW 1
MOVWF A
Faire
MOVLW 1
ADDWF A,1
MOVLW 5
SUBWF A,0
BTFSS
STATUS,Z
GOTO
Faire
FinDo
..
Dbut
MOVLW 1
MOVWF A
GOTO
TantQue
Faire
INCF
A,1
TantQue
MOVLW 5
SUBWF A,0
BTFSS
STATUS,Z
GOTO
Faire
FinDo
Le pic16F84
; N dans W
; 5 - W dans W
; Si le rsultat est nul, skip (on excute Action1) ensuite
; on saute au label FinSi (on nexcute pas Action2)
; Si le rsultat est 0, on saute au label Sinon
; (on excute Action2)
; Si N5
; on sort de la structure
; Si M3
; on sort de la structure
; 1 dans A
; puis W dans A (==> 1 dans A)
; excution de Action
; A dans W
; puis W+1 dans W
; W dans A (==> A+1 dans A)
; 5 - W dans W
; Si le rsultat est ngatif (5 passages), skip, on sort de la
structure
; Si le rsultat est positif on saute l'incrmentation
; de A (label Test)
; 1 dans A
; A+1 dans A (cest laction faire)
; A-5 dans W
; Si le rsultat est nul, skip, on sort de la structure car
; A=5
; Si le rsultat 0 (c..d A est diffrent de 5, on
; saute Faire
; 1 dans A
; on saute faire le test
A+1 dans A (Action)
Test
A-5 dans W
Si le rsultat est nul, skip : on sort de la structure (c..d A=5)
A<5, on saute Faire
Page10/10