Vous êtes sur la page 1sur 10

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 <p16F84A.inc>

; 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 "P16F84A.INC" ou #include <P16F84A.INC>
Page2/10

OUATTARA ALI

Le pic16F84

Exemple :
#INCLUDE

<P16F84A.INC>

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

Vous aimerez peut-être aussi