Vous êtes sur la page 1sur 30

29/11/2022

Les microcontrôleurs PIC

Université Cadi AYYAD


Faculté des Sciences et Techniques – Marrakech

par

Chafik ANDALOUSSI

mardi 29 novembre 2022

1
Chafik ANDALOUSSI mardi 29 novembre 2022

Classification des circuits


numériques
Circuits
numériques

circuits logiques circuits à circuits à circuits à temps de


standards fonctionnement architecture développement
programmable programmable et important
faible temps de
développement

74HC.. microprocesseurs PLD, CPLD, Asic pré-diffusés


... microcontroleurs FPGA Asic pré-caractérisés
Asic full custom

2
Chafik ANDALOUSSI mardi 29 novembre 2022

1
29/11/2022

Les gammes de PIC

3
Chafik ANDALOUSSI mardi 29 novembre 2022

Les différentes familles des PICs


La famille des PICs est subdivisée à l’heure actuelle en 3
grandes familles :

- La famille Base-Line, qui utilise des mots d’instructions


(nous verrons ce que c’est) de 12 bits.

- la famille Mid-Range, qui utilise des mots de 14 bits (et dont


font partie les 16F84A et 16F877A).

- La famille High-End, qui utilise des mots de 16 bits.

4
Chafik ANDALOUSSI mardi 29 novembre 2022

2
29/11/2022

Identification d’un PIC

Fréquence maximale (MHz)


Famille 10, 12, 16, PIC16 F 877 – 20
17 ou 18

Type de mémoire et alimentation Référence


F : Flash 4,5 à 6 V
C : EERPOM et EPROM 4,5 à 6 V
CR : ROM 4,5 à 6 V
LF : Flash 2 à 6 V
LC : EEPROM ou EPROM 2 à 6 V
LCR : ROM 2 à 6 V

5
Chafik ANDALOUSSI mardi 29 novembre 2022

Identification d’un PIC


Pour identifier un PIC, vous utiliserez simplement son numéro.

Les 2 premiers chiffres indiquent la catégorie du PIC, 16


indique un PIC Mid-Range.
La lettre L : indique que le PIC peut fonctionner avec une plage
de tension beaucoup plus tolérante.
C : indique que la mémoire programme est une EPROM ou plus
rarement une EEPROM
CR : pour indiquer une mémoire de type ROM

F : pour indiquer une mémoire de type FLASH.


N’espérez pas reprogrammer vos PICs de type CR.
Un composant qu’on ne peut reprogrammer est appelé O.T.P.
pour One Time Programming : composant à programmation
unique.
6
Chafik ANDALOUSSI mardi 29 novembre 2022

3
29/11/2022

Identification d’un PIC


Les derniers chiffres identifient précisément le PIC. (84A) ou
(877A).
Le suffixe « -20 » dans lequel 20 représente la fréquence
d’horloge maximale que le PIC peut recevoir. Par exemple –04
pour un 4MHz.
Une dernière indication que vous trouverez est le type de boîtier.
Nous utiliserons pour nos expérience le boîtier PDIP,

Les PICs sont des composants STATIQUES, c-à-d que la


fréquence d’horloge peut être abaissée jusqu’à l’arrêt complet
sans perte de données et sans dysfonctionnement.

Les composants DYNAMIQUES (comme les microprocesseurs


de votre ordinateur), donc la fréquence d’horloge doit rester
dans des limites précises.
7
Chafik ANDALOUSSI mardi 29 novembre 2022

Architecture des PICs


A l'inverse des systèmes à microprocesseurs qui suivent le modèle de
Neuman, où les données et le programme se trouvent dans la même
mémoire, les microcontrôleurs PIC® utilisent une architecture, dite de
Harvard, avec deux mémoires pour accélérer les traitements: une pour le
programme et l'autre pour les données :

8
Chafik ANDALOUSSI mardi 29 novembre 2022

4
29/11/2022

Caractéristiques générales des PIC


Les deux pics possèdent des entités fonctionnelles identiques:

une unité arithmétique et logique (ALU),


un accumulateur ou registre de travail (W working register),
 une mémoire flash pour le programme d'instructions à 14bits,
 un compteur de programme (PC),
une mémoire RAM pour les données et les registres,
une EEPROM pour les données à caractère permanent,
un certain ensemble de port d'entrées sorties (I/O Ports)
et des temporisateurs (Timer).

Le nombre de ces derniers est plus important pour le 877A, qui


se distingue aussi du 84A par d'autres périphériques: un
convertisseur analogique/numérique, deux ports série synchrone
et asynchrone, un comparateur…
9
Chafik ANDALOUSSI mardi 29 novembre 2022

Exemple : PIC16F84A

