Vous êtes sur la page 1sur 62

Base des Microcontrôleur

L'objective de ce cours est de :


•Comprendre l'architecture de Microcontrôleur (pic 16F877)
•Développer de programme en assembleur
plan

• Généralité sur le Microcontrôleur

• pic 16F877

• langage assembleur

• les ports d'entrée/sortie du PIC

• les interruptions

• les mémoires permanentes


Généralité sur le Microcontrôleur
1.Définition:
le microcontrôleur est un circuit intégré, généralement utilisé pour effectue une ou
des tâches précises au sein d'un appareil électronique.
2. différents familles de µc:
• la famille Atmel (AT91)
• la famille intel (80C51)
• la famille motorola (Série 68HC11)
• la famille microchip (pic 16F877)
Généralité sur le microcontroleur

3. domaine d'application:
• informatique (modem, souris ...)
• l'électroménager (lave-vaisselle, micro-onde)
• automobile (GPS,AIRBAG....)
• contrôle des processus industriels (régulation, pilotage)
Généralité sur le microcontroleur

4. Les composants d'un µc:


un µc est constitué par :
 des mémoires
un µp
des bus
une interface d'entrée/sortie
unités périphériques
Généralité sur le microcontroleur

4.1Les mémoires

Une mémoire permet d’enregistrer, de conserver et de restituer des informations


Généralité sur le Microcontrôleur
4.1 Les mémoires
On distingue 2 types de mémoires :
mémoire de programme: ce sont des mémoires à lecture seule. Elle conservent
leurs informations même en l'absence de l'alimentation.

mémoire de données: ce sont des mémoires à écriture et lecture.


on distingue 2 types:
La RAM de donnée (volatile) et EEPROM de données(non volatile)
Généralité sur le Microcontrôleur

4.2 le microprocesseur :
le µp fonctionne selon les étapes suivantes:
 chercher l'instruction suivante en mémoire
 la décoder pour déterminer l'action qu'il doit effectuer
 l'exécuter
 revenir à l'étape 1
Généralité sur le Microcontrôleur

4.2 le microprocesseur :
la structure interne d'un microprocesseur

UAL: cette unité est utilisée pour les opérations arithmétiques et logiques.
CCR: registre d'état, il permet de garder des informations sur l'état du µp
Accumulateur: utilisé pour recevoir les données entrantes et sortantes de L'UAL
PC: il effectue l'adressage et pointe sur la prochaine adresse mémoire à exécuter
Généralité sur le Microcontrôleur

4.3 Les bus

permet de relier entre les composant de µc

on distingue 3 type:
•bus d'adresses: permet au µp de sélectionner la case mémoire où le
périphérique auquel il veut accéder pour lire ou écrire une information

•bus de données : permet le transfert des informations entre les différents


éléments.
•bus de contrôle : est composé des fils suivants
CS ou CE: permet de signaler que le composant est sélectionné
OE: permet de demander au composant de valider ses sorties
RD/w: permet au µp d'informer un composant de la nature de l'échange :
lecture ou écriture
Généralité sur le Microcontrôleur

4.4 Interface d'entrée sortie:


Elle capable de conserver des informations, qu'un µp lui fournit, pour les envoyer aux
périphériques de sorties; et capable de conserver les informations en provenance
des périphériques d'entrée, pour les envoyer au µp
Généralité sur le Microcontrôleur
5 La capacité mémoire d'un composant

c'est le nombre de cases mémoires de 1 bits contenu dans un composant mémoire.


soit a le nombre de fils d'adresses et d le nombre de fils de données.

• le nombre d'adresse est .....


• chaque adresse correspond d bits de données.

donc la capacité mémoire est :


Généralité sur le Microcontrôleur
6. Structure des µcs:

6.1 Structure de Von Neuman :


utilise un seul bus pour transmettre les instructions et les données.
par exemple: Motorola

mémoire

de programme
µp Bus de données
et de données
Généralité sur le Microcontrôleur

