Introduction aux microcontrôleurs
Illustration par le PIC16F877
Le PIC16F877
Dr : A. ABBOU
IGA 2013
1ABBOU
Un microcontrôleur est un C.I qui rassemble les
éléments essentiels d'un ordinateur :
 Processeur
 Mémoires
 Unités pér...
Du -processeur au  -contrôleur
Pour réaliser un système (micro computer) minimum, il
faut ajouter au microprocesseur les...
Les microcontrôleurs améliorent l'intégration et le coût (lié
à la conception et à la réalisation) d'un système à base de...
Circuit imprimé peu complexe
Faible consommation
Coût réduit
Encombrement réduit
 Programmation nécessitant un matéri...
Applications
Informatique et télécommunication (souris,
modems…)
Contrôle de processus industriels (régulation,
pilotage...
Familles de microcontrôleurs
la famille Atmel AT91 , Atmel AVR ;
le C167 de Siemens;
la famille Hitachi H8;
l’Intel 80...
Les PICs de Microchip
La société Américaine Microchip Technologie a mis au
point dans les années 90 un microcontrôleur CMO...
Architecture
Architecture de Von Neumann :
Un seul Bus malgré la
séparation de l’espace
mémoire données et
mémoire program...
RISC & CISC
Architecture
• RISC – Reduced Instruction Set Computer
– Toutes les instructions ont la même taille
– Les mode...
RISC CISC Pascal
MOV CX,100
MOV DI,dst
MOV SI,src
REP MOVSB
MOV CX,100
MOV DI,dst
MOV SI,src
boucle:
MOV AL,[DI]
MOV [SI],...
Décomposition des tâches
Optimisation pour l’architecture RISC
Préparation de l’instruction suivante durant
l’exécution...
Architecture interne
 Mémoire flash : C'est une mémoire
réinscriptible qui conserve ses données
lorsque la PIC n'est pas ...
Les différentes familles des PICs
Base-line (Les instructions sont codées sur12 bits)
- PIC 10 - PIC 12
- Certains PIC12F...
Référence des MCU
15ABBOU
 Le numéro 16 signifie qu'il fait partie de la famille
"MID-RANGE". C'est la famille de PIC qui travaille
sur des mots de...
Caractéristiques générales de la famille 16F87x
différents circuit de la famille 16F87X
17ABBOU
Éléments constitutifs du PIC 16F877
18ABBOU
Structure du PIC 16F877
19ABBOU
Le cœur du PIC : le microprocesseur
20ABBOU
La mémoire
21ABBOU
La Pile et le Compteur Programme
22ABBOU
Les Ports d’Entrées/Sorties généraux : PORTA, PORTB,
PORTC, PORTD, PORTE
23ABBOU
Le Port Parallèle Esclave (PSP : Parallel Slave Port)
24ABBOU
Le circuit de génération d’horloge
25ABBOU
Le TIMER0
26ABBOU
Le TIMER1
27ABBOU
Le TIMER2
28ABBOU
Les modules CCP1 et CCP2
29ABBOU
Le convertisseur Analogique – Digital 10bits
30ABBOU
L’USART
31ABBOU
Le SSP, Synchronous Serial Port
32
Brochage du PIC 16F877
33
Organisation de la mémoire RAM
L’espace mémoire RAM adressable est de 512 positions
de 1 octet chacune :
96 positions son...
Organisation de la mémoire RAM
- Le plan mémoire des données et des registres internes est
découpé en 4 zones ou bank de 1...
Plan Mémoire des registres
36ABBOU
Organisation de la mémoire RAM
37ABBOU
Vous disposerez de 368 octets libres réparties de la
manière suivante:
- 80 octets en banque 0, adresses 0x20 à 0x6F
- 80 ...
Accés à la RAM par adressage direct
Accès à la RAM par Adressage direct
39ABBOU
Accés à la RAM par adressage indirect
Accès à la RAM par Adressage indirect
40ABBOU
La mémoire Programme ou mémoire flash
- Cette mémoire de 8 x 1024 mots de 14 bits sert à stocker le programme
- Elle est n...
Organisation mémoire programme
42
Organisation mémoire programme
-Le plan mémoire est linéaire les adresses vont de 0000h à
1FFFh (8k mots de 14 bits), par ...
Les mémoires permanentes
La mémoire EEPROM de données
- Le PIC 16F876/877 dispose de 256 octets de mémoire
EEPROM de donné...
Les instructions du 16F876/877
- Les instructions « orientées Registre»
- Les instructions « orientées bits »
- Les instru...
ABBOU 46
Décodage d’adresse des mémoires
Exercice A: Pour un microprocesseur disposant de 16 lignes d'adresses et 8 lignes...
Jeu d’instructions
Opération sur les registres
{W,F ? d} signifie que le résultat va soit dans W si d=0 ou w, soit dans F ...
Jeu d’instructions
Suite
48ABBOU
Jeu d’instructions
LEGENDE DES TABLEAUX D’INSTRUCTIONS
d
Détermine la destination :
d=0 Registre Travail
d=1 Registre Mémo...
Les paramètres des instructions agissant sur registre
Pour les instructions qui agissent sur registre, le paramètre F repr...
Les paramètres des instructions agissant sur bit
Pour les instructions agissant sur un bit, le paramètre F indique le
regi...
Les instructions MOVWF et MOVF
Ce sont les instructions les plus utilisées,
MOVWF permet de copier l’accumulateur W dans u...
Les instructions btfss et btfsc
Ces instructions permettent de tester un bit et de sauter ou non une
ligne de programme en...
Les instructions incfsz et decfsz
Ces instructions permette d’incrémenter ou de décrémenter un registre et
de sauter si le...
L’instruction goto
Permet de transférer l’exécution à une autre position du programme
repérée par une étiquette (label)
Ex...
L’instruction call
L’instruction call permet d’appeler une fonction. Une fonction est un sous
programme écrit à la suite d...
Les indicateurs d’état (drapeaux)
Les bits Z, DC et C situés dans le registre STATUS sont des indicateurs qui
permettent d...
Les particularités de programmation du 16F87x
La directive « _CONFIG »
-cette directive détermine le fonctionnement du PIC...
CP1/CP0 : bits 13/12 ; Déterminent quelle zone de la mémoire
programme sera protégée contre la lecture externe (via ICSP) ...
DEBUG : bit 11 : Debuggage sur circuit. Permet de dédicacer RB7 et RB6 à la
communication avec un debugger.
1 : RB6 et RB7...
CPD : bit 8 : Protection en lecture de la mémoire EEPROM de données.
1 : mémoire EEPROM non protégée (_CPD_OFF)
0 : mémoir...
WDTE : bit 2 : Validation du Watchdog timer
1 : WDT en service (_WDT_ON)
0 : WDT hors service (_WDT_OFF)
FOSC1/FOSC0 : bit...
LIST : permet de définir un certain nombre de paramètres comme le
processeur utilisé (p), la base par défaut pour les nomb...
Les particularités de programmation du 16F87x
ORG : définit la position dans la mémoire programme à partir de laquelle ser...
#DEFINE : fonctionne un peu comme la directive EQU tout en étant un peu
plus générale, car elle permet d’affecter toute un...
Exercice 5)
Ecrire un programme qui incrémente indéfiniment la position mémoire (RAM) 60h.
Exercice 6) : Accès à la RAM pa...
Boucles de temporisation
réalisation des temporisations à l'aide de simples boucles, sans recours aux 3
TIMER du PIC:
A-Te...
B-Temporisation avec 2 boucles imbriquées
La boucle intérieure (N1) se fait toujours 256 fois. La boucle extérieure se fai...
Exercice 5) : Accès à la RAM par l'adressage direct
Donner le programme qui copie :
35 dans la position 20h, 'A' dans la p...
outils de développement
L’outil de développement principal est l’environnement de
développement intégré MPLAB fournit grat...
outils de développement
L’environnement de développement MPLAB
MPLAB-IDE peut être téléchargé sur le site Web
http://www.m...
Les ports parallèles d'entrée sortie
Chaque port est associé à un registre de direction TRISx
- un bit à 1 --> I --> Inpu...
C’est un port de 6bits (RA0 à RA5). RA6 et RA7 ne sont pas
accessibles.
La ligne RA4 est partagée avec l'entrée TOCK1 du...
Les registres utilisés par le port A
En sortie, RA4 est une E/S à drain ouvert, pour l'utiliser comme
sortie logique, il f...
Le port B
Le port B désigné par PORTB est un port bidirectionnel
de 8 bits (RB0 à RB7). Toutes les broches sont compatible...
N'existe que pour les boîtiers 28 et 40 broches,
Partagé avec les liaisons séries, les Timers 1,2 et les modules CCP,
p...
Le port D
Le port D désigné par PORTD est un port bidirectionnel de 8 bits (RD0 à
RD7). Toutes les broches sont compatible...
Le port E
PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 sont configurables
en entrée ou en sortie à l’aide des bi...
Exercice 9 : Clignoter une LED
Donner le programme qui fait clignoter une LED branchée
sur RA0 avec une temporisation vois...
Exercice 11 : BCD 7 segments
– On branche un bouton poussoir sur la broche RA4 de
sorte que celle-ci passe à 0 quand on ap...
- Le timer 0 - TMR0 - 8 bits
- Le timer 1 - TMR1 - 16 bits
- Le timer 2 - TMR2 - 8 bits
TMR0 et TMR1 sont des timers comp...
Le Timer 0 - TMR0
TMR0 est un compteur 8 bits
On peut lire ou écrire le registre TMR0
Il génère une interruption au pas...
Schéma fonctionnel du Timer 0
0
1
0
1
83ABBOU
Registres utilisés par le timer TMR0
84ABBOU
Le Timer 0
• C’est un compteur 8 bits ayant les caractéristiques
suivantes :
• Il est incrémenté en permanence soit par l’...
* Si on décide de travailler en mode compteur, on doit préciser lors de
quelle transition de niveau le comptage est effect...
Le Timer 0: Le mode d’interruption
Supposons que nous travaillons avec un quartz de 4MHz. Nous avons
donc dans ce cas (4 0...
Le Timer 0: Le prédiviseur
• Quelque soit l'horloge choisie, on peut la passer dans un diviseur de
fréquence programmable ...
Le Timer 0: Le prédiviseur
Le prédiviseur est un diviseur d’événements situé
AVANT l’entrée de comptage du timer0.
89
PS2 ...
Le Timer 0:Programme mikroC
void main ()
{
INTCON.GIE = 1 ;
OPTION_Reg = ? ;
INTCON.T0IE = 1;
…
while (1)
{
…
}
}
void int...
Exercice : Clignoter LED / TMR0
Clignoter une LED branchée sur RB0, delay voisin
de 0.5s à l'aide de TMR0
a) Par scrutatio...
• Une interruption est un signal demandant au processeur de
suspendre temporairement l’exécution du programme courant afin...
• Une interruption provoque l’arrêt du programme principal pour
aller exécuter une procédure d'interruption.
• A la fin de...
INTERRUPTIONS PRIMAIRES
94ABBOU
...
Quelques sources d’interruption
Toutes les interruptions peuvent être
validées/interdites par le bit INTCON.GIE
Toutes les interruptions périphériques peu...
Elles sont gérées par les registres :
INTERRUPTIONS
96ABBOU
Le registre OPTION permet de choisir le type de front
pour l’interruption INT/RB0
- Le registre INTCON
INTERRUPTIONS
97ABB...
Déroulement d'une interruption
Lorsque l'événement déclencheur d'une interruption
intervient, alors :
- son drapeau est po...
 l'adresse contenue dans le PC (Program Counter)