- 1 Ko de ROM,
- 68 octets de RAM,
- 64 octets de ROM,
- 13 entrées sorties,
- 10 MHz,
- un timer,
- 4 sources d’interruption

10
Chafik ANDALOUSSI mardi 29 novembre 2022

5
29/11/2022

Caractéristiques générales des PIC

11
Chafik ANDALOUSSI mardi 29 novembre 2022

- Consommation : 2mA sous 5V à 4 MHz. Description du PIC16F84


- Architecture RISC : 35 instructions de durée 1 ou 2 cycles.
- Durée du cycle : Période de l'oscillateur quartz divisée par 4 soit 400 ns pour un quartz
de 10 MHz.
- Deux bus distincts pour le code programme et les data.
- Code instruction : mot de 14 bits et compteur programme (PC) sur 13 bits, ce qui
permet d'adresser 8 K mots ( de h'0000' à h'1FFF')
- Bus DATA sur 8 bits.
- 13 Ports Entrée-Sortie bidirectionnels pouvant produire 25 mA par sortie.
PORTA = 5 bits et PORTB=8bits.
- 4 sources d'interruption :
- Externe par la broche partagée avec le Port B : PB0
- Par changement d'état des bits du Port B: PB4 PB5 PB6 ou PB7
- Quand l'écriture de Data en EEPROM est terminée.
- Par débordement du Timer.
- Compteur 8 bits avec pré diviseur programmable.
- 68 Octets de RAM
- 64 Octets d'EEPROM Data.
- 1K mots de 14 bits en EEPROM FLASH pour le programme (h'000' à h'3FF').
- 1 registre de travail : W et un registre fichier : F permettant d'accéder à la
RAM ou aux registres internes du PIC. Tous les deux sont des registres 8 bits. 12
Chafik ANDALOUSSI mardi 29 novembre 2022

6
29/11/2022

PIC16F877A

-14,3 Ko de ROM,
- 368 octets de RAM,
- 256 octets d’EEPROM,
- 33 entrées sorties, un CAN,
- 20 MHz,
- 3 timers,
- 15 sources d’interruptions
- une USART,
- un MSSP,
- 2 comparateurs,
- 2 modules comparateur et
PWM .

13
Chafik ANDALOUSSI mardi 29 novembre 2022

Caractéristiques générales des PIC

14
Chafik ANDALOUSSI mardi 29 novembre 2022

7
29/11/2022

- Consommation : moins de 2mA sous 5V à 4 MHz. Description du PIC16F877


- Architecture RISC : 35 instructions de durée 1 ou 2 cycles.
- Durée du cycle : Période de l'oscillateur quartz divisée par 4 soit 200 ns pour
un quartz de 20 MHz.
- Deux bus distincts pour le code programme et les data.
- Code instruction : mot de 14 bits et compteur programme (PC) sur 13 bits, ce
qui permet d'adresser 8 K mots ( de h'0000' à h'1FFF')
- Bus DATA sur 8 bits.
- 33 Ports Entrée-Sortie bidirectionnels pouvant produire 25 mA par sortie.
PORTA = 6 bits et PORTB PORTC et PORTD = 8bits PORTE = 3 bits pour le
16F877 et 22 I/O seulement pour le 16F876.
- 4 sources d'interruption :
- Externe par la broche partagée avec le Port B : PB0
- Par changement d'état des bits du Port B: PB4 PB5 PB6 ou PB7
- Par un périphérique intégré dans le chip: écriture de Data en EEPROM
terminée, conversion analogique terminée, réception USART ou I2C.
- Par débordement du Timer.
- 2 Compteurs 8 bits et 1 compteur 16 bits avec pré diviseur programmable.
- Convertisseur analogique 10 bits à 8 entrées pour le 16F877 et 4 entrées pour
le 16F876.
- UART pour transmission série synchrone ou asynchrone. 15
- InterfaceChafik
I2C.ANDALOUSSI mardi 29 novembre 2022

Description du PIC16F877A

- 2 modules pour PWM avec une résolution de 10 bits.


- Interface avec un autre micro: 8 bits + 3 bits de contrôle pour R/W et CS.
- 368 Octets de RAM
- 256 Octets d'EEPROM Data.
- 8K mots de 14 bits en EEPROM Flash pour le programme (h'000' à h'1FFF').
-1 registre de travail : W et un registre fichier : F permettant d'accéder à la RAM
ou aux registres internes du PIC. Tous les deux sont des registres 8 bits.

PORTA : 6 entrées -sorties . 5 entrées du CAN. Entrée CLK du Timer 0.


