Académique Documents
Professionnel Documents
Culture Documents
Pic16f876 77 V1
Pic16f876 77 V1
MICROCONTROLEURS
Famille Mid-Range
de Microchip
LE PIC 16F876/877
A. Oumnad
PORTD
PORTC
PORTB
Capture/Comparaison
CCP1
timer 0
TMR0
timer 1
TMR1
timer 2
TMR2
CCP2
Chien de
garde
Capture/Comparaison
PORTA
WDT
USART
(RS232)
SSP (I2C)
Horloge
systme
PORTE
CAN
10 bits
W
ALU
96 registres
systme
368
registres
utilisateur
14 bits : config
Mmoire
programme
de type
Flash
8 x 1024
mots de 14
bits
EEPROM
256 octets
SOMMAIRE
Introduction ................................................................................ 6
I.1
Les microcontrleurs en gnral.................................................. 6
I.2
Les PICs de Microchip ................................................................ 7
II
Les lments de base du PIC 16F876/877................................... 9
II.1
L'Horloge ................................................................................. 9
II.2
L'ALU et laccumulateur W .......................................................... 9
II.3
Organisation de la mmoire RAM................................................10
II.3.1 Accs la RAM par adressage DIRECT .....................................10
II.3.2 Accs la RAM par ladressage INDIRECT.................................11
II.4
Registres de configuration et leurs position dans la RAM ...............13
II.5
Les registres de configuration avec leurs tats aprs un RESET ......13
II.6
Les instructions du 16F876/877 .................................................14
II.6.1 Les instructions orientes Registre ......................................14
II.6.2 Les instructions orientes bits ...........................................14
II.6.3 Les instructions oprant sur une constante ...............................14
II.6.4 Les instructions de saut et appel de procdures.........................14
II.6.5 Les indicateur dtat ..............................................................14
II.6.6 Le jeu d'instructions...............................................................15
II.6.7 Les paramtres des instructions agissant sur registre ................16
II.6.8 Les paramtres des instructions agissant sur bit........................16
II.6.9 Les instruction MOVWF et MOVF ..............................................16
II.6.10
Les instructions btfss et btfsc ...............................................17
II.6.11
Les instructions incfsz et decfsz ............................................17
II.6.12
Linstruction goto................................................................18
II.6.13
Linstruction call .................................................................18
II.7
Les directives de l'assembleur MPASM.........................................19
II.8
Illustrant de quelques aspects de programmation : ......................22
III Les outils de dveloppement ..................................................... 24
III.1
Procdure de travail .................................................................24
III.2
Lenvironnement de dveloppement MPLAB .................................25
III.2.1
Editer, compiler simuler.......................................................27
III.3
Quelques exemples ..................................................................29
III.3.1
Comparaison......................................................................29
III.3.2
Boucles de temporisation.....................................................29
IV
Les ports dE/S .......................................................................... 32
IV.1
Le port d' E/S PORTA ................................................................32
IV.1.1
La broche RA4....................................................................32
IV.1.2
Les autres broches..............................................................33
IV.2
Le port d' E/S PORTB ................................................................33
IV.3
Le port d' E/S PORTC ................................................................33
IV.4
Le port d' E/S PORTD................................................................34
IV.5
Le port d' E/S PORTE ................................................................34
V
Les mmoires permanentes ....................................................... 35
V.1
La mmoire EEPROM de donnes ...............................................35
V.1.1 Procdure de lecture dans l'EEPROM ........................................35
4
V.1.2 Procdure d'criture dans l'EEPROM .........................................36
V.2
La mmoire Programme ou mmoire flash ..................................36
V.2.1 Procdure lecture dans la mmoire programme.........................37
V.2.2 Procdure d'criture dan la mmoire programme ......................37
VI
Les interruptions ....................................................................... 39
VI.1
Droulement d'une interruption .................................................39
VI.2
Les sources d'interruption .........................................................40
VI.3
L'interruption INT (Entre RB0 du port B)....................................40
VI.4
L'interruption RBI (RB4 A RB7 du port B) ....................................40
VI.5
Les autres interruptions ............................................................40
VII Les Timers ................................................................................. 41
VII.1 Le Timer TMR0.........................................................................41
VII.2 Le Watchdog Timer WDT (Chien de garde) .................................42
VII.3 Le Timer TMR1.........................................................................43
VII.3.1 Le mode Timer ...................................................................43
VII.3.2 Le mode Compteur .............................................................43
VII.3.3 Le registre de control de T1CON ...........................................44
VII.4 Les module de Comparaison/Capture CCP1 et CCP2 .....................45
VII.4.1 Le module CCP1 .................................................................45
VII.4.2 Le module CCP2 .................................................................47
VII.5 Le Timer TMR2.........................................................................48
VIII Le module de conversion A/N .................................................... 49
VIII.1 Droulement dune Conversion ..................................................50
VIII.2 Temps de conversion ................................................................51
VIII.3 Temps d'acquisition ..................................................................52
VIII.4 Frquence d'chantillonnage......................................................52
VIII.5 Valeur numrique obtenue ........................................................52
VIII.6 Programmation ........................................................................53
IX
L'USART ..................................................................................... 54
IX.1
Mode Asynchrone .....................................................................54
IX.2
Le port en transmission.............................................................54
IX.2.1
Les tapes de transmission (sans interruption, mode 8 bits) ....56
IX.3
Le port en rception .................................................................56
IX.3.1
Les tapes de rception (sans interruption, mode 8 bits) .........57
IX.4
La vitesse de communication .....................................................57
X
Le module MSSP (Master Synchronous Serial Port) ................... 59
X.1
Introduction au bus I2C ............................................................59
X.1.1 start condition.......................................................................60
X.1.2 Transmission d'un bit .............................................................60
X.1.3 Stop condition.......................................................................61
X.1.4 Remarque sur le Start et le Stop condition................................61
X.1.5 L' acknowledge .....................................................................61
X.1.6 L'adresse et le bit R/W ...........................................................61
X.2
Le module MSSP en mode I2C ...................................................62
X.2.1 Transmission dun octet .........................................................62
X.2.2 Rception dun octet ..............................................................62
X.2.3 Les registres de configuration .................................................63
X.2.4 MSCP en mode I2C Master......................................................65
X.2.5 MSCP en mode I2C Slave ......................................................69
5
X.3
Le module MSSP en mode SPI ...................................................73
X.3.1 Le mode SPI master ..............................................................74
X.3.2 Le mode SPI slave .................................................................76
XI
Annexe : Gestion du Programme Counter, ................................. 79
XI.1
GOTO calcul : modification de la valeur de PCL...........................79
XI.2
Instruction de branchement.......................................................79
XII Rfrences................................................................................. 80
Introduction
I.1
dun microprocesseur,
de la mmoire RAM,
de la mmoire permanente,
Un microcontrleur peut tre programm une fois pour toutes afin qu'il
effectue une ou des tches prcises au sein d'un appareil lectronique. Mais les
C rcents peuvent tre reprogramms et ceci grce leur mmoire
permanente de type FLASH (do le terme flasher quelque chose)
Plusieurs Constructeurs se partagent le march des microcontrleurs,
citons INTEL, MOTOROLA, AMTEL, ZILOG, PHILIPS et enfin MICROCHIP avec
ses PICs trs populaires qui nous intresse ici dans ce cours.
Les microcontrleurs, quelque soit leurs constructeurs, ont des architecture
trs similaires et sont constitus de modules fondamentaux assurant les
mmes fonctions : UAL, Ports dE/S, interfaces de communications srie,
Interfaces dE/S analogiques, Timers et horloge temps rels On peut dire que
seul le langage de programmation (Assembleurs) constitue la diffrence
7
majeure en deux microcontrleur (similaires) venant de deux constructeurs
diffrents.
Nous avons choisit dans ce cours dapprendre les microcontrleurs
travers une tude dtaille des microcontrleur 16F87x (x=3, 4, 6, 7) qui
constitue les lments fondamentaux de la famille mid-range qui est la famille
moyenne puissance de Microchip
I.2
FLASH
2K
2K
2K
4K
4K
8K
8K
RAM
128
128
128
192
192
368
368
EEPROM
64
64
64
128
128
256
256
I/O
22
33
22
22
33
22
33
A/D
5
8
5
5
8
5
8
Port //
NON
PSP
NON
NON
PSP
NON
PSP
Port Srie
USART
USART
MSSP
USART/MSSP
USART/MSSP
USART/MSSP
USART/MSSP
Un chien de garde,
13 sources d'interruption,
Protection de code,
Programmation par mode ICSP (In Circuit Serial Programming) 12V ou 5V,
Jeux de 35 instructions
PORTD
PORTC
PORTB
Capture/Comparaison
CCP1
timer 0
TMR0
timer 1
TMR1
timer 2
TMR2
CCP2
Chien de
garde
Capture/Comparaison
PORTA
WDT
USART
(RS232)
SSP (I2C)
Horloge
systme
PORTE
CAN
10 bits
W
ALU
96 registres
systme
368
registres
utilisateur
14 bits : config
Mmoire
programme
de type
Flash
8 x 1024
mots de 14
bits
EEPROM
256 octets
Le port D (8 bits) et le port E (3 bits) ne sont pas disponibles sur tous les
processeurs. (Voir Tableau I.1)
II
II.1
L'Horloge
II.2
L'ALU et laccumulateur W
LALU est une Unit Arithmtique et logique 8 Bits qui ralise les oprations
arithmtiques et logique de base. Laccumulateur W est un registre de travail 8
bits, toutes les oprations deux oprandes passe par lui. On peut avoir :
-
Une instruction sur un seul oprande qui est en gnral un registre situ
dans la RAM
Une instruction sur 2 oprandes. Dans ce cas, lun des deux oprandes est
toujours laccumulateur W, lautre peut tre soit un registre soit une
constante.
Pour les instructions dont un des oprandes est un registre, le rsultat peut
tre rcupr soit dans laccumulateur, soit dans le registre lui-mme.
10
II.3
96 positions sont rserves au SFR (Special Function Registers) qui sont les
registres de configuration du PIC.
Les 416 positions restantes constituent les registres GPR (General Propose
Registers) ou RAM utilisateur. Sur le 16F876 et 16F877, 3 blocs de 16
octets chacun ne sont pas implants physiquement do une capacit de
RAM utilisateur de 368 GPR.
II.3.1
Accs la RAM par adressage DIRECT
Avec ce mode dadressage, on prcise dans linstruction la valeur de
ladresse laquelle on veut accder. Par exemple, pour copier le contenu de
l'accumulateur W dans la case mmoire d'adresse 50, on utilise l'instruction
MOVWF 50. Cette instruction sera code sur 14 bits, la partie adresse est
code sur 7 bits ce qui va poser quelques petits problmes. En effet, 7 bits
permettent dadresser seulement 128 positions. Pour pouvoir adresser les 512
positions accessibles, il faut 9 bits dadresse. Pour avoir ces 9 bits, le PIC
complte les 7 bits venant de linstruction par deux bits situs dans le registre
de configuration STATUS. Ces bits sont appels RP0 et RP1 et doivent tre
positionns correctement avant toute instruction qui accde la RAM par
ladressage direct.
RP1 RP0
9 bits
La RAM apparat alors organise en 4 banks de 128 octets chacun.
L'adresse instruction permet d'adresser l'intrieur d'un bank alors que les
bits RP0 et RP1 du registre STATUS permettent de choisir un bank. La Figure
II.1 montre lorganisation de la RAM avec les zones alloue au SFR et aux GPR.
Les zones hachures ne sont pas implantes physiquement. Si on essaye dy
accder, on est aiguill automatiquement vers la zone [70h,7Fh] appele zone
commune.
Mme si on prcise une adresse suprieure 127 (+ de 7 bits) dans une
instruction, elle est tronque 7 bits puis complte par les bits RP0 et RP1
pour former une adresse 9 bis. Par exemple, pour copier laccumulateur W
dans la case mmoire dadresse 1EFh, il faut dabord placer les bits RP0 et RP1
1 (bank 3), ensuite on utilise soit linstruction MOVWF 6Fh soit linstruction
MOVWF 1EFh, qui donne le mme rsultat. En effet, que lon crive 6Fh =
0110 1111 ou 1EFh = 0001 1110 1111, le PIC ne prend que 7 bits soit :
1101111 = 6Fh et complte avec les bits RP1,RP0 pour obtenir 11 1101111 =
1EFh
11
bank 0
bank 1
RP1 RP0
01
00
80
SFR
(32)
1F
20
RP1 RP0
10
100
SFR
(32)
bank 3
RP1 RP0
RP1 RP0
00
10F
110
SFR
(16)
11
180
18F
190
SFR
(16)
9F
A0
GPR
(96)
GPR
(80)
6F
70 Zone
7F
bank 2
GPR
(96)
GPR
(96)
EF
16F
1EF
FF
17F
1FF
commune
Nous allons anticiper un peu et prsenter les instructions bcf et bsf et qui
permettent de positionner un bit 0 ou 1
bcf
STATUS,RP0
bsf
STATUS,RP1
II.3.2
12
Ceci nest pas tout fait complet car (comme pour ladressage direct) on
va avoir un problme de capacit dadressage. En effet, comme tous les
registres, le registre de pointage FSR est un registre 8 bits, il peut donc
adresser au maximum 256 positions mmoire (de 00h FFh), cest seulement
la moiti de la RAM dont on dispose. Il nous manque un bit pour avoir les 9
bits ncessaires. On utilise le bit IRP qui se trouve dans le registre STATUS.
IRP
0 00
0 1F
0 20
0 7F
0 80
0 9F
0 A0
0 EF
SFR
(32)
FSR
1 00
1 0F
1 10
GPR
(96)
1 6F
SFR
(32)
1 80
1 8F
1 90
GPR
(80)
1 EF
0 FF
SFR
(16)
GPR
(96)
SFR
(16)
GPR
(96)
1 FF
page 0
page 1
Donc en rsum, chaque fois que le PIC rencontre le mot INDF dans un
programme, il sait quil sagit de la case mmoire dont ladresse (9 bits) se
trouve dans le registre FSR complt par le bit IRP du registre STATUS
FSR
9 bits
page 0
page 1
13
II.4
00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
0Ch
0Dh
0Eh
0Fh
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1Ah
1Bh
1Ch
1Dh
1Eh
1Fh
Bank 1
INDF
OPTION_REG
PCL
STATUS
FSR
TRISA
TRISB
TRISC
TRISD (*)
TRISE (*)
PCLATH
INTCON
PIE1
PIE2
PCON
80h
81h
82h
83h
84h
85h
86h
87h
88h
89h
8Ah
8Bh
8Ch
8Dh
8Eh
8Fh
90h
91h
92h
93h
94h
95h
96h
97h
98h
99h
9Ah
9Bh
9Ch
9Dh
9Eh
9Fh
SSPCON2
PR2
SSPADD
SSPSTAT
100h
101h
102h
103h
104h
105h
106h
107h
108h
109h
10Ah
10Bh
10Ch
10Dh
10Eh
10Fh
Bank 2
INDF
TMR0
PCL
STATUS
FSR
PORTB
PCLATH
INTCON
EEDATA
EEADR
EEDATH
EEADRH
180h
181h
182h
183h
184h
185h
186h
187h
188h
189h
18Ah
18Bh
18Ch
18Dh
18Eh
18Fh
Bank 3
INDF
OPTION_REG
PCL
STATUS
FSR
TRISB
PCLATH
INTCON
EECON1
EECON2
TXSTA
SPBRG
ADRESL
ADCON1
Tableau II.1 : Registres de configuration avec leurs adresses
II.5
STATUS
OPTION_REG
INTCON
PIE1
PIR1
PIE2
PIR2
EECON1
TXSTA
RCSTA
CCPxCON
T1CON
T2CON
SSPCON
SSPCON2
SSPSTAT
CCP1CON
TXSTA
RCSTA
CCP2CON
ADCON0
ADCON1
TRISx
IRP
RBPU
GIE
PSPIE
PSPIF
N.I.
N.I.
EEPGD
CSRC
SPEN
WCOL
GCEN
SMP
CSRC
SPEN
ADCS1
ADFM
RP1
INTEDG
PEIE
ADIE
ADIF
Rserv
Rserv
TX9
RX9
TOUTPS3
SSPOV
ACKSTAT
CKE
TX9
RX9
ADCS0
RP0
T0CS
T0IE
RCIE
RCIF
N.I.
N.I.
TXEN
SREN
DCxB1
T1CKPS1
TOUTPS2
SSPEN
ACKDT
D/A
CCP1X
TXEN
SREN
CCP2X
CHS2
TO
T0SE
INTE
TXIE
TXIF
EEIE
EEIF
SYNC
CREN
DCxB0
T1CKPS0
TOUTPS1
CKP
ACKEN
P
CCP1Y
SYNC
CREN
CCP2Y
CHS1
PD
PSA
RBIE
SSPIE
SSPIF
BCLIE
BCLIF
WRERR
ADDEN
CCPxM3
T1OSCEN
TOUTPS0
SSPM3
RCEN
S
CCP1M3
ADDEN
CCP2M3
CHS0
PCFG3
Z
PS2
T0IF
CCP1IE
CCP1IF
N.I.
N.I.
WREN
BRGH
FERR
CCPxM2
T1SYNC
TMR2ON
SSPM2
PEN
R/W
CCP1M2
BRGH
FERR
CCP2M2
GO/DONE
PCFG2
DC
PS1
INTF
TMR2IE
TMR2IF
N.I.
N.I.
WR
TRMT
OERR
CCPxM1
TMR1CS
T2CKPS1
SSPM1
RSEN
UA
CCP1M1
TRMT
OERR
CCP2M1
PCFG1
C
PS0
RBIF
TMR1IE
TMR1IF
CCP2IE
CCP2IF
RD
TX9D
RX9D
CCPxM0
TMR1ON
T2CKPS0
SSPM0
SEN
BF
CCP1M0
TX9D
RX9D
CCP2M0
ADON
PCFG0
0001 1xxx
1111 1111
0000 000x
0000 0000
0000 0000
-r-0 0--0
-r-0 0--0
x--- x000
0000 -010
0000 000x
--00 0000
--00 0000
-000 0000
0000 0000
0000 0000
0000 0000
--00 0000
0000 -010
0000 000x
--00 0000
0000 00-0
0--- 0000
1111 1111
14
II.6
Chaque instruction est code sur un mot de 14 bits qui contient le code
opration (OC) ainsi que l'oprande,
II.6.1
Les instructions orientes Registre
Ce sont des instructions qui manipulent un octet se trouvant dans la RAM.
a peut tre un registre de configuration SFR ou une case mmoire
quelconque (Registre GPR)
II.6.2
Les instructions orientes bits
Ce sont des instructions destines manipuler directement un bit dun
registre que se soit un registre de configuration SFR ou une case mmoire
quelconque (registre GPR). Tous les bits de la RAM peuvent tre manipul
individuellement.
II.6.3
Les instructions oprant sur une constante
Ce sont les instructions entre laccumulateur W est une constante K
II.6.4
Les instructions de saut et appel de procdures
Ce sont les instructions qui permettent de sauter une autre position dans
le programme et de continuer lexcution du programme partir de cette
position.
II.6.5
Les indicateur dtat
Les bits Z, DC et C situs dans le registre STATUS sont des indicateurs qui
permettent de savoir comment une instruction sest termine. Toutes les
instructions nagissent pas sur les indicateurs, voir liste des instructions cidessous.
Z : passe 1 quand le rsultat dune instruction est nul
C : passe 1 quand lopration a gnr une retenue
DC : passe 1 quand les 4me bits gnre une retenue
Ces bits peuvent tre utilis trs astucieusement par les instructions btfsc
et btfss qui permettent de tester un bit et de raliser un saut conditionnel.
Nous aurons loccasion den reparler dans la suite du cours.
STATUS
IRP
RP1
RP0
DC
15
II.6.6
Le jeu d'instructions
indicateurs Cycles
C,DC,Z
Z
Z
Z
Z
Z
Z
Z
C
C,DC,Z
Z
1
1
1
1
1
1(2)
1
1(2)
1
1
1
1
1
1
1
1
1
1
1(2)
1(2)
C,DC,Z
Z
Z
C,DC,Z
Z
Z
TO', PD'
TO', PD'
1
1
1
1
1
1
1
1
2
2
1
2
2
2
1
16
On remarque que :
Les instructions qui agissent sur une constante contiennent toutes la lettre
L, parce que chez Microchip, on appelle Literal ce genre dadressage,
chez dautre constructeurs, on parle dadressage immdiat
II.6.7
Les paramtres des instructions agissant sur registre
Pour les instructions qui agissent sur registre, le paramtre F reprsente
ladresse du registre considr. Le paramtre d (destination) joue un rle
important, si on prend d = 0 ou w, le rsultat de lopration sera plac dans
laccumulateur W, si on prend d = 1 ou f, le rsultat de lopration sera plac
dans le registre prcis par F.
ADDWF 70h,1
ou
ADDWF
70h,f
Signifie : additionner le contenu de W avec le contenu de la case mmoire dadresse 70h et
placer le rsultat dans la case mmoire 70h
XORWF 35h,0
ou
XORWF
35h,w
Signifie : faire un ou exclusif entre W et le contenu de la case mmoire dadresse 35h et
placer le rsultat dans laccumulateur W
II.6.8
Les paramtres des instructions agissant sur bit
Pour les instructions agissant sur un bit, le paramtre F indique le registre
qui contient le bit modifier et le paramtre b indique le numro du bit
modifier; on compte partir de zro en commenant droite
7
BSF
STATUS,2
BCF
45h,6
II.6.9
Les instruction MOVWF et MOVF
Ce sont les instructions les plus utilises,
RAM
STATUS
MOVWF
55h
MOVWF
17
RAM
MOVF
STATUS,0
MOVF
35h,0
MOVF
Avec le paramtre d=1, linstruction MOVF semble inutile car elle permet de
copier un registre sur lui-mme ce qui priori ne sert rien.
MOVF
STATUS,1
En ralit cette instruction peut savrer utile car, comme elle positionne
lindicateur Z, elle permet de tester si le contenu dun registre est gal zro
btfss F,b
exemple :
sublw
100
btfss
STATUS,Z
clrf
70h
cmpf
70h,f
suite du programme
suite du programme
; 100 W W
; tester le bit Z du registre STATUS et sauter une ligne si Z=1
; aprs btfss, le programme continue ici si Z=0
; aprs btfss, le programme continue ici si Z=1
18
deccfsz F,1
bonjour
debut
Instruction
Instruction
Instruction
Instruction
Call afficher
Instruction
Instruction
Instruction
goto debut
Fonction
afficher
Instruction
Instruction
Instruction
Instruction
Instruction
Instruction
Instruction
return
19
II.7
20
XX
MOVF
XX
#DEFINE LED
BCF
LED
0x20
PORTB,3
XX EQU 0x20
eteindre
bcf
bsf
PORTC,5
#DEFINE
allumer
PORTC,5 ;affecte
labrviation allumer
linstruction bsf PORTC,5
allumer
eteindre
DE : pour dclarer des donns qui seront stocke dans l'EEPROM de donne
au moment de l'implantation du programme sur le PIC
ORG
0x2100
DE
"Programmer un PIC, rien de plus simple", 70, 'Z'
RETLW 10
RETLW 35h
RETLW 'H'
RETLW 'e'
RETLW l
RETLW l
RETLW o
21
CP1
CP0
DEBUG
WRT
CPD
LVP
BODEN
CP1
CP0
PWRTE
WDTE
F0SC1
F0SC0
22
1 : WDT en service (_WDT_ON)
0 : WDT hors service (_WDT_OFF)
FOSC1/FOSC0 : bits 1/0 : slection du type doscillateur
11 : Oscillateur de type RC (_RC_OSC) (3K < R < 100k, C > 20 pF)
10 : Oscillateur haute vitesse (_HS_OSC) (4 Mhz 20 Mhz)
01 : Oscillateur basse vitesse (_XT_OSC) (200 kHz 4 Mhz)
00 : Oscillateur faible consommation (_LP_OSC) (32 k 200 kHz)
Voici 3 exemples dutilisation :
__CONFIG B'11111100111001'
__CONFIG H'3F39'
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF &
_LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
Remarque :
Attention, les microcontrleurs avec lextension A comme 16F876A ou
16F877A ont une disposition des bits de configuration lgrement diffrente,
consultez le datasheet.
II.8
35h
35h,f
35h,w
clrf
Incf
Incf
135h
135h,f
135h,w
movlw
movwf
movlw
movwf
movf
addwf
100
70h
50
71h
70h,w
71h,f
23
24
Mettre le PIC dans son montage final, mettre sous tension et admirer le
travail.
Internet est riche en informations sur ce sujet. Vous trouverez une rubrique
sur les programmateurs de PIC sur mon site http://z.oumnad.123.fr
25
Nous allons raliser un tout petit programme sans grand intrt pour voir la
procdure de fonctionnement (avec MPLAB 6.30)
loop
incf 70h,1
goto looop
end
26
27
III.2.1
;*****************************************************************
; Ce programme crit les lettres A, B, C, D dans les positions suivantes de la RAM
; A => 20h
B => A0h
C => 110h
D => 190h
;*****************************************************************
list p=16f877 , r=dec
include <p16f877.inc>
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF &
_LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
bcf
bcf
movlw
movwf
STATUS,RP0
STATUS,RP1
'A'
20h
;bank 0
;bank 0
bsf
movlw
movwf
STATUS,RP0
'B'
0xA0
;bank 1
bcf
bsf
movlw
movwf
STATUS,RP0
STATUS,RP1
'C'
110h
;bank 2
;bank 2
bsf
movlw
movwf
STATUS,RP0
'D'
190h
;bank 3
end
Compilons
le
programme
avec MPLAB (project quikbuild)
et
visualisons
la
mmoire
programme
(view program
memory) , on obtient la fentre
ci-dessus.
Observations :
Comme
il
n'y
a
pas
d'interruption, on ne s'est pas
souci de l'implantation du
programme dans la mmoire
programme (directive ORG).
on remarque sur la fentre
que
l'implantation
du
programme
commence
l'adresse 0.
28
Simulation :
Visualisons la RAM (view file registers) et les registres de configuration
(vew Special function registers) et excutons le programme pas par pas tout
en observant l'accumulateur WREG, le registre STATUS et les cases mmoire
concernes.
29
ici
-
movlw
movwf
decfsz
goto
4
70h
70h,f
ici
30
-
chaque passage dans la boucle prend (1+2) cycle sauf le dernier qui prend
2 cycle
T = 2 + (N1-1)*3 + 2 = 3*N1 + 1 cycles
La valeur max que l'on peut donner N1 est = 0 = 256, ce qui donne une
temporisation max de 769 cycles.
Avec un quartz = fosc = 4 Mhz, 1 cycle = fosc/4 = 1 s, ce qui donne une
temporisation max de 769 s
Pour faciliter l'utilisation de cette temporisation on va l'utiliser comme une
fonction que l'on appellera tempo1. On note AN1 la case mmoire qui sert de
compteur, il faut la dclarer au dbut avec la directive EQU
tempo1:
t1:
III.3.2.2
Temporisation avec 2 boucles imbriques
La boucle intrieure (N1) se fait toujours 256 fois. La boucle extrieure se
fait N2 fois
tempo2 :
t2 :
T2 = 2 + 2 + [N2(t1+3)-1] + 2
T2 = 770 N2 +5
Le maximum est obtenu pour N2 =256, soit T2max = 197125 s = 0.197 s
31
III.3.2.3
Temporisation avec 3 boucles imbriques
Les boucles intrieures (N1 et N2) se font toujours 256 fois. La boucle
extrieure se fait N3 fois
tempo3 :
t3 :
T3 = 2 + 2 + N3(t2+3)-1 + 2
T3 = 197122 N3 +5
Le maximum est obtenu pour N3 =256, soit T3max = 50463237 s = 50.46 s
Remarque : La prcision de ces fonctions peut tre amliore en y insrant
des instructions nop, dans ce cas il faut revoir les formules. On verra plus tard
comment on peut faire des temporisations laide des timers.
32
IV
1k
RA4
33
RBPU
ADFM
INTEDG
T0CS
T0SE
PSA
PCFG3
PS2
PCFG2
PS1
PCFG1
PS0
PCFG0
Toutes les broches du port C peuvent tre utilises soit comme E/S
normales soit comme broches d'accs diffrents modules comme le timer
1, les modules de comparaison et de capture CCP1/2, le timer 2, le port I2C
ou le port srie, ceci sera prcis au moment de l'tude de chacun de ces
priphriques.
34
PORTD nest pas implment sur tous les processeur 16F87X, il est
disponible sur le 16F877, le 16F874 et le 16F871
PORTD peut tre utilis dans un mode particulier appel parallel slave port,
pour cela il faut placer le bit 4 (PSPMODE) de TRISE 1. Dans ce cas les 3
bits de PORTE deviennent les entres de control de ce port (RE, WE et CS)
Pour utiliser PORTD en mode normal, il faut placer le bit 4 de TRISE 0
PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 sont configurables
en entre ou en sortie laide des bits 0, 1 ou 2 du registre TRISE.
PORTD nest pas implment sur tous les processeur 16F87X, il est
disponible sur le 16F877, le 16F874 et le 16F871
Les 3 bits de PORTE peuvent tre utiliss soit comme E/S numrique soit
comme entres analogiques du CAN. La configuration se fait laide du
registre ADCON1.
Si le bit 4 de TRISE est plac 1, Les trois bits de PORTE deviennent les
entres de control du PORTD qui (dans ce cas) fonctionne en mode parallel
Slave mode
35
V.1
(bank 2)
(bank 3)
EECON2 : 2
me
registre de control
Le registre EECON1 :
EEPGD
(bank 3)
WRERR WREN WR RD
: Write Enable. Ce bit doit tre mis 1 pour dmarrer l'criture d'un
octet. Il est remis zro automatiquement la fin de l'criture. Ce bit
ne peut pas tre mis zro par une instruction.
RD
: Read Enable. Ce bit doit tre mis 1 pour dmarrer la lecture d'un
octet. Il est remis zro automatiquement la fin de la lecture. Ce bit
ne peut pas tre mis zro par une instruction
V.1.1
Procdure de lecture dans l'EEPROM
Pour lire le contenu dune position de la mmoire EEPROM, on place
ladresse dans le registre EEADR, on lance lopration de lecture laide du bit
RD du registre EECON1, la donne dsire est tout de suite disponible dans le
registre EEDATA :
1) Mettre le bit EEPGD 0 pour pointer sur l'EEPROM de donne
2) Placer ladresse relative de la position lire dans EEADR
3) Mettre le bit RD 1 pour dmarrer la lecture. Ce bit revient 0
automatiquement tout de suite aprs le transfert de la donne vers
EEDATA, (moins d'un cycle)
4) Traiter la donne disponible dans EEDATA
36
5)
V.1.2
Procdure d'criture dans l'EEPROM
Pour crire une donne dans une position de la mmoire EEPROM, on place
ladresse dans le registre EEADR, la donne dans le registre EEDATA, on lance
lopration dcriture laide du bit WR de EECON1 et du registre EECON2. La
donne prsente dans EEDATA est alors copie dans la EEPROM mais cette
opration prend 10 ms. A la fin de l'criture le bit WR revient zro
automatiquement, le drapeau EEIF est lev ce qui peut dclencher
l'interruption EEI si elle a t valide auparavant :
1) Mettre le bit EEPGD 0 pour pointer sur l'EEPROM de donne
2) Positionner le bit WREN pour valider l'criture dans l'EEPROM
3) Interdire les interruptions (si elles ont t valides avant : bit INTCON.GIE)
4) Placer ladresse relative de la position crire dans EEADR (L'adresse de la
premire position est 0)
5) Placer la donne crire dans le registre EEDATA
6) - Ecrire 55h dans EECON2 (commande de process hardwares)
- Ecrire AAh dans EECON2 (commandes de process hardwares)
- Positionner le bit WR pour dmarrer l'opration d'criture, ce bit revient
automatiquement 0 la fin de lcriture (aprs 10 ms)
7) attendre la fin de l'criture en surveillant le bit WR ou le drapeau EEIF
8) Recommencer au point (4) si on a d'autres donnes crire,
9) Autoriser les interruptions (si besoin)
10) Remettre Zro le bit WREN (si besoin)
Les bits WREN et WR ne peuvent tre positionn dans la mme instruction. WR
ne peut tre positionn que si le bit WREN a t positionn avant.
V.2
37
Le registre EEDATA (8 bits) seul ne suffit pas pour contenir les 14 bits
contenus dans une position de la mmoire programme. On lui accole le
registre EEDATH qui contiendra les 6 bits suprieurs.
V.2.1
Procdure lecture dans la mmoire programme
1) Mettre le bit EEPGD 1 pour pointer sur la mmoire programme
2) Placer ladresse de la position lire dans EEADRH:EEADR
3) Mettre le bit RD 1 pour dmarrer la lecture
4) Attendre 2 cycles machine (2 instructions NOP)
5) Lire le contenu des registres EEDATH:EEDATA
6) Recommencer au point 2) si on a d'autres donnes lire
V.2.2
Procdure d'criture dan la mmoire programme
1) Interdire les interruptions (si elles ont t valides avant)
2) Mettre le bit EEPGD 1 pour pointer sur la mmoire programme
3) Positionner le bit WREN pour valider l'criture dans la mmoire programme
4) Placer ladresse de la position crire dans EEADRH:EEADR
5) Placer la donne crire dans le registre EEDATH:EEDATA
6) - Ecrire 55h dans EECON2 (commande de process hardwares)
- Ecrire AAh dans EECON2 (commandes de process hardwares)
- Positionner le bit WR pour dmarrer l'opration d'criture, ce bit revient
automatiquement 0 la fin de lcriture (aprs 10 ms)
7) Excuter 2 instructions NOP
8) Recommencer au point 4 si on a d'autres donne crire
9) Autoriser les interruptions (si besoin)
10) Remettre Zro le bit WREN (si besoin)
38
39
VI
Les interruptions
PEIE
T0IE
ADIE
RCIE
ADIF
RCIF
INTEDG
INTE
TXIE
TXIF
EEIE
EEIF
peuvent
tre
RBIE T0IF
INTF
SSPIE CCP1IE TMR2IE
SSPIF CCP1IF TMR2IF
BCLIE
BCLIF
valides/interdites
par
RBIF
TMR1IE
TMR1IF
CCP2IE
CCP2IF
le
bit
Le bit GIE est plac "0" pour inhiber toutes les interruptions (afin que le PIC
ne soit pas drang pendant l'excution de la procdure d'interruption).
40
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 principal
dans les mmes conditions o il l'a laiss.
Validation
INTCON.T0IE
INTCON.INTE
INTCON.RBIE
PIE1.ADIE
PIE1.RCIE
PIE1.TXIE
PIE1.SSPIE
PIE1.TMR1IE
PIE1.TMR2IE
PIE1.PSPIE
PIE1.CCP1IE
PIE2.CCP2IE
PIE2.EEIE
PIE2.BCLIE
Flag
INTCON.T0IF
INTCON.INTF
INTCON.RBIF
PIR1.ADIF
PIR1.RCIF
PIR1.TXIF
PIR1.SSPIF
PIR1.TMR1IF
PIR1.TMR2IF
PIR1.PSPIF
PIR1.CCP1IF
PIR2.CCP2IF
PIR2.EEIF
PIR2.BCLIF
PEIE
non
non
non
oui
oui
oui
oui
oui
oui
oui
oui
oui
oui
oui
41
RA4
Horloge
quartz
Fosc
PSA
1
0
1
Prdiviseur
programmable
TMR0
T0IF
Fosc/4
PS2
PS1 PS0
42
WDT
WDT timeout
1
Prdiviseur
programmable
PS2 PS1 PS0
43
T1OSC
T1OSCEN
RC0
1
0
Horloge
Systme
FOSC/4
TMR1IF
T1SYNC
1
Prdiviseur
1, 2, 4, 8
TMR1
SYNC
TMR1CS
CLR
TMR1ON
CCP
TMR1 peut tre prcd d'un prdiviseur (Prescaler) qui peut diviser la
frquence par 1, 2, 4 ou 8 selon la valeur des bits T1CKPS1 et T1CKPS0
44
En mode compteur, RC0 et RC1 sont automatiquement configures en
entre, on na pas besoin de configurer les bits TRISC,0 et TRISC,1
45
Exercice 14) Clignoter LED / scrutation de TMR1
Clignoter une LED relie RE0. La temporisation voisine de 0.5s est ralise
l'aide de TMR1 par scrutation du drapeau TMR1IF
VII.4
VII.4.1.1
Le mode Capture
CCP1IF
Registre de control
CCPR1
CCPR1H CCPR1L
CCP1CON
RC2
Prescaler
1, 4 ou 16
chargement
TMR1H
TMR1L
TMR1
Dans ce mode le contenu de TMR1 est copi dans CCPR1 chaque fois qu'un
vnement intervient sur la broche RC2. Le choix de l'vnement dclencheur
se fait en programmant le prescaler laide des bits 0 3 du registre de
contrle CCP1CON. On a le choix parmi les vnements suivants :
46
A la fin de la capture, le drapeau CCP1IF est positionn, l'interruption
priphrique associe est dclenche si elle a t valide.
Plusieurs aspects sont noter comme :
VII.4.1.2
DC1B1
DC1B0
CCP1M3
47
CCP1IF
CCP1Mx
RC2
CCPR1H CCPR1L
Logique
de
control
Comparateur
(RAZ)
TMR1H
TMR1L
horloge
mode 1000 :
Au moment de l'galit, le drapeau CCP1IF est le bit RC2 passent 1. C'est
l'utilisateur de les remettre 0 pour une prochaine utilisation. RC2 doit
tre configur en sortie.
mode 1001 :
Au moment de l'galit, le drapeau CCP1IF passe 1 et le bit RC2 passe
0. C'est l'utilisateur de les remettre leur tat dorigine pour une
prochaine utilisation. RC2 doit tre configur en sortie.
mode 1010 :
A l'galit le drapeau CCP1IF passe 1. La broche RC2 n'est pas utilise.
mode 1011 :
A l'galit, le drapeau CCP1IF passe 1 et le timer TMR1 est remis 0
500 s
48
un registre de
T2CON (bank0)
control
un prdiviseur (1,4,16)
un registre de priode
PR2 (bank1) accessible
en lecture/criture
un comparateur,
un postdiviseur (1 16)
TMR2 est remis zro chaque RESET et chaque criture dans PR2
49
Exercice 16) Clignoter LED / scrutation de TMR2
Clignoter une LED relie RE0. La temporisation voisine de 0.5s est ralise
l'aide de TMR2 :
1) Par scrutation du drapeau TMR2IF
2) En utilisant linterruption TMR2I
RA0
000
RA1
001
RA2
010
RA3
011
RA5
100
RE0
101
RE1
110
RE2
111
ADCON1
Vref+
CAN
Vref-
GO
ADRES
DIV
Vss
fosc
CHS1
CHS0
GO/DONE
ADON
50
11 : Oscillateur RC ddi au CAN
CHS2:CHS0 : choix de l'entre analogique
000 = channel 0, (RA0)
001 = channel 1, (RA1)
010 = channel 2, (RA2)
011 = channel 3, (RA3)
100 = channel 4, (RA5)
101 = channel 5, (RE0)
110 = channel 6, (RE1)
111 = channel 7, (RE2)
GO/DONE : Une conversion dmarre quand on place ce bit 1. A la fin de la
conversion, il est remis automatiquement zro. Ce bit peut aussi
tre positionn automatiquement par le module CCP2.
ADON : Ce bit permet de mettre le module AN en service
ADCON1
ADFM
VIII.1
AN7
RE2
A
A
D
D
D
D
D
A
D
D
D
D
D
D
D
AN6
RE1
A
A
D
D
D
D
D
A
D
D
D
D
D
D
D
AN5
RE0
A
A
D
D
D
D
D
A
A
A
A
D
D
D
D
AN4
RA5
A
A
A
A
D
D
D
A
A
A
A
A
D
D
D
AN3
RA3
A
VREF+
A
VREF+
A
VREF+
D
VREF+
A
VREF+
VREF+
VREF+
VREF+
D
VREF+
AN2
RA2
A
A
A
A
D
D
D
VREFA
A
VREFVREFVREFD
VREF-
AN1
RA1
A
A
A
A
A
A
D
A
A
A
A
A
A
D
D
AN0
RA0
A
A
A
A
A
A
D
A
A
A
A
A
A
A
A
VREF+
VREF-
A/R/D
VDD
RA3
VDD
RA3
VDD
RA3
VDD
RA3
VDD
RA3
RA3
RA3
RA3
VDD
RA3
VSS
VSS
VSS
VSS
VSS
VSS
VSS
RA2
VSS
VSS
RA2
RA2
RA2
VSS
RA2
8/0/0
7/1/0
5/0/3
4/1/3
3/0/5
2/1/5
0/0/8
6/2/0
6/0/2
5/1/2
4/2/2
3/2/3
2/2/4
1/0/7
1/2/5
51
Analogique numrique 10 bits. Pendant la conversion, la tension Ve l'entre
du convertisseur A/N doit tre maintenue constante.
Au dpart il faut commencer par faire lacquisition du signal en fermant
linterrupteur S, ceci se fait laide du registre ADCON0, soit au moment de la
validation du module par le bit ADON soit aprs un changement de canal si
ADON est dj positionn.
Aprs la fin de lacquisition, on peut dmarrer une conversion en
positionnant le bit GO_DONE, l'interrupteur S souvre pour assurer le blocage
de la tension. La conversion commence, elle est ralise en 12 TAD. A la fin, le
bit GO_DONE repasse 0, le drapeau ADIF passe 1 et le rsultat est charg
dans les registres ADRESL et ADRESH. Le module met 2 TAD supplmentaires
pour fermer l'interrupteur S ce qui dmarre une nouvelle phase dacquisition
pendant laquelle la tension Ve rejoint la tension analogique d'entre Va. Le
temps d'acquisition dpend de la constante de temps RC, R tant la somme de
la rsistances entre le module de conversion la source de la tension
analogique. Aprs la fin de lacquisition, on peut dmarrer une nouvelle
conversion et ainsi de suite
Va
Va
Ve
Ve
CAN
100 pF
TCON
TACQ
GO/DONE
pF
nous
VIII.2
automatique
Temps de conversion
52
soit un temps de conversion : TCONV = 28 s
VIII.3
Temps d'acquisition
CT
Exemple :
Ric = 1k, Rss = 7k, Rs = 2k, Tp = 50 C :
Tc = 10k x 120pF x Ln(2047) = 9 s
CT = 25 x 0.05 s = 1,25 s
TACQ = 2 + 8,2 + 1,25 s 12 s
VIII.4
Frquence d'chantillonnage
VIII.5
53
N = valeur entire de (Va Vref-) / Q
Avec Vref- = masse, on obtient
exemple :
N = int (Va / Q)
VIII.6
Programmation
54
IX
L'USART
La parit n'est pas gre d'une faon matrielle, elle peut tre gre par
soft si son utilisation est ncessaire.
55
TX9
TXEN
SYNC
BRGH
TRMT
TX9D
criture D1
dans
TXIF
chargement
TXREGTSR
Transmission
D0
chargement
TXREGTSR
Transmission
D1
A la mise sous tension, tous les drapeaux sont zro y compris TXIF. Ds
quon valide la transmission en positionnant le bit TXEN, le drapeau TXIF
passe automatiquement 1, sauf si on crit dabord un octet dans TXREG et
on valide ensuite le bit TXEN, dans ce cas, ds la validation de TXEN, le
contenu de TXREG est transfr dans TSR qui commence sa transmission et
le drapeau TXIF passe 1.
56
57
la rception il faut rinitialiser le module de rception en mettant 0 puis
1 le bit CREN ().
SPEN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
58
vitesse
Vitesse
Kbaud
Fosc = 20 MHz
kbaud
%err
4 BRGH Fosc
baud
1)
64 (SPBRG
Fosc = 10 MHz
SPBRG
kbaud
%err
Fosc = 4 MHz
SPBRG
kbaud
%err
300
0.300
207
0.3
191
1200
1.221
1.75
255
1.202
0.17
129
1.202
0.17
51
1.2
47
2400
2.404
0.17
129
2.404
0.17
64
2.404
0.17
25
2.4
23
9600
9.766
1.73
31
9.766
1.73
15
8.929
6.99
9.6
19200
19.531
1.72
15
19.531
1.72
20.833
8.51
19.2
Fosc = 20 MHz
Fosc = 10 MHz
Fosc = 4 MHz
Fosc = 3.6864 MHz
Vitesse
Kbaud kbaud %err SPBRG kbaud %err SPBRG kbaud %err SPBRG kbaud %err SPBRG
9600
9615 0.16
129
9615 0.16
64
9615
0.16
25
9600
23
64
19531 1.72
31
19231 0.16
12
19200
11
42
28409 1.36
21
27798 3.55
28800
36
32895 2.10
18
35714 6.29
32900 2.04
59
X.1
lecture
lecture
Ecriture
Ecriture
Un bus I2C peut tre reli plusieurs circuits, mais pendant une
communication, un des circuits est le matre, c'est lui gnre l'horloge et initie
les squences de transmission, l'autre est l'esclave, il subit l'horloge du matre
sur la ligne SCK mais il peut tout de mme recevoir et mettre des donnes
sur la ligne SDA. Chaque esclave a une adresse, au dbut d'une squence de
communication, le matre qui initie la squence envoie l'adresse du slave avec
lequel il dsire communiquer, celui-ci reconnat son adresse et rpond, les
autres slaves (s'il y en a) restent muets.
60
SDA
SCK
Matre ou Esclave
Vcc
Vcc
SDA
SCK
Matre ou Esclave
SDA
SCK
Matre ou Esclave
Certains circuits sont fabriqus pour tre des masters, d'autres des slaves
et d'autres peuvent tre soit l'un soit l'autre.
Pour prendre le contrle du bus, il faut que celui-ci soit au repos ( SDA et
SCL '1'). Lorsqu'un circuit prend le contrle du bus, il en devient le matre.
C'est lui qui gnre le signal d'horloge et c'est lui qui initie les squences
d'change.
X.1.1
start condition
Au dbut d'une squence d'change, le master gnre un start condition
(S) avant de commencer l'change de donnes. Au repos, les lignes SCL et
SDA sont l'tat haut (relches). Pour gnrer un start, le master place
d'abord la ligne SDA 0, ensuite il place SCK 0.
SDA
SCK
X.1.2
Transmission d'un bit
On place le bit transmettre sur la ligne SDA ensuite on envoie une
impulsion d'horloge sur la ligne SCK. C'est cette impulsion qui informe le slave
qu'il doit lire la donne sur SDA
bit transmettre
SDA
SCK
moment de lecture par le
rcepteur
61
X.1.3
Stop condition
A la fin d'une squence d'change, le master gnre un stop condition (P)
aprs lequel le bus est de nouveau libre. Pour cela, partir de la situation
SDA=0, SCK=0, le master commence par placer SCK 1 et place ensuite SDA
1.
SDA
P
SCK
X.1.4
Remarque sur le Start et le Stop condition
Une squence de transmission peut contenir plusieurs Starts conditions
avant de rencontrer un Stop Condition. On parle de repeated Start condition.
Un Stop condition est toujours synonyme de FIN de transmission.
X.1.5
L' acknowledge
L' acknowledge est l'accus de rception. Il est plac par le circuit qui reoit
sur la ligne SDA juste aprs la rception du 8me bit. C'est l'metteur qui le lit
de la mme faon qu'on lit un bit ordinaire. SDA=0 acknowledge positif
(ACK), SDA=1 acknowledge ngatif (NOACK),
ACK
NOACK
SDA
SCK
D7
D6
D5
D4
D3
D2
D1
D0
SCK
X.1.6
L'adresse et le bit R/W
Comme on peut brancher plusieurs composant sur un bus I2C, il est
ncessaire de dfinir une adresse unique pour chacun. Elle est code sur 7 bits
A6 A5 A4 A3 A2 A1 A0. Le master qui dmarre une squence d'change envoie
l'adresse du slave juste aprs le start condition. Comme il y a seulement 7
bits, le master envoie la 8me position le bit R/W pour indiquer au slave s'il
dsire une mission (R/W=0) ou une rception (R/W=1).
62
Acknowledge
SDA
SCK
A6
A5
A4
A3
A2
A1
A0
R/W
X.2
SSPCON
SSPCON2
SSPSR
SSPSTA
SSPADD
X.2.1
Transmission dun octet
Pour transmettre un octet, il suffit de le copier dans le registre SSPBUF, et
le module MSSP soccupe du reste. Au moment de lcriture dans SSPBUF, le
bit BF passe 1 et la transmission commence. A la fin de la transmission, le bit
SSPSTAT.BF repasse 0 et le drapeau dinterruption PIR1.SSPIF passe 1.
Le bit BF apparat donc comme un bit trs important, cest lui qui nous
permet de savoir si le registre SSPBUF est libre ou non
Si on tante d'crire dans SSPBUF alors que BF=1, le bit SSPCON.WCOL
passe 1 pour indiquer une collision et l'criture n'a pas lieu.
X.2.2
Rception dun octet
A la fin de la rception d'un octet, celui-ci est transfr dans SSPBUF,
lindicateur SSPSTAT.BF et le drapeau dinterruption PIR1.SSPIF passent 1.
BF repasse automatiquement 0 au moment de la lecture de SSPBUF alors
que SSPIF soit tre remis 0 par soft.
63
Si le PIC termine la rception d'un octet avant que l'octet prcdent qui se
trouve dans SSPBUF n'ait t lu, on a un Overflow qui sera signal par le
drapeau SSPOV. Le transfert n'a pas lieu, loctet arriv est perdu.
X.2.3
Les registres de configuration
Le control du module se fait l'aide des registres :
SSPCON
: registre de control
SSPCON2
: registre de control
SSPSTAT
: registre d'tat
SSPADD
: registre d'adresse
SSPSTAT
SMP
CKE
D/A
P
S
R_W
UA
BF
SMP
CKE
D/A
R_W
UA
BF
: Control de slew rate : 1 pour 100 kHz et 1 MHz, 0 pour 400 kHz
: Control des niveau de tension l'entre, 0 : I2C, 1 : SMBUS
: Indicateur d'tat, 0 : dernier octet mis/reu = adresse, 1 : dernier
octet mis/reu = donne
: Indicateur de Stop Condition. Ce bit passe 1 quand on reoit un
Stop Condition. Il est automatiquement remis 0 quand un autre
vnement et reu.
: Indicateur de Start Condition. Ce bit passe 1 quand on reoit un
Start Condition. Il est automatiquement remis 0 quand un autre
vnement et reu
: Indicateur de lecture criture
Mode master : 0 : pas de transmission en cours, 1 : transmission en
cours
Mode slave : image du bit R/W qui constitue le bit 0 du premier octet
suivant le start condition. 0 : criture, 1 : lecture
: Indicateur utilis en mode esclave avec adressage 10 bits pour nous
informer qu'il faut placer la 2me partie de l'adresse dans le registre
adresse. Ce dernier ayant seulement 8 bits, l'adresse est traite en 2
parties. Ce bit est remis automatiquement zro aprs l'criture dans
SSPADD.
: Indicateur sur l'tat du registre SSPBUF.
SSPCON
64
0 : horloge force zro, 1 : horloge valide
SSPM3:SSPM0 : mode de fonctionnement du module
0110 : I2C Slave, adresse 7 bits
0111 : I2C Slave, adresse 10 bits
1000 : I2C master, frquence = FOSC / (4 * (SSPADD+1))
1011 : I2C Slave forc l'tat de repos
1110 : I2C master, adresse 7 bits, interruption sur START et STOP
1110 : I2C master, adresse 10 bits, interruption sur START et STOP
Le registre SSPCON2 :
SSPCON2
GCEN
PEN
RSEN
SEN
Le bit 7 concerne le mode slave, les autres bits concernent le mode master :
GCEN : General call enable bit : Si ce bit est valid, le PIC rpond son
adresse et l'adresse gnrale 0000h
ACKSTAT : Acknowledge Status bit : En mission, ce bit est limage de
laccus de rception envoy par le slave. 0=accus positif, 1=accus
ngatif. En rception, il permet au master de savoir si le slave a envoy
ou non un accus de rception. 0 : ACK reu, 1 : ACK non reu
ACKDT : Acknowledge Data bit : Valeur du bit envoy au slave en fin de
rception. Ce bit est envoy au moment ou on positionne le bit ACKEN.
ACKEN : Acknowledge Sequence Enable bit : quand il est plac un, ce bit
dmarre une squence accus de rception qui consiste placer les
broches SDA et SCL dans le mode adquat et transmettre le bit
ACKDT
RCEN : Receive Enable bit , 0 : rception inhibe, 1 : dmarre la rception
d'un octet
PEN : STOP Condition Enable bit , dmarre une squence stoP_condition sur
les broches SDA et SCL. Ce bit est remis 0 automatiquement
RSEN : Repeated START Condition Enable bit : dmarre une squence
Repeated Start condition
SEN : START Condition Enable bit : dmarre une squence Start condition
65
Le registre SSPADD :
En mode I2C master, ce registre permet de dterminer la frquence de
communication
F
Fosc
4 (SSPADD
1)
Hz
Fosc
4 F
1 Hz
En mode I2C slave, ce registre doit contenir l'adresse du slave. Le bit 0 est
rserv, il doit tre toujours plac zro, l'adresse doit tre crite partir du
bit 1. En cas d'adresse 7 bits, cela ne pose pas de problme. En cas d'adresse
10 bits, l'adresse est crite en 2 temps, On commence par crire 1 1 1 1 0 A9
A8 0 dans SSPADD, en attend l'indicateur UA, ensuite on crit A7 A6 A5 A4 A3
A2 A1 A0
X.2.4
MSCP en mode I2C Master
Une squence de communication est toujours initie par le master qui
commence par envoyer un Start_bit (SSPCON2.SEN), suivi de l'adresse du
slave. Ladresse sera code seulement sur 7 bits, Le LSB quon appelle bit R/W
permet de prciser le sens de lchange qui va suivre, R/W=0 pour
transmission, R/W=1 pour rception. On envoie ou on reoit les donnes et on
termine la communication par un stoP_bit (SSPCON2.PEN)
Si lon dsire changer le sens de lchange avant lenvoi du stoP, cela est
possible, il faut envoyer un RepeatStart condition suivi de ladresse
accompagne dun R/W diffrent
X.2.4.1
Data byte
Data byte
A P
R/W
66
l'ACK renvoy par le slave est recopi (par le master) dans le bit
SSPCON2.ACKSTAT. Le programmeur doit vrifier ltat de ce bit pour
dcider de la suite des vnements, Si = 0 (ACK), le programme peut
envoyer une donne vers le slave, sinon (NOACK) il faut envoyer un
stoP_bit et recommencer,
67
X.2.4.2
ACK du slave
S Slave adress 1 A
Data byte
reu
transmis
Data byte
A P
reu
R/W
Le
programme
du
master
doit
tester
l'acknowledge
dans
SSPCON2.ACKSTAT, si = 0, il se prpare la rception en positionnant le
bit SSPCON2.RCEN,
68
Quelques remarques :
Le drapeau dinterruption SSPIF doit chaque fois tre remis 0 par soft.
(ceci bien sur, si on a dcid de sen servir)
69
X.2.5
MSCP en mode I2C Slave
Voici quelques points en vrac :
SSPSTAT.S
SSPSTAT.P passe 1. Il
70
X.2.5.1
Data byte
Data byte
A P
R/W
Le bit SSPSTAT.D_A
arrive
Il place un ACK (0) sur la ligne SDA. Cest le PIC qui le fait,
notre programme ne sen occupe pas
Le PIC attend la rception du 8me bit, vrifie BF et SSPOV (on suppose que
tout est OK), il transfert loctet arriv dans SSPBUF et place les bits D_A, BF
et SSPIF 1.
71
X.2.5.2
Data byte
transmis
R/W
Data byte
A P
transmis
Il place un ACK (0) sur la ligne SDA. Cest le PIC qui le fait, notre
programme ne sen occupe pas
72
PIC master
PIC Slave
On positionne SEN 1
Le PIC gnre un START
SEN repasse 0 automatiquement
On place l'adresse dans le registre SSBUF
bit R/W=0 : transmission MASTER SLAVE
BF
SSPOV 1
Ligne SDA 1
c'est un NOACK
on place PEN 1
le PIC gnre un STOP
PEN 0 automatique
=0
SSPSR SSPBUF
BF 1
Ligne SDA 0
c'est un ACK
si ACK
On place un octet de
donne dans SSBUF
SSPBUF vide
Si on veut dmarrer
une
squence
de
rception, on envoie
un REPEAT START
Initialisation du SLAVE
prt recevoir un
START
Initialisation du SLAVE
prt recevoir un
START
73
X.3
SDO
SDI
SSPSR
74
X.3.1
PIC
(master)
Circuit
quelconque
(slave)
SDI
SCK
Slave 1
SDO
PIC
(master)
RX
SDI
Tx
SCK
horloge
Ri
slection
Rj
Slave 2
RX
Tx
horloge
slection
Le PIC fonctionne en
master, il gnre et gre
l'horloge
de
synchronisation. C'est lui
qui dcide du moment o
dmarrer
une
mission/rception.
Le PIC peut communiquer
avec plusieurs slaves, dans
ce cas il faut dsigner le
slave avec lequel on dsire
communiquer, il faut que
les slaves disposent d'une
entre de slection CS
qu'on peut contrler avec
une sortie quelconque d'un
port d'E/S. Dans le cas ou
les slaves sont des PIC,
l'entre de slection est
RA4/SS
CKP
SSPM3
SSPM2
SSPM1
SSPM0
75
Le registre SSPSTAT en mode master :
SMP
CKE
BF
Seuls les bits utiliss par le mode SPI master sont reprsents ici.
SMP : Sample bit : front d'horloge SCK sur lequel on lit le bit prsent sur
l'entre SDI
0 : milieu de priode d'horloge
1 : fin de la priode d'horloge
CKE : Clock Edge Select : ce bit dtermine sur quel front de l'horloge SCK, les
bits transmettre seront plac sur la sortie SDO. Ceci va dpendre du bit CKP.
Si on dsigne le niveau actif de l'horloge comme le niveau oppos du niveau de
repos dfini par CKP :
0 : Les bits sont transmis au moment o l'horloge passe au niveau actif
1 : Les bits sont transmis au moment o l'horloge passe au niveau de repos
BF : Indicateur qui indique quand il passe 1 que le registre SSPBUF contient
l'octet qui vient d'tre reu. Ce bit est remis automatiquement zro au
moment de la lecture du registre SSPBUF.
Le dessin ci-dessous montre diffrentes situations possibles dpendant des
bits CKP et CKE. L'observation de ce chronogramme montre que :
L'mission/rception d'un octet dure 8 priode d'horloge,
L'apparition du premier front de l'horloge dpend des bits CKP et CKE,
Les bits transmettre sont placs sur la sortie SDO au dbut de chaque
priode d'horloge,
Le slave place ses bits sur SDI soit au dbut soit au milieu de la priode
d'horloge. Le matre doit donc adapter ses instants de lecture en
consquence laide du bit SMP
CKP=0
CKE=0
CKP=0
CKE=1
CKP=1
CKE=0
CKP=1
CKE=1
B7
B7
B6
B5
B6
B5
B4
B4
B3
B3
B2
B2
B1
B1
B0
B0
76
X.3.1.1
Rcapitulation mode master
En rsum, les tapes suivre pour utiliser MSSP en mode SPI master sont :
Configurer la direction des lignes RC4/SDI, RC5/SDO et RC3/SCK
Dfinir la polarit de l'horloge par le bit SSPCON.CKP
Dfinir la frquence de l'horloge l'aide des bits SSPCON.SSPMx
Dfinir le moment de lecture des bits entrant l'aide du bit SSPSTAT.SMP
Dfinir le front sur lequel les bits seront transmis l'aide du bit SSPSTAT.CKE
Valider le port par le bit SSPCON.SSPEN
Une fois cette initialisation ralise, l'mission/rception se fait comme suit :
Copier un octet dans SSPBUF pour dmarrer lmission/rception
attendre la fin en surveillant SSPSTAT.BF ou PIR1.SSPIF
La lecture de SSPBUF est la seule faon de r..z le bit SSPSTAT.BF
Si on lutilise, le drapeau PIR1.SSPIF doit tre remis 0
X.3.2
Le mode SPI slave
En mode slave, le module MSSP fonctionne d'une faon similaire au mode
master part qu'ici, ce n'est pas notre PIC qui gnre l'horloge et dcide des
moments de communication. Il se contente de raliser une mission/rception
chaque fois qu'il reoit une rafale d'horloge sur la broche SCK qui est devenue
une entre.
Le registre SSPSTAT en mode slave :
SMP
CKE
BF
SMP :
doit tre mis 0 : la lecture sur SDI doit toujours se faire au milieu
du cycle horloge.
CKE : Clock Edge Select : ce bit fonctionne comme en mode master
0 : Les bits sont transmis au moment o l'horloge passe au niveau actif
1 : Les bits sont transmis au moment o l'horloge passe au niveau de repos
- Le choix dfinit par ce bit doit tre le mme que celui utilis sur le master.
- Si CKP=1, le mode Slection de slave soit tre obligatoirement utilis
BF : Indicateur qui indique quand il passe 1 que le registre SSPBUF contient
l'octet qui vient d'tre reu. Ce bit est remis automatiquement zro au
moment de la lecture du registre SSPBUF.
77
Le registre SSPCON en mode slave :
WCOL
SSPOV
SSPEN
CKP
SSPM3
SSPM2
SSPM1
SSPM0
WCOL : Write Collision Detect bit : Cet indicateur d'erreur est positionn
quand on crit une valeur dans SSBUF alors que la valeur prcdente n'est pas
encore transmise. Il doit tre remis zro par programme
SSPOV
: Receive Overflow Indicator bit : Cet indicateur d'erreur est
positionn quand une nouvelle donne est reue alors que le registre SSBUF
n'est pas encore lu. Dans ce cas la nouvelle donne est perdue. Ce bit doit tre
remis zro par programme
SSPEN : Validation du module SSP (1 = valid)
SKP : Clock Polarity : dfinit l'tat de repos de l'horloge (idle state)
0 : Bas au repos, 1 : Haut au repos (doit concider avec le choix du
master)
SSPM3:SSPM0 : Ces bits dfinissent le mode de fonctionnement du module
0100 : SPI Slave : l'entre SS (slave select) est valide
0100 : SPI Slave : l'entre SS est inhibe (fonctionne en E/S normale)
Dans le cas ou l'entre SS est utilise, elle doit tre configure en entre
par TRISA.5 et elle doit tre configure comme entre numrique l'aide du
registre ADCON1 car elle est multiplexe avec une entre analogique du
module CAN.
X.3.2.1
Les chronogrammes de fonctionnement :
Un cycle d'mission/rception dmarre au moment du dmarrage de
l'horloge externe.
Si on ne dsire raliser que des rceptions, on n'a pas besoin d'crire
chaque fois dans SSPBUF du moment que ce n'est pas nous qui dmarrons le
cycle Tx/Rx
Si on ne dsire raliser que des transmissions, il va de soi que nous devons
crire les donnes transmettre dans SSPBUF, mais il va falloir aussi lire ce
registre la fin de chaque cycle Tx/Rx pour baisser l'indicateur BF, sinon une
erreur d' Overflow sera dclenche (SSPOV)
Deux chronogrammes sont possibles selon la valeur CKE. Commenons par
le cas CKE=0, Les bits sont transmis au moment du passage de l'horloge son
niveau actif. Il n'est pas ncessaire d'utiliser l'entre SS dans ce cas, au cas o
elle est valide, il faut qu'elle soit place zro pour que la communication
puisse avoir lieu.
78
CKP=
0
CKP=
1
B7
SDI
B6
B5
B4
B3
B2
B1
B0
B3
B2
B1
B0
SDO
B6
B5
B4
SS
CKP=0
CKP=
1
SDI
B7
B6
B5
B4
B3
B2
B1
B0
SDO
B7
B6
B5
B4
B3
B2
B1
B0
moment de lecture
master et slave
79
XI
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 o seuls 5 bits sont utilis.
PCL
PCLATH
Ecriture dans PCL
PCLATH
11 bits venant de l'instruction
La mmoire programme apparat donc comme organise en 4 page de 2 k
chacune. Lors d'un saut, l'adresse instruction prcise la destination l'intrieur
d'une page et les deux bits 3 et 4 de PCLATH dsignent la page
Attention, en assembleur on ne prcise pas les adresses mais on utilise des
tiquettes qui correspondent des adresses compltes (13 bits). Cela ne
80
change rient car seuls 11 bits de l'tiquette seront envoys dans le PC et c'est
nous de grer les deux bits de PCLATH pour complter l'adresse de
destination.
PCLATH
00
01
10
11
Page 0
Page 1
Page 2
Page 3
0
2k
4k
6k
8k
mmoire
programme
XII Rfrences
1)
2)
3)
4)
5)
http://www.multimania.com/pmorphe/bienvenuechez_atm.htm
La programmation des PICs, Premire partie PIC16F84, Rev 5, Bigonff
La programmation des PICs, Secode partie-PIC16F876/877, Rev 7, Bigonff
PIC 16F87X Data Sheet (DS30292C) , Microchip
PICmicro Mid-Range MCU Family Reference Manual (DS33023A),
Microchip
6) La page web de Jacques Weiss sur les PIC
7) La page web d'Offset sur les PIC