décodage d'adresses:
Il permet au µp de sélectionner un seul composant( RAM,ROM,....), ce décodage se
fait à l'aide des fonctions logiques sous forme de circuit électroniques.
Généralité sur le Microcontrôleur

Plan mémoire

C’est une représentation graphique, un plan mémoire de ce que le microprocesseur


est susceptible de trouver à telle ou telle adresse. Le plan mémoire est la traduction
graphique du décodage d’adresses.

exemple
Exercice:
Soit un microprocesseur a un bus d’adresse de 20 bits et un bus de données de 8bits

1) Quel est la capacité mémoire maximale que ce microprocesseur peut adresser ?


2) Quel est la capacité mémoire de la ROM ?
3) Quel est la capacité mémoire de l’EEPROM donnée utilisée ?
Exercice:
Le schéma suivant décrit un exemple d’un système à base de microprocesseur qui est
constitué d’un microprocesseur RAM, ROM, et des entrées sorties :
Exercice
1) quel est la capacité mémoire maximale que ce microprocesseur peut adresser ?
2) Quel est la capacité mémoire de la RAM utilisée ?
3) Quel est la capacité mémoire de la ROM utilisée ?
4) déterminer la plage d’adresse pour chaque composant en binaire et en hexa.
5) faire un plan d’adressage mémoire.
Généralité sur le Microcontrôleur

6. Structure des µcs:

6.2 Structure Harvard:


utilise deux bus séparés: un pour l'instruction et un autre bus pour les données
par exemple: PIC

mémoire mémoire
µp
de programme de données
PIC 16F877

I. Introduction

les PICs sont des µcs à jeu d'instruction réduit, ils utilisent une architecture Harvard.

• Les différents familles des PICs:

la famille de PICs est subdivisée en 3 grandes familles:

 Base-line : utilise des mots d'instructions de 12 bits

 Mid-Range: utilise des mots d'instructions de 14 bits

 High-End : utilise des mots d'instructions de 16 bits


Identification d'une PIC:

Une référence de µc Microchip est toujours de la forme

NN(L) MM xxxx-yy
avec:
• NN: désigne la famille à laquelle appartient le circuit (12,14,16,18)
par exemple: 16(L) MM xxxx-yy => 16 indique un ¨PIC Mid-Range
• L: indique que le PIC peut fonctionner avec une tension minimum 2V, l'absence de
la lettre L indique que le PIC fonctionne uniquement dans la plage de tension qui
s'etend de 4volts à 5V
• MM: indique le type de mémoire de programme on trouve
C: EPROM
CR: ROM
F: Flash
• xxxx: la réference du circuit dans la famille
• yy: représente la fréquence d'horloge maximale que le PIC peut recevoir
II.Architecture interne du PIC
16F877
Les registres:

STATUS : c'est le registre d'état d’un µc

IRP: permet de sélectionner des page en adressage indirect


RP1 et RP0 :permettent la sélection des pages en adressage direct
TO et PD: bit en lecture seulement (les indicateurs de reset)
Z: zéro
DC: retenue sur le 4 eme bit des poids faible
C: retenue
FSR: contient l'adresse d'un autre registre
INDF: utilise le contenu FSR pour l'accés indirect à la mémoire
PIC16F877

III. organisation mémoire:

la structure Harvard des PICs fournit un accés séparé à chacune. il faut

considérer deux plans mémoire l'un pour les instructions et l'autre pour les

données ainsi que les registres internes.


III.1 Plan mémoire pour les instructions (code programme)
III.1 Plan mémoire pour les instructions (code programme)

 le plan mémoire est linéaire les adresses vont de 0000H à1FFFH (8Kmots de 14bits)

 l'adresse 0000H : contient le vecteur du reset

 la pile contient 8 niveaux: ce sont utilisées lors d'appels de sous programmes


III.2 Plan mémoire pour les données et les registres internes
III.2 Plan mémoire pour les données et les registres internes

l'espace mémoire adressable est de 512 positions de 1 octet chacune:

 96 position sont réservées au SFR qui sont les registres de configuration du PIC

 368 position restante constituent la RAM utilisateur