PORTB : 8 entrées-sorties. 1 entrée interruption ext. Clk et Data pour prog.
PORTC : 8 entrées-sorties. Clk Timer1 et PWM1. USART. I2C.
PORTD : 8 entrées-sorties. Port interface micro processeur (8 bits data).
PORTE : 3 entrées-sorties. 3 bits de contrôle interf micro. 3 entrées du CAN.

16
Chafik ANDALOUSSI mardi 29 novembre 2022

8
29/11/2022

Structure orthogonale,
processeur RISC

17
Chafik ANDALOUSSI mardi 29 novembre 2022

Jeu d'instructions réduit (Reduced Instructions Set


Computer RISC) et format des instructions:

- Le jeu d'instructions est réduit au strict minimum (ensemble d'instructions


de base) pour réduire le temps de décodage de l'instruction: les PIC® de la
gamme Mid-Range possèdent 35 instructions.

- Chaque instruction est codée sur un mot de 14bits intégrant le code


d’opération et l'opérande, ainsi toute l'information nécessaire pour exécuter
l'instruction est contenue dans ce mot. La mémoire programme est organisée
sous forme d'une suite de mots de 14bits.

- Le bus d'instructions est de largeur 14bits qui est différente de la largeur du


bus de données (8bits).

- La principale conséquence est que chaque instruction s'exécute en un cycle


processeur (à l'exception des instructions qui modifie le « compteur
programme PC » comme les branchements).

18
Chafik ANDALOUSSI mardi 29 novembre 2022

9
29/11/2022

Jeu d'instructions réduit (Reduced Instructions Set


Computer RISC) et format des instructions:

19
Chafik ANDALOUSSI mardi 29 novembre 2022

La mémoire programme (ROM)

20
Chafik ANDALOUSSI mardi 29 novembre 2022

10
29/11/2022

La mémoire données et registres (RAM)


La mémoire RAM des PIC est un
espace de stockage pour les
données utilisées par le
programme lors de l'exécution
(GPR General Purpose
Register), mais une bonne partie
des cases mémoires sont
réservées et utilisées comme des
registres spéciaux (SFR Special
File Register) qui contrôlent le
comportement du PIC et de ces
différents composants. Les PICs
ont donc la particularité
d'adresser les registres comme
des cases mémoires, et souvent le
terme 'file register' prime devant
le terme 'case mémoire'. En plus
la RAM est organisée en rangées
(bank), comme le représentent
les figures ci -gauche.

21
Chafik ANDALOUSSI mardi 29 novembre 2022

La mémoire données et registres (RAM)


Il est très important de comprendre l'origine de cette
organisation et de bien maîtriser le mécanisme d'adressage pour
accéder à un registre (FSR) ou une case mémoire de donnée
(GPR). En effet les instructions des PIC utilisent une adresse
des opérandes sur 7 bits, ce ci implique donc que l'on ne
peut adresser qu'un espace de 00h-7Fh (soit la capacité
d'une seule bank). Pour avoir un espace mémoire qui
dépasse 128 octets, Microchip™ a utilisé la structure en
plusieurs banks de 128 octets, en trouvant un moyen de
choisir une bank parmi les autres; ce moyen n'est autre que
des bits supplémentaires prélevés sur le registre STATUS:
ces bits se nomment IRP, RP0 et RP1; pour le 16F84A seul
RP0 est utilisé.

22
Chafik ANDALOUSSI mardi 29 novembre 2022

11
29/11/2022

• 16F84A La mémoire données et registres (RAM)

• 16F877A

23
Chafik ANDALOUSSI mardi 29 novembre 2022

Mécanisme d'accès à la mémoire en mode


d'adressage direct:
Il est nécessaire de positionner les bits RP0
et RP1 (sur le registre STATUS) pour
sélectionner d'abord une bank avant
d'accéder à une case mémoire dans cette
bank par un offset (sur 7 bits) inclus dans
l'instruction.

Exemple:
Pour accéder au registre TRISA (adresse
85h) il faut mettre à 1 le bit RP0 de STATUS
pour un 16F84, et les deux bits RP1-RP0 à 0-
1 pour un 16F877. Nous reparlerons plus en
détail par la suite de l'adressage indirect.

Notez que certains registres (comme PCL, INTCON, …) sont accessibles de plusieurs banks,
ce ci permet de les atteindre sans devoir changer de banque. C'est le cas aussi pour des cases
mémoires pour les données (comme la zone 0Ch-4Fh est mappée sur la zone 8Ch- 8Fh pour le
16F84, et la zone 70h-7Fh est mappée sur les zones F0h-FFh, 170h-17Fh et 1F0h-1FFh). Notez
aussi que la mémoire pour les variables mémoires est de seulement 68octets pour le 16F84A
alors qu'elle est de 368octets (96+80+80+80+16+16) pour le 16F877A.

