PIC-16F84
12.16 Se mettre à l'échelle de temps de la PIC ..... Une PIC n'est rien d'autre qu'
un microcontrôleur, c'est à dire une unité de traitement de l'information de type ...
Part of the document
LA PROGRAMMATION DES PICS PAR BIGONOFF PREMIERE PARTIE - PIC16F84 - Révision 5
1. Introduction 6
2. Les systèmes de numérotation 7 2.1 Le système décimal 7
2.2 Le système binaire 7
2.3 Le système hexadécimal 8
2.4 Les opérations 9
2.5 Les nombres signés 10
2.6 Les opérations booléennes. 11
2.6.1 Le complément 11
2.6.2 La fonction « ET » ou « AND » 11
2.6.3 La fonction « OU » ou « OR » 12
2.6.4 La fonction « OU EXCLUSIF » ou « Exclusif OR » ou « XOR » 13 3. Composition et fonctionnement des PICs 14 3.1 Qu'est-ce qu'une PIC ? 14
3.2 Les différentes familles des PICs 15
3.3 Identification d'une PIC 15
3.4 Organisation de la 16F84 16
3.4.1 La mémoire programme 16
3.4.2 La mémoire eeprom 16
3.4.3 La mémoire Ram 17 4. Organisation des instructions 18 4.1 Généralités 18
4.2 Les types d'instructions 18
4.2.1 Les instructions « orientées octet » 18
4.2.2 Les instructions « orientées bits » 18
4.2.3 Les instructions générales 19
4.2.4 Les sauts et appels de sous-routines 19
4.3 Panoramique des instructions 19
4.4 Les indicateurs d'état 21
4.4.1 L'indicateur d'état « Z » 22
4.4.2 L'indicateur d'état « C » 22 5. Les débuts avec MPLAB 23 5.1 Préparation à l'utilisation 23
5.2 Création de notre premier projet 23 6. Organisation d'un fichier « .asm » 27 6.1 Les commentaires 27
6.2 Les directives 27
6.3 les fichiers « include » 27
6.4 La directive _CONFIG 28
6.5 Les assignations 28
6.6 Les définitions 29
6.7 Les macros 29
6.8 La zone des variables 30
6.9 Les étiquettes 30
6.10 La directive « ORG » 31
6.11 La directive « END » 31 7. Réalisation d'un programme 32 7.1 Création de notre premier programme 32
7.2 L'assemblage d'un programme 33 8. La simulation d'un programme 35 8.1 Lancement et paramétrage du simulateur 35
8.2 Explication des registres fondamentaux 37
8.2.1 Les registres « PCL » et « PCLATH » 38
8.2.2 Le registre « W » 39
8.2.3 Le registre « STATUS » 39
8.3 Lancement de la simulation 40 9. Le jeu d'instructions 44 9.1 L'instruction « GOTO » (aller à) 44
9.2 L'instruction « INCF » (INCrement File) 45
9.3 L'instruction « DECF » (DECRement File) 46
9.4 L'instruction « MOVLW » (MOVe Literal to W) 46
9.5 L'instruction « MOVF » (MOVe File) 46
9.6 L'instruction « Movwf » (MOVe W to File) 48
9.7 L'instruction « ADDLW » (ADD Literal and W) 48
9.8 L'instruction « ADDWF » (ADD W and F) 49
9.9 L'instruction « SUBLW » (SUBtract W from Literal) 49
9.10 L'instruction « SUBWF » (SUBtract W from F) 51
9.11 L'instruction « ANDLW » (AND Literal with W) 51
9.12 L'instruction « ANDWF » (AND W with F) 52
9.13 L'instruction « IORLW » (Inclusive OR Literal with W) 52
9.14 L'instruction « IORWF » (Inclusive OR W with File) 53
9.15 L'instruction « XORLW » (eXclusive OR Literal with W) 53
9.16 L'instruction « XORWF » (eXclusive OR W with F) 54
9.17 L'instruction « BSF » (Bit Set F) 54
9.18 L'instruction « BCF » (Bit Clear F) 55
9.19 L'instruction « RLF » ( Rotate Left through Carry) 55
9.20 L'instruction « RRF » ( Rotate Right through Carry) 56
9.21 L'instruction « BTFSC » (Bit Test F, Skip if Clear) 57
9.22 L'instruction « BTFSS » (Bit Test F, Skip if Set) 58
9.23 L'instruction « DECFSZ » (DECrement F, Skip if Z) 59
9.24 L'instruction « INCFSZ » (INCrement F, Skip if Zero) 60
9.25 L'instruction « SWAPF » (SWAP nibbles in F) 60
9.26 L'instruction « CALL » (CALL subroutine) 61
9.27 L'instruction « RETURN » (RETURN from subroutine) 61
9.28 L'instruction « RETLW » (RETurn with Literal in W) 64
9.29 L'instruction « RETFIE » (RETurn From IntErrupt) 65
9.30 L'instruction « CLRF » (CLeaR F) 65
9.31 L'instruction « CLRW » (CLeaR W) 65
9.32 L'instruction « CLRWDT » (CLeaR WatchDog) 66
9.33 L'instruction « COMF » (COMplement F) 66
9.34 L'instruction « SLEEP » (Mise en sommeil) 67
9. 35 L'instruction « NOP » (No Operation) 67
9.36 Les instructions obsolètes 67 10. Les modes d'adressage 68 10.1 L'adressage littéral ou immédiat 68
10.2 L'adressage direct 68
10.3 L'adressage indirect 68
10.3.1 Les registres FSR et INDF 69
10.4 Quelques exemples 70 11. Réalisation d'un programme embarqué 71 11.1 Le matériel nécessaire 71
11.2 Montage de la platine d'essais 71
11.3 Création du projet 72
11.4 Edition du fichier source 73
11.5 Choix de la configuration 73
11.6 Le registre OPTION 74
11.7 Edition du programme 76
11.8 Le registre PORTA 78
11.8.1 Fonctionnement particulier des PORTS 80
11.9 Le registre TRISA 80
11.10 Les registres PORTB et TRISB 81
11.11 Exemple d'application 82
11.12 La routine d'initialisation 82
11.13 Les résultats de la compilation 86
11.14 Le programme principal 86
11.15 La sous-routine de temporisation 87 12. Les interruptions 92 12.1 Qu'est-ce qu'une interruption ? 92
12.2 Mécanisme général d'une interruption 92
12.3 Mécanisme d'interruption sur les PICs 93
12.4 Les sources d'interruptions de la 16F84 94
12.5 Les dispositifs mis en ?uvre 95
12.6 Le registre INTCON (INTerrupt CONtrol) 96
12.7 Sauvegarde et restauration de l'environnement 98
12.7.1 Les registres à sauvegarder 98
12.7.2 La méthode de sauvegarde 99
12.7.3 Particulatité de l'instruction « RETFIE » 100
12.8 Utilisation d'une routine d'interruption 101
12.9 Analyse de la routine d'interruption 104
12.10 Adaptation de la routine d'interruption 106
12.11 L'initialisation 108
12.12 Construction du programme principal 109
12.13 Construction de la routine d'interruption 110
12.14 Passage au simulateur d'une routine d'interruption 111
12.15 Première correction : reset du flag 113
12.16 Se mettre à l'échelle de temps de la PIC 114
12.17 Le problème de l'anti-rebond 114
12.18 Finalisation du programme 115
12.19 Remarques importantes 119
12.20 Conclusions 119 13. Le Timer 0 120 13.1 Les différents modes de fonctionnement 120
13.2 Le registre tmr0 120
13.3 Les méthodes d'utilisation du timer0 120
13.3.1 Le mode de lecture simple 120
13.3.2 Le mode de scrutation du flag 121
13.3.3 Le mode d'interruption 121
13.3.4 Les méthodes combinées 122
13.4 Le prédiviseur 122
13.5 Application pratique du timer0 123
13.5.1 Préparations 123
13.5.2 L'initialisation 125
13.5.3 La routine d'interruption 126
13.6 Modification des registres dans le simulateur 127
13.7 Mise en place sur la platine d'essais 128
13.8 Première amélioration de la précision 128
13.9 Seconde amélioration de la précision 129
13.10 La bonne méthode - Adaptation de l'horloge 129
13.11 La méthode de luxe : La double horloge 130
13.12 Exemple d'utilisation de 2 interruptions 130
13.13 Conclusion 131 14. Les accès en mémoire « eeprom » 132 14.1 Taille et localisation de la mémoire « eeprom » 132
14.2 Préparation du programme 132
14.3 Initialisation de la zone eeprom 134
14.4 Le registre EEDATA 135
14.5 Le registre EEADR 135
14.6 Le registre EECON1 135
14.7 Le registre EECON2 136
14.8 Accès en lecture dans la mémoire « eeprom » 136
14.9 L'accès en écriture à la zone eeprom 137
14.10 Utilisation pratique de la mémoire « eeprom » 139
14.11 Sécurisation des accès en mémoire « eeprom » 142
14.12 Conclusion 142 15. Le watchdog 143 15.1 Le principe de fonctionnement 143
15.2 Le prédiviseur et le watchdog 143
15.3 Les rôles du watchdog 143
15.4 Utilisation correcte du watchdog 144
15.5 Ce qu'il ne faut pas faire 144
15.6 Mesure du temps réel du watchdog 144
15.7 Simulation du plantage d'un programme 146
15.7.1 Correction avec utilisation du watchdog 147
15.8 Choix de la valeur du prédiviseur 148
15.9 Temps typique, minimal, et maximum 148
15.10 Conclusion 148 16. Le mode Sleep 150 16.1 Principe de fonctionnement 150
16.2 La sortie du mode « sleep » 150
16.3 Réveil avec GIE hors service. 151
16.4 Réveil avec GIE en service 151
16.5 Mise en sommeil impossible 151
16.6 Utilisation du mode « sleep » 151
16.7 Cas typiques d'utilisation 152
16.8 Conclusion 152 17. Le reste du datasheet 153 17.1 La structure interne 153
17.2 La séquence de décodage 153
17.3 Organisation de la mémoire 153
17.4 Les registres spéciaux 153
17.5 L'électronique des ports 154
17.6 Le registre de configuration 154
17.7 Les différents types d'oscillateurs 154
17.8 Le reset 155
17.9 La mise sous tension 156
17.10 Caractéristiques électriques 157
17.11 Portabilité des programmes 157
17.12 Les mises à jour des composants 158
17.13 Conclusion 159 18. Astuces de programmation 160 18.1 Les comparaisons 160
18.2 Soustraire une valeur de w 160
18.3 Les multiplications 160
18.4 Multiplication par une constante 163
18.5 Adressage indirect pointant sur 2 zones différentes 164
18.6 Les tableaux en mémoire programme 165
18.7 Les variables locales 169
18.7.1 Détermination des variables locales 169
18.7.2 Construction sans variables locales 169
18.7.3 Construction avec variables locales 170
18.8 Conclusion 170 19. La norme ISO 7816 171 19.1 Spécificités utiles de la norme ISO 7816 171
19.1.1 Les commandes ISO 7816 171
19.1.2 Le protocole d'échange d'informations 172
19.2 Les liaisons série asynchrones 172
19.2.1 Le start-bit 173
19.2.2 Les bits de donnée 173
19.2.3 Le bit de parité 173
19.2.4 Le stop-bit 17