Les microcontrôleurs PIC
Bernard Béghyn
Hermes Science publications
Avant-propos
11
Chapitre 1. Conception d'une unité centrale
13
1.1. Rappels13
1.1.1. Notions de bus13
1.1.2. La logique trois états14
1.1.3. Application15
1.1.4. Registre tampon ou accumulateur15
1.1.5. L'unité arithmétique et logique17
1.2. Introduction à l'unité centrale17
1.2.1. Fonctionnement17
1.2.2. Automatisation de l'unité centrale de base19
1.2.3. Spécificité du microcontrôleur PIC20
1.2.4. Le déroulement d'un programme21
1.2.5. Résumé : rôle des composants utilisés25
Chapitre 2. L'unité de calcul
27
2.1. Définition des registres27
2.2. Les registres «PCL» et «PCLATH»28
2.3. Le registre «W»29
2.4. Le registre «STATUS» ou registre d'état29
2.5. Utilisation du registre d'état30
2.6. Fonctionnement de La pile31
2.6.1. Usage de la pile lors de l'appel d'un sous-programme31
2.6.2. Usage de la pile en cas d'interruption32
2.6.3. La configuration du microcontrôleur33
Chapitre 3. La programmation
35
3.1. Le langage source assembleur35
3.1.1. Conventions d'écriture35
3.1.2. Définition de l'adresse effective36
3.1.3. Structure d'une instruction en langage assembleur36
3.2. Les différents modes d'adressage37
3.2.1. Adressage immédiat37
3.2.2. Adressage direct37
3.2.3. Adressage indirect37
3.2.4. Adressage relatif38
3.2.5. Mode manipulation de bit39
3.2.6. Mode test de bit et branchement39
3.3. La réalisation d'un programme40
3.3.1. Comment écrire un programme ?40
3.3.2. L'assemblage41
3.3.3. Régles de rédaction en langage d'assemblage42
3.4. Les macros44
3.5. La zone des variables45
3.6. Les étiquettes45
3.7. Les commentaires46
3.8. Comment bâtir un programme ?46
3.8.1. Définition de l'organigramme47
3.8.2. Rédaction en langage source assembleur48
3.9. Fichier «.hex» à charger en mémoire51
3.9.1. Etude de la première ligne51
3.9.2. Etude de la deuxième ligne51
3.9.3. Etude de la troisième ligne52
3.9.4. Etude de la dernière ligne52
Chapitre 4. Le jeu d'instructions
53
4.1. Format des instructions53
4.1.1. Opérations orientées «mots» des registres «FILE»53
4.1.2. Opérations de manipulations de bits54
4.1.3. Opérations de branchement55
4.2. Les instructions du PIC16F8455
4.2.1. «ADDLW» (ADD Literal and W)55
4.2.2. «ADDWF» (ADD W and F)57
4.2.3. «ANDLW» (AND Literal with W)57
4.2.4. «ANDWF» (AND W with F)58
4.2.5. «BCF» (Bit Clear F)58
4.2.6. «BSF» (Bit Set F)58
4.2.7. «BTFSC» (Bit Test F, Skip if Clear)59
4.2.8. «BTFSS» (Bit Test F, Skip if Set)59
4.2.9. «CALL» (CALL sous-programme)59
4.2.10. «CLRF» (CLeaR F)59
4.2.11. «CLRW» (CLeaR W)60
4.2.12. «CLRWDT» (CLeaR WatchDog)60
4.2.13. «COMF» (COMplement F)60
4.2.14. «DECF» (DECRement File)60
4.2.15. «DECFSZ» (DECrement F, Skip if Z)61
4.2.16. «GOTO» (aller à)61
4.2.17. «INCF» (INCrement File)61
4.2.18. «INCFSZ» (INCrement F, saut si Zero)62
4.2.19. «IORLW» (Inclusive OR Literal with W)62
4.2.20. «IORWF» (Inclusive OR W avec File)62
4.2.21. «MOVF» (MOVe File)63
4.2.22. «MOVLW» (MOVe Literal to W)63
4.2.23. «Movwf» (MOVe W to File)63
4.2.24. «NOP» (No Operation)63
4.2.25. «RETFIE» (RETurn From IntErrupt)63
4.2.26. «RETLW» (RETurn with Literal in W)64
4.2.27. «RETURN» (RETURN from subroutine)64
4.2.28. «RLF» (Rotate Left through Carry)65
4.2.29. «RRF» (Rotate Right through Carry)65
4.2.30. «SLEEP» (mise en sommeil)66
4.2.31. «SUBLW» (SUBtract W from Literal)66
4.2.32. «SUBWF» (SUBtract W from F)66
4.2.33. «SWAPF» (SWAP nibbles in F)67
4.2.34. «XORLW» (eXclusive OR Literal with W)67
4.2.35. «XORWF» (eXclusive OR W with F)67
Chapitre 5. Le microcontrôleur
69
5.1. Rôle d'un microcontrôleur69
5.2. Le microcontrôleur PIC 16F8470
5.3. Organisation de la mémoire71
5.3.1. Les registres de travail71
5.3.2. La mémoire de programme72
5.3.3. La mémoire EEPROM72
5.3.4. Fonctions réalisées par le microcontrôleur73
5.4. Description des connexions75
5.5. Le registre Option75
Chapitre 6. Le reset et les interruptions
77
6.1. Définition du Reset77
6.2. Initialisations au moment du Reset77
6.3. Les sources de Reset78
6.3.1. POR (Power On Reset)78
6.3.2. Master clear81
6.3.3. Master clear pendant le sommeil81
6.3.4. Reset du chien de garde pendant une opération normale81
6.3.5. Reset du chien de garde pendant une période de sommeil81
6.3.6. Sortie du sommeil par interruption81
6.4. Définition d'une interruption83
6.4.1. Origines d'une interruption83
6.4.2. Opérations effectuées lors d'une interruption83
6.4.3. Les interruptions : généralités84
6.4.4. Détermination de l'origine de la demande d'interruption84
6.4.5. Les masques d'interruption85
6.5. Résumé pour la mise en oeuvre86
6.6. Exemple de mise en oeuvre d'une interruption externe86
Chapitre 7. Les interfaces parallèles
89
7.1. Le port A89
7.2. Le port B91
7.2.1. Précautions d'utilisation du PORTB91
7.2.2. Les interruptions sur le port B94
7.3. Application : utilisation des ports95
Chapitre 8. La mesure du temps
97
8.1. Le compteur-temporisateur TMR097
8.2. Le choix de l'horloge97
8.3. Le pré-diviseur programmable98
8.4. Les interruptions99
8.5. Exemples d'utilisation du compteur99
8.5.1. Réalisation d'un compteur de pièces programmable99
8.5.2. Réalisation d'une attente avec interruption et TMR0101
Chapitre 9. La surveillance de fonctionnement
103
9.1. Généralités103
9.2. Mise en oeuvre103
9.3. Durée de la protection105
9.4. Précautions d'emploi105
9.4.1. CLRWDT dans un sous-programme d'interruption105
9.4.2. Prédiviseur du TMR0 et post-diviseur du chien de garde105
9.5. Exemple d'application : contrôle de vitesse d'un moteur106
Chapitre 10. Le mode sommeil
109
10.1. Généralités109
10.2. Mise en oeuvre109
10.2.1. Le réveil109
10.2.2. Le mode sommeil et les interruptions110
10.3. Exemples d'application110
10.3.1. Réalisation d'une temporisation110
10.3.2. Gestion d'un clavier111
Chapitre 11. Utilisation de l'EEPROM
115
11.1. Mise en oeuvre115
11.2. Lecture dans l'EEPROM116
11.3. Ecriture dans l'EEPROM117
11.4. Vérification de l'écriture118
11.5. L'interruption de fin d'écriture119
11.6. Application119
Chapitre 12. Le PIC 16F877
123
12.1. Les interfaces123
12.2. Les mémoires124
12.2.1. La mémoire de programme124
12.2.2. La mémoire RAM, ou mémoire de données125
12.2.3. La mémoire EEPROM126
12.2.4. La pile126
12.3. Les ports parallèles126
12.3.1. Le port A126
12.3.2. Le port B126
12.3.3. Le port C126
12.3.4. Le port D127
12.3.5. Le port E127
12.4. Le compteur temporisateur TMR0128
12.5. Le compteur temporisateur TMR1128
12.5.1. Mode temporisateur127
12.5.2. Mode compteur128
12.6. Le temporisateur TMR2129
12.7. USART129
12.7.1. Mode asynchrone129
12.7.2. Mode synchrone129
12.8. Le module convertisseur133
12.9. Modules Capture-Comparaison et modulation de largeur134
12.9.1. Mode capture134
12.9.2. Mode compare135
12.9.3. La modulation de largeur d'impulsion135
Chapitre 13. La liaison SPI du 16F877
139
13.1. Constitution139
13.2. Fonctionnement de l'interface140
13.3. Utilisation de l'intarface143
13.3.1. Contrôle de phase d'horloge et de polarité144
13.4. Erreurs durant un transfert145
13.5. Les interruptions146
13.6. Exemple d'utilisation : transfert entre deux PIC147
13.6.1. Programme du maître147
13.6.2. Programmz de l'esclave149
13.7. Interfaçage d'un convertisseur MAX187150
Chapitre 14. La liaison I2C du 16F877
155
14.1. Généralités155
14.1.1. Rappel155
14.1.2. La liaison I2C du PIC16F877155
14.2. Etudes des registres157
14.2.1. Le registre SSPCON157
14.2.2. Le registre SSPCON2158
14.2.3. Le registre SSPSTAT159
14.2.4. Le registre SSPBUF (13h)160
14.2.5. Le registre SSPSR160
14.2.6. Le registre SSPADD (93h)161
14.2.7. Les registres PIR1 (0Ch) et PIE1 (8Ch)161
14.2.8. Les registres PIR2 (0Dh) et PIE2 (8Dh)161
14.3. Le fonctionnement en esclave162
14.3.1. L'adressage sur 7 bits162
14.3.2. L'adressage sur 10 bits163
14.3.3. L'adresse d'appel en général163
14.3.4. Réception par l'esclave164
14.3.5. Transmission par l'esclave165
14.4. Le fonctionnement en maître164
14.4.1. Généralités165
14.4.2. L'horloge166
14.4.3. Transmission par le maître166
14.4.4. Mise en réception du maître166
14.5. Génération du bit de START168
14.6. Séquence d'acknowledge169
14.7. Séquence de STOP169
14.7.1. Définition169
14.7.2. Mise en service169
14.8. Application : liaison avec un PCF8574169
Chapitre 15. L'outil de développement MPLAB
175
15.1. Configuration de l'étude176
15.2. Mise en place du projet177
15.3. Création du fichier source178
15.4. Assemblage du programme179
15.5. Simulation du programme180
15.5.1. Définir les informations à surveiller180
15.5.2. La simulation181
15.6. Les points d'arrêts183
15.7. Mise au point dans une boucle183
15.8. Simuler avec un événement extérieur184
15.9. Modification des registres en cours de simulation184
Annexe 1.
187
Annexe 2.
190