NB: Il est évident que le registre STATUS doit être accessible de toutes les banques! 24
Le rôle de chacun des registres sera expliqué
Chafik ANDALOUSSI par
mardi la suite2022
29 novembre chaque fois qu'on en aura besoin.

12
29/11/2022

Le jeu d’instructions

Les sauts ne donnent accès qu’à 2K de mémoire programme (211). Ceci ne


pose aucun problème, le 16F84 ne disposant que de 1K mots de mémoire.
Pour coder une adresse de saut à l’intérieur de la mémoire programme, il
faut donc 10 bits (210 = 1024 = 1K). 25
Chafik ANDALOUSSI mardi 29 novembre 2022

Le jeu d’instruction

26
Chafik ANDALOUSSI mardi 29 novembre 2022

13
29/11/2022

L’adressage

 adressage littéral ;

 adressage directe ;

 adressage indirecte.

27
Chafik ANDALOUSSI mardi 29 novembre 2022

L’adressage littéral
(ne concerne que le registre W)

28
Chafik ANDALOUSSI mardi 29 novembre 2022

14
29/11/2022

L’adressage direct
 utilisation des bits RP0 et RP1 du registre d’état

29
Chafik ANDALOUSSI mardi 29 novembre 2022

L’adressage indirect
 adresse écrite dans le registre FSR
 adresse lue dans le registre IND
 exemple d’effaçage de la RAM de 20h à 2Fh

 Exercice : Ecrire un block d’instruction permettant d’effacer la ram de


de 0x20 à 0x5f de la page 0 et un autre de 0x120 à 0x170.
30
Chafik ANDALOUSSI mardi 29 novembre 2022

15
29/11/2022

L’adressage indirect
 utilisation du bit IRP du registre d’état

31
Chafik ANDALOUSSI mardi 29 novembre 2022

Les principaux registres


 le registre de travail « W » ou « WREG »;
 le registre d’état :

 les registre PORTx et TRISx


 la pile :
 8 niveaux, 13 bits, non accessible

 le registre de configuration
32
Chafik ANDALOUSSI mardi 29 novembre 2022

16
29/11/2022

Les principaux registres


 Le compteur programme :
 les appels et les sauts :
– exemple d’appel d’une sous-routine en page 1 depuis
la page 0

33
Chafik ANDALOUSSI mardi 29 novembre 2022

Les principaux registres


