Sie sind auf Seite 1von 49

1/4 ToG 2007

TD Microcontrleur, famille PIC


Seances 1 et 2

Lecture criture dune mmoire RAM

Dans ce probleme, nous tudions la ralisation d`une console permettant de lire et d`crire
manuellement dans une mmoire RAM (ces oprations se Iont normalement sous le
contrle d`un processeur ), lorsque le calculateur est dconnect (sorties en haute
impdance).
La mmoire RAM que nous tudions est extensible jusqu`a 64 k-mots de ELWV (un k-mots
vaut 2
10
1024 mots). Elle se compose de circuits imprims ou cartes de 1 k-mots chacune,
enIonces dans les connecteurs d`un jeu de lignes ou MULTIBUS (voir la Iigure 1).

Le MULTIBUS comprend :
- un bus d`adresses de 16 lignes (A0, A1, ., A15)
- un bus de donnes de 8 lignes (D0, D1, ., D7)
- une ligne R/W (0 criture, 1 lecture)
- des lignes d`alimentations
- ventuellement des lignes d`inhibition du dispositiI de slection (nous n`en Ierons
pas usage ici)
On dsire lire et crire la mmoire RAM en code hexadcimal a partir d`une console
comprenant (voir Iigure 3) :
- Les touches de codes : en pressant sur l`une de ces touches, on charge le code d`un
chiIIre hexadcimal 0, 1, 2, .., 9, A, B, C, D, E, F dans la mmoire d`un registre
tampon C.
- La touche de slection d`une adresse : SEL
- La touche INC : cette touche permet d`incrmenter le slecteur d`adresses et
d`obtenir en mme temps une lecture de la position mmoire adresse.
- La touche ECR : elle permet d`crire, a la position mmoire slectionne, les deux
derniers codes entrs au clavier (moiti droite du registre C), et aussi d`incrmenter
l`adresse slectionne de maniere a Iaciliter l`criture de segments de programme.
Deux dispositiIs d`aIIichage Ionctionnent en permanence, visualisant d`une part
l`adresse et d`autre part le contenu de la mmoire adresse.


I - Etude de la mmoire (figure 2)
La Iigure 2 donne le schma d`une demi carte mmoire compose de 4 circuits intgrs de
128 mots de 8 bits chacun (mmoire du type 6810 de Motorola) et de circuits de dcodage
d`adresse.
Chaque circuit intgr comporte 6 bornes de validation : 0 CS , 1 CS , 2 CS , 3 CS , 4 CS et
5 CS . Le circuit est slectionn lorsque ses CSi sont a 1 et les CSi sont a 0.

Quelles sont les zones mmoires (plages d`adresses : adresse de dbut et adresse de Iin)
permettant d`accder aux circuits 1, 2, 3 et 4 de la demi carte de la Iigure 2 ?
Mme question pour l`autre demi carte (non reprsente sur la Iigure 2).

TD Microcontrleur INSA GE
2/4
II - Encodage dun clavier
On dsire concevoir un dispositiI encodant 16 touches (0, 1, .9, A, B, .F) sur 4 Iils.
C'est-a-dire que l`appui sur la touche 0 doit Iournir la valeur 0 sur les 4 Iils. La touche 1 la
valeur 1 et ainsi de suite :

1111
1110
0001 1
0000 0
F
E
#
On supposera que la pression sur une touche Ierme un interrupteur simple.

- En analysant cet nonc, vriIier que le probleme est mal pos, le corriger, puis raliser
le systeme adquat.


III - Ralisation du registre tampon C (figure 3)
On propose maintenant de raliser le registre tampon C. Ce registre permettra de charger
le bus d`adresses (16 bits) et le bus de donnes (8 bits.) a partir des valeurs tapes sur le
clavier.
Le registre C est Iorm de bascules type D. Ce registre reoit un nouveau code du clavier
en C0, C1, C2, C3 et dcale automatiquement d`un pas les anciens codes (le code situ en
C12, C13, C14, C15 est perdu).

- Quelle est la taille (en bits) du registre C ? Combien de bascules sont ncessaires ?
- Dessiner entierement le registre C. Mettre en vidence le chemin suivi par les donnes
du clavier au slecteur d`adresses, ainsi que les signaux de contrle.


IV - Ralisation du slecteur dadresses (figure 3)
C`est le circuit qui actionne directement le bus d`adresse mmoire. Il s`initialise avec la
commande SEL et reoit la commande INC.

- Dessiner entierement ce circuit, en incluant les signaux de contrle.


V - Ralisation du contrleur de bus de donnes (figure 3)
C`est le circuit qui permet d`crire dans la mmoire. Recevant la commande ECR, il place
la mmoire en mode d`criture puis charge le bus de donnes avec les valeurs des bits de
poids Iaibles du registre C. Il incrmente ensuite l`adresse mmoire et place la mmoire en
mode de lecture.

- Dessiner completement ce circuit. Quelle caractristique particuliere doit-il comporter ?



TD Microcontrleur INSA GE
3/4



TD Microcontrleur INSA GE
4/4

INSA GE IF2
1/3 ToG 2007
TD Microcontrleur, famille PIC
Seance 3


Dmultiplexage dadresses

On souhaite commander, avec un microcontrleur, 16 sorties quelconques associes a des
voyants de signalisation. On veut pouvoir modiIier l`tat de chaque sortie (active : 1, ou non
active : 0) sans modiIier l`tat des autres sorties. On veut aussi pouvoir mettre a zro toutes
les sorties Iacilement.
AIin de minimiser le nombre de Iils ncessaires au pilotage des 16 sorties, on propose
d`utiliser deux dmultiplexeurs 74HC259 (cI. Figure 1).
La Iinalit de cet exercice est de raliser le cblage et la logique entre un microcontrleur
de type PIC et les entres des 74HC259 de la Figure 1.


Figure 1 . Solution propose pour le pilotage ae 16 sorties. Les LED symbolisent les sorties.

I Solution sans circuits 74HC259
- Sans les dmultiplexeurs 74HC259, combien de Iils seraient ncessaires au pilotage des
16 sorties ?

- Cette solution est elle toujours convenable ?

TD 3 Microcontrleur INSA GE
2/3

II Solution retenue : utilisation de circuits 74HC259
Analyser la table de vrit du circuit 74HC259 (cI. Figure 2 et Figure 3).

- Avec un seul circuit, combien de sorties peuvent tre pilotes ? Combien de bits (ou Iils)
sont ncessaires au pilotage de ce circuit ?
- Quels sont les 4 modes de Ionctionnement de ce circuit ?
- D`apres le cahier des charges, quels sont les modes de Ionctionnement du 74HC259
utiles a notre systeme et quelle(s) Ionction(s) leurs sont associes ?
- Pour les modes aecoaer et aaressable latch , prcisez quand la valeur de la
donne G est applique sur une sortie 4.

III Liaison microcontrleur systme de 16 voyants
On se place maintenant cot microcontrleur. On associe une adresse a chaque voyant (ou
sortie). On pilotera l`tat d`une sortie en slectionnant cette sortie grce a son adresse puis en
crivant son nouvel tat sur le bus de donnes. EnIin, on validera le changement d`tat de la
sortie.

- Combien de ELWV GDGUHVVHV sont ncessaires au pilotage des 16 voyants ?
- De mme pour les ELWV GH GRQQpHV ?
- Sachant que l`on veut pouvoir mettre toutes les sorties a 0 Iacilement et qu`il est
ncessaire de valider les donnes pour eIIectuer le changement d`tat d`une sortie, combien
de bits sont ncessaires au FRQWU{OH de ce systeme ?


IV Ralisation du cblage
- A quoi doit-on relier les entres A
0
, A
1
et A
2
puis D des 74HC259 ? Prvoir la
validation des donnes.

- Comment peut on piloter 16 sorties ? Raliser le schma de cblage du bus d`adresse, ne
pas oublier la validation des donnes.

- Ajouter la logique pour permettre une mise a zro de toutes les sorties (on disposera
d`un bit reset provenant du microcontrleur).



TD 3 Microcontrleur INSA GE
3/3

Figure 2 . Schema fonctionnel au 74HC259.


Figure 3 . Table ae verite au 74HC259.

INSA GE IF2
1/7 ToG 2007
TD Microcontrleur, famille PIC
Seance 4


Premire application avec un PIC : faire clignoter une LED

Le but de cette sance de TD est d`crire le programme assembleur pour le PIC16C84
permettant de Iaire clignoter une LED. Le schma de l`application est propos sur la Figure 1.
Des que le montage sera mis sous tension, la LED devra clignoter indIiniment (priode
de 400 millisecondes).


Figure 1 . Schema ae lapplication.

I Organigramme du programme
Dessiner l`organigramme de l`application. Pour la temporisation on Iera apparatre une
Ionction Tempo .

TD 4 Microcontrleur INSA GE
2/7

II Fonction Tempo
Le code assembleur suivant est celui d`une Ionction de temporisation. Les variables
Tempo_value_B1 et Tempo_value_B2 sont stockes en RAM aux adresses 0x0020 et
0x0021. Le microcontrleur est cadenc a 4MHz.
1 Tempo_Wms:
2 BCF STATUS, RP0 ;
3 MOVWF Tempo_value_B1 ;
4 Tempo_B1:
5 MOVLW .249 ;
6 MOVWF Tempo_value_B2 ;
7 Tempo_B2:
8 NOP ;
9 DECFSZ Tempo_value_B2,1;
10 GOTO Tempo_B2 ;
11 DECFSZ Tempo_value_B1,1;
12 GOTO Tempo_B1 ;
13 RETURN ;

a- Indiquez pour chaque ligne de cette Ionction ce qui est ralis par le microcontrleur
(cI. documents constructeur Figure 3).
b- En dduire l`organigramme de la Ionction Tempo_Wms.

c- Donner le nombre de cycles correspondant a l`excution de chaque instruction (cI.
documents constructeur Figure 3).
d- En dduire le temps d`excution de la Ionction Tempo_Wms en Ionction de la valeur
contenue dans le registre W (cI. Figure 6).
e- JustiIier l`utilisation de l`instruction NOP ligne 8 et de la valeur littrale ligne 5.

I- Avec un seul appel a cette Ionction, quelle est la dure de la temporisation la plus
longue que l`on puisse raliser ?


III Programme principal
a- Donner les instructions permettant de conIigurer la broche RB0 pour piloter la LED
(cI. documents Figure 2, Figure 4 et Figure 5).


b- Donner les instructions pour allumer et teindre la LED (cI. Figure 4 et Figure 5).



c- Ecrire en assembleur le programme principal. (Pour obtenir un programme complet,
vous pourrez complter le listing suivant).
TD 4 Microcontrleur INSA GE
3/7

#include <p16F84.inc> ; def. des variables du microprocesseur
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC; config. du PIC

;***** DEFINITION des VARIABLES
Tempo_value_B1 equ 0x0020
Tempo_value_B2 equ 0x0021

;**************************************************************
ORG 0x0000 ; vecteur reset
GOTO main ; aller au dbut du programme

Tempo_Wms:

; code de la question II

RETURN



main: ; programme principal, vous





















END ; directive 'fin de programme'


TD 4 Microcontrleur INSA GE
4/7

Annexes :
Extraits de la documentation Microchip PIC16C84

http://ww1.microchip.com/downloads/en/devicedoc/30445c.pdI




Figure 2. Organisation ae la memoire, PIC 16C84


TD 4 Microcontrleur INSA GE
5/7


Figure 3. Jeu ainstructions aes PIC 16CXXX

TD 4 Microcontrleur INSA GE
6/7


Figure 4 . Fonctionnement au PORTB


TD 4 Microcontrleur INSA GE
7/7


Figure 5 . Exemple autilisation et aescription aes registres associes au PORTB.



Figure 6 . Cycles horloge et instructions

INSA GE IF2
1/7 ToG 2007
TD Microcontrleur, famille PIC
Sances 5 et 6
Soru1o11on por bo1ogoge,
opp11oo11on pour 1e oodoge des 1ouoes d'un o1ou1er
Le but de cette sance de TD est dcrire en assembleur (famille PIC16XXX) une fonction
permettant de scruter un clavier de 16 touches et de donner la valeur de la touche presse (on
parlera de dcodage). On supposera quune seule touche est appuye la fois.
Le schma interne du clavier est dcrit sur la Figure 1.
La fonction de scrutation/dcodage sera appele par le programme principal. Cette
fonction devra attendre quune touche soit presse. Elle retournera la valeur dcode (de 0
F).
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
RA0
RA1
RA2
RA3
RB0 RB1 RB2 RB3
Figure 1 : Schma fonctionnel du clavier (sans les rsistances, les diodes)

1 - Somo de 1'opp11oo11on
- Raliser le schma global de lapplication (cf. Figure 2). On veillera particulirement aux
rsistances de rappels et de protections ncessaires lutilisation du clavier.
11 - Orgon1gromme
- Dcrire le principe de fonctionnement de la scrutation du clavier.
- Donner une mthode permettant de faire le dcodage.
- Etablir lorganigramme de la fonction de scrutation/dcodage (faire apparaitre ces
fonctions).
111 - Progrommo11on des ]ono11ons
- Ecrire en assembleur les fonctions de scrutation et de dcodage. Le code de la touche (de
0 F) sera retourn via le registre W.
TD 5-6 Microcontrleur INSA GE
2/7
1V - Pour o11er p1us 1o1n.
- Exemples dutilisation : minuterie programmable, digicode 4 chiffres,
- Programmation en utilisant uniquement le port B (pour la lecture RB4 RB7), le port A
est ainsi libr.
- Critiquer la solution de programmation mise en place pour la scrutation et proposer une
mthode plus adapte.
Figure 2: Schma du PIC 16F84
TD 5-6 Microcontrleur INSA GE
3/7
Annees :
1ro11s de 1o dooumen1o11on M1oroo1p P1CJtCS4
http://ww1.microchip.com/downloads/en/devicedoc/30445c.pdf
Figure 3: Organisation de la mmoire, PIC 16C84
TD 5-6 Microcontrleur INSA GE
4/7
Figure 4: Jeu dinstructions des PIC 16CXXX
TD 5-6 Microcontrleur INSA GE
5/7
Figure 5 : Description du fonctionnement du PORT A
TD 5-6 Microcontrleur INSA GE
6/7
<
Figure 6 : Description du fonctionnement du PORT B
TD 5-6 Microcontrleur INSA GE
7/7
Figure 7 : Dtails des registres du PIC16C84.
INSA GE IF2
1/9 ToG 2007
TD Microcontrleur, famille PIC
Seance 7

Exercices de programmation en assembleur
Il est conseill de savoir Iaire ces exercices.
Conseils :
- commencer par Iaire un organigramme,
- ensuite, traduire rigoureusement et tape par tape votre organigramme
- ne pas hsiter a ajouter des variables temporaires (en RAM) ncessaires au codage
assembleur,
- ne chercher pas trop a optimiser votre code et l`utilisation de la mmoire,
- utiliser des noms de variables clairs (valeurs, Ionction ou de boucle),
- encore une Iois : utiliser des variables (temporaires, parametres, .) en RAM.

I Table de retour de fonction
D Raliser la Ionction de dcodage hexadcimal 7 segments (cI. cours).
E On veut connatre les valeurs approches de sin(x) pour x entier et compris entre 0 et
90. 3URSRVHU une solution de mise en ouvre (attention aux valeurs relles.).

II Adressage index
D Ecrire le programme permettant d`additionner 2 vecteurs de taille n. Les vecteurs sont
en mmoire RAM aux adresses v1 et v2, ainsi que leur taille n. Le vecteur rsultat s sera aussi
stock en RAM. On suppose que la somme de chaque composante est inIrieure a 255. (cI.
Figure 4)
E Les 46 valeurs pour x0, 2, 4, ., 90 de

) sin( . 255 x ont t crites dans les 46
premieres adresses de l`EEPROM du PIC. Ecrire la Ionction retournant la valeur de sin(x),
x|0;90|. (cI. Figure 5 et Figure 6).
F ModiIier la Ionction prcdente aIin d`obtenir sin(x) pour x|0;180| (cI. Figure 8).

III Arithmtique : addition 16 bits
- Faire la Ionction $GG permettant d`additionner deux valeurs a et b de 16 bits. Le
rsultat de l`addition s Iera aussi 16 bits. Chaque variable 16 bits sera compose de 2 octets :
la partie basse (octet de poids Iaible, par exemple al pour a) et la partie haute (poids Iort, ah).
- Ecrire un programme utilisant la Ionction Aaa16. Les variables a et b seront a initialiser
aux valeurs de votre choix.
- Signaler le dpassement de capacit (cI. Figure 3) en allumant une LED sur PORTB0~.

IV Arithmtique : Multiplication 8 bits
- Faire l`organigramme d`une Ionction permettant de multiplier deux valeurs 8 bits a et b.
Le rsultat sur 16 bits sera crit dans 2 variables 8 bits ml (octet de poids Iaible) et mh (octet
de poids Iort).
- Ecrire le code assembleur de cette Ionction.

TD 7 Microcontrleur INSA GE
2/9

Annexes :
Extraits de la documentation Microchip PIC16C84

http://ww1.microchip.com/downloads/en/devicedoc/30445c.pdI



Figure 1. Organisation ae la memoire, PIC 16C84

TD 7 Microcontrleur INSA GE
3/9

Figure 2 . Details aes registres au PIC16C84.


TD 7 Microcontrleur INSA GE
4/9

Figure 3. Detail au registre STATUS

TD 7 Microcontrleur INSA GE
5/9


Figure 4 . Description ae laaressage inairect



TD 7 Microcontrleur INSA GE
6/9

Figure 5. Description aes accs a lEEPROM (1/2)

TD 7 Microcontrleur INSA GE
7/9

Figure 6 . Description aes accs a lEEPROM (2/2)





TD 7 Microcontrleur INSA GE
8/9


Figure 7. Jeu ainstructions aes PIC 16CXXX

TD 7 Microcontrleur INSA GE
9/9

Figure 8 . Description aetaillee aes instructions SUBLW et SUBWF


INSA GE IF2
1/11 ToG 2007
TD Microcontrleur, famille PIC
Seance 8

Application :
Pilotage dune sortie parmi 8


On souhaite piloter une sortie parmi 8 a l`aide d`un clavier 16 touches. Seules les 8
premieres touches (de 0 a 7) sont utilises, chaque touche est associe a une sortie. L`appuie
sur une touche provoque l`inversion de l`tat logique de la sortie correspondante.
A l`initialisation, on souhaite que toutes les sorties soient inactives (tat logique bas).

On disposera des Ionctions suivantes :
TempoWms : qui permet d`attendre W millisecondes pour un PIC cadenc a 4MHz.
ScruteClavier : qui scrute le clavier tant qu`aucune touche n`est enIonce et retourne
la valeur de la touche enIonce dans W. Le clavier doit tre connect au PORTB : bits 0 a 3
pour l`criture colonne active, bits 4 a 7 pour la lecture des lignes (dtection d`une touche si
tat haut, tat bas si aucune touche n`est enIonce).

On disposera d`un PIC 16F84.
On utilisera un dmultiplexeur pour le pilotage des 8 sorties (type 74HC259, cI. Figure 10
et Figure 11).
Le clavier est un ensemble de 16 boutons poussoir cbls de maniere a permettre la
scrutation par balayage (Figure 12).


I Schma de lapplication
D Expliquer et justiIier le choix des composants du schma de l`application (Figure 1). On
s`intressera notamment aux rles et aux valeurs des rsistances R1 a R8.

II Organigramme de lapplication
D Faire l`organigramme global de l`application.
E Dtailler le pilotage des sorties (cI. document 74HC259, Figure 11).

III Programmation
Ecrire le programme en assembleur. On pourra Iaire appel aux Ionctions TempoWms et
ScruteClavier (ne pas rcrire ces Ionctions).
TD 8 Microcontrleur INSA GE
2/11

Figure 1 . Schema Application 8 sorties

TD 8 Microcontrleur INSA GE
3/11

Annexe 1:
Extraits de la documentation Microchip PIC16C84




Figure 2. Organisation ae la memoire, PIC 16C84

TD 8 Microcontrleur INSA GE
4/11

Figure 3 . Details aes registres au PIC16C84.


TD 8 Microcontrleur INSA GE
5/11

Figure 4. Detail au registre STATUS

TD 8 Microcontrleur INSA GE
6/11

Figure 5 . Description au fonctionnement au PORT A

TD 8 Microcontrleur INSA GE
7/11


Figure 6 . Description au fonctionnement au PORT B



Figure 7. Schema au PIC 16F84



TD 8 Microcontrleur INSA GE
8/11


Figure 8. Jeu ainstructions aes PIC 16CXXX

TD 8 Microcontrleur INSA GE
9/11

Figure 9. Caracteristiques electriques

TD 8 Microcontrleur INSA GE
10/11

Annexe 2:
Extraits de la documentation du 74HC259



Figure 10 . Schema fonctionnel au 74HC259


Figure 11 . Table ae verite au 74HC259

TD 8 Microcontrleur INSA GE
11/11

Annexe 3:
Schma du clavier.


0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

Figure 12 . Schema fonctionnel au clavier (sans les resistances, les aioaes.)