IV. Accès à la RAM:

1) adressage direct :

avec ce mode d'adressage , on prècise dans l'instruction la valeur de l'adresse à laquelle

on veut accéder .

exemple:
movwf 70h ; permet de copie l'accumulateur w dans
; la case mémoire d'adresse 70h
NB: RP0 et RP1 doivent être positionnés correctement avant toute instruction
qui accède à la RAM par l'adressage direct

RP1 RP0
0 0 Bank0
0 1 Bank1
1 0 Bank2
1 1 Bank3

Exercice: donner les étapes qui copie

34 dans la position 110h

12 dans la position 20h

'a' dans la position A0h

70 dans la position 190h


2) adressage indirect :

dans l'adressage indirect on passe toujours par un registre virtuel (INDF) dont l'adresse

est contenue dans le registre FSR et le bit IRP du registre STATUS.

NB: le bit IRP doit être positionné correctement avant toute instruction qui accèder à la

RAM par l'adressage indirect

IRP
0 Bank 0/1
1 Bank 2/3

Exemple: copier la valeur 3 dans l'adresse 100h


BSF STATUS,IRP
Movlw 100h
Movwf FSR
Movlw 3
Movwf INDF
Exercice : Donner les étapes qui copie l'alphabet dans la RAM à partir de la position
190h.
V.les instructions
1)les types des instructions:
les instructions sont codées sur 14 bits
a) les instructions ''orientées octet'':sont des instruction qui manipulent un octet se
trouvant dans la RAM . elles sont codées de la manière suivante:

13 8 7 6 0
op opcode d F

avec: d : le paramétre de destination


si d=0 ou w =>le résultat de l'opération sera placé dans l'accumulateur w
si d=1 ou F =>le résultat de l'opération sera placé dans le registre précisé par F
b) les instructions ''orientées bits'': sont des instructions destinées à manipuler des
bits d'un registre (SFR ou GPR). elles sont codées de la manière suivante:

13 10 9 7 6 0
opcode bb F

avec : b :position du bit


F: adresse du registre GPR ou le nom du registre
NB: on a le registre F
7 6 5 4 3 2 1 0
F:

On compte à partir de zéro en commençant à droite


c) Les instructions opérant sur une constante: sont les instructions entre l'accumulateur w et
une constante

13 87 0
opcode k

avec k: constante

d) les instructions de saut et appel de procédure: sont des instructions qui permettent
de sauter à une autre position dans le programme et de continue l'exécution du
programme à partir de cette position

13 10 0
opcode L

avec L: étiquette de l'adresse (11bits)


2) le jeu d'instructions:
a) les instructions de déplacement:
• movwf: permet de copier l'accumulateur w dans un registre
syntaxe:
movwf F
• movf: permet de copier le contenu d'un registre dans l'accumulateur w le
paramètre d doit être égale 0
syntaxe:
movf F,d => modifier le bit d'état Z
• movlw : permet de charger une constante dans l'accumulateur w
syntaxe:
movlw valeur
b) Instructions arithmétiques
• L'addition; modifié les trois bits d'état [C,DC,Z]
syntaxe:
addlw val ; val+[w] -> w

addwf f,d ; [f] +[w] -> w si d=0