STATUS REGISTER : ( h'03' ou h'83' ou h'103 ou h'183' ).
On accède indifféremment à ce registre par une quelconque de ces 4 adresses.
Au reset : STATUS = 00011XXX

Bit 7 : IRP = permet la sélection des pages en adressage indirect.


Pour la PAGE 0 (de 00 à 7F) et la PAGE 1 (de 80 à FF) ce bit doit être laissé à
"0". Mis à "1" il permettra d'atteindre la PAGE 3 (de 100 à17F) et la PAGE 4
(de 180 à 1FF).
Bits 6 et 5 : RP1 et RP0 = permettent la sélection des pages en adressage direct.
Exemple: PAGE0 BCF STATUS,5 ; RP0=0
BCF STATUS,6 ;RP1=0
PAGE1 BSF STATUS,5 ; RP0=1
BCF STATUS,6 ;RP1=0
PAGE2 BCF STATUS,5 ; RP0=0
BSF STATUS,6 ;RP1=1
PAGE3 BSF STATUS,5 ; RP0=1
BSF STATUS,6 ;RP1=1

34
Chafik ANDALOUSSI mardi 29 novembre 2022

17
29/11/2022

Les principaux registres

35
Chafik ANDALOUSSI mardi 29 novembre 2022

Les principaux registres

36
Chafik ANDALOUSSI mardi 29 novembre 2022

18
29/11/2022

Les principaux registres


Bit 4 : TO = Time Out bit : Bit en lecture seulement.
1 = Après une mise sous tension, après une RAZ du watchdog (CLRWDT) ou bien
après l'instruction SLEEP.
0 = Signifie qu'un Time Out du timer de watchdog est survenu.

Bit 3 : PD = Power Down bit.


1 = Après une mise sous tension ou bien après une RAZ du Watchdog.
0 = Après l'instruction SLEEP.
Bit 2 : Z = Zero bit.
1 = Le résultat d'une opération arithmétique ou logique est zéro.
0 = Le résultat d'une opération arithmétique ou logique est différent de zéro.
Bit 1 : DC = Digit Carry bit.
1 = Une retenue sur le 4eme bit des poids faible est survenue après les instructions :
ADDWF et ADDLW.
0 = Pas de retenue sur le 4eme bit des poid faible.
Bit 0 : C = Carry bit.
1 = Une retenue sur le bit MSB est survenue après les instructions ADDWF et ADDLW.
0 = Pas de retenue sur le bit MSB.
37
Chafik ANDALOUSSI mardi 29 novembre 2022

Les principaux registres


OPTION REGISTER : ( h'81' ou h'181').
Ce registre en lecture écriture permet de configurer les prédiviseurs du Timer et du
Watchdog, la source du Timer, le front des interruptions et le choix du Pull up sur le
B.. : OPTION = 11111111
Portreset
Au

Bit 7 : RBPU = Pull up Enable bit on Port B.


1 = Pull up désactivé sur le Port B.
0 = Pull up activé (résistance interne des pins du port B).
Bit 6 : INTEDG = Interrupt Edge select bit.
1 = Interruption si front montant sur la broche PB0/IRQ (pin 6).
0 = Interruption si front descendant sur PB0/IRQ.
Bit 5 : TOCS = Timer TMR0 Clock Source select bit.
1 = L'horloge du Timer est l'entrée PA4/Clk (pin 3).
0 = Le Timer utilise l'horloge interne du PIC.
Bit 4 : TOSE = Timer TMR0 Source Edge select bit.
1 = Le Timer s'incrémente à chaque front montant de la broche PA4/Clk.
0 = Le Timer s'incrémente à chaque front descendant de la broche PA4/Clk.
Bit 3 : PSA = Prescaler Assignement bit.
1 = Le prédiviseur est affecté au watchdog.. 38
0Chafik
= LeANDALOUSSI
prédiviseur est affecté au Timer
mardi TMR0.
29 novembre 2022

19
29/11/2022

Les principaux registres


Bits 2 à 0 : PS2 PS1 PS0 = Prescaler Rate Select bits.

Quand le prédiviseur est


affecté au Watchdog
(PSA=1), TMR0 est
prédivisé par 1.

PCL REGISTER : ( h'02' ou h'82' ou h'102' ou h'182' ).


PCLATH REGISTER : ( h'0A' ou h'8A ou h'10A' ou h'18A')
Le compteur de programme est sur 13 bits. Les 8 bits de poids faible sont
dans le registre PCL qui est en lecture/écriture. Les 5 bits de poids forts ne sont pas
lisibles mais on peut les écrire indirectement à travers le registre PCLATH.

39
Chafik ANDALOUSSI mardi 29 novembre 2022

Les principaux registres


INTCON REGISTER : ( h'0B' ou h'8B' ou h'10B' ou h'18B').
Ce registre en lecture écriture permet de configurer les différentes sources
d'interruption.
Au reset : INTCON
= 0000000X
Bit 7 : GIE = Global Interrup Enable bit
1 = Autorise toutes les interruptions non masquées.
0 = Désactive toutes les interruptions.
Bit 6 : PEIE = Peripheral Interrupt Enable bit.
1 = Autorise les interruptions causées par les périphériques.
0 = Désactive les interruptions causées par le périphériques.
Bit 5 : TOIE = Timer TMR0 Overflow Interrup Enable bit.
1 = Autorise les interruptions du Timer TMR0.
0 = Désactive les interruptions du Timer TMR0.
Bit 4 : INTE = RB0/Int Interrup Enable bit.
1 = Autorise les interruptions sur la broche : PB0/IRQ (pin6).
0 = Désactive les interruptions sur la broche : PB0/IRQ (pin6).
Bit 3 : RBIE = RB Port Change Interrup Enable bit.
1 = Autorise les interruptions par changement d'état du Port B (PB4 à PB7).40
0Chafik
= Désactive les interruptionsmardi
ANDALOUSSI par 29changement
novembre 2022 d'état du Port B (PB4 à PB7).

20
29/11/2022

Les principaux registres


Bit 2 : TOIF = Timer TMR0 Overflow Interrup Flag bit.
1 = Le Timer à débordé. Ce flag doit être remis à zéro par programme.
0 = Le Timer n'a pas débordé.
Bit 1 : INTF = RB0/Int Interrup Flag bit.
1 = Une interruption sur la broche PB0/IRQ ( pin 6) est survenue.
0 = Pas d' interruption sur la broche PB0/IRQ ( pin 6).
Bit 0 : RBIF = RB Port Change Interrup Flag bit. Ce flag doit être remis à zéro
par programme.
1 = Quand au moins une entrée du port B (de PB4 à PB7) a changé d'état.
0 = Aucune entrée de PB4 à PB7 n'a changé d'état.

41
Chafik ANDALOUSSI mardi 29 novembre 2022

Les principaux registres


PIE1 REGISTER : ( h'8C' : page 1).
Ce registre contient les bits individuels d'autorisation pour les Interruptions des
périphériques. Le bit 6 de INTCON (PEIE) doit être mis à "1" pour autoriser une
quelconque IT de périphérique.
Au reset : PIE1 = 00000000
Bit 7 : PSPIE = Parallel Slave Port Interrup Enable bit .
Ce bit n'existe pas pour un PIC 16F876 ( 28 pins). Toujours garder ce bit à "0".
1 = Autorise les interruptions R/W du port SSP .
0 = Désactive toutes ces interruptions.
Bit 6 : ADIE = A/D converter Interrup Enable bit .
1 = Autorise les interruptions du convertisseur analogique/digital .
0 = Désactive cette interruption.
Bit 5 : RCIE = USART Receive Interrup Enable bit .
1 = Autorise les interruptions en réception de l'USART .
0 = Désactive cette interruption.
Bit 4 : TXIE = USART Transmit Interrup Enable bit .
1 = Autorise les interruptions en émission de l'USART .
0 = Désactive cette interruption. 42
Chafik ANDALOUSSI mardi 29 novembre 2022

21
29/11/2022

Les principaux registres


Bit 3 : SSPIE = Synchronous Serial port Interrup Enable bit .
1 = Autorise les interruptions du module Synchrone (I2C) .
0 = Désactive cette interruption.
Bit 2 : CCP1IE = CCP1 Interrup Enable bit .
1 = Autorise les interruptions du CCP1 .
0 = Désactive cette interruption.
Bit 1 : TMR2IE = TMR2 Interrup Enable bit .
1 = Autorise les interruptions du Timer 2 TMR2 .
0 = Désactive cette interruption.
Bit 0 : TMR1IE = TMR1 overflow Interrup Enable bit .
1 = Autorise les interruptions de débordement du Timer 1 TMR1 .
0 = Désactive cette interruption.

43
Chafik ANDALOUSSI mardi 29 novembre 2022

Les principaux registres


PIR1 REGISTER : ( h'0C' : page 0).
Ce registre contient les FLAG associés aux interruptions des périphériques. Ces Flag
passent à "1" quand une IT correspondante survient et que le bit d'autorisation est bien
positionné. Ces Flag doivent être remis à "0" par Soft.
Au reset : PIR1 =
00000000

Bit 7 : PSPIE = Parallel Slave Port Interrup Flag bit .


1 = Une opération de R/W vient d'avoir lieu sur le port SSP .
0 = Il n'y a pas eu de R/W sur le port SSP.
Bit 6 : ADIF = A/D converter Interrup Flag bit .
1 = Une conversion A/D est terminée .
0 = la conversion A/D n'est pas terminée.
Bit 5 : RCIF = USART Receive Interrup Flag bit .
1 = Le buffer de réception de l'USART est plein (donnée reçue).
0 = Le buffer de réception de l'USART est vide ( rien de reçu).
Bit 4 : TXIF = USART Transmit Interrup Flag bit .
1 = Le buffer de transmission de l'USART est vide ( on peut le remplir).
0 = Le buffer de réception de l'USART est plein ( on ne peut pas le charger).44
Chafik ANDALOUSSI mardi 29 novembre 2022

22
29/11/2022

Les principaux registres


Bit 3 : SSPIF = Synchronous Serial Port Interrup Flag bit .
1 = Une condition d'IT du module SSP est apparue .
0 = Aucune condition d'IT n'est apparue .
Bit 2 : CCP1IF = CCP1 Interrup Flag bit .
1 = Une condition de Capture ou de Compare du Timer1 a fait une IT.
0 = Pas d'IT de capture ou de Compare du TIMER 1.
Bit 1 : TMR2IF = TMR2 Interrup Flag bit .
1 = Le Timer2 a fait une IT.
0 = Pas d'IT du TIMER 2.
Bit 0 : TMR1IF = TMR1 Overflow Interrup Flag bit .
1 = Le débordement Timer 1 a fait une IT.
0 = Pas de débordement du TIMER 2.

45
Chafik ANDALOUSSI mardi 29 novembre 2022

Les ports Entrée / Sortie


PORTA (h05) et TRISA (h85) :

Ce port bidirectionnel est constitué de 6 bits. Le registre de direction


correspondant est TRISA.
- Quand on écrit un "1" dans TRISA , le bit correspondant du
PORTA est configuré en ENTREE,
- Si on écrit un "0", le port devient une SORTIE.
Le bit 4 du Port peut également servir pour l'entrée horloge du timer
TMR0.
Les autres bits du Port sont partagés avec le CAN.

ATTENTION: - après un reset le Port A est configuré en CAN. Il faut


impérativement le configurer en I/O digitale pour l'utiliser comme tel.
Il faut pour cela accéder au registre ADCON1 en h'9F'.

46
Chafik ANDALOUSSI mardi 29 novembre 2022

23
29/11/2022

Les ports Entrée / Sortie

Ce registre sera étudié dans le chapitre concernant le CAN.


On retiendra seulement que pour configurer les 5 bits du Port A en I/O
digitales, il faut positionner les 4 bits PCFG à 0110.

Exemple: ADCON1 EQU h'9F'


PAGE1
MOVLW h'06'
MOVWF ADCON1

ATTENTION: - Le Port PA4 qui est partagé avec l'entrée horloge du


Timer 0 est un Drain ouvert. Il faut donc le tirer au +Vcc par une
résistance de 10 KΩ pour l'utiliser en tant que sortie.

47
Chafik ANDALOUSSI mardi 29 novembre 2022

Les ports Entrée / Sortie


PORTB (h06) et TRISB (h86) :

Il comporte 8 bits. Le registre de direction correspondant est TRISB.


Si on écrit un "1" dans le registre TRISB, le driver de sortie
correspondant passe en haute impédance. Si on écrit un "0", le contenu
du Latch de sortie correspondant est recopié sur la broche de sortie.
Chaque broche du PORT B est munie d'un tirage au +VDD que l'on peut
mettre ou non en service en mode entrée uniquement. On active cette
fonction par la mise à "0" du bit 7 dans le registre OPTION en h'81'.
Au reset, le tirage est désactivé.
Il est inactif quand le port est configuré en sortie.
Les 4 broches PB7 PB6 PB5 et PB4 provoquent une interruption sur un
changement d'état si elles sont configurées en ENTREE.
On doit remettre à zéro le Flag de cette interruption (bit 0 du registre
INTCON en h'0B') dans le programme d'interruption.
48
Chafik ANDALOUSSI mardi 29 novembre 2022

24
29/11/2022

Les ports Entrée / Sortie


Cette possibilité d'interruption sur un changement d'état associé à la
fonction de tirage configurable sur ces 4 broches, permet l'interfaçage
facile avec un clavier. Cela rend possible le réveil du PIC en mode
SLEEP par un appui sur une touche du clavier.

Le bit 0 du PORT B peut également être utilisé comme entrée


d'interruption externe. Le choix du front de déclenchement se fait en
configurant le bit 6 du registre OPTION.

Au RESET: PORT A et PORT B configurés en ENTREE (TRISA et


TRISB = 1) PORT B : Tirage désactivé.

PORTC (h07) et TRISC (h87) :


Il s'agit d'un PORT 8 bits bidirectionnel.
Il est partagé avec le module de transmission synchrone I2C et l'USART.
49
Chafik ANDALOUSSI mardi 29 novembre 2022

Structure d’un programme en


assembleur

50
Chafik ANDALOUSSI mardi 29 novembre 2022

25
29/11/2022

Les fichiers d’en-tête


;*************************************************************************
; Ce programme génère une horloge en RB0
; de fréquence 24 fois plus faible que celle du quartz. *
; il utilise la carte PicDem2Plus équipée d'un PIC16F877A *
;*************************************************************************

LIST P=16F877A ; directive qui définit le processeur utilisé


#include <P16F877A.INC> ; fichier de définition des constantes

;----- Register Files---------------------- ;----- STATUS Bits ----------------------

INDF EQU H'0000' IRP EQU H'0007'


TMR0 EQU H'0001' RP1 EQU H'0006'
PCL EQU H'0002' RP0 EQU H'0005'
STATUS EQU H'0003' NOT_TO EQU H'0004'
FSR EQU H'0004' NOT_PD EQU H'0003'
PORTA EQU H'0005' Z EQU H'0002'
PORTB EQU H'0006' DC EQU H'0001'
PORTC EQU H'0007' C EQU H'0000'
PORTD EQU H'0008'
………………

51
Chafik ANDALOUSSI mardi 29 novembre 2022

Le registre de configuration
;************************************************************************
; BITS DE CONFIGURATION
;*************************************************************************

__CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF

; _XS_OSC l'oscillateur est configuré en oscillateur à quartz haute fréquence


; _WDT_OFF le watchdog est désactivé
; _CP_OFF le code de protection de la mémoire programme est désactivé
; _CPD_OFF le code de protection de la mémoire EEPROM est désactivé
; _LVP_OFF la programmation basse tension est désactivée
; ces opérations sont nécessaires pour fonctionner en mode "debug"
CP1/CP0 : bits 13/12 et 5/4 : Détermine quelle zone du 16F876 sera protégée contre la
lecture. Vous pouvez donc choisir de protéger la totalité du PIC®, ou seulement une
partie. Les différentes zones pouvant être protégées sont les suivantes :
CP1 CP0
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)
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)
52
0Chafik
: RB6 et RB7 sont utilisés pour
ANDALOUSSI mardile
29 debuggage
novembre 2022 sur circuit (_DEBUG_ON)

