113
Introduction aux microcontrôleurs Illustration par le PIC16F877 Le PIC16F877 Dr : A. ABBOU IGA 2013 1 ABBOU

Cours pics16 f877

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Cours pics16 f877

Introduction aux microcontrôleurs

Illustration par le PIC16F877

Le PIC16F877

Dr : A. ABBOU

IGA 2013

1 ABBOU

Page 2: Cours pics16 f877

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

2 ABBOU

Page 3: Cours pics16 f877

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. 3 ABBOU

Page 4: Cours pics16 f877

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

4 ABBOU

Page 5: Cours pics16 f877

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

5 ABBOU

Page 6: Cours pics16 f877

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,… 6 ABBOU

Page 8: Cours pics16 f877

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.

8 ABBOU

Page 9: Cours pics16 f877

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 9 ABBOU

Page 10: Cours pics16 f877

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

10 ABBOU

Page 11: Cours pics16 f877

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

11 ABBOU

Page 12: Cours pics16 f877

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

12 ABBOU

Page 13: Cours pics16 f877

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

13 ABBOU

Page 14: Cours pics16 f877

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

14 ABBOU

Page 15: Cours pics16 f877

Référence des MCU

15 ABBOU

Page 16: Cours pics16 f877

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

16 ABBOU

Page 17: Cours pics16 f877

Caractéristiques générales de la famille 16F87x

différents circuit de la famille 16F87X

17 ABBOU

Page 18: Cours pics16 f877

Éléments constitutifs du PIC 16F877

18 ABBOU

Page 19: Cours pics16 f877

Structure du PIC 16F877

19 ABBOU

Page 20: Cours pics16 f877

Le cœur du PIC : le microprocesseur

20 ABBOU

Page 21: Cours pics16 f877

La mémoire

21 ABBOU

Page 22: Cours pics16 f877

La Pile et le Compteur Programme

22 ABBOU

Page 23: Cours pics16 f877

Les Ports d’Entrées/Sorties généraux : PORTA, PORTB,

PORTC, PORTD, PORTE

23 ABBOU

Page 24: Cours pics16 f877

Le Port Parallèle Esclave (PSP : Parallel Slave Port)

24 ABBOU

Page 25: Cours pics16 f877

Le circuit de génération d’horloge

25 ABBOU

Page 26: Cours pics16 f877

Le TIMER0

26 ABBOU

Page 27: Cours pics16 f877

Le TIMER1

27 ABBOU

Page 28: Cours pics16 f877

Le TIMER2

28 ABBOU

Page 29: Cours pics16 f877

Les modules CCP1 et CCP2

29 ABBOU

Page 30: Cours pics16 f877

Le convertisseur Analogique – Digital 10bits

30 ABBOU

Page 31: Cours pics16 f877

L’USART

31 ABBOU

Page 32: Cours pics16 f877

Le SSP, Synchronous Serial Port

32

Page 33: Cours pics16 f877

Brochage du PIC 16F877

33

Page 34: Cours pics16 f877

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

34 ABBOU

Page 35: Cours pics16 f877

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

35 ABBOU

Page 36: Cours pics16 f877

Plan Mémoire des registres

36 ABBOU

Page 37: Cours pics16 f877

Organisation de la mémoire RAM

37 ABBOU

Page 38: Cours pics16 f877

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

38 ABBOU

Page 39: Cours pics16 f877

Accés à la RAM par adressage direct

Accès à la RAM par Adressage direct

39 ABBOU

Page 40: Cours pics16 f877

Accés à la RAM par adressage indirect

Accès à la RAM par Adressage indirect

40 ABBOU

Page 41: Cours pics16 f877

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 )

41 ABBOU

Page 42: Cours pics16 f877

Organisation mémoire programme

42

Page 43: Cours pics16 f877

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 ! !).

43 ABBOU

Page 44: Cours pics16 f877

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,

44 ABBOU

Page 45: Cours pics16 f877

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. 45 ABBOU

Page 46: Cours pics16 f877

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

Page 47: Cours pics16 f877

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

47 ABBOU

Page 48: Cours pics16 f877

Jeu d’instructions

Suite

48 ABBOU

Page 49: Cours pics16 f877

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

49 ABBOU

Page 50: Cours pics16 f877

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

50 ABBOU

Page 51: Cours pics16 f877

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

51 ABBOU

Page 52: Cours pics16 f877

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

52 ABBOU