; [f] +[w] -> f si d=1
la notation [x] signifie le contenu de x
• Soustraction: modifié les trois bits d'état [C,DC,Z]
syntaxe:
sublw val ; val - [w] -> w
subwf f,0 ; [f] -[w] -> w
subwf f,1 ; [f] -[w] -> f
c) instruction sur les bits
• bsf: permet de forcer un bit d'un emplacement mémoire à 1
Syntaxe:
bsf f,b
• bcf: permet de forcer un bit d'un emplacement mémoire à 0
Syntaxe:
bcf f,b
#include<p16f877.inc>
bsf STATUS,RP1
bcf STATUS,RP0
MOVLW D'35'
MOVWF 0X110
bcf STATUS,RP1
bcf STATUS,RP0
MOVLW D'10'
MOVWF 0X20
bcf STATUS,RP1
bsf STATUS,RP0
MOVLW 'a'
MOVWF 0Xa0
bsf STATUS,RP1
bsf STATUS,RP0
MOVLW D'70'
MOVWF 0X190
end
• btfsc et btfss: permettent de tester un bit et de sauter ou non une ligne de programme en
fonction de la valeur du bit
syntaxe:
btfsc reg,b ; tester le bit b du registre reg et saute l'instruction suivante si le bit testé est
nul
btfss reg,b ;tester le bit b du registre reg et saute l'instruction suivante si le bit testé est
égal à 1
exemple:
btfsc STATUS,Z
d) Les instructions Incfsz et decfsz:
ces instructions permettre d'incrémenter ou de décrémenter un registre et de sauter si le résultat
est nul.
syntaxe:
incfsz reg,f ; [reg]+1 et sauter une ligne si le résultat égal 0 sinon éxécuter l'instruction
suivante
decfsz reg,f ; [reg]-1 et sauter une ligne si le résultat égal 0 sinon éxécuter l'instruction
suivante
exemple:
decfsz 70h,f
movwf 71h
movwf 72h
e) l'instruction goto: permet de transférer l'éxécution à une autre position du
programme repérée par une étiquette
par exemple:
movf STATUS,w
goto ici1
ici2 movwf 70h
ici1 goto ici2
f) incémentation / décrémentation: [z]
incf reg,d ; [reg]+1 -> reg si d=1 ou f
; [reg]+1 -> w si d=0 ou w
decf reg,d ; [reg]-1
Exercice 1:
Donner le programme qui :
• Fait l’addition suivante :[20h]+[110h] avec le résultat dans A0h
• Comparer les contenus des cases mémoire 6Fh et A0h, s’il son égaux mettre à zéro tous les bits
de la case 16Fh sinon mettre à 1 tous les bits de la case 1EFh.
• Soustrait le contenu de la case mémoire 110h de l’accumulateur w avec le résultat dans 6Fh

Exercice 2:
Donner le programme qui copie l'alphabet dans la RAM à partir de la position 190h.
f) les instructions de rotation et de permutation:
• Rotation : les rotation à droite ou à gauche se font à travers le carry C
syntaxe:
RRF reg,d ;rotation à droite de [reg]
RLF reg ,d ; rotation à gauche de [reg]
exemple 1:
bsf STATUS,c
movlw B'10010111'
movwf 0X6F
RLF 0X6F,f ; rotation à gauche de [6F]

c b7 b6 b5 b4 b3 b2 b1 b0
6F 1 1 0 0 1 0 1 1 1
RLF 1 0 0 1 0 1 1 1 1

NB: l'opération de rotation vers la gauche effectue l'opération suivante: le bit de carry est
mémorisé. Ensuite chaque bit de l'octet est déplacé vers la gauche. l'ancien bit sort de
l'octet par la gauche, et devient le nouveau carry le nouveau bit 0 devient l'ancien
carry
exemple 2:

bsf STATUS,c
movlw B'00010110'
movwf 20h
RRF 20h,0

c b7 b6 b5 b4 b3 b2 b1 b0
20 1 0 0 0 1 0 1 1 0
RLF 0 1 0 0 0 1 0 1 1

• Permutation : opération inverse le demi-octet de poids faible avec celui de poids fort.
Syntaxe:
swapf f,d
exemple:
movlw 0xc5 ;charger 0xc5 dans w
movwf 0x5F ; placer [w] dans l'adresse 5F
swapf 0x5F,f ; [5F]= 5c
Ecrire le programme qui :

• Remplit les 80 premières positions de la RAM utilisateur par les nombres allant de 1 à 80

• Recopier le contenu de la zone mémoire [20h,2Fh] dans la zone [160h,16Fh]

• permet de multiplier par 2 le contenu des cases mémoire (RAM) comprises entre 160h et 16F (indication :
un décalage logique à gauche équivalent à une multiplication par 2).
g) l'instruction Call: permet d'appeler une fonction. une fonction est un sous
programme écrit à la suite du programme principal.