26
29/11/2022

Le registre de configuration
Bit 10 : non utilisé
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)
CPD : bit 8 : Protection en lecture de la mémoire eeprom.
1 : mémoire eeprom non protégée (_CPD_OFF)
0 : mémoire eeprom protégée (_CPD_ON)
LVP : bit 7 : Utilisation de la pin RB3/PGM comme broche de programmation
1 : La pin RB3 permet la programmation du circuit sous tension de 5V
(_LVP_ON)
0 : La pin RB3 est utilisée comme I/O standard (_LVP_OFF)
BODE N : 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) 53
Chafik ANDALOUSSI mardi 29 novembre 2022

Le registre de configuration
WDTE : bit 2 : 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)
10 : Oscillateur haute vitesse (_HS_OSC)
01 : Oscillateur basse vitesse (_XT_OSC)
00 : Oscillateur faible consommation (_LP_OSC)

Voici un exemple d’utilisation :

__CONFIG_CP_OFF&_DEBUG_OFF&_WRT_ENABLE_OFF&_CPD_OFF &
_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC

54
Chafik ANDALOUSSI mardi 29 novembre 2022

27
29/11/2022

Les directives « org » et « end »


org 0x00 ; adresse pointée après un reset ;
; l’instruction qui va suivre se trouvera à cette adresse
goto debut ; saut à l’étiquette marquant le début du programme

