Professional Documents
Culture Documents
I- Introduction
1.1 Dfinition
Un PIC est un microcontrleur (C), cest--dire une unit de traitement de linformation laquelle
on a ajout des priphriques internes permettant de faciliter linterfaage avec le monde extrieur sans
ncessiter lajout de composants externes.
Microcontrleur = CPU + Mmoire + Interface dentre/sortie
1.2 Architecture Harvard contre Von Neumann
1.2.1 Architecture Von Neumann
Mmoire de programme contenant instructions et donnes
Unit centrale
Bus de donnes
1.2.2
Architecture Harvard
Bus dinstructions
Les microcontrleurs PIC utilisent une architecture Harvard. Ils font galement appel une
architecture de type RISC (Reduced Instruction Set Computer).
-
Les circuits RISC utilisent une structure de type pipe-line qui leur permet dexcuter une
instruction tout en recherchant la suivante en mmoire ;
- De plus, les circuits RISC excutent toutes leurs instructions en un seul cycle machine d en
grande partie au codage de linstruction en un seul mot.
1.3 Les rfrences des Pics
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 1
NN : famille laquelle appartient le circuit : peut tre 12, 16, 17 ou 18. On distingue 3
grandes familles :
-
LLL : ensemble de une, deux ou trois lettres dsignant tout la fois, le type de mmoire
de programme contenu dans le circuit et la plage de tension dalimentation (tendue ou
normale) :
-
CC : mmoire EPROM
CR : mmoire ROM
F : mmoire Flash.
II- Le hardware
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 2
2.2 Le brochage
Le 16F84 est un boitier de 18 broches constitues de :
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 3
Lalimentation Vdd/Vss;
2 entres dhorloge OSC1 et OSC2 ;
1 entre RESET qui est la broche MCLR ;
13 broches constituant les lignes dE/S des ports A et B dont 2 sont multiplexs : RA4/TOCK1
et RBO/INT.
Ces registres sont accessibles en lecture et criture suivant leur fonction. Lespace mmoire
contenant ces registres est scinde en 2 parties : BANK0 et BANK1. Ces deux parties sont accessibles
par la mme adresse ; la slection de lun des bank se fait selon deux bits de contrle : (RP1 et RP0) du
registre dtat STATUS.
adresses
00
01
02
03
Bank 0
INDF
TMRO
PCL
STATUS
Bank 1
INDF
OPTION
PCL
STATUS
adresses
80
81
82
83
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 4
04
05
06
07
08
09
0A
0B
0C
.
.
.
4F
FSR
PORTA
PORTB
FSR
TRISA
TRISB
EEDATA
EEADR
PCLATH
INTCON
EECON1
EECON2
PCLATH
INTCON
Mmoire utilisateur
(GPR) : positions
mmoires pour
stocker des variables
et des donnes
Mapped in bank 0
84
85
86
87
88
89
8A
8B
8C
.
.
.
CF
Remarques :
Pour accder un registre, il faut dabord se placer dans le bank o il se trouve : ceci se
fait grce aux bits RP0 et RP1 du registre dtat STATUS :
- Si RP0 = 0 on accde au bank 0
- Si RP0 = 1 on accde au bank 1
Pour la mmoire utilisateur, lutilisation des bank nest pas ncessaire puisque le bank 1
est mapped au bank 0. Cela signifie qucrire une donne ladresse 0CH ou
ladresse 8CH revient au mme.
Page 5
IRP
RP1
RP0
TO
PD
DC
C =1 si retenue, 0 sinon
DC=1 si une retenue est gnre du bit 3 vers le quartet suprieur dans les instructions
ADDLW et ADDWF. DC =0 sinon.
Z=1 si le rsultat de lopration arithmtique ou logique excute est nul et 0 sinon.
PD = 0 lors de lexcution de linstruction SLEEP. Il est 1 suite une mise sous
tension ou lexcution de linstruction CLRWDT.
TO =1 lors du dbordement du timer chien de garde et est 0 suite une mise sous
tension ou lexcution de linstruction CLRWDT ou SLEEP.
RP0 = 0 : choix du bank 0 et RP0 = 1, choix du bank 1.
org 0
goto L0
org 4
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 6
goto L1
org 0x30
L0
..
..
..
L1
..
..
retfie
end
Page 7
d) Adressage indirect
Le registre FSR dadresse 04 ou registre de slection du registre dans lequel on place le numro
du registre adress. Le mode de notation correspondant utilise le registre INDF sous la forme par
exemple :
MOVWF INDF ; transfrer le contenu de W dans lemplacement mmoire adress par FSR.
3.2 Les instructions du 16F84
Tous les PICs Mid-range ont un jeu de 35 instructions. Chaque instruction est code sur un mot
de 14 bits qui contient le code opration ainsi que loprande. A part les instructions de saut, toutes les
instructions sont excutes en un cycle dhorloge. Sachant que lhorloge fournie au PIC est prdivise
par 4, si on utilise par exemple un quartz de 4 MHz, on obtient donc 1 000 000 de cycles/ seconde, soit
une puissance de lordre de 1MIPS (1 Million dInstructions par seconde).
3.2.1 Les instructions orientes octet (adressage direct)
Ce sont des instructions qui manipulent les donnes sous forme doctets.
f : registre (file register), de 0 7Fh
d : destination ; d = 0 rsultat dans W ; d = 1 rsultat dans f.
Exemple :
MOVF f,d
3.2.2 Les instructions orientes bits
Ce sont des instructions destines manipuler directement les bits dun registre particulier.
b : numro du bit affect par lopration (varie de 0 7)
f : registre cod par son adresse
Exemple :
BCF PORTA,0 ; mettre le bit 0 du port A 0.
BTFSS PORTB,5 ; tester le bit 5 du port B, saut si gal 1.
3.2.3 Les instructions oprant sur une donne (adressage immdiat)
Ce sont les instructions qui manipulent des donnes (litral) qui sont codes dans linstruction
directement. La valeur immdiate appele litral est code sur 8 bits (de 0 255).
Remarque :
Les mnmoniques de ces instructions comportent un L pour litral. Ce sont des instructions
un seul oprande qui est le litral k.
Exemple :
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 8
ANDLW k ; ET logique entre le litral k et le contenu du registre W. Le rsultat est stock dans W.
SUBLW k ; k - W W.
3.2.4 Les instructions de saut et dappel de procdure
Elles provoquent une rupture dans la squence de droulement du programme.
Exemple :
CALL L ; appel du sous programme L
GOTO L ; branchement ltiquette L
NOP ; pas dopration
RETURN ; retour dun sous programme
RETFIE ; retour dinterruption
RETLW ; retour dun sous programme avec k dans le registre W.
SLEEP ; mise en mode standby
La liste complte des instructions du PIC 16F84 se trouve en annexe.
IV- Programmation du PIC 16F84
4.1 Structure de base dun programme en assembleur
Elle se prsente selon le modle suivant :
List p = 16F84A
; dclaration du processeur
#include <p16F84.inc>
_config H3FF1
Constante1
equ
valeur1
Constante2
equ
valeur2
.
cblock
Reg1
Reg2
endc
.
org 0
bsf
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 9
Debut
movlw
movwf
TRISB
bcf
instruction 1
Instruction 2
end
; fin du programme
cpt
List p = 16F84A
; dclaration du processeur
#include <p16F84.inc>
_config H3FF1
equ
0x0E
cblock
0x0C
resul
reg
endc
org 0
M1
bcf
clrf
resul
movwf
reg
movlw
0x08
movwf
cpt
; cpt = 08h
btfsc
reg,0
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 10
rotation
Goto
rotation
Incf
resul,1
rrf
reg,1
decf
cpt,1
; dcrmenter cpt de 1
btfss
STATUS,z
goto
M1
end
4.2.2 Exemple 2
Soit une table de 10 octets commenant lemplacement mmoire dadresse 20H. Ecrire un
programme permettant de complmenter les lments de cette table lorsquelle est parcourue dans le
sens des adresses croissantes.
List p = 16F84A
; dclaration du processeur
#include <p16F84.inc>
_config H3FF1
Cblock
0x20
Tab :
0x0A
; taille de la table
cpt
endc
main
M0
org
0x00
goto
main
org
0x30
bcf
movlw
0x0A
movwf
cpt
; cpt = 0Ah
movlw
0x20
movwf
FSR
comf
INDF,f
decfsz
cpt,f
goto
encore
goto
fin
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 11
encore
fin
incf
FSR,f
goto
M0
; saut ltiquette M0
end
; fin du programme
Procdure classique
1100
multiplicande
1101
1100
00000
110000
1100000
10011100
multiplicateur
Explication de la procdure :
- On a multipli 1100 par 1, on obtient 1100 ;
- On a multipli 1100 par 0 et on dcale le rsultat vers la gauche, on obtient 00000 ;
- On a multipli 1100 par 1, et on dcale le rsultat vers la gauche, on obtient 110000 ;
- On a multipli 1100 par 1, on procde de mme, on obtient 1100000 ;
- Enfin, on additionne le tout et on obtient 10011100.
Si on ralisait ce programme, il faudrait 4 variables supplmentaires pour stocker les rsultats
intermdiaires, 8 dans le cas dune multiplication 8 bits.
On peut procder laddition au fur et mesure du rsultat intermdiaire avec le rsultat. On
obtient lalgorithme suivant :
- On multiplie 1100 par 1, on place le rsultat dans rsultat final ;
- On multiplie 1100 par 0, on dcale une fois gauche puis on lajoute au rsultat final ;
- On multiplie 1100 par 1, on dcale deux fois gauche puis on lajoute au rsultat final ;
- On multiplie 1100 par 1, on dcale trois fois gauche puis on lajoute au rsultat final.
Cet algorithme est pratique mais au lieu de dcaler le multiplicateur vers la gauche, on peut
procder autrement en dcalant le rsultat vers la droite pour navoir que des additions de 8 bits faire.
Si on appliquait cette dernire mthode lexemple de 4 bits, on aurait lalgorithme suivant :
- On multiplie 1100 par 1, on obtient 1100 qui est le quartet haut du rsultat final, ce qui
donne 11000000 ;
- On dcale ce rsultat vers la droite, on obtient 01100000 ;
- On multiplie 1100 par 0 et on ajoute ce rsultat au rsultat final, on obtient 01100000 ;
- On dcale ce rsultat vers la droite pour obtenir 00110000 ;
- On multiplie 1100 par 1 puis on ajoute le rsultat au quartet de poids fort du rsultat final, ce
qui donne : 11000000 + 00110000 = 11110000 ;
- On dcale ce rsultat dun rang vers la droite : 01100000 ;
- On multiplie 1100 par 1 puis on ajoute le rsultat au quartet de poids fort du rsultat final, ce
qui donne : 11000000 + 01100000 = 100111000 (9 bits dont le bit de retenue va dans la
carry) ;
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 12
Remarque :
On ajoute toujours au quartet de poids fort. Dans le cas dune multiplication 8 bits, on ajoutera
loctet de poids fort du rsultat qui est sur 16 bits. Aprs le dcalage, la carry est amene dans le
rsultat, on rcupre donc le bit de retenue qui devient le 7 me bit du rsultat aprs dcalage vers la
droite.
Lalgorithme, pour une multiplication 8 bits est le suivant :
- Initialiser le registre rsultat 0 ;
- Pour chacun des 8 bits du multiplicateur ;
Si le LSB du multiplicateur est gal 1 ;
o Ajouter le multiplicande loctet de poids fort du rsultat ;
Dcaler le rsultat (16 bits) dun rang vers la droite ;
Dcaler le multiplicateur dun rang vers la droite ;
- bit suivant.
Si on place le dcalage du multiplicateur avant le test du bit, on rcupre le bit tester dans la
carry. Do lalgorithme final suivant :
- initialiser le registre rsultat 0 ;
- pour chacun des 8 bits du multiplicateur ;
dcaler le multiplicateur vers la droite
si carry = 1
o ajouter multiplicateur loctet de poids fort du rsultat ;
dcaler le rsultat de 16 bits dun rang vers la droite.
cpt
List p = 16F84A
; dclaration du processeur
#include <p16F84.inc>
_config H3FF1
equ
0x0C
cblock
0x0D
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 13
resul_L
resul_H
multi
multan
multemp
endc
main
boucle
org
0x00
goto
main
org
0x30
bcf
clrf
clrf
movlw
movwf
movf
movwf
movf
rrf
btfsc
addwf
rrf
rrf
decfsz
resul_H
resul_L
0x08
cpt
multi,w
multemp
multan,w
multemp,f
STATUS,C
resul_H,f
resul_H,f
resul_L,f
cpt,f
goto
boucle
end
; dclaration du processeur
#include <p16F84.inc>
_config H3FF1
cblock
0x0C
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 14
multi
multan
resul_L
resul_H
endc
main
M0
fin
org
0x00
goto
main
org
0x20
bcf
clrf
clrf
movf
movf
btsfc
goto
addwf
btsfc
incf
decfsz
resul_l
resul_H
multan,0
multi,1
STATUS,Z
fin
resul_L,1
STATUS,C
resul_H,1
multi_L,1
goto
M0
end
Il suffit ensuite de tester les bits c et z du registre STATUS pour connatre le rsultat de la
comparaison.
-
Si z = 1, il y a galit ;
Si z = 0 et c = 1, le rsultat est positif, donc mem2 > mem1 ;
Si z = 0 et c = 0, le rsultat est ngatif, donc mem2 < mem1.
Pour comparer lidentit entre deux valeurs, sans modifier c, on peut utiliser le ou exclusif
XOR .
Movf
mem1,w
; charger W avec mem1
Xorwf
mem1,w
; ou exclusif entre mem1 et mem2, rsultat dans W
-
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 15
Exemple :
Ecrire un programme permettant de classer par ordre croissant, 36 octets non signs partir de
ladresse 20. On utilisera la technique du tri bulle.
main
M0
M1
M2
M3
List p = 16F84A
; dclaration du processeur
#include <p16F84.inc>
_config H3FF1
org
0x00
goto
main
org
0x20
bcf
bcf
movlw
movwf
movlw
movwf
clrf
movf
movwf
incf
subwf
btfss
goto
movf
decf
movwf
incf
decfsz
goto
movf
btfsc
goto
STATUS,RP0
STATUS,RP1
.35
.12
.20
FSR
.13
INDF, w
.14
FSR, 1
INDF, w
STATUS, C
M2
INDF, w
FSR, 1
INDF
FSR 1
.12, 1
M1
.13 , f
STATUS, Z
M0
end
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 16
Soient mem1 ladresse de dbut du premier tableau et mem2, celle du second tableau.
Supposons contiennent par exemple 15 octets chacun. On propose dans cet exemple de copier les
lments du premier tableau dans le second. Le programme principal se prsente comme suit :
main
boucle
fin
bcf
movlw
movwf
FSR
movlw
d15
movwf
cpt
; cpt = 15
movf
INDF,w
movwf
tampon
movlw
addwf
FSR,f
movf
tampon,w
; charger W loctet lu
movwf
INDF
movlw
(mem1-mem2)+1
addwf
FSR,f
decfsz
cpt,f
; dcrmenter le compteur
goto
boucle
end
Page 17
13
122 11
CP
CP
CP
10
CP
CP
CP
CP
CP
CP
CP
PWRT
E
WDT
E
FOSC
1
FOSC
0
EEIF
WRERR
WREN
RW
RD
Page 18
Page 19
Remarques :
- Le drapeau reste ltat haut mme aprs le traitement de linterruption. Par consquent, il
faut toujours le remettre "0" la fin de la routine d'interruption sinon l'interruption sera
dclenche de nouveau juste aprs l'instruction RETFIE.
-
Seul le PC est empil automatiquement. Si cela est ncessaire, les registres W et STATUS
doivent tre sauvegards en RAM puis restaurs la fin de la routine pour que le
microcontrleur puisse reprendre le programme dans les mmes conditions o il l'a
laiss.
OPTION_REG).
7.3 L'interruption RBI (RB4 A RB7 du port B)
Cette interruption est provoque par un changement d'tat sur l'une des entres RB4 RB7 du
port B, Le front n'a pas d'importance. Les bits associs sont RBIE (validation) et RBIF (drapeau) du
registre INTCON.
7.4 L'interruption TOI : dbordement du timer TMRO
Cette interruption est provoque par le dbordement du timer TMR0. Les bits associs sont
T0IE (validation) et T0IF (drapeau) du registre INTCON.
7.5 L'interruption EEI : fin dcriture dans lEEPROM
Cette interruption est dclenche la fin d'une criture russie dans l'EEPROM. Les bits
associs sont EEIE (validation) et EEIF (drapeau) du registre INTCON.
INTCON
EECON1
OPTION_REG
GIE
-
EEIE
-
T0IE
-
INTE
EEIF
RBPU
INTED
G
TOCS
TOSE
RBIE
WRER
R
PSA
T0IF
WREN
INTF
WR
RBIF
RD
PS2
PS1
PS0
Page 20
8.1 Le port A
Cest un port de 5 bits (RA0-RA4). Chaque entre/sortie est compatible TTL. La configuration
de direction pour chaque ligne dE/S est dtermine par le registre TRISA.
La broche RA4 est multiplexe avec lentre horloge du timer TMRO. Le choix se fait laide du
bit TOCS du registre OPTION_REG.
TOC
S
TOS
E
PSA
PS2
PS1
PS0
8.2 Le port B
Cest un port bidirectionnel de 8 bits (RB0-RB7). Toutes les broches sont compatibles TTL. La
configuration de direction se fait grce au registre TRISB. En entre, la ligne RB0 appele aussi INT
peut dclencher une interruption externe INT. En entre, une quelconque des lignes RB4 RB7 peut
dclencher une interruption RBI. Le registre de sortie est PORTB dadresse 06 du bank 0.
IX- Le timer TMRO
Cest un compteur 8 bits ayant les caractristiques suivantes :
Il est incrment en permanence soit par lhorloge interne Fosc/4 (mode timer) soit par une
horloge externe applique la broche RA4 du port A (mode compteur). Le choix de l'horloge se
fait l'aide du bit T0CS du registre OPTION_REG
o TOCS = 0 horloge interne
o TOCS = 1 horloge externe applique RA4
Dans le cas de l'horloge externe, on peut choisir le front sur lequel le TIMER s'incrmente.
o TOSE = 0 incrmentation sur fronts montants
o TOSE = 1 incrmentation sur fronts descendants
Quelque soit l'horloge choisie, on peut la passer dans un diviseur de frquence programmable
(prescaler) dont le rapport est fix par les bits PS0, PS1 et PS2 du registre OPTION_REG
(tableau ci-contre). L'affectation ou non du prdiviseur se fait l'aide du bit PSA du registre
OPTION_REG
o PSA = 0 on utilise le prdiviseur
o PSA = 1 pas de prdiviseur (affect au chien de garde)
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 21
PS2
0
0
0
0
1
1
1
1
PS1
0
0
1
1
0
0
1
1
PS0
0
1
0
1
0
1
0
1
DIV
2
4
8
16
32
64
128
256
Le contenu du timer TMR0 est accessible par le registre qui porte le mme nom. Il peut tre lu
ou crit n'importe quel moment. Aprs une criture, l'incrmentation est inhibe pendant deux
cycles instruction.
Horloge
L'horloge du WDT est ajuste pour que Le Time-Out arrive toutes les 18 ms. Il est cependant
possible d'augmenter cette dure en faisant passer le signal Time-Out dans un prdiviseur
programmable (partag avec le timer TMR0). Laffectation se fait l'aide du bit PSA du registre
OPTION_REG.
PSA = 1 on utilise le prdiviseur
PSA = 0 pas de prdiviseur (affect TMR0)
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 22
Le rapport du prdiviseur est fix par les bits PS0, PS1 et PS2 du registre OPTION_REG.
L'utilisation du WDT doit se faire avec prcaution pour viter la rinitialisation (inattendue) rpte
du programme. Pour viter un WDT timeOut lors de l'excution d'un programme, on a deux possibilits
:
Inhiber le WDT d'une faon permanente en mettant 0 le bit WDTE dans l'EEPROM de
configuration.
Remettre le WDT 0 priodiquement dans le programme l'aide de l'instruction CLRWDT
pour viter qu'il ne dborde WDT.
Page 23
;
***********************************************************************************
********************
; programme led_int.asm
; on connecte un interrupteur sur RB0 (entre) et une LED sur RB1 (sortie)
; Si on place l'interrupteur 1, la LED doit s'allumer, si on le met zro, elle doit s'teindre
;
***********************************************************************************
*********************
LIST p=16f84A, f=inhx8m, r = dec
#INCLUDE <p16f84A.inc>
__CONFIG _CP_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF
tst
off
bsf
movlw
movwf
bcf
btfss
goto
bsf
goto
bcf
goto
end
STATUS,RP0 ; bank 1
B'00000001'
TRISB
; RB0 en entre , RB1 en sortie
STATUS,RP0 ; bank 0
PORTB,0
; tester le bit 0 du registre PORT B, saut dune ligne si gal 1
off
PORTB,1
; allumer la led
tst
PORTB,1
; teindre la led
tst
;
***********************************************************************************
**********************************************
; programme led-tmr0-1.asm
; faire clignoter une LED connecte sur une sortie du port B, la temporisation permettant d'ajuster la
frquence
; est obtenue par scrutation des dbordements du timer TMR0
;
***********************************************************************************
**********************************************
LIST p=16f84A, f = inhx8m, r = dec
__CONFIG _CP_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF
#INCLUDE "p16f84A.inc"
CTR
equ
0x0C
bsf
STATUS,RP0 ; bank 1 (pour TRISB et OPTION_REG)
clrf
TRISB
; PORTB en sortie
movlw
B'00000111'
movwf
OPTION_REG
; PSA=0, prdiviseur affect TMR0, PS1 PS2 PS3 = 111,
; div = 256, T0CS=0, horloge TMR0 = fosc/4/div
bcf
STATUS,RP0 ; retour bank 0
encore
comf
PORTB,f
; complmenter PORTB
call
delay
; appel du sous-programme delay
goto
encore
; recommencer
delay
movlw
5
; pour attendre que TMR0 dborde 5 fois
movwf
CTR
; ce qui donne 5 x 256 x 256 s
tst:
btfss
INTCON,T0IF
; attendre que TMR0 dborde
goto
$-1
bcf
INTCON,T0IF
; baisser le drapeau
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 24
decfsz
goto
return
end
CTR,f
tst
;
***********************************************************************************
************************************* ********************************************
; programme led-tmr0-2.asm
; faire clignoter une LED connecte sur une sortie du port B. La temporisation permettant d'ajuster la
; frquence est obtenue en comptant les dbordements du timer TMR0 l'intrieur de l'interruption T0I
; TMR0 est utilis en timer avec un prdiviseur de 256. En comptant 5 dbordements on obtient une
; temporisation de 5 x 256 x 256 s.
;
***********************************************************************************
*********************************** **********************************************
list p=16f84,f=inhx8m,r=dec
__config _PWRTE_OFF & _CP_OFF & _WDT_OFF & _XT_OSC
#include "p16f84.inc"
CTR
equ
0x0C
; variable de comptage
; ================= dmarrage sur RESET
org 0
goto
start
;================= procedure d'interruption
org 4
bcf
INTCON,T0IF
; baisser le drapeau lev par l'interruption
decfsz
CTR,f
retfie
comf
PORTB,f
; changer l'tat de la LED
movlw
5
; initialiser compteur
movwf
CTR
retfie
;================= Programme principal
start
bsf
STATUS,RP0 ; select bank1
clrf
TRISB
; programme tous les bits du bort B en sortie
movlw
B'00000111'
; mode timer, prdiviseur pour TMR0, div=256
movwf
OPTION_REG
bcf
STATUS,RP0
; select bank0
movlw
B'10100000'
; autorisation Interruption T0I
movwf
INTCON
movlw
5
; initialise CTR pour le premier passage
movwf
CTR
Loop
goto
Loop
; le PIC reste plant ici et n'en sort que pour aller
; excuter une interruption due au dbordement de TMR0
end
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 25
;**********************************************************************************
; Clignotement d'une LED relie la sortie 0 du port B. Les autres bits du port B ne sont pas affects
; La temporisation est ralise l'aide du Watchdog timer
;**********************************************************************************
list p=16f84, f=inhx8m, r = dec
__config _PWRTE_OFF & _CP_OFF & _WDT_ON & _XT_OSC
#include "p16f84A.inc"
Loop
bsf
bcf
movlw
movwf
bcf
movlw
sleep
xorwf
goto
end
;***************************************************************************
; Clignotement d'une LED relie n'importe quelle sortie du port B. La temporisation est ralise
l'aide d'une boucle de
; retard base de 3 boucles imbriques N1 (256), N2 (256), N3 ( prciser)
; T1 : (N1-1) x (1+2) + 2 => N1=0=256 => T1 = 767 s
; T2 : T1 + (N2-1) x (1+2+T1) + 2, N2=0 => T2 = 196352 s
; T3 : T2+(N3-1) x (1+2+T2) + 2 + 2 = N3 x 196355 + 1 s.
;***************************************************************************
list p=16f84, f=inhx8m, r=dec
#include "p16f84A.inc"
__config _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_OFF
N1
equ
0x0D
; N1, N2, N3 = compteurs temporisateur
N2
equ
0x0E
N3
equ
0x0F
;=================================Programme principal
bsf
STATUS,RP0 ; select bank1
clrf
TRISB
; programme tous les bits du bort B en sortie
bcf
STATUS,RP0 ; select bank0
loop
comf
PORTB,f
; complmenter PORTB
movlw
3
; 3 donne une tempo voisine de 0.6 s
call
tempo
goto
loop
; recommence la loupe indfinitivement
;=================================Procdure de temporisation
tempo
movwf
N3
; copier W dans N3
tmp
decfsz
N1,f
; boucle intrieure
goto
tmp
decfsz
N2,f
; boucle mdiane
goto
tmp
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 26
decfsz
goto
return
end
N3,f
tmp
; boucle extrieure
Les microcontrleurs PIC de Microchip- Le 16F84- Notes de cours- Anne 2010- Dr. ALI Eugne
Page 27
XIII- Rfrences
[1]
[2]
[3]