programme principal
instruction1
instruction2
instruction3
CALL tempo
instruction5
instruction6

Fonction
tempo
instruction
instruction
instruction
instruction
return ou retlw k

NB :
• return: retour de sous programme
• retlw k: retour de sous programme avec k dans w
 Pointer un tableau en mémoire programme:
• les registres utilisés : w et PCL (poids faible du compteur programme)
• les étapes qui permet de pointer un tableau :
étape 1: placer le numéro de la ligne du tableau dans le programme principale (Movf ind,w)
étape 2: appel du sous programme call tableau
étape 3: on ajoute au compteur programme le contenu de w addwf PCL,f, ce qui permet de sauter à la ligne qui nous intéressons.
étape 4: ecrire le tableau sous forme de retlw
exemple:
movf index,w
call tableau

tableau
retlw 'A' ; premier élèment =0
retlw 'z' ;
:
retlw 225
Exercice :
ecrire un programme qui permet de pointer un tableau 7segment dans la mémoire programme et copier son contenu à partir de
l'adresse 20h
• les instructions des opérations logiques:(modifié le bit z)
 et logique :
andwf reg,d
andlw val
 complèment :
comf reg,d
 ou logique :
iorwf reg,d
iorlw val
 ou exclusif :
xorwf reg,d
xorlw val
exemple :
movlw FFh
movwf 70h
comf 70h, f
andwf 70h,f
iorwf 70h,f
xorwf 70h,w
• les autres instructions
 clrf f : [f] = 00h
 clrw : [w]= 00h
 nop : no opération
Remarque:
Toutes les instructions sont excutées en un cycle d'instruction (càd le temps
nécessaires à l'éxècution d'une instruction) , à part les instructions de saut ( par
exemple: call, goto) qui sont exécutées en 2 cycles d'instructions.

f osc
l ' hor log e d ' instruction 
4
avec f osc la fréquence d'horloge
Exemple : soit la fréquence d'horloge est de 4MHz
• calculer l'horloge d'instruction
• calculer la durée d'exècution d'une instruction standard
VI.les ports d'entrée/sortie du PIC 16F877

Le µc dispose de 5 ports d'e/s parallèles (A,B,C,D,E) tous les ports sont pilotées par deux registres:

• PORTx: recopiant les états logiques de chaque broche de port (par exemple PORTA)

• TRISX : détermine si le PORTx ou certaines lignes de port sont en entrée ou en sorties (par exemple:

TRISB)

si bit i de trisx=0 -> bit i de portx configuré en sortie

si bit i de trisx=1 -> bit i de portx configuré en entrée

NB: au reset toutes les lignes de ports sont configurées en entrées


1) PORTA: est un port de 6 bits
• Fonctionnement des broches RA0,RA1,RA2,RA3,RA5
 E/S numérique
 Entrées analogiques
NB: au reset, ces e/s sont configurées en entrées analogique, pour les utiliser en e/s numérique,il faut écrire 6h dans le registre
ADCON1
• Fonctionnement de la broche RA4:
 E/S numérique
 Entrée horloge pour le TIMR0
NB: RA4 est une E/S à drain ouvert pour l'utiliser comme sortie logique, il faut mettre une résistance externe vers VDD
VDD

PIC R
Led
RA4

Le principe d'une sortie drain ouvert


• si RA4=0 => k est fermé => la sortie est reliée à la masse
• si RA4=1 => k est ouvert => la sortie sera déconnectée , s'il n'y a pas la résistance
de tirage qui place la sortie au niveau haut
2) PORTB: est un port de 8bits

• Fonctionnement:

 E/S numériques

 toutes les entrées du portB peuvent d‘être pourvues de résistances de tirage validées par le bit RBPU =0 du registre

OPTION_Reg

3) PORTC: est un port de 8bits

• Fonctionnement:

 E/S numériques

 broches d'accès à différents modules (Timer1,CCP1/2,Timer2,I2C,Portsérie)


4) PORTD: est un port de 8bits

 E/S numériques

 mode parallel slave port (PSP)