org 0x10 ; cette adresse doit être supérieure à 0x04


debut ; étiquette marquant le début du programme

end ; directive signalant la fin du programme

55
Chafik ANDALOUSSI mardi 29 novembre 2022

La déclaration des variables


CBLOCK 0x20 ; début de la zone variable
Variable1 : 1 ; Variable1 a une taille de 1 octet
Variable2 : 1 ; Variable2 a une taille de 1 octet
tableau : 8 ; tableau est une variable de 8 octets
ENDC

56
Chafik ANDALOUSSI mardi 29 novembre 2022

28
29/11/2022

L’écriture de variables

0x1A ou H’1A’ ou 1Ah : notation hexadécimale ;


B’10101111’ : notation binaire ;
D’12’ ou .12 : notation décimale.
A’C’ ou ‘C’ : code ASCII

57
Chafik ANDALOUSSI mardi 29 novembre 2022

Les facilités d’écriture


 assignations
MASQUE EQU 0X45

 définitions
#DEFINE SORTIE PORTB,0

bsf SORTIE

 macro instructions
Macro1 macro
Suite d’instructions…..
edm ; fin de la macro

58
Chafik ANDALOUSSI mardi 29 novembre 2022

29
29/11/2022

Programme complet
;*************************************************************************
; Ce programme génère une horloge en RB0
; de fréquence 24 fois plus faible que celle du quartz. *
; il utilise la carte PicDem2Plus équipée d'un PIC16F877A *
;*************************************************************************