Page 53: Cours pics16 f877

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

53 ABBOU

Page 54: Cours pics16 f877

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.

54 ABBOU

Page 55: Cours pics16 f877

L’instruction goto

Permet de transférer l’exécution à une autre position du programme

repérée par une étiquette (label)

Exemple:

55 ABBOU

Page 56: Cours pics16 f877

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

Page 57: Cours pics16 f877

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

Page 58: Cours pics16 f877

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 :

58 ABBOU

Page 59: Cours pics16 f877

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

59 ABBOU

Page 60: Cours pics16 f877

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

60 ABBOU

Page 61: Cours pics16 f877

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

61 ABBOU

Page 62: Cours pics16 f877

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

62 ABBOU

Page 63: Cours pics16 f877

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

63 ABBOU

Page 64: Cours pics16 f877

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 :

64 ABBOU

Page 65: Cours pics16 f877

#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 65 ABBOU

Page 66: Cours pics16 f877

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 66 ABBOU

Exercices

Page 67: Cours pics16 f877

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

67 ABBOU

Page 68: Cours pics16 f877

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

68 ABBOU

Page 69: Cours pics16 f877

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

69 ABBOU

Page 70: Cours pics16 f877

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.

70 ABBOU

Page 71: Cours pics16 f877

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 »

71 ABBOU

Page 72: Cours pics16 f877

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

72 ABBOU

Page 73: Cours pics16 f877

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

73 ABBOU

Page 74: Cours pics16 f877

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 74 ABBOU

Page 75: Cours pics16 f877

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). 75 ABBOU

Page 76: Cours pics16 f877

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

76 ABBOU

Page 77: Cours pics16 f877

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) 77 ABBOU

Page 78: Cours pics16 f877

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.

78 ABBOU

Page 79: Cours pics16 f877

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

79 ABBOU

Page 80: Cours pics16 f877

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

80 ABBOU

Page 81: Cours pics16 f877

- 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

81 ABBOU

Page 82: Cours pics16 f877

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 82 ABBOU

Page 83: Cours pics16 f877

Schéma fonctionnel du Timer 0

0

1

0

1

83 ABBOU

Page 84: Cours pics16 f877

Registres utilisés par le timer TMR0

84 ABBOU

Page 85: Cours pics16 f877

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

85 ABBOU

Page 86: Cours pics16 f877

* 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

Page 87: Cours pics16 f877

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.

87 ABBOU

Page 88: Cours pics16 f877

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)

88 ABBOU

Page 89: Cours pics16 f877

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

Page 90: Cours pics16 f877

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;

}

} 90 ABBOU

Page 91: Cours pics16 f877

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

91 ABBOU

Page 92: Cours pics16 f877

• 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

Page 93: Cours pics16 f877

• 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

Page 94: Cours pics16 f877

INTERRUPTIONS PRIMAIRES

94 ABBOU

. .

.

Quelques sources d’interruption

Page 95: Cours pics16 f877

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

95 ABBOU

Page 96: Cours pics16 f877

Elles sont gérées par les registres :

INTERRUPTIONS

96 ABBOU

Page 97: Cours pics16 f877

Le registre OPTION permet de choisir le type de front

pour l’interruption INT/RB0

- Le registre INTCON

INTERRUPTIONS

97 ABBOU

Page 98: Cours pics16 f877

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 :

98 ABBOU

Page 99: Cours pics16 f877

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

99 ABBOU

Page 100: Cours pics16 f877

Déroulement d'une interruption

100 ABBOU

Page 101: Cours pics16 f877

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

101 ABBOU

Page 102: Cours pics16 f877

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

Page 103: Cours pics16 f877

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

103 ABBOU

Page 104: Cours pics16 f877

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.

104 ABBOU

Page 105: Cours pics16 f877

Organisation interne

105 ABBOU

Page 106: Cours pics16 f877

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

106 ABBOU

Page 107: Cours pics16 f877

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

107 ABBOU

Page 108: Cours pics16 f877

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

108 ABBOU

Page 109: Cours pics16 f877

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

109 ABBOU

Page 110: Cours pics16 f877

CONVERTISSEUR ANALOGIQUE NUMERIQUE

110 ABBOU

Page 111: Cours pics16 f877

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

111 ABBOU

Page 112: Cours pics16 f877

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

112 ABBOU

Page 113: Cours pics16 f877

Le registre ADCON0

113 ABBOU