Professional Documents
Culture Documents
EL MORNAN
Page 1
Informatique industrielle
(microcontrleurs)
EL
MORNAN
Unit centrale de
traitement microprocesseur
Mmoire
Entres/Sorties
Bus d'adresses
Bus de contrle
Introduction
Un PIC est un microcontrleur, cest une unit de traitement de linformation de
type microprocesseur laquelle on a ajout des priphriques internes permettant de
raliser des montages sans ncessiter lajout de composants externes.
Les PICs sont des composants dits RISC (Reduce Instructions Construction Set), ou
encore composant jeu dinstructions rduit. L'avantage est que plus on rduit le nombre
dinstructions, plus facile et plus rapide en est le dcodage, et plus vite le composant
fonctionne.
La famille des PICs est subdivise en 3 grandes familles : La famille Base-Line, qui
utilise des mots dinstructions (nous verrons ce que cest) de 12 bits, la famille MidRange, 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 particulirement au
PIC 16F84, sachant que si on a tout assimil, on pourra facilement passer une autre
famille, et mme un autre microcontrleur.
Pour identifier un PIC, on utilise simplement son numro :
Les 2 premiers chiffres indiquent la catgorie 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 tolrante.
Vient en suite une ou deux lettres pour indiquer le type de mmoire programme :
C indique que la mmoire programme est une EPROM ou plus rarement une EEPROM
CR pour indiquer une mmoire de type ROM
F pour indiquer une mmoire de type FLASH.
Donc, un 16F84-04 est un PIC Mid-Range donc la mmoire programme est de type
FLASH de rfrence 84 et capable daccepter une frquence dhorloge de 4MHz.
Notez que les PICs sont des composants STATIQUES, cest dire que la frquence
dhorloge peut tre abaisse jusque larrt complet sans perte de donnes et sans
dysfonctionnement. Une version 10 peut donc toujours tre employe sans problme en
lieu et place dune 04. Pas linverse, naturellement.
Le PIC 16F84
Les caractristiques principales du 16F84 sont :
Une mmoire programme de type flash de 1K (1024) mots de 14 bits
Une mmoire RAM constitue des registres du microcontrleur ainsi qu'une
mmoire de donnes libre de 68 octets.
Une mmoire EEPROM de 64 octets
Deux ports d'entre sortie, un de 8 bits et un de 5 bits
Un timer/Compteur
Un chien de garde / compteur
4 sources d'interruption
4 types d'oscillateurs slectionnables
Protection de code
Fonctionnement en mode sleep pour rduction de la consommation
Programmation par mode ICSP (In Circuit Serial Programming)
1
18
2
17
3
16
4 PIC 15
5 16F8X 14
6
13
7
12
8
11
9
10
RA1
RA0
OSC1
OSC2
Vdd
RB7
RB6
RB5
RB4
PORTB
PORTA
Mmoire EEPROM
RA4
Horloge
systme /4
RAM
16 registres systmeMmoire
(SFR) programme
TOSE
de type Flash
68 octets de RAM utilisateur
TOCS
0
Prescaler
TMR0
0
1
WDT
1024
mots de 14 bits
Horloge
WDT
PSA
Les registres GPR (General Propose Register) sont des positions mmoire que
l'utilisateur peut utiliser pour stocker ses variables et ces donnes. On remarquera
donc que, indpendamment de leur nature, les position de la RAM sont toujours
appel registres
La mmoire RAM est organise en deux banks, pour accder un registre, il faut
d'abord se placer dans le bank o il se trouve. Ceci est ralis en positionnant le bit 0
appels RP0 du registre STATUS.
bank 0
bank 1
00
INDF
INDF
80
01
TMR0
OPTION
81
02
PCL
PCL
82
03
STATUS
STATUS
83
04
FSR
FSR
84
05
PORTA
TRISA
85
06
PORTB
TRISB
86
07
87
08
EEDATA
EECON1
88
09
EEADR
EECON2
89
0A
PCLATH
PCLATH
8A
0B
INTCON
INTCON
8B
0C
8C
Mmoire
utilisateur
Maped in bank0
.
.
2F
AF
Tableau 0.1 : les registres et la RAM du 16F84
Pour la mmoire utilisateur, l'utilisation des pages (Bank ) n'est pas ncessaire puisque
le Bank 1 est "mapped" avec le Bank0. Cela signifie qu'crire une donne l'adresse 0CH
ou l'adresse 8CH revient au mme.
Le Timer TMR0
Cest un compteur libre de 8 bits incrment en permanence par lhorloge interne
Fosc/4/Prescaler ou par la broche RA4 du port A, dans ce cas, le bit TOSE du registre
OPTION slectionne le front actif. Le Prescaler est gr par les bits PSA, PS0, PS1 et PS2 du
registre OPTION.
Toute criture dans le registre TMR0 inhibe lincrmentation du compteur TMR0 pendant
deux cycles dhorloge.
Le dbordement de TMR0 (FF 00) peut dclencher l'interruption T0IE.
Dure du time-out
Le Time Out vaut en principe 18 ms. Il est cependant rglable au moyen dun
pr diviseur (Prescaler) programmable entre 1 et 128 l'aide des bits PSA, PS0, PS1 et
PS2 du registre OPTION..
L'Horloge
Avec l'oscillateur Quartz, on peut avoir des frquences allant jusqu' 4, 10 ou 20 MHz selon le
type de C.
Le filtre passe bas RS, C2 limite les harmoniques dus
lcrtage et Rduit lamplitude de loscillation. (il n'est
pas obligatoire)
Organisation de la mmoire
Le PIC contient de la mmoire de programme et de la mmoire de donnes. La structure
Harvard des PICs fournit un accs spar chacune. Ainsi, un accs aux deux est possible
pendant le mme cycle machine.
Mmoire de programme
C'est elle qui contient le programme excuter. Ce dernier est tlcharg par liaison srie
La Figure montre l'organisation de cette mmoire. Elle contient 1k "mots" de 14 bits dans le
cas du PIC 16F84, mme si le compteur de programme (PC) de 13 bits peut en adresser 8k.
L'adresse 0000h contient le vecteur du reset, l'adresse 0004h l'unique vecteur d'interruption
du PIC.
Registre fonction spciale (Special Function Register : SFR) :
Les registres fonction spciales sont utiliss par le microprocesseur et les priphriques
internes. Ils sont stocks dans la RAM statique , ce qui limite 8 bits (et non 14 bits) ces
registres. Les SFRs sont toujours stocks dans
les 32 premiers octets de chaque page (bank).
Registre W :
Le registre W est le registre de travail sur 8 bits pour raliser des oprations arithmtiques ou
logiques.
Pointeur de pile S :
Le pointeur de pile S est un ensemble de registre sur 13 bits. Sur les PICs, il y a 8 mots de 13
bits, ce qui limite le nombre maximal dinterruption ou dappel des sous-programmes. Le
pointeur de pile S mmorise une adresse, cest dire le contenu du compteur programme.
Attention, elle nest pas manipulable, exclusivement rserve au microprocesseur.
Compteur programme ou PC :
Le compteur programme, PC, indique ladresse du prochain code binaire 14 bits traiter.
Le registre PC est constitu de deux registres , un registre PCL constitu de 8 bits et un
registre PCLATH constitu de
5 bits. Le registre PC fait donc 13 bits qui correspondent 8192 mots de 14 bits mais dans
notre cas limit 4096 mots de 14 bits (voir doc du pic16F648A).
Registre dtat (Status Register) :
Le registre dtat est un registre sur 8 bits. Chaque bit une signification particulire :
Le bit C (Carry) : C est mis 1 lorsquune opration arithmtique gnre une retenue. Il
est galement utilis comme indicateur derreur lors dune multiplication ou dune
division, et sert lors de certaines oprations de dcalage ou rotation qui peuvent passer
par son intermdiaire ou non.
Le bit Z (Zro) : Z est mis 1 lorsque le rsultat de linstruction excut est nul.
Les bits RP1 et RP0 : Bits indiquant sur quelle page (bank), le microprocesseur travail en
adressage direct (seul 7 bits dadresses sont ncessaires).
Le bit IRP : Bit indiquant sur quelle page (bank), le microprocesseur travail en adressage
indirect (8 bits
dadresses sont ncessaires).
LIST : permet de dfinir le type de PIC utilis, le format du fichier hex produire
ainsi que d'autres paramtres. Exemple :
LIST
p=16f84
INCLUDE : permet d'insrer un fichier source
INCLUDE
"p16f84.inc"
INCLUDE
<mesdeclarations.h>
Page
10
Page
11
CONFIG
H'3FF9'
CONFIG
B'11111111111001'
si le fichier p16f84.inc a t insr, on peut utiliser les constantes prdfinies :
CONFIG
_CP_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF
Valeurs
possible
s
Signification
Rend impossible la lecture de la mmoire de
programme Flash
CP
ON
Code Protection
bit)
PWRTE
et de l'EEPROM ( travers un
OFF
ON
(Power-up
Timer Enable
bit)
OFF
Temporisation dsactive
WDT
ON
(Watchdog
Timer Enable
bit)
OFF
OSC
(Oscillator
Selection bits)
Dsactive le watchdog
HS
XT
LP
Exemple de configuration
Dans le code source (fichier avec extension .asm), les fusibles de configuration sont indiqus
au compilateur avec la directive suivante :
config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
Remarque
Les bits de configuration ne sont pas modifiables.
Dans l'exemple ci-dessus, pour activer le watchdog et utiliser un oscillateur de type RC, il
faut modifier le code source, recompiler et reprogrammer le C ...
config _CP_OFF & _WDT_ON & _PWRTE_ON &
_RC_OSC
CBLOCK 0X0C
var1,var
2 k
ENDC
proc
0x2100
"Programmer un PIC, rien de plus simple", .70, 'Z'
PCL,f
RTLW
'P'
RTLW 'r'
RTLW 'o'
. . .
RTLW 'C'
RTLW 23
RTLW
0x47
Prfixe Exemple
(36)
D'nnn' D'36'
.nnn
.36
H'nn
H'2
'
4'
0xn
0x2
Binaire
n
B'.'
4
B'00100100'
Octal
O'nnn' O'44'
Hexadcim
al
Tout ce qui commence la premire colonne est considr comme une tiquette (label)
permettant de faire des renvois et aussi des assignations de constantes et de variables.
tout ce qui suit un point virgule est considr comme un commentaire non
interprt par le compilateur
Il existe diffrentes faons indiquant comment doit tre organis un programme. Voici
un exemple d'organisation :
p=16f84;f=inhx16m
INCLUDE
"p16f84.inc"
CONFIG H'3FF9'
3) Dfinition des constantes et des variables,
exemple : led
equ 0
x
equ
0x0C
cblock
0x0D y,z
u,v,w
endc
4) mettre l'adresse 0000 (adresse du RESET) une instruction de branchement au
dbut du programme principal :
org 0
goto debut
5) mettre l'adresse 0004 (adresse d'interruption) une instruction de branchement au
dbut de la routine d'interruption :
org
call
4
interruption
ADDWF
Status
ANDWF
F,d
W and F {W,F ? d}
CLRF
Clear F
CLRW
Clear W
CLRWDT
C,DC,Z
TO', PD'
Cycles
1
COMF
F,d
Complmente F {W,F ? d}
DECF
F,d
dcrmente F {W,F ? d}
DECFSZ
F,d
INCF
F,d
incrmente F {W,F ? d}
INCFSZ
F,d
IORWF
F,d
W or F {W,F ? d}
MOVF
F,d
F {W,F ? d}
MOVWF
W F
RLF
F,d
RRF
F,d
SUBWF
F,d
F W {W,F ? d}
SWAPF
F,d
XORWF
F,d
W xor F {W,F ? d}
1(2)
Z
1
1(2)
1
C
1
1
C,DC,Z
1
1
F,b
BSF
F,b
BTFSC
F,b
1(2)
BTFSS
F,b
1(2)
W + K W
ANDLW
W and K W
IORLW
W or K W
MOVLW
K W
SUBLW
K W W
XORLW
W xor K W
C,DC,Z
1
C,DC,Z
Z
1
1
INSTRUCTIONS GENERALES
CALL
GOTO
NOP
No operation
RETURN
RETFIE
Retour d'interruption
RETLW
SLEEP
TO', PD'
Informatique industrielle
(microcontrleurs)
EL
MORNAN
L'adressage relatif
L'instruction addwf PCL , f permet de faire ce que l'on appelle un adressage relatif.
Cette technique est largement utilise pour la gestion des tableaux de donnes.
Exemple
bcd7seg
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
PCL,1
0x40
0x79
0x24
0x30
0x19
0x12
0x02
0x78
0x00
0x10
;
;
;
;
;
;
;
;
;
;
0
1
2
3
4
5
6
7
8
9
LA PILE
La pile est une zone mmoire particulire.
Pour le PIC 16F84A, elle est constitue de 8 emplacements de
13 bits. La pile intervient dans le mcanisme interne des
instructions :
CALL
RETURN
RETLW
RETFIE
En effet, c'est dans la pile qu'est mmorise l'adresse de retour d'une routine.
Quand intervient une instruction CALL ou une interruption, l'adresse de l'instruction
suivante (qui se trouve dans le compteur de programme PC) est sauvegarde dans
la pile.
Quand une instruction RETURN, RETLW ou RETFIE apparat, le C lit la dernire
valeur sauvegarde dans la pile, libre l'emplacement et se branche l'adresse
indique.
Avec le mcanisme de la pile, un sous-programme peut appeler un sous-programme
(ou plutt un sous-sous-programme) : la pile rserve un autre emplacement..
La taille de la pile est limite 8 niveaux (pour le PIC 16F84A).
Informatique industrielle
(microcontrleurs)
EL
MORNAN
S'il y a plus de 8 routines actives en mme temps, le contenu de la pile est cras et le
programme ne fonctionne plus correctement.
Cela se traduit par un plantage (le C ne fait plus rien) ou bien par un comportement
plus ou moins incohrent (le C fait des choses bizarres) ... problmes que l'on
retrouve exactement sur des programmes plus complexes (Windows de Microsoft ...).
Les interruptions
Une interruption provoque larrt du programme en cours pour aller excuter une
procdure d'interruption. A la fin de cette procdure, le microcontrleur reprend le
programme lendroit o il stait arrt. Comme une interruption est un vnement
asynchrone, il faut alors sauvegarder (empiler) le contexte dans lequel se trouvait
le microcontrleur avant linterruption, afin quil puisse reprendre correctement la
continuit du programme.
Le PIC16F84 possde 4 sources d'interruption. A chaque interruption sont associs
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.
Page 18
Informatique industrielle
(microcontrleurs)
EL
MORNAN
Le drapeau reste ltat haut mme aprs le traitement de linterruption. Par consquen
Seul le PC est empil. Si cela est ncessaire, les registres W et STATUS doivent
alors tre sauvegards en RAM puis restaurs la fin de la routine pour que le
microcontrleur puisse reprendre normalement le cours du programme.
Page
20
Page
21
L'Initialisation : RESET
Le RESET peut avoir plusieurs causes :
- Mise sous tension
- Etat 0 sur broche MCLR
- Dbordement du timer du chien de garde.
Lorsque le RESET intervient, le C peut tre :
- En fonctionnement normal
- En mode SLEEP.
L'tat des registres la mise sous tension est donn par le tableau ci-dessous :
Registre
- MCLR
Power-on
RESET
- WDT on normal
operation
Rveil d'un
SLEEP
Etat avant
Normal
Sleep
Normal
Sleep
0 sur MCLR
Chien de garde
TO
1
NA
NA
0
0
PD
1
NA
0
1
0
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
r/w
r/w
r/w
r/w
r/w
r/w
r/w
r/w
RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
PS2
PS1
PS0
rati
rati
TMR
2
WD
1
16
32
16
64
32
128
64
256
128
Le pull-up est dsactiv la mise sous tension et quand le port est configur en
sortie
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
r/w
r/w
r/w
r/w
r/w
r/w
r/w
r/w
EEIE
TOIE
INTE
RBIE
TOIF
INTF
RBIF
GIE
BIT 0:
RBIF
Drapeau de l'interruption RBI qui provient d'un changement d'tat d'un des bits
RB4 RB7. RBIF= 1 : drapeau lev.
RBIF= 0 : drapeau baiss.
Les indicateur sur le rsultat d'un calcul reprsent par les bits d'tat C, DC, et
Z.
Le status d'un RESET par l'intermdiaire des bits PD et TO.
L'accs aux diffrents bancs de la mmoire par les bits IRP, RP1 et RP0
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
r/w
r/w
r/w
r/w
r/w
r/w
IRP
RP1
RP0
TO
PD
DC
BIT0: C (Carry).
Il passe "1" lorsque le rsultat d'une opration dpasse la valeur FF ou d'un
rsultat ngatif.
BIT2: Z (Zero).
Quand il est "1", il indique que le rsultat de l'opration est nul.
BIT3: PD (Power-Down).
PD=1 aprs un Power-up ou suite l'instruction
CLRWDT. PD=0 lorsque l'instruction SLEEP est
excute.
BIT4: TO (Time-Out).
Il passe "1" aprs les instructions SLEEP et CLRWDT. Lorsque le WDT (chien
de garde) dborde, ce bit passe "0".
RP1
RP0
BANC
ADRESSE
00 7F
80 FF
100 17F
180 1FF
BIT7: IRP.
Ce bit n'est pas utilis avec le PIC16F84 et doit rester "0".
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
r/w
r/w
r/w
EEIF
WRERR
WREN
WR
RD
PCL
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
utiliss.
Chaque fois qu'on crit dans PCL, PCLATH est recopi automatiquement dans
PCH
PC
H
PC AT
L H
PCL
Par exemple :
(PCL) = B'10110011'
(PCLATH) =B'---00010' (les bits 5 7 ne sont pas utiliss par le PIC
16F84A) (PC) = B'0001010110011' (adresse 0x2B3 en numration
hexadcimale).
La prochaine instruction que va excuter le PIC est donc situe l'adresse 0x2B3 de la
mmoire de programme.
Le compteur
Le PIC 16F84 est dot d'un compteur 8 bits. La Figure en donne l'organigramme
PSAPS2, PS1,
PS0
0
XXX
Taux de
prdivisio
n
du
Dur
e
indicativ
e
18 ms
000
18 ms
001
36 ms
010
72 ms
011
144 ms
100
16
288 ms
101
32
576 ms
110
64
1,15 s
111
128
2,3 s
X = 0 ou 1
En effaant le watchdog intervalles rguliers (avec CLRWDT), le timer ne doit
normalement jamais "dborder".
En cas de plantage, le timer dborde ce qui gnre un RESET, et le programme
redmarre. Remarques :
L'instruction CLRWDT :
Page
30
La dure dcriture dun octet tant de lordre de 10 ms, la fin de chaque criture russie
est annonc par le dclenchement de l'interruption EEI.
utilisation du timer
retard1
EQU
retard2
;------------
---------------
0x0C
MOVLW 0xFF
MOVWF retard1
GOTO tempo
MOVLW 0xFF
MOVWF retard1
W ) DECFSZ retard2,F
bsf
STATUS,RP0
clrf
TRISB
sortie movlw
horloge interne
movwf OPTION_REG
255 bcf STATUS,RP0
movlw B'10100000'
movwf INTCON
movlw d8
passage movwf
movlw B'00001111'
PORB movwf
Loo
p
goto
Loop
interruption end
; select bank1
; programme tous les bits du bort B en
B'00000111' ; timer cadenc par
; prescaler associ TMR0, ratio
; select bank0
; autorisation globale des interruptions
; autorisation de l'interruption par
TMR0
; initialise TIME pour le premier
TIME
; met n'importe quelle valeur dans
PORTB
; le PIC reste plant ici et n'en sort que pour aller excuter une
---------------
p=16f84A
#include p16f84A.inc
config H'3FF9'
;------------ Dfinition des constantes --------------#define inter0 0
; bouton marche
0x0C
EQU
adresse 0D memo
---------------
ORG 0
bsf STATUS,5
MOVWF TRISB
MOVLW 0x1F
MOVWF TRISA
bcf STATUS,5
;------------
Programme principal
---------------
Main
btfss PORTA,inter0
goto Main
MOVLW 0xFF
MOVWF retard1
MOVLW 0xFF
MOVWF retard2
MOVF memo, W
MOVWF PORTB
W ADDWF memo, F
; on additionne
memo + 1
GOTO Main
;------------
---------------
tempo
DECFSZ retard1,F
si
GOTO tempo
MOVLW 0xFF
MOVWF retard1
W ) DECFSZ retard2,F
RETURN
END
; fin du programme
; Titre : Feux
tricolores PIC utilis
: PIC 16 F 84
; On ralise des feux tricolores sur les broches RB0 RB5 d' un PIC 16 C 84
; le quartz est de 4 Mhz , on effectue une tempo longue environ gale 4 secondes et
; une tempo courte environ gale 1.5 secondes.
; un bouton marche sur le port A permet de lancer l' application
; RB0=rouge1 RB1=orange1 RB2=vert1
; RB3=rouge2 RB4=orange2 RB5=vert2
;-----------list
p=16f84A
#include p16f84A.inc
config H'3FF9'
; bouton marche
#define inter1 1
EQU 0x0C
0C retard2
EQU
adresse 0F retard3
EQU
0x10
---------------
ORG 0
bsf STATUS,5
MOVLW 0x00
MOVWF TRISB
MOVLW 0x1F
MOVWF TRISA
bcf STATUS,5
btfss PORTA,inter0
;va debut
goto debut
ret_cli
btfsc PORTA,inter1
;va clignote
goto clignote
MOVLW B'00001001'
MOVWF PORTB
MOVLW B'00001100'
MOVWF PORTB
CALL tempo
MOVLW B'00001010'
MOVWF PORTB
CALL tempo2
MOVLW B'00001001'
MOVWF PORTB
CALL tempo2
MOVLW B'00100001'
MOVWF PORTB
CALL tempo
MOVLW B'00010001'
MOVWF PORTB
CALL tempo2
GOTO debut
;------------
tempo
MOVLW 0xFF
MOVWF retard1
; on met W dans le
; on met 12 dans
; on met W
attente
DECFSZ retard1,F
GOTO attente
movlw 0xFF
; on recharge retard1
movwf retard1
DECFSZ retard2,F
GOTO attente
movlw 0xFF
; on recharge retard2
movwf retard2
DECFSZ retard3,F
GOTO attente
RETURN
;------------
---------------
tempo2
MOVLW 0xFF
MOVWF retard1
; on met W dans le
; on met 7 dans le
GOTO attente2
GOTO attente2
movlw 0xFF
; on recharge retard2
movwf retard2
DECFSZ retard3,F
GOTO attente2
RETURN
clignote
MOVLW B'00010010'
MOVWF PORTB
CALL tempo2
MOVLW B'00000000'
MOVWF PORTB
) CALL tempo2
; on appel la temporisation
;------------
#include p16f84A.inc
config H'3FF9'
Page
40
Page
41
goto init
;**** Le programme d' interruption se dclenche lorsque l' entre RB0 passe de
0 1 *** ORG 4
;*********** Programme d 'interruption **********************
bsf PORTB,7
sur rb7
;------------ temporisation --------------tempo2
MOVLW 0xFF
MOVWF retard1
; on met W dans le
; on met 7 dans
; on met W dans
le registre retard3
attente2
DECFSZ retard1,F
tempo
movlw 0xFF
; on recharge
; on recharge
DECFSZ retard3,F
bcf PORTB,7
; retour d 'interruption
EQU
0x0C
adresse 0C retard2EQU
0x0F
EQU
bsf INTCON,INTE
bsf INTCON,GIE
; autorise les
sleep
list
p=16f84,f=inhx8m
include <p16f84.inc>
config _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
C1
T1
T2
T3
equ
equ
equ
equ
0x0C
0x0D
0x0E
0x0F
goto
bcltm
p
decfsz
goto
decfsz
goto
return
T2,f
bcltmp
T3,f
bcltmp
bcd7seg
PORTB
4
tempo
C1,1
; affichage
; 0.59
loop end
5V
a
fb
g
ec
dp
a b c d e f g
PIC16f84
Pour lancer la simulation il suffit de cliquer sur licone PLAY verte en bas de page
*
En excutant la simulation en mode pas pas , vous pouvez ensuite excuter le
programme par pas, mettre
des points darrt dans le programme, voir ltat des registres, etc...
2-AFFICHEUR LCD
2.1 Prsentation :
Lafficheur LCD, autrement appel un afficheur cristaux liquide. Il consomme
relativement de 1 5 mA et constitu de deux lames de verre, distante de 20 m
environ, sur lesquelles sont dessines les mers nantisses formant les caractres.
Lapplication entre les deux faces dune tension alternative basse frquence de
quelques volts (35V) le rend absorbant .Un afficheur cristaux liquide ne peut
tre utilis quavec un bon clairage ambiant .Son lisibilit augmente avec
lclairage
2.2 Principe de fonctionnement :
on utilise le mode 4 bits de lafficheur LCD. Dans ce mode, seul les 4 bits de poids
fort (D4 D7) de lafficheur sont utiliss pour transmettre les donnes et les lires. Les
4bits de poids faible (D0 D3) sont alors connects la masse, on a donc besoin
hors alimentation de sept fils pour commander lafficheur. Les donnes sont crites
squentiellement les quatre bits de poids fort suivi des quatre bits de poids faible.
Une impulsion positive dau moins 450ns doit tre envoye
sur la ligne E pour valider chaque demi -octet. On peut aprs chaque action sur
lafficheur vrifier que celui-ci est en mesure de traiter linformation suivante .Pour
cela, il faut demander une lecture en mode commande et tester le flag Busy BT.
Lorsque BF=0, lafficheur est prs recevoir une nouvelle commande ou donne.
2.3 Prsentation dun cran LCD :
Quil soit une ou deux lignes, un afficheur LCD se prsente sous la forme
suivante :
1 : masse ;
Broche 2 : Vcc ;
Broche 3 : luminosit ;
Broche 5, R/W : slection du mode lecture ou criture :
critur
e
1
lectur
e
Page
50
U1
PIC16F877
VDD=VCC VSS=GND
8 7D2 D3 D4 D5 D6 D7
D0 D1
RS RW E
4
LM032L
RS RW E
RD0/PSP019
RD1/PSP120
RD2/PSP221
RD3/PSP322
RD4/PSP427
RD5/PSP528
RD6/PSP629
RD7/PSP730
LCD
33
RB0/INT
RW
34
RB1 RB2 RB3/PGM
35
RB4 RB5 RB6/PGC RB7/PGD
36
RS E
2
37
RA0/AN0
3
RA1/AN1 RA2/AN2/VREF- RA3/AN3/VREF+ RA4/T0CKI 38
4
39
5
40
6
15
7
RA5/AN4/SS
RC0/T1OSO/T1CKI
16
8
RC1/T1OSI/CCP2
17
RE0/AN5/RD
RC2/CCP1
RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
18
RE1/AN6/WR
23
RE2/AN7/CS
24
25
26
OSC1/CLKIN
OSC2/CLKOUT
1MCLR/Vpp/THV
3- Le clavier
3.1 Prsentatio
n:
Le clavier est le priphrique le plus commode pour saisir du texte, mais dans notre
carte on va utiliser un clavier alphanumrique 16 touches matrices pour saisir
des numros et un peut dalphabets, pour connecter le clavier au microcontrleur
on est besoin dun codeur de clavier 74LS922 pour prserver les ressources du
microcontrleur.
4 Circuit ULN2003
LULN est un composant qui pour rle de commander les relais. Il comporte deux
transistors, deux diodes et deux rsistances. Le fait quil renferme tous les
composants lui permet davoir une longue dure de vie et de minimiser les pertes de
courant.
LULN est capable d'couler un courant max de 500mA par transistor et supporte une
tension max de 50V. Ainsi vous pouvez connecter directement la majorit des relais
sans problme
Circuit ULN2803
L'ULN2803 est dcrit comme "un conducteur 8 lignes". Cela signifie qu'il contient le
circuit pour contrler huit lignes de productions individuelles, chaque acte
indpendamment des autres.
5-Les moteurs
5-1. Moteur pas
pas :
Dans ce figu
re on utiliser deux relaies pour changer le rotation du moteur courant
continue.
Les
sens
dedeux pins MCC1 et MCC2 relier avec les pins RE0 etRE1 du
microcontrleur.
Lorsqu'on veut commander le sens de rotation dun moteur ( courant continu ou pas
pas) on est souvent oblig d'inverser la polarit. De plus il est gnralement
prfrable de pouvoir faire varier la vitesse du moteur. La solution est dutiliser le pont
en H.
IN1
IN2
TAT MOTEUR
ARRE
T
SENS
1
SENS
2
ARRE
T
6-Les relais
Les relais sont pilots via un transistor de commande, une diode de roue libre est
monte aux bornes du relais pour la protection du transistor
Montage du relais
8 Isolation galvanique
laide dun
opto_transistor
Page
60
SW O
RE0
RE1 RE2
12
SW 1
12
SW 2
12
R10 R9R8
2.2k2.2k2.2k
VCC
Prsentation :
Les liaisons sries permettant la communication entre deux systmes
numriques en limitant le nombre de Fils de transmission..
DCD (Data Carrier Detecte ) : Cette ligne est une entre active ltat haute.
Elle signal lordinateur quune liaison a t tablie avec un correspondant.
RX( Reciver Data) : Cette ligne est une entre.Cest ici que transitent les
informations du correspondant vers lordinateur.
TX (Transmit Data ) : cette ligne est une sortie. Elle permet la vhicule des
donnes de lordinateur vers le correspondant.
DTR (Data Terminal Ready ) :Cette ligne est une sortie active ltat haut Elle
permet lordinateur de signaler au correspondant que le port srie t libr
et quil peut tre utilis sil le souhaite.
GND (GrouND) : cest la masse.
DSR (Data Set Read) : Cette ligne est une entre active ltat haut. Elle
permet au correspondant de signaler quune donne est prte.
RTS (Request To Send ) : cette ligne est une sortie active ltat haut. Elle
indique au correspondant que lordinateur veut lui transmettre des
donnes..
CTS (Clear To Send ) : Cette ligne est une entre active ltat haut.Elle indique
lordinateur que le correspondant est prt recevoir des donns.
RI( RING Indicator) :Cette ligne est une entre active ltat haut.Elle permet
lordinateur de savoir si un correspondant veut initier une communication avec
lui.
Fonctionnement :
Pour pouvoir dialoguer avec le PC, le microcontrleur utilise son module
USART signifie (Universal Synchronous Asynchronous Reciever Transmitter ).
Cest donc un module qui permet denvoyer et de recevoir des donnes en mode
srie, soit de faon synchrone, soit asynchrone. Le module USART de notre PIC
gre uniquement deux pins, savoir RC6/TX/CK et RC7/RX/DT.
Une liaison srie synchrone ncessite une connexion ddie lhorloge, donc il
reste une seule ligne pour transmettre les donnes. Alors quen mode asynchrone on
na pas besoin dune
liaisons
RS
232
sont
des
liaisons
asynchrones
trs
utilises
en
12 BUS I2C
Le bus I2C (inter integrated circuit ce qui donne IIC et par contraction I2C), a
t propos initialement par Philips mais adopt de nos jours par des trs fabricants.
Cest bus de communication de type srie.
1. Prsentation :
Le bus I2C qui nutilise que deux lignes de signal (et les masses correspondantes
bien sr) permet un certain nombre dappareils dchange des informations sous
forme srie avec un dbit pouvant atteindre 100 Kbits par seconde ou 400 kbits par
seconde pour les versions les plus rcentes. Mme si ces dbits peuvent sembler
relativement faibles, les premires applications du bus I2C sont des applications
audio ou vido pour lesquelles la simplicit de mise en uvre est nettement plus
importante quun dbit lev.
Les points forts du bus I2C sont :
Premirement cest un bus srie bifilaire utilisant une ligne de donnes appele SDA
(Serial Data) et une ligne dhorloge appele SCL (Serial Clock).
Les donnes peuvent tre changes dans les deux sens sans restriction.
Le bus est multi-matre : chaque abonn dispose dune adresse code sur 7 bits, on
peut donc connecter simultanment 128 abonns dadresses diffrentes sur le mme
bus.
Un acquittement est gnr pour chaque octet de donne transfr.
Le bus peut travailler une vitesse maximum de 100 K bits par seconde (ou 400 Kbits
par seconde) tant entendu que son protocole permet de ralentir automatiquement
lquipement le plus rapide pour sadapter la vitesse de llment le plus lent, lors
dun transfert.
Le nombre maximum dabonns nest limit que par la charge capacitive maximale du
bus qui peut tre de 400pF.
Les donnes envoyes par paquets de huit bits indpendants(le bit de poids fort est
envoy le premier) sur la ligne SDA, chaque octet est suivie par un bit
dacquittement .La ligne SCL fonctionne comme une horloge srielle dun registre
dcalage, tant que cette ligne est ltat haut les donnes de la ligne SDA doivent
tre stables.
Certaines combinaisons particulires de niveaux et de fronts des deux lignes
dterminant la condition de dpart ou darrt de la transmission des donnes.
Condition de dpart : Un front descendant sur SDA quand SCL est ltat
haut. Condition darrt : Un front montant sur SDA quand SCL est ltat
haut.
13 Module horloge temps rel :
PCF8583 :
Le PCF8583 fonctionne en vritable horloge calendrier c'est--dire en mode de 24
heures et sur une priode de vingt quatre ans. Il possde une sortie dinterruption
et de la RAM qui possde 232 octets disponibles en plus de ceux de sa propre
fonction.
Lhorloge temps rel PCF8583 accs I2C est raccorde la ligne RC3 du Pic pour
lhorloge (SCL) et RC4 pour les donnes (SDA), la liaison aux lignes RC3 et RC4
seffectue en changeant ltat
du SW9. Les rsistances R48 et R49 maintiennent positivement ces signaux au repos.
Le montage contient aussi une pile rechargeable pour alimenter le PCF8583 en
cas o la carte nest pas alimente.
Le bus I2C appartient la catgorie des bus srie par opposition aux bus parallle ou
les donnes sont transmises par bloc, les donnes sont ici envoyes bit par bit par
groupe doctet sur la ligne SDA.La ligne SCL fonctionne comme une horloge srielle
dun registre dcalage. Tant que la ligne SCL est ltat haut les donnes de la
ligne SDA doivent tre stables.
Lorsque la ligne SCL est ltat bas, le circuit qui met les donnes peut modifier ltat.
Condition de dpart : Un front descendant sur SDA quand SCL est ltat haut.
Condition darrt : Un front montant sur SDA quand SCL est ltat haut.
Pic 16F877 :
Le pic 16F877 est un circuit intgre contenu dans un botier nommer DIL 40 , il
prsente 40 broches, 20 de chaque cot. Les broches sont virtuellement numrotes
ere
de 1 40. La 1
broche est plac dans le coin situ gauche de lencoche de
reprage.
MCLR
Cette broche sert initialiser le microcontrleur.
Le microcontrleur dispose de plusieurs sources de RESET :
POR.
EXTERNAL RESET
WDT
BOR
POR: (POWER ON RESET) Mise sous tension.
Un front montant sur MCLR dclenche l'initialisation du microcontrleur. Le temps
ncessaire est au minimum de 72ms et au maximum de 72ms+1024*Tosc. Le
microcontrleur dispos en interne dun circuit de dtection de niveau, quand la
tension VDD est comprise entre 1.2V et 1.7V, il dmarre une procdure
dinitialisation.
Cette broche peut tre simplement relie VDD si on na pas besoin de RESET
externe. Par contre si on souhaite implanter un bouton de remise zro, on pourra
cbler un simple rseau RC sur la broche MCLR.
C2
1nF
U1
X1
13
CRYS T AL14
1
2
3
4
5
6
7
8
9
10
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
28
29
30
PIC16F877
.
Brochage du circuit doscillation PIC16F877
Page
70
Remarque : La consommation du circuit sera d'autant plus faible que la frquence sera
petite, cela peut tre intressant pour des applications de faible consommation
(alimentation autonome).
Pour des applications faible consommation, on peut utiliser les sries LF (Low
Frequency and Low Power).
LInterruption : RBO/INT.
Cette broche une double fonction elle peut tre utilise comme une broche
standard RBO ou comme une entre dinterruption INT.
Si cette broche est utilise comme une entre d'interruption externe, elle doit tre
maintenue un niveau haut par l'intermdiaire de rsistances de 10 k pour ne
pas dclencher dinterruptions imprvues, cela permet aussi de relier plusieurs
sources d'interruptions sur une mme ligne (OU CABLE).
2. Architecture interne du16F877 :
Comme pour tous les circuits intgre, chacun de ses broches une ou plusieurs
fonctions qui sont rsumes par un sigle mnmotechnique.
Ce microcontrleur prsente une architecture Harvard, les donnes sont places dans
une mmoire de type RAM de 368 bytes. La mmoire de programme est constitue
de mot de 14 bytes, est type FLASH (non volatile).
Ces ressources sont donc prcieuses, en comparaison de celles dautres composantes.
Le 16F877 possde encore 5 ports (A E) et 3 temporisateurs (timers), ce
diagramme bloc prsente les composantes du 16F877 :
-Le port D (8 bits) I/O pure et/ou port parallle 8 bits associ au port E.
-Le port E (3 bits) I/O pure et/ou pilotage du port E RE0/R, RE1/WR et RE/CS.
Remarque : Si le PIC est utilis en mode ICSP/ICD il faut laisser libre les broches
RB3/PGM, RB6/PGC ainsi que RB7/PGD) et les configurer en entre.
Le PORT C (8 bits) I/O pure et/ou TIMER 1 et/ou SPI / I2C et/ou USART.
Le PORT D (8 bits) I/O pure et/ou port parallle 8 bits associ au PORT E.
Le PORT E (3 bits) I/O pure et/ou pilotage du PORT E RE0/RD, RE1/WR et RE2/CS.
Tableau de caractristiques
. Les mmoires du PIC 16F877 :
Les mmoires sont de trois types diffrents :
3.1 La mmoire FLASH :
Cest une mmoire programme de taille 8ko. Chaque case mmoire unitaire est de
taille 13 bits. Cette mmoire est de type mmoires stable, c'est--dire quon peut
rcrire dessus volont, car le 16F877 est caractris par la possibilit dcrire des
donnes. La zone mmoire est caractrise
par une adresse de 13 bits, alors ceci nous impose donc pour ladressage les
registres EEAR et EEADRH. De mme, nous aurons pour les donnes, les registres
EEDATA et EEDATH.
3.2 La mmoire RAM :
Cette mmoire de taille 368 octets est une mmoire daccs rapide et elle est
volatile (les donnes seront perdus lorsque elle nest plus sous tentions). Elle
contient tous les registres de configuration du PIC ainsi que les diffrents registres
de donnes. Elle contient galement les variables utilises par le programme. La
RAM est la mmoire la plus utilise. Toutes les donnes qui y sont stockes sont
perdues lors dune coupure de courant.
La RAM est subdivise de plus en deux parties dans chacune on trouve des cases
mmoire spciales appele REGISTRES SPECIAUX et des cases mmoire libre
dont on peut se servir provoque un fonctionnement spcial du PIC ou la mise en
service dune fonction particulire.
3.3 LEPROM Interne :
Le pic 16F877contient galement la mmoire lectriquement effaable. Ce type de
mmoire est daccs plus lent. Pour grer cette EEPROM on a besoin de quatre
registres, savoir EEDR, EEDATA, EECON1 et EECON2.
Le registre EEADR est utilis pour placer ladresse relative en EEPROM, tandis que
le EEDATA contient la donn lire ou crire.
Ladresse relative de laccs EEPROM est donc comprise entre 0000 et 00FF ce qui
nous permet dutiliser un registre de huit bit pour dfinir cette adresse.
4. Les Timers :
Il possde 3 timers qui sont :
-Le Timer0 (8bits) : il peut tre incrment par des impulsions extrieures via la
broche (TOCKI/RA4) ou par lhorloge interne (Fosc/4).
-Le Timer1 (16 bits) : il peut tre incrment soit par lhorloge interne par des
impulsions sur la broche T1CKI/RC0 ou par un oscillateur (RC ou quartz) connect
sur les broches T1OSO/RC0 et T1OSI/RC1.
- Le Timer2 (8bits) : il est incrment par lhorloge interne, celle peut tre pr
divise. Tous ces timers peuvent dclencher une interruption interne, sils
ont t autoriss.
5. Lunit centrale :
Organisation mmoire
Comme les PICs utilisent un bus pour les instructions et un bus pour les
donnes, il faut considrer deux plans mmoire lun pour les instructions et lautre
pour les donnes ainsi que les registres internes.
Lvnement survient
Le programme saute
programme principal.
linstruction
qui
suit
la
dernire
excute
dans
le
Il va bien sr de soi que nimporte quel vnement ne peut pas dclencher une
interruption. Il fault que 2 conditions principales soient remplies :
Lvnement en question doit figurer dans la liste des vnements susceptibles de
provoquer une interruption pour le processeur sur lequel on travaille
Lutilisateur doit avoir autoris linterruption, cest dire doit avoir signal que
lvnement en question devait gnrer une interruption.
Le programme principal ne sait pas quand il est interrompu, il est donc crucial de lui
remettre ses registres dans ltat o ils taient avant linterruption.
En effet, supposons que linstruction xxx ait positionn un flag (par exemple, le bit
dindicateur Z). Si par malheur, la routine dinterruption a modifi ce bit, le
programme ne pourra pas se poursuivre normalement.
Nous voyons galement que linstruction xxx termine son excution avant de se
brancher sur la routine dinterruption. Une instruction commence nest donc jamais
interrompue.
Mcanisme dinterruption sur les PICs :
les PICs rpondent au fonctionnement gnral ci-dessus, mais elles ont
galement leurs particularits. Voyons maintenant le principe des interruptions sur
les PICs
Tout dabord, ladresse de dbut de toute interruption est fixe. Il sagit toujours de
ladresse 0x04. Toute interruption provoquera le saut du programme vers cette
adresse.
Toutes les sources dinterruption arrivant cette adresse, si le programmeur utilise
plusieurs sources dinterruptions, il lui faudra dterminer lui-mme laquelle il est
en train de traiter.
Les PICs en se connectant cette adresse, ne sauvent rien automatiquement, hormis
le contenu du PC, qui servira connatre ladresse du retour de linterruption. Cest
donc lutilisateur de se charger des sauvegardes.
Le contenu du PC est sauv sur la pile interne (8 niveaux). Donc, si vous utilisez
des interruptions, vous ne disposez plus que de 7 niveaux dimbrication pour vos
sous-programmes. Moins si vous utilisez des sous-programmes dans vos interruption.
Le temps de raction dune interruption est calcul de la manire suivante : le cycle
courant de l'instruction est termin, le flag d'interruption est lu au dbut du cycle
suivant. Celui-ci est achev, puis le processeur s'arrte un cycle pour charger
l'adresse 0x04 dans PC. Le processeur se connecte alors l'adresse 0x04 o il lui
faudra un cycle supplmentaire pour charger l'instruction excuter. Le temps mort
total sera donc compris entre 3 et 4 cycles.
Une interruption ne peut pas tre interrompue par une autre interruption. Les
interruptions sont donc invalides automatiquement lors du saut ladresse 0x04
par leffacement du bit GIE (que nous allons voir).
Diviseu
r
2
8
32
Osc
RC
20Mh
z
100n
s
400n
s
1,6
s
2-6s
5Mhz
4Mhz
2Mhz
400n
s
1,6s
500n
s
2s
1s
6,4s
8s
16s
2-6s
2-6s
2-6s
4s
1,25Mh
z
1,6
s
6,4
s
25,6
s
2-6s
333,3Kh
z
6s
24s
96s
2-6s
Les valeurs 400ns; 1,6s; 2s; 4s; 6,4; 24s correspondent au meilleur diviseur en
fonction de la frquence choisie, en ce qui nous concerne puisquon utilise une
On voit trs bien sur ce schma que les pins AN2 et AN3 servent selon la position
du slecteur dentre analogique ou de tension de rfrence. Le slecteur de canal
permet de slectionner lequel des 8 canaux va tre appliqu au convertisseur
analogique/digital.
On voit que la slection de la source des tensions de rfrence dpend de bits
du registre ADCON1, tandis que le canal slectionn pour tre numris dpend
dADCON0. Cest le registre ADCON1 qui dtermine si ce port sera utilis comme
port I/O ou comme port analogique. Nous en aurons besoin dans la programmation.
ADRESL
0
0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
ADRESL
B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
B7
B6
ADFM
INUTILISE
B5
INUTILISE
lu comme 0
B4
INUTILISE
lu comme 0
B3
B2
B1
B0
B6
ADCS
1
B5
CHS2
B4
CHS
1
CHS
0
GO/DON
E
B1
Inutilis
lu comme 0
B0
ADO
N
B3
B2
A/D ON
bit
loscillateur : Lhorloge est un systme qui peut tre ralise soit avec un QUARTZ(a),
soit avec une horloge extrieur(b), soit avec un circuit RC(c), dans ce dernier la
stabilit du montage est limite.
La frquence maximale dutilisation va dpendre de Microcontrleur utilis. Le suffixe
indiqu sur le