LIST P=16F877A ; directive qui définit le processeur utilisé


#include <P16F877A.INC> ; fichier de définition des constantes
;************************************************************************
; BITS DE CONFIGURATION
;*************************************************************************

__CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF

; _XS_OSC l'oscillateur est configuré en oscillateur à quartz haute fréquence


; _WDT_OFF le watchdog est désactivé
; _CP_OFF le code de protection de la mémoire programme est désactivé
; _CPD_OFF le code de protection de la mémoire EEPROM est désactivé
; _LVP_OFF la programmation basse tension est désactivée
; ces opérations sont nécessaires pour fonctionner en mode "debug"
;************************************************************************
; DEMARRAGE SUR RESET *
;************************************************************************
org 0x0 ; Adresse de départ après reset
goto debut

org 0x10 ; adresse de début du programme 59


debut
Chafik ANDALOUSSI mardi 29 novembre 2022

Programme complet
;****************************************************************
; INITIALISATION *
;****************************************************************

; initialisation du PORTB en sortie (voir datasheet)

bcf STATUS, RP0


bcf STATUS, RP1 ; passage en banque 0
clrf PORTB ; RAZ des bascules D
bsf STATUS, RP0 ; passage en banque 1
movlw b'00000000'
movwf TRISB ; PORTB en sortie
bcf STATUS, RP0 ; retour en banque 0

;****************************************************************
; PROGRAMME PRINCIPAL *
;****************************************************************
boucle
bsf PORTB,0 ; mise à 1 de la sortie
nop ; 2 temps morts pour compenser le saut
nop
bcf PORTB,0 ; mise à 0 de la sortie
goto boucle ; rebouclage

END ; directive signalant la fin du programme


;******************************************************************** 60
Chafik ANDALOUSSI mardi 29 novembre 2022

30

Vous aimerez peut-être aussi