Le fonctionnement de ce port dépend de la valeur qui est placée dans le bit 4 de TRISE

si TRISE,4= 0 =>PORTD en mode normal

si TRISE,4= 1 =>PORTD en mode PSP, c’est-à-dire le microcontrôleur peut être interfacé avec un

autre microprocesseur. Dans ce cas le PORTD représente le bus de données et le PORTE les

signaux de contrôle(RE, WE et CS)

5) PORTE : est un port de 3 bits


Au reset: les 3 bits de PORTE sont configurées en entrées analogiques
Fonctionnement:
• E/S numérique (6h->ADCON1)
• Entrés analogiques du CAN
• si TRISE,4=1 => les trois broches deviennent les entrées de control.
Exercice
Ecrire un programme qui permet d'allumer LED branchée sur RB2 lorsque nous
perssons le bouton poussoir sur la broche RB1, et l'éteint lorsque nous le relâchons
(NB: RB1 passe à 0 quand on appuie)
Remarque: pour réaliser la temporisation, il faut initialiser une variable à une valeur
donnée puis décrémenter en boucle jusqu'à ce qu'elle atteint zéro.
• Temporisation avec une boucle
Exemple:
movlw N1 ; initialiser compteur
movwf compt1 ; prend 1cycle
ici decfsz compt1,f ; prend 1cycle si elle ne saute pas et 2 cycles quand elle saute
goto ici ; prend 2 cycle

Nombre de cycle= 1+1+(N1-1)(1+2)+2


= 3N1+1 cycles
la valeur max que l'on peut donner à N1=256 ce qui donne une temporisation max de
769 cycles
Exemple : soit la fréquence de l'oscillation est de 4MHz
1cycle ---> 1µs
ce qui donne une temporisation max de 769 µs
NB1: pour faciliter l'utilisation de cette temporisation on va l'utiliser comme une fonction
que l'appellera tempo1. Il faut ajouter 2 cycles pour l'instruction call tempo1 et 2 cycles
pour l'instruction return
T=773µs (fosc=4MHz)
• Temporisation avec 2 boucles imbriquées

La boucle intérieur (N1) se fait toujours 256 fois la boucle extérieur se fait N2 fois
tempo2
movlw N1 ;1cycle
movwf compt1 ;1cycle
movlw N2 ;1cycle
movwf compt2 ;1cycle
t2 decfsz compt1,f
goto t2 ; N2((1+2)(N1-1)+2)
decfsz compt2,f
goto t2 ;(1+2)(N2-1)+2
return ; 2cycles

Nombre de cycle= 5+770N2 avec N1=256


le maximum est obtenu pour N2=256
Nombre de cycle= 197125 cycles
pour Fosc=4MHz
T =197125µs=0,19s
• Temporisation avec 3 boucles imbriquées:
les boucles intérieurs (N1 et N2) se font toujours 256 fois, la boucle extérieur se fait
N3 fois
tempo3
movlw N1
movwf compt1
movlw N2
movwf compt2
movlw N3
movwf compt3
t3 decfsz compt1,f
goto t3 ;(((2+1)(N1-1)+2)N2) N3
decfsz compt2,f
goto t3 ;((2+1)(N2-1)+2)N3
decfsz compt3,f
goto t3 ;(2+1)(N3-1)+2
return
Le nombre de cycle:
Ncycle=7+197122N3 avec N1=N2=256
le maximum est obtenu pour N3=256
T=50463236µs=50,46s
Exercice:
Soit la fréquence de l'oscillation est de 4MHz, écrire un programme qui permet de clignoter
une LED branchée sur RA1, avec une temporisation voisin de 0,5s

Exercice
Soit la fréquence de l'oscillation est de 20MHz,écrire un programme qui permet de
réaliser le jeu de lumière suivant, avec les leds connectées sur le port B, avec une
temporisation voisine de 0,5s entre deux séquences successives :
V. les mémoires permanents:
la mémoire EEPROM de données:
le pic 16F877 dispose de 256 octets de mémoire EEPROM de donnée.
son implantation physique commence à la position d'adresse absolue 2100h
1) Les registres utilisées:
EEADR : registre d'adresse
EEDATA: registre de donnée
EECON1: 1ere registre de contrôle
EECON2: 2eme registre de contrôle
 EECON1:
EEPGD 6 -- -- -- WRERR WREN WR RD

• EEPGD: accés à la mémoire EEPROM où à la mémoire programme


0:EEPROM de données
1: Mémoire programme (flash)
• WRERR: erreur d'écriture (indicateur)
0: pas d'erreur
1: une erreur s'est produit
• WREN : validation de l'écriture dans L'EEPROM
0:écriture interdite
1: écriture autorisée
• WR=1 pour démarrer l'écriture , il est remis à zéro automatiquement à la fin de l'écriture
• RD=1 pour démarrer la lecture, il est remis à zéro automatiquement à la fin de la lecture
2) procédure de lecture dans l'EEPROM:

 Mettre le bit EEPGD à 0


 Placer l'adresse de la position à lire dans EEADR
 Mettre le bit RD à 1
 Traiter la donnée disponible dans EEDATA
 Recommence au étape 2 si on a d'autre données à lire

NB: pour déclarer des donnés qui seront stockée dans l'EEPROM de donnée au
moment de l'implantation du programme sur le PIC
org 0X2100
DE '' BONJOUR'' , 22, 'z'

Exercice:
programme qui utilise la directive DE pour initialiser les premières positions de
l'EEPROM de données avec la chaine '' BONJOUR'' , le programme doit ensuite
lire ces caractères ( 1 par 1) dans l'EEPROM et les copier dans la RAM à partir de la
position 0x150
3) procédure d'écriture dans l'EEPROM
• mettre le bit EEPG à 0
• positionner le bit WREN pour valider l'écriture dans l'EEPROM
• placer l'adresse dans EEADR
• placer la donnée à écrire dans EEDATA
• interdire les interruptions càd mettre le bit GIE de registre INTCON
• écrire 55h dans EECON2
• écrire AAh dans EECON2
• positionner le bit WR
• autoriser les interruptions
• attendre la fin d'écriture en surveillant le bit WR ou le drapeau EEIF
• recommencer au point 3 si on a d'autre donnée à écrire
• remettre à zéro le bit WREN

Exercice: ecrire un programme qui initialise les 26 premières positions de l'EEPROM


de données avec les lettres de l'alphabet
Exercice :
Ecrire un programme qui permet d’afficher un compteur de 0 à 9 sur un afficheur 7segment,selon le
fonctionnement suivant:
• On branche un bouton poussoir sur la broche RA4 de sorte que celle-ci passe à 0 quand on appuie
• On branche un afficheur 7segment cathode commune sur le port C.
• Chaque fois qu’on appuie sur le bouton poussoir, le contenu de l’afficheur doit s’incrémenter.
Exercice : Écrire un programme qui utilise
 la directive DE pour initialiser les première positions de l’EEPROM de donnée avec la chaîne «Bonne
journée »,
 le programme doit ensuite lire ces caractères (octet par octet) dans l’EEPROM,
 copier dans la RAM à partir de la position 120h,
 pour chaque fin d’écriture la LED branché sur RE0 va clignoter 3 fois.
Exercice : Ecrire un programme qui permet la gestion de 2 feux d’un carrefour selon le
cahier de charge suivant:
 Feu tricolore sur port C
 Pour la voie 1 : feu rouge bit 0, orange bit 1 et vert bit 2.
 Pour la voie 2 : feu rouge bit 5, orange bit 6 et vert bit7.
Fonctionnement :
 Allumer le feu rouge 1 et le feu vert 2
 Allumer le feu rouge 1 et le feu orange 2
 Allumer le feu vert 1 et le feu rouge 2
 Allumer le feu orange 1 et le feu rouge 2
 Les feux Rouge, vert et orange doivent être allumés respectivement pendant 36s, 32s
et 4s.

Vous aimerez peut-être aussi