est sauvegardée dans la pile, puis remplacée par la
valeur 0004
 Le bit...
Déroulement d'une interruption
100ABBOU
Deux remarques importantes sont à faire :
Le drapeau reste à l’état haut même après le traitement
de l’interruption. Par c...
Fonction d’interruption
102
• Comme le PIC n’a qu’un seul programme de traitement
d’interruption, il faut absolument comme...
Exercice (int.asm)
Programme qui utilise l’interruption INT comme suit :
Chaque fois que l’entrée RB0 passe de 1 à 0, la L...
CONVERTISSEUR ANALOGIQUE NUMERIQUE
Le convertisseur analogique numérique est à approximations
successives.
Il possède une ...
Organisation interne
105ABBOU
La conversion se passe en 2 temps :
- 1er temps le signal à convertir est appliqué sur l’entrée
à convertir, ce signal doi...
La valeur résultante N de la conversion
ADRSH:ADRESL est égale à :
N = ((VIN - VREF-) / (VREF+ - VREF-)) * 1023)
Si VREF+ ...
Mais avant de réaliser une conversion il faut définir la
configuration du convertisseur :
- Le nombre d’entrées analogique...
Le registre ADCON1
Il permet de choisir une configuration parmi les 16 proposées
Remarque : La configuration de ce registr...
CONVERTISSEUR ANALOGIQUE NUMERIQUE
110ABBOU
De plus le bit ADFM permet de choisir entre deux types de
justification pour le résultat.
Si ADFM=1 alors le résultat sera...
Le registre ADCON0
Ce registre permet de définir l’horloge de conversion (bit
ADCS1 et ADCS0), le canal à convertir (CHS2,...
Le registre ADCON0
113ABBOU
Prochain SlideShare
Chargement dans…5
×

Cours pics16 f877

12 147 vues

Publié le

0 commentaire
7 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
12 147
Sur SlideShare
0
Issues des intégrations
0
Intégrations
8
Actions
Partages
0
Téléchargements
841
Commentaires
0
J’aime
7
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Cours pics16 f877

  1. 1. Introduction aux microcontrôleurs Illustration par le PIC16F877 Le PIC16F877 Dr : A. ABBOU IGA 2013 1ABBOU
  2. 2. Un microcontrôleur est un C.I qui rassemble les éléments essentiels d'un ordinateur :  Processeur  Mémoires  Unités périphériques et interfaces d‘E/S DEFINITION 2ABBOU
  3. 3. Du -processeur au  -contrôleur Pour réaliser un système (micro computer) minimum, il faut ajouter au microprocesseur les éléments suivants : Mémoire de programme ROM. •Mémoire de données RAM. •Circuits d’Entrées/Sorties PIA, ACIA, TIMER. 3ABBOU
  4. 4. Les microcontrôleurs améliorent l'intégration et le coût (lié à la conception et à la réalisation) d'un système à base de microprocesseur Microcontrôleur = Microprocesseur + Ram + Rom + E/S  Un microcontrôleur est donc un composant autonome, Les microcontrôleurs peuvent fonctionner sans l’addition de circuits externes Du -processeur au  -contrôleur 4ABBOU
  5. 5. Circuit imprimé peu complexe Faible consommation Coût réduit Encombrement réduit  Programmation nécessitant un matériel adapté une vitesse de fonctionnement et taille mémoire plus faible par rapport aux microprocesseurs Caractéristiques d’un -Contrôleur 5ABBOU
  6. 6. Applications Informatique et télécommunication (souris, modems…) Contrôle de processus industriels (régulation, pilotage) Vidéo (Appareil photos et caméra numériques…), Multimédia (téléviseur, carte audio, carte vidéo,MP3,…)  Systèmes embarqués, comme les contrôleurs des moteurs automobiles (ABS, injection,GPS, airbag), les télécommandes, jouets, la téléphonie mobile,… 6ABBOU
  7. 7. Familles de microcontrôleurs la famille Atmel AT91 , Atmel AVR ; le C167 de Siemens; la famille Hitachi H8; l’Intel 8085 , Intel 8051 la famille Motorolla 68HC11, 68HC08 , 68HC12 ; la famille des PIC de Microchip ; la famille des ST6, ST7, ST10, STR7, STR9 de STMicroelectronics ; la famille ADuC d'Analog Devices ; la famille MSP430 de Texas Instruments ; la famille LPC21xx ARM7-TDMI de Philips ; 7ABBOU
  8. 8. Les PICs de Microchip La société Américaine Microchip Technologie a mis au point dans les années 90 un microcontrôleur CMOS : le PIC (Peripheral Interface Controller). Ses caractéristiques principales sont : - Architecture RISC : Reduced Instruction Set Computer Jeu d’instruction réduit Instruction et opérande codés sur un seul mot Toutes les instructions (hors saut) sur un cycle machine -Architecture Harvard : Le programme et les données sont stockées dans des mémoires physiquement séparées. 8ABBOU
  9. 9. Architecture Architecture de Von Neumann : Un seul Bus malgré la séparation de l’espace mémoire données et mémoire programme. Occupation mémoire d’une instruction variable. Architecture Harvard : Un bus pour chaque Mémoire (Données et programme) Occupation mémoire fixe pour toutes les instructions 9ABBOU
  10. 10. RISC & CISC Architecture • RISC – Reduced Instruction Set Computer – Toutes les instructions ont la même taille – Les modes d'adressage sont simples (immédiat, registre) - Jeu d’Instruction réduit CISC – Complex Instruction Set Computer – Instructions de taille et de temps d'exécution variable – Modes d'adressage complexes – Il faut plusieurs instructions CISC pour 1 instruction RISC - Jeu d’instruction étendu 10ABBOU
  11. 11. RISC CISC Pascal MOV CX,100 MOV DI,dst MOV SI,src REP MOVSB MOV CX,100 MOV DI,dst MOV SI,src boucle: MOV AL,[DI] MOV [SI],AL INC SI INC DI DEC CX JNZ boucle Var i : integer; src, dst : array[1..100] of byte; for i:=1 to 100 do dst[i]=src[i]; Architecture Exemple: on déplace 100 octets de l'adresse mémoire src vers l'adresse mémoire dst. A gauche on utilise une macro-instruction (RISC) REP MOVSB équivalent à la partie figurée en vert à droite. RISC & CISC 11ABBOU
  12. 12. Décomposition des tâches Optimisation pour l’architecture RISC Préparation de l’instruction suivante durant l’exécution de celle présente Structure en Pipe Line movlw 0xFF movwf Portb call sub1 movf Portc,w Séquencement 12ABBOU
  13. 13. Architecture interne  Mémoire flash : C'est une mémoire réinscriptible qui conserve ses données lorsque la PIC n'est pas alimentée. Elle est utilisée pour stocker le programme.  Mémoire RAM : C'est une mémoire volatile. Les variables utilisées au cours du programme sont stockées à cet endroit.  Unité de Calcul : C'est là où se déroulent toutes les opérations à une vitesse définie par la fréquence d'horloge.  Registre temporaire W : C'est ici qu'est stockée la valeur nécessaire pour une opération de l'unité de calcul.  Ports E/S ( Entrées/Sorties ) : Ce sont les unités qui font le lien entre ce qui se passe à l'intérieur du PIC et l'extérieur.  Modules annexes : Toutes les fonctions annexes (timers, comparateurs, convertisseurs analogiques/numériques ...) Microcontrôleurs 13ABBOU
  14. 14. Les différentes familles des PICs Base-line (Les instructions sont codées sur12 bits) - PIC 10 - PIC 12 - Certains PIC12F & PIC16F Mid-range (Les instructions sont codées sur 14 bits) - La plupart des PIC 16 - Certains PIC12F High-end (Les instructions sont codées sur 16 bits) - PIC 17 - PIC 18 14ABBOU
  15. 15. Référence des MCU 15ABBOU
  16. 16.  Le numéro 16 signifie qu'il fait partie de la famille "MID-RANGE". C'est la famille de PIC qui travaille sur des mots de 14 bits.  La lettre F indique que la mémoire programme de cette PIC est de type "Flash".  Les derniers chiffres permettent d'identifier précisément la PIC, ici c'est une PIC de type 877.  La référence 16F877 peut avoir un suffixe du type "-XX" dans lequel XX représente la fréquence d'horloge maximale que la PIC peut recevoir. PIC 16F877 Référence des MCU 16ABBOU
  17. 17. Caractéristiques générales de la famille 16F87x différents circuit de la famille 16F87X 17ABBOU
  18. 18. Éléments constitutifs du PIC 16F877 18ABBOU
  19. 19. Structure du PIC 16F877 19ABBOU
  20. 20. Le cœur du PIC : le microprocesseur 20ABBOU
  21. 21. La mémoire 21ABBOU
  22. 22. La Pile et le Compteur Programme 22ABBOU
  23. 23. Les Ports d’Entrées/Sorties généraux : PORTA, PORTB, PORTC, PORTD, PORTE 23ABBOU
  24. 24. Le Port Parallèle Esclave (PSP : Parallel Slave Port) 24ABBOU
  25. 25. Le circuit de génération d’horloge 25ABBOU
  26. 26. Le TIMER0 26ABBOU
  27. 27. Le TIMER1 27ABBOU
  28. 28. Le TIMER2 28ABBOU
  29. 29. Les modules CCP1 et CCP2 29ABBOU
  30. 30. Le convertisseur Analogique – Digital 10bits 30ABBOU
  31. 31. L’USART 31ABBOU
  32. 32. Le SSP, Synchronous Serial Port 32
  33. 33. Brochage du PIC 16F877 33
  34. 34. Organisation de la mémoire RAM L’espace mémoire RAM adressable est de 512 positions de 1 octet chacune : 96 positions sont réservées au SFR (Special Function Registers) qui sont les registres de configuration du PIC. Les 416 positions restantes constituent les GPR (General Propose Registers) ou RAM utilisateur. Sur le 16F877, 3 blocs de 16 octets chacun ne sont pas implantés physiquement d’où une capacité de RAM utilisateur de 368 GPR 34ABBOU
  35. 35. Organisation de la mémoire RAM - Le plan mémoire des données et des registres internes est découpé en 4 zones ou bank de 128 octets - pour accéder à une zone il faut positionner les bits RP0 (bit 5) et RP1 (bit 6) du registre STATUS. RP1 : RP0 Zone Sélectionnée(Bank) 00 De 00h à 7Fh : BANK 0 01 De 80h à FFh : BANK 1 10 De 100h à 17Fh : BANK 2 11 De 180h à 1FFh : BANK 3 35ABBOU
  36. 36. Plan Mémoire des registres 36ABBOU
  37. 37. Organisation de la mémoire RAM 37ABBOU
  38. 38. Vous disposerez de 368 octets libres réparties de la manière suivante: - 80 octets en banque 0, adresses 0x20 à 0x6F - 80 octets en banque 1, adresses 0xA0 à 0XEF - 96 octets en banque 2, adresses 0x110 à 0x16F - 96 octets en banque 3, adresses 0x190 à 0x1EF -16 octets communs aux 4 banques, soit 0x70 à 0x7F = 0xF0 à 0xFF = 0x170 à 0x17F =0x1F0 à 0x1FF. Organisation de la mémoire RAM 38ABBOU
  39. 39. Accés à la RAM par adressage direct Accès à la RAM par Adressage direct 39ABBOU
  40. 40. Accés à la RAM par adressage indirect Accès à la RAM par Adressage indirect 40ABBOU
  41. 41. La mémoire Programme ou mémoire flash - Cette mémoire de 8 x 1024 mots de 14 bits sert à stocker le programme - Elle est non volatile (flash) et reprogrammable à souhait - Chaque position de 14 bits contient une instruction. - Le programme exécutable par le PIC est implanté dans la mémoire flash à l'aide d'un programmateur (hard+soft ) 41ABBOU
  42. 42. Organisation mémoire programme 42
  43. 43. Organisation mémoire programme -Le plan mémoire est linéaire les adresses vont de 0000h à 1FFFh (8k mots de 14 bits), par page de 2K mots . -Le vecteur de reset est figé en 0000h. -Les PICs n’ont qu’un seul vecteur d’interruption en 0004h. -La pile utilisée par les sous programmes n’est pas implantée en mémoire de donnée comme avec les microcontrôleurs classiques, mais dans la mémoire programme. -on ne peut pas imbriquer plus de 8 sous programmes (Ce qui est déjà beaucoup ! !). 43ABBOU
  44. 44. Les mémoires permanentes La mémoire EEPROM de données - Le PIC 16F876/877 dispose de 256 octets de mémoire EEPROM de donnée. - Son implantation physique commence à la position d’adresse absolue 2100h. - on utilise l’adressage relatif par rapport à la première position. - La première position aura l’adresse 0, 44ABBOU
  45. 45. Les instructions du 16F876/877 - Les instructions « orientées Registre» - Les instructions « orientées bits » - Les instructions opérant sur une constante - Les instructions de saut et appel de procédures Exercice 1) Dans quel bank se trouvent les cases mémoire d'adresse : 1A4h, B5h, 130h, 58h, 100, 200, 250, 300, 400 Exercice 2) Combien de cases mémoires libres (GPR) y a-t-il dans la zone mémoire qui commence à la position A0h et se termine à EAh. Exercice 3) Quelle est l'adresse de la dernière position d'une zone mémoire de 40 cases qui commence à la position 190h. Exercice 4) Combien de cases mémoires libres (GPR) y a-t-il dans le bank1. Même question pour le bank2. 45ABBOU
  46. 46. ABBOU 46 Décodage d’adresse des mémoires Exercice A: Pour un microprocesseur disposant de 16 lignes d'adresses et 8 lignes de données, établir le décodage permettant de situer 8 Ko de données aux adresses hautes de la mémoire. On dispose pour cela de boitiers de 4 Ko de mémoire. Rechercher l'adresse des boitiers mémoire, faire le mapping mémoire puis le schéma électrique. Exercice B: on désire réaliser le décodage d’adresse par EPROM d’un circuit mémoire M de 8Ko. En fait, pour réaliser M, on dispose uniquement de 4 boitiers mémoire de capacité 2Ko chacun implantés suivant le tableau suivant: Boitiers Adresse d’implantation Boitier 1 1000h - 17FFh Boitier 2 1800h - 1FFFh Boitier 3 C000h - C7FFh Boitier 4 CA00h - D0FFh a- Donner les avantages de décodage d’adresse par EPROM b- Réaliser le décodage d’adresse
  47. 47. Jeu d’instructions Opération sur les registres {W,F ? d} signifie que le résultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f 47ABBOU
  48. 48. Jeu d’instructions Suite 48ABBOU
  49. 49. Jeu d’instructions LEGENDE DES TABLEAUX D’INSTRUCTIONS d Détermine la destination : d=0 Registre Travail d=1 Registre Mémoire SFR ou RAM. F Adresse SFR ou RAM en hexa. fff ffff Adresse SFR ou RAM en binaire. K Valeur immédiate sur 8bits ou Adresse de destination sur 11 bits. bbb Valeur binaire, elle détermine le bit à modifier ou à tester {W,F ? d} signifie que le résultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f 49ABBOU
  50. 50. Les paramètres des instructions agissant sur registre Pour les instructions qui agissent sur registre, le paramètre F représente l’adresse du registre considéré. Le paramètre d (destination) joue un rôle important, si on prend d = 0 ou w, le résultat de l’opération sera placé dans l’accumulateur W, si on prend d = 1 ou f, le résultat de l’opération sera placé dans le registre précisé par F. Exemple: ADDWF 70h,1 ou ADDWF 70h,f Signifie : additionner le contenu de W avec le contenu de la case mémoire d’adresse 70h et placer le résultat dans la case mémoire 70h Exemple: XORWF 35h,0 ou XORWF 35h,w Signifie : faire un ou exclusif entre W et le contenu de la case mémoire d’adresse 35h et placer le résultat dans l’accumulateur W 50ABBOU
  51. 51. Les paramètres des instructions agissant sur bit Pour les instructions agissant sur un bit, le paramètre F indique le registre qui contient le bit à modifier et le paramètre b indique le numéro du bit à modifier; on compte à partir de zéro en commençant à droite Exemples: BSF STATUS,2 ; signifie : placer à 1 le bit 2 (3ème bit à partir de la droite) du registre STATUS BCF 45h,6 ; signifie : placer à 0 le bit 6 (7ème bit à partir de la droite) du registre de la case mémoire d’adresse 45h 51ABBOU
  52. 52. Les instructions MOVWF et MOVF Ce sont les instructions les plus utilisées, MOVWF permet de copier l’accumulateur W dans un registre (SFR ou GPR): Exemples: MOVWF STATUS ; signifie : Copier le contenu de W dans le registre STATUS MOVWF 55h ; signifie : Copier le contenu de W dans la case mémoire d’adresse 55h MOVF permet de copier le contenu d’un registre (SFR ou GPR) dans l’accumulateur W, le paramètre d doit être = 0 Exemples: MOVF STATUS,0 ; Copier le contenu du registre STATUS dans l’accumulateur W MOVF 35h,0 ; Copier le contenu de la case mémoire d’adresse 35h dans l’accumulateur W MOVF STATUS,1 ; Copier le contenu du registre STATUS dans lui même 52ABBOU
  53. 53. Les instructions btfss et btfsc Ces instructions permettent de tester un bit et de sauter ou non une ligne de programme en fonction de la valeur du bit, Exemples: btfsc F,b : bit test skip if clear : teste le bit b du registre F et saute l’instruction suivante si le bit testé est nul btfss F,b : bit test skip if set : teste le bit b du registre F et saute l’instruction suivante si le bit testé est égal à 1 53ABBOU
  54. 54. Les instructions incfsz et decfsz Ces instructions permette d’incrémenter ou de décrémenter un registre et de sauter si le résultat est nul Exemples: Incfsz F,1 : increment skip if Z : incrémente le registre F et sauter une ligne si le résultat = 0. Le paramètre 1 indique que le résultat de l’incrémentation doit aller dans F. deccfsz F,1 : decrement skip if Z : décrémente le registre F et sauter une ligne si le résultat = 0. Le paramètre 1 indique que le résultat de la décrémentation doit aller dans F. 54ABBOU
  55. 55. L’instruction goto Permet de transférer l’exécution à une autre position du programme repérée par une étiquette (label) Exemple: 55ABBOU
  56. 56. L’instruction call L’instruction call permet d’appeler une fonction. Une fonction est un sous programme écrit à la suite du programme principal. Sa première ligne doit comporter une étiquette et elle doit se terminer par return. Exemple: Déduire La différence entre call et goto? 56 ABBOU
  57. 57. Les indicateurs d’état (drapeaux) Les bits Z, DC et C situés dans le registre STATUS sont des indicateurs qui permettent de savoir comment une instruction s’est terminée. Toutes les instructions n’agissent pas sur les indicateurs, voir liste des instructions ci- dessous. Z : passe à 1 quand le résultat d’une instruction est nul C : passe à 1 quand l’opération a généré une retenue DC : passe à 1 quand le 4ème bits génère une retenue Ces bits peuvent être utilisé très astucieusement par les instructions btfsc et btfss qui permettent de tester un bit et de réaliser un saut conditionnel: 57
  58. 58. Les particularités de programmation du 16F87x La directive « _CONFIG » -cette directive détermine le fonctionnement du PIC. -La valeur est inscrite au moment de la programmation dans un registre spécial, situé en mémoire programme à l’adresse 0x2007 -ne peut plus être modifié en cours d’exécution du programme. - Ce registre de 14 bits (fusibles ou switch) de configuration est organisé comme suit : 58ABBOU
  59. 59. CP1/CP0 : bits 13/12 ; Déterminent quelle zone de la mémoire programme sera protégée contre la lecture externe (via ICSP) ou l'écriture par programme conformément à l'état du bit 9 (WRT). On peut choisir de protéger la totalité de la mémoire ou seulement une partie. Les différentes zones pouvant être protégées sont les suivantes : •1 1 : Aucune protection (_CP_OFF) •1 0 : Protection de la zone 0x1F00 à 0x1FFF (_CP_UPPER_256) •0 1 : Protection de la zone 0x1000 à 0x1FFF (_CP_HALF) •0 0 : Protection de l’intégralité de la mémoire (_CP_ALL) Les particularités de programmation du 16F87x 59ABBOU
  60. 60. DEBUG : bit 11 : Debuggage sur circuit. Permet de dédicacer RB7 et RB6 à la communication avec un debugger. 1 : RB6 et RB7 sont des I/O ordinaires (_DEBUG_OFF) 0 : RB6 et RB7 sont utilisés pour le debuggage sur circuit (_DEBUG_ON) WRT : bit 9 : Autorisation d’écriture en flash 1 : Le programme peut écrire dans les zones non protégées par les bits CP1/CP0 (_WRT_ENABLE_ON) 0 : Le programme ne peut pas écrire en mémoire flash (_WRT_ENABLE_OFF) LVP : bit 7 : Utilisation de la pin RB3/PGM comme broche de progra 5V 1 : La pin RB3 permet la program du circuit sous tension de 5V (_LVP_ON) 0 : La pin RB3 est utilisée comme I/O standard (_LVP_OFF) Les particularités de programmation du 16F87x 60ABBOU
  61. 61. CPD : bit 8 : Protection en lecture de la mémoire EEPROM de données. 1 : mémoire EEPROM non protégée (_CPD_OFF) 0 : mémoire EEPROM protégée contre la lecture externe via ICSP (_CPD_ON) BODEN : bit 6 : provoque le reset du PIC en cas de chute de tension (surveillance de la tension d’alimentation) 1 : En service (_BODEN_ON) 0 : hors service (_BODEN_OFF) PWRTE : bit 3 : Délai de démarrage à la mise en service. Attention, est automatiquement mis en service si le bit BODEN est positionné. 1 : délai hors service (sauf si BODEN = 1) (_PWRTE_OFF) 0 : délai en service (_PWRTE_ON) Les particularités de programmation du 16F87x 61ABBOU
  62. 62. WDTE : bit 2 : Validation du Watchdog timer 1 : WDT en service (_WDT_ON) 0 : WDT hors service (_WDT_OFF) FOSC1/FOSC0 : bits 1/0 : sélection du type d’oscillateur 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 d’utilisation : __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 Les particularités de programmation du 16F87x 62ABBOU
  63. 63. LIST : permet de définir un certain nombre de paramètres comme le processeur utilisé (p), la base par défaut pour les nombres (r) ainsi que d'autres paramètres. Exemple : LIST p=16F876, r=dec avec r=dec, les nombres sans spécification particulière seront considérés par l'assembleur comme des nombre décimaux, INCLUDE : permet d'insérer un fichier source. Par exemple le fichier p16f876.inc contient la définition d'un certain nombre de constante comme les noms des registres ainsi que les noms de certains bits; Exemple: INCLUDE "p16f876.inc" EQU : permet de définir une constante ou une variable : Exemple : XX EQU 0x20 Les particularités de programmation du 16F87x 63ABBOU
  64. 64. Les particularités de programmation du 16F87x ORG : définit la position dans la mémoire programme à partir de laquelle seront inscrites les instructions suivantes. Exemple : 64ABBOU
  65. 65. #DEFINE : fonctionne un peu comme la directive EQU tout en étant un peu plus générale, car elle permet d’affecter toute une chaîne à une abréviation Exemples: #DEFINE XX 0x20 ; dans ce cas c’est équivalent à XX EQU 0x20 #DEFINE LED PORTB,3 ; ici chaque fois que le compilateur rencontrera le mot LED, il le remplacera par PORTB,3 BCF LED ; éteindre la LED branchée sur la broche 3 de PORTB On peu ainsi affecter une abréviation à toute une instruction #DEFINE eteindre bcf PORTC,5 ;affecte l’abréviation eteindre à l’instruction bcf PORTC,5 #DEFINE allumer bsf PORTC,5 ;affecte l’abréviation allumer à l’instruction bsf PORTC,5 Les particularités de programmation du 16F87x Allumer ; allume la LED branchée sur la broche 5 de PORTC Eteindre ; éteindre la LED branchée sur la broche 5 de PORTC 65ABBOU
  66. 66. Exercice 5) Ecrire un programme qui incrémente indéfiniment la position mémoire (RAM) 60h. Exercice 6) : Accès à la RAM par l'adressage direct Donner le programme qui copie : 35 dans la position 20h, 'A' dans la position A0h b’11101’ dans la position 110h, 35h dans la position 190h Exercice 7) : Soustraction Donner le programme qui : -soustrait la constante 33 de l'accumulateur W (W-33) -Soustrait la constante 40h de la case mémoire d'adresse 70h ([70h]-40h [70h]) -qui soustrait le contenu de la case mémoire 70h de l'accumulateur W avec le résultat dans W ( W – [70h]  W ) - qui soustrait le contenu de la case mémoire 71h de l'accumulateur W avec le résultat dans la case mémoire ( W – [71h]  [71h] ) Exercice 8) : Accès à la RAM par l'adressage indirect Donner le programme qui copie l'alphabet majuscule dans la RAM à partir de la position 190h Exercice 9) : (comp1.asm) Comparer les contenus des cases mémoire 6Fh et EFh, s’il son égaux mettre à zéro tous les bits de la case 16Fh sinon mettre à 1 tous les bits de la case 1EFh 66ABBOU Exercices
  67. 67. Boucles de temporisation réalisation des temporisations à l'aide de simples boucles, sans recours aux 3 TIMER du PIC: A-Temporisation avec une boucle movlw 4 movwf 70h ici decfsz 70h,f goto ici - Les instructions movlw et movwf prennent 1 cycle chacune - L'instruction decfsz prend un cycle si elle ne saute pas et 2 cycles quand elle saute - L'instruction goto prend 2 cycles - chaque passage dans la boucle prend (1+2) cycle sauf le dernier qui prend 2 cycle Avec un quartz = fosc = 4 Mhz, 1 cycle = fosc/4 = 1 μs, ce qui donne une temporisation max de 769 μs 67ABBOU
  68. 68. B-Temporisation avec 2 boucles imbriquées La boucle intérieure (N1) se fait toujours 256 fois. La boucle extérieure se fait N2 fois. C’est N2 qui constituera le paramètre de la fonction, Il faut le placer dans W avant de l’appeler. tempo2 : ; il faut définir W dans le programme principal movwf AN2 t2 : decfsz AN1,f goto t2 decfsz AN2,f goto t2 return Boucles de temporisation 68ABBOU
  69. 69. Exercice 5) : Accès à la RAM par l'adressage direct Donner le programme qui copie : 35 dans la position 20h, 'A' dans la position A0h b’1010’ dans la position 110h, 35h dans la position 190h Exercice 6) : Soustraction Donner le programme qui : -soustrait la constante 33 de l'accumulateur W (W-33) -Soustrait la constante 40h de la case mémoire d'adresse 70h ([70h]-40h [70h]) -qui soustrait le contenu de la case mémoire 70h de l'accumulateur W avec le résultat dans W ( W – [70h]  W ) - qui soustrait le contenu de la case mémoire 71h de l'accumulateur W avec le résultat dans la case mémoire ( W – [71h]  [71h] ) Exercice 7) : Accès à la RAM par l'adressage indirect Donner le programme qui copie l'alphabet majuscule dans la RAM à partir de la position 190h Exercice 8) : (comp1.asm) Comparer les contenus des cases mémoire 6Fh et EFh, s’il son égaux mettre à zéro tous les bits de la case 16Fh sinon mettre à 1 tous les bits de la case 1EFh Exercices 69ABBOU
  70. 70. outils de développement L’outil de développement principal est l’environnement de développement intégré MPLAB fournit gratuitement par Microchip Procédure de travail: Les étapes nécessaires permettant de voir un programme s'exécuter sur un PIC sont : Ecrire un programme en langage assembleur dans un fichier texte et le sauvegarder avec l'extension .asm Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le résultat est un fichier exécutable avec l'extension .hex contenant une suite d'instruction compréhensible par le pic. Transplanter le fichier .hex dans la mémoire programme du PIC (mémoire flash) à l'aide d'un programmateur adéquat. On peut utiliser les programmateurs de Microchip ou tout autre programmateur acheté . Mettre le PIC dans son montage final, mettre sous tension. Microchip propose gratuitement l'outil de développement MPLAB qui regroupe l'éditeur de texte, le compilateur MPASM, un outil de simulation et le logiciel de programmation. Le programmateur lui-même, n'est malheureusement pas gratuit. 70ABBOU
  71. 71. outils de développement L’environnement de développement MPLAB MPLAB-IDE peut être téléchargé sur le site Web http://www.microchip.com Après l'installation, lancer MPLAB et faire les config ci-dessous : Configure  Select Device  PIC16F876 ou PIC16F877 ……………………………………….. …………………………………..…. ……………………………………….. Séance de « Prise en main de MPLAB » 71ABBOU
  72. 72. Les ports parallèles d'entrée sortie Chaque port est associé à un registre de direction TRISx - un bit à 1 --> I --> Input --> entrée - - un bit à 0 --> O --> Output --> sortie - Le courant absorbé ou fourni peut atteindre 25 mA La majorité des broches sont multiplexées avec d'autres fonctions Le 16F877 possède 5 ports différents : le port A (6 broches) le port B (8 broches) le port C (8 broches) le port D (8 broches) le port E (3 broches) ça fait 33 broches d’entrées-sorties (E/S) disponibles 72ABBOU
  73. 73. C’est un port de 6bits (RA0 à RA5). RA6 et RA7 ne sont pas accessibles. La ligne RA4 est partagée avec l'entrée TOCK1 du timer0, Les autre lignes sont partagées avec les fonctions analogiques (CAN ), Direction configurée dans TRISA (85h bank1), Données accessibles dans PORTA (05h bank0). Le port A 73ABBOU
  74. 74. Les registres utilisés par le port A En sortie, RA4 est une E/S à drain ouvert, pour l'utiliser comme sortie logique, il faut ajouter une résistance de pull-up externe. Il faut remarquer que la logique est inversée, si on envoie 0 sur RA4, l'interrupteur se ferme et la LED s'allume. Si on envoie 1, l'interrupteur s'ouvre et la LED s'éteint. Pour les utiliser les E/S en E/S numériques, il faut écrire '00000110' dans le registre ADCON1 74ABBOU
  75. 75. Le port B Le port B désigné par PORTB est un port bidirectionnel de 8 bits (RB0 à RB7). Toutes les broches sont compatibles TTL. La configuration de direction se fait à l'aide du registre TRISB, positionner un bit de TRISB à 1 configure la broche correspondante de PORTB en entré et inversement. Au départ toutes les broches sont configurées en entrée. En entrée, la ligne RB0 appelée aussi INT peut déclencher l’interruption externe INT. En entrée, une quelconque des lignes RB4 à RB7 peut déclencher l'interruption RBI. Direction configurée dans TRISB (86h bank1), Données accessibles dans PORTB(06h bank0). 75ABBOU
  76. 76. N'existe que pour les boîtiers 28 et 40 broches, Partagé avec les liaisons séries, les Timers 1,2 et les modules CCP, port bidirectionnel de 8 bits (RC0 à RC7). Toutes les broches sont compatibles TTL. Entrées à trigger de Schmitt, Direction configurée dans TRISC (87h bank1), Données accessibles dans PORTC (07h bank0). Le port C 76ABBOU
  77. 77. Le port D Le port D désigné par PORTD est un port bidirectionnel de 8 bits (RD0 à RD7). Toutes les broches sont compatibles TTL et ont la fonction trigger de Schmitt en entrée. Chaque broche et configurable en entrée ou en sortie à l’aide du registre TRISD. PORTD n’est pas implémenté sur tous les processeurs 16F87X, il est disponible sur le 16F877, le 16F874 et le 16F871 PORTD peut être utilisé dans un mode particulier appelé parallele slave port, pour cela il faut placer le bit PSPMODE (bit 4) de TRISE à 1. Dans ce cas les 3 bits de PORTE deviennent les entrées de control de ce port (RE, WE et CS) 77ABBOU
  78. 78. Le port E PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 sont configurables en entrée ou en sortie à l’aide des bits 0, 1 ou 2 du registre TRISE. PORTE n’est pas implémenté sur tous les processeurs 16F87X, il est disponible sur le 16F877, le 16F874 et le 16F871 Les 3 bits de PORTE peuvent être utilisés soit comme E/S numérique soit comme entrées analogiques du CAN. La configuration se fait à l’aide du registre ADCON1. Si le bit PSPMODE de TRISE est placé à 1, Les trois bits de PORTE deviennent les entrées de control du PORTD qui (dans ce cas) fonctionne en mode parallele Slave mode A la mise sous tension (RESET), les 3 broches de PORTE sont configurées comme entrées analogiques. 78ABBOU
  79. 79. Exercice 9 : Clignoter une LED Donner le programme qui fait clignoter une LED branchée sur RA0 avec une temporisation voisine de 0.5s. Sachant que le PIC est doté d'un quartz de 4 MHz. la temporisation sera réalisée à l'aide de boucles imbriquées Exercice 10 : Clignoter une LED Le programme précédent sera modifié pour que la Led branchée sur RA0 sera commandée par deux bottons poussoirs(START et STOP) branchés sur RB0 et RB1 - Lorsqu’on appuie sur START le clignotement démarre - Lorsqu’on appuie sur STOP le clignotement s’arrête. EXERCICES 79ABBOU
  80. 80. Exercice 11 : BCD 7 segments – On branche un bouton poussoir sur la broche RA4 de sorte que celle-ci passe à 0 quand on appuie – On branche un afficheur 7 segments cathode commune sur le port C – Chaque fois qu’on appuie sur le bouton poussoir, le contenu de l’afficheur doit s’incrémenter Indication : Le décodage BCD-7 segment sera fait par le programme. EXERCICES 80ABBOU
  81. 81. - Le timer 0 - TMR0 - 8 bits - Le timer 1 - TMR1 - 16 bits - Le timer 2 - TMR2 - 8 bits TMR0 et TMR1 sont des timers compteur TMR2 est seulement un timer (pas d'entrée externe) TMR1 et TMR2 sont utilisés par la fonction CCP (Capture Compare Pwm) Les processeurs de la famille PIC16 Peuvent avoir trois timers: LES TIMERS 81ABBOU
  82. 82. Le Timer 0 - TMR0 TMR0 est un compteur 8 bits On peut lire ou écrire le registre TMR0 Il génère une interruption au passage de FFh à 00h (overflow) Il possède un prédiviseur 8 bits qu'il partage avec le Watchdog Il peut être piloté par une horloge externe appliqué à la broche RA4 (mode compteur) ou par l’horloge interne Fosc/4 (mode timer) On peut sélectionner le front actif de l'horloge externe 82ABBOU
  83. 83. Schéma fonctionnel du Timer 0 0 1 0 1 83ABBOU
  84. 84. Registres utilisés par le timer TMR0 84ABBOU
  85. 85. Le Timer 0 • C’est un compteur 8 bits ayant les caractéristiques suivantes : • Il est incrémenté en permanence soit par l’horloge interne Fosc/4 (mode timer) soit par une horloge externe appliquée à la broche RA4 du port A (mode compteur). • La sélection de mode de fonctionnement s’effectue par le bit 5 du registre OPTION : T0CS pour Tmr0 Clock Source select bit. – T0CS = 1 : Fonctionnement en mode compteur – T0CS = 0 : Fonctionnement en mode timer 85ABBOU
  86. 86. * Si on décide de travailler en mode compteur, on doit préciser lors de quelle transition de niveau le comptage est effectué. Ceci est précisé grâce au bit 4 du registre OPTION : T0SE pour Timer0 Source Edge select bit. T0SE = 1 : comptage si l’entrée RA4/TOKI passe de 1 à 0 T0SE = 0 : comptage si l’entrée RA4/TOKI passe de 0 à 1 * A son débordement (FFh  00h) le drapeau T0IF est positionné ce qui peut déclencher l'interruption si elle est validée (GIE=1 et T0IE=1 ). Lorsque T0IE est positionné dans le registre INTCON, chaque fois que le flag T0IF passe à 1, une interruption est générée, il faut repositionner T0IF à 0 après traitement de l'interruption 86 Le Timer 0 ABBOU
  87. 87. Le Timer 0: Le mode d’interruption Supposons que nous travaillons avec un quartz de 4MHz. Nous avons donc dans ce cas (4 000 000/4) = 1.000.000 de cycles par seconde. Chaque cycle d’horloge dure donc 1/1000000ème de seconde, soit 1µs. Nous avons donc une interruption toutes les 256µs. Si nous désirons réaliser une LED clignotante à une fréquence de 1Hz, nous aurons besoin d’une temporisation de 500ms, soit 2000 fois plus. Ce n’est donc pas pratique. 87ABBOU
  88. 88. Le Timer 0: Le prédiviseur • Quelque soit l'horloge choisie, on peut la passer dans un diviseur de fréquence programmable (prescaler) dont le rapport est fixés par les bits PS0, PS1 et PS2 du registre OPTION_REG. • L'affectation ou non du prédiviseur se fait à l'aide du bit PSA du registre OPTION_REG o PSA = 0 on utilise le prédiviseur o PSA = 1 pas de prédiviseur (affecté au chien de garde) 88ABBOU
  89. 89. Le Timer 0: Le prédiviseur Le prédiviseur est un diviseur d’événements situé AVANT l’entrée de comptage du timer0. 89 PS2 PS1 PS0 /TIMER0 Temps Timer0 Qz = 4Mhz Temps Timer0 Qz = 8Mhz 0 0 0 2 512 µs 256 µs 0 0 1 4 1024 µs 512 µs 0 1 0 8 2048 µs 1024 µs 0 1 1 16 4096 µs 2048 µs 1 0 0 32 8192 µs 4096 µs 1 0 1 64 16384 µs 8192 µs 1 1 0 128 32768 µs 16384 µs 1 1 1 256 65536 µs 32768 µs ABBOU
  90. 90. Le Timer 0:Programme mikroC void main () { INTCON.GIE = 1 ; OPTION_Reg = ? ; INTCON.T0IE = 1; … while (1) { … } } void interrupt ( ) { if (INTCON. T0IF == 1) { ….. ….. INTCON.T0IF = 0; } } 90ABBOU
  91. 91. Exercice : Clignoter LED / TMR0 Clignoter une LED branchée sur RB0, delay voisin de 0.5s à l'aide de TMR0 a) Par scrutation du drapeau T0IF (pas d'interruption) b) En utilisant l'interruption T0I APPLICATIONS 91ABBOU
  92. 92. • Une interruption est un signal demandant au processeur de suspendre temporairement l’exécution du programme courant afin d’effectuer des opérations particulières. • Intérêt: Ce mécanisme permet d’implémenter une réaction à une sollicitation – offrant un délai de réponse très bref, – programmée de façon indépendante du code en cours d’exécution. • Les interruptions peuvent être déclenchées soit par un composant extérieur au processeur: – changement de valeur logique à une entrée désignée • soit par le processeur lui-même: – échéance d’une temporisation, – interruption logicielle, – . . . 92 INTERRUPTIONS ABBOU
  93. 93. • Une interruption provoque l’arrêt du programme principal pour aller exécuter une procédure d'interruption. • A la fin de cette procédure, le microcontrôleur reprend le programme principale à l’endroit où il l’a laissé. • A chaque interruption sont associés 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. • Les interruptions sont classées en deux catégories: - les interruptions primaires - les interruptions périphériques. 93 INTERRUPTIONS ABBOU
  94. 94. INTERRUPTIONS PRIMAIRES 94ABBOU ... Quelques sources d’interruption
  95. 95. Toutes les interruptions peuvent être validées/interdites par le bit INTCON.GIE Toutes les interruptions périphériques peuvent être validées/interdites par le bit INTCON.PEIE Chaque interruption peut être validée/interdite par son bit de validation individuel En résumé, pour valider une interruption primaires, il faut positionner 3 bits, GIE, PEIE et le bit individuel de l’interruption. INTERRUPTIONS 95ABBOU
  96. 96. Elles sont gérées par les registres : INTERRUPTIONS 96ABBOU
  97. 97. Le registre OPTION permet de choisir le type de front pour l’interruption INT/RB0 - Le registre INTCON INTERRUPTIONS 97ABBOU
  98. 98. Déroulement d'une interruption Lorsque l'événement déclencheur d'une interruption intervient, alors : - son drapeau est positionné à 1 (levé). - Si l'interruption a été validée (bit de validation = 1), elle est alors déclenchée : le programme arrête ce qu'il est en train de faire et va exécuter la procédure d'interruption qui se trouve à l'adresse 4 en exécutant les étapes suivantes : 98ABBOU
  99. 99.  l'adresse contenue dans le PC (Program Counter) est sauvegardée dans la pile, puis remplacée par la valeur 0004  Le bit GIE est placé "0" pour inhiber toutes les interruptions (afin que le PIC ne soit pas dérangé pendant l'exécution de la procédure d'interruption).  A la fin de la procédure d'interruption  le bit GIE est remis à 1(autorisant ainsi un autre événement)  le contenu du PC est rechargé à partir de la pile Déroulement d'une interruption 99ABBOU
  100. 100. Déroulement d'une interruption 100ABBOU
  101. 101. Deux remarques importantes sont à faire : Le drapeau reste à l’état haut même après le traitement de l’interruption. Par conséquent, il faut toujours le remettre à "0" à la fin de la routine d'interruption sinon l'interruption sera déclenchée de nouveau Seul le PC est empilé automatiquement. Si cela est nécessaire, les registres W et STATUS doivent être sauvegardés en RAM puis restaurés à la fin de la routine pour que le microcontrôleur puisse reprendre le programme principal dans les mêmes conditions où il l'a laissé. Déroulement d'une interruption 101ABBOU
  102. 102. Fonction d’interruption 102 • Comme le PIC n’a qu’un seul programme de traitement d’interruption, il faut absolument commencer par rechercher la source de l’interruption, lorsque plusieurs sources sont possibles. • Ceci s’effectue en testant les drapeaux (bits d’état). Une interruption provoque une mise à 1 du drapeau correspondant. • A la fin de l’interruption, on remet le drapeau à 0. Cela permet de prendre en compte la prochaine interruption. • Exemple : void interrupt() { if (INTCON. INTF) { …. … INTCON. INTF = 0; } } ABBOU
  103. 103. Exercice (int.asm) Programme qui utilise l’interruption INT comme suit : Chaque fois que l’entrée RB0 passe de 1 à 0, la LED branchée sur RB1 clignote 4 fois au rythme de la ½ seconde Application 103ABBOU
  104. 104. CONVERTISSEUR ANALOGIQUE NUMERIQUE Le convertisseur analogique numérique est à approximations successives. Il possède une résolution de 10 bits. Il est composé de :  Un multiplexeur analogique 5 voies (PIC16F876) ou 8 voies PIC16F877).  Un échantillonneur bloqueur.  Un Convertisseur Analogique Numérique de 10 bits. 104ABBOU
  105. 105. Organisation interne 105ABBOU
  106. 106. La conversion se passe en 2 temps : - 1er temps le signal à convertir est appliqué sur l’entrée à convertir, ce signal doit être présent au moins pendant le temps Tacq (temps d’acquisition environ 12μS pour 5V). - 2ème temps la conversion, approximations successives. Une conversion commence toujours par la mise à 1 du bit GO/DONE du registre ADCON0. Lorsque la conversion est terminée se bit repasse à 0. Donc pour pouvoir lire le résultat dans les registres ADRESL et ADRESH il suffit d’attendre que le bit GO/DONE passe à 0. CONVERTISSEUR ANALOGIQUE NUMERIQUE 106ABBOU
  107. 107. La valeur résultante N de la conversion ADRSH:ADRESL est égale à : N = ((VIN - VREF-) / (VREF+ - VREF-)) * 1023) Si VREF+ = VDD = 5V et VREF- = VSS = 0V alors N (valeur numérisée) = 1023 * (VIN / 5 ) CONVERTISSEUR ANALOGIQUE NUMERIQUE 107ABBOU
  108. 108. Mais avant de réaliser une conversion il faut définir la configuration du convertisseur : - Le nombre d’entrées analogiques. - Le nombre d’entrées logiques. - Le type de tension de référence : - Interne VREF =VDD-VSS. -Externe, soit VREF= VREF+ - VSS ou VREF= VREF+ - VREF-. Cette configuration ce fait à travers le registre ADCON1 CONVERTISSEUR ANALOGIQUE NUMERIQUE 108ABBOU
  109. 109. Le registre ADCON1 Il permet de choisir une configuration parmi les 16 proposées Remarque : La configuration de ce registre ADCON1 ne dispense pas de configurer les registres de directions des PPORTA et PORTE respectivement TRISA et TRISE. CONVERTISSEUR ANALOGIQUE NUMERIQUE 109ABBOU
  110. 110. CONVERTISSEUR ANALOGIQUE NUMERIQUE 110ABBOU
  111. 111. De plus le bit ADFM permet de choisir entre deux types de justification pour le résultat. Si ADFM=1 alors le résultat sera justifié à droite dans les registre ADRESH et ADRESL Si ADFM=0 alors le résultat sera justifié à gauche CONVERTISSEUR ANALOGIQUE NUMERIQUE 111ABBOU
  112. 112. Le registre ADCON0 Ce registre permet de définir l’horloge de conversion (bit ADCS1 et ADCS0), le canal à convertir (CHS2, CHS1 et CHS0) et ADON bit de mise en fonctionnement CONVERTISSEUR ANALOGIQUE NUMERIQUE 112ABBOU
  113. 113. Le registre ADCON0 113ABBOU

×