Vous êtes sur la page 1sur 6

Ministère de l’Enseignement Supérieur ‫ﻭﺯﺍﺭﺓ ﺍﻟﺘﻌﻠﻴـﻢ ﺍﻟﻌﺎﻟﻴﻮﺍﻟﺒﺤﺚ ﺍﻟﻌﻠﻤﻲ‬

et de la Recherche Scientifique

Université de Carthage
‫ﺟﺎﻣﻌـﺔ ﻗﺮﻃﺎﺝ‬

Ecole Nationale d’Ingénieurs de Carthage ‫ﺍﻟﻤﺪﺭﺳـﺔ ﺍﻟﻮﻃﻨﻴﺔ ﻟﻠﻤﻬﻨﺪﺳﻴﻦ ﺑﻘﺮﻃﺎﺝ‬


Année universitaire 2015-2016
Devoir Surveillé
Matière : Microcontrôleur

Enseignant(es) : F.Salem, Y.Lahbib, M.Abbes, W.Hakimi Date : 15/03/2016


Filière / Classe : 1Ing Mecatronique Durée : 1h30
Barème indicatif : 4/11/5 Documents : aut. / non aut.
Nbre. de pages :7 Calculatrice : aut. / nonaut.

Nom et prénom: Classe :


CIN: Salle :

Exercice 1 : Conversion BCD-Binaire(4 pts)
On se propose de vous guider pour écrire un programme assembleur permettant de convertir un nombre codé en BCD sur 8 bits en un nombre binaire sur 8
bits.
Entrée du programme : Variable BCD
Sur un octet, on peut coder deux chiffres décimaux, donc on peut avoir un nombre compris entre 00 et 99, un chiffre codé sur chaque quartet. Le quartet de
poids fort contient le chiffre des dizaines et le quartet de poids faible les unités.
Sortie du programme : Variable BIN
Déroulement du programme :
Il faut extraire les deux décimaux DISAINE et UNITE de BCD.
BIN← DISAINE*10+UNITE
1) Donner le programme assembleur(3 pts) en suivant l'organigramme suivant, penser à créer les
variables(1 pts) nécessaires pour ce programme.

Début
LIST p=16F877 ; Définition de processeur

#include <p16F877.inc> ; fichier include ← (BCD>>1)


W←
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

BCD equ 0x20


←0b01111000&W
W←
BIN equ 0x21

org 0x000 ; Adresse de départ après reset ←W


BIN←
BCF STATUS,C

RRF BCD,w ← BIN>>2


BIN←
ANDLW b'01111000'

MOVWF BIN
←BIN+W
BIN←
BCF STATUS,C

RRF BIN,f

RRF BIN,f ←quartet faible BCD


W←
ADDWF BIN,f

MOVLW b'00001111' ←BIN+W


BIN←
ANDWF BCD,w

ADDWF BIN,f
FIN
end

-1-
Exercice 2 :
Soit le montage de la figure ci-dessous qui connecte 4 diodes LEDs et un interrupteur au PIC 16F877A. Le langage assembleur est utilisé pour programmer le
PIC.
VDD=5v
VDD=5v Led3
RB0 R2

R3 RB5 R2
Led4
RA0 PIC 16F877A
Led1
Interrupteur RE0
R1

Led2
RE2
R1

GND

1) Calculer les valeurs des résistances R1, R2 et R3 en justifiants les réponses par les équations adéquates ?

On donne : courant direct des diodes (IF=10 mA), Tension directe des diodes = 1,7v, VOH = 4.3 V pour IOH = 10 mA et VOL = 0.35 V pour IOL = 10 mA.

R2=(VDD-VF-VOL) / IF R1=(VOH-VF)/IF
R2=(5-1.7-0.35)/0.01=295Ω R1=(4.3-1.7)/0.01=260Ω

R3=10 KΩ
(1 pts)

2) Ecrire une macro qui s’appelle PAGE0, permettant de se placer en 3) Ecrire une macro qui s’appelle PAGE1, permettant de se placer en
bank0 de la RAM du PIC. bank1 de la RAM du PIC.

PAGE0 macro PAGE1 macro


bcf STATUS,RP0 bsf STATUS,RP0
bcf STATUS,RP1 bcf STATUS,RP1
endm endm
(1 pts)

4) Ecrire une macro qui s’appelle INPUT permettant de configurer la 5) Ecrire une macro qui s’appelle OUTPUT permettant de configurer les
broche RA0 du PIC en entrée. broches RB0, RB5, RE0 et RE2 du PIC en sortie.

Input macro Output macro


bsf TRISA,0 bcf TRISB,0
endm bcf TRISB,5
bcf TRISE,0
(1,5 pts) bcf TRISE,2
(0,5 pts)
endm

6) Ecrire une macro qui s’appelle DigitMode permettant d’activer le mode 7) Ecrire la fonction ConfigPIC permettant de configurer le
numérique des PORTS A et E. montage par appels aux macros définis précédemment.
DigitMode macro ConfigPic PAGE1
Input
movlw 0x06 Output
movwf ADCON1 (2 pts)
endm DigitMode
return

-2-
8) Ecrire la fonction RBOn permettant d’allumer les LEDS connectés au 9) Ecrire la fonction RBOff permettant d’éteindre les LEDS
port B. connectés au port B.

RBOn BCF PORTB,0 RBOff BSF PORTB,0


BCF PORTB,5 BSF PORTB,5
return return
(1,5 pts)

10) Ecrire la fonction REOn permettant d’allumer les LEDS connectés au 11) Ecrire la fonction REOff permettant d’étreindre les LEDS
port E connectés au port E

REOn BSF PORTE,0 REOff BCF PORTE,0


BSF PORTE,2 BCF PORTE,2
return return
(1,5 pts)

12) Ecrire le programme principal qui appelle les fonctions précédentes comme suit :
a. si l’interrupteur est fermé le PIC allume les leds du port B et éteint celles du port E.
b. si l’interrupteur est ouvert le PIC allume les leds du port E et éteint celles du port B.

main

btfss PORTA,0 (2 pts)


goto Procedure1

goto Procedure2 Procedure2 :

Procedure1 : call RBOff

call RBOn call REOn

call REOff goto main

goto main end

Exercice 3:

On cherche à connecter à un microprocesseur d’un bus de données de 16 bits et d’un bus d’adresses de 16 bits plusieurs RAM (M) de 512 octets
possédant un bus de donnée de 4 bits. L’ensemble de ces RAMs forme une capacité de 4Ko.

R/W

OE
µP

16
data
16
adresse
? ? ? ?
4 4
adresse CS Data adresse CS Data

RAM RAM
(512 Octets) (512 Octets)

-3-
1. Donner le nombre de mots et la largeur du bus d’adresse des RAMs (M). (1pts)

Réponse :
512 octets = (512 × 8 / 4) mots de 4 bits = 1 K mots de 4 bits.
1 K mots = 210 mots.
La mémoire (M) possède 10 fils d’adresse.

2. Combien de mémoires (M) doit-on assembler pour réaliser une RAM de capacité 4Ko? (1pts)

Réponse :
• Mémoires en parallèles :
On passe d’un bus de donnée de 4 bits à un bus de donnée de 16 bits.
=> Il faut assembler 4 mémoires en parallèle (16 / 4 = 4).
• Mémoires en série
L’ensemble des RAMs a une capacité de 4 Ko = (4 K × 8 / 16) mots de 16 bits = 2 K mots de 16 bits.
On passe d’une profondeur de 1 K mots à une profondeur de 2 K mots.
Il faut assembler 2 mémoires en série (2 K / 1 K = 2).

=> Il nous faut 8 mémoires (M)

3. L’interconnexion des mémoires au microcontrôleur doit respecter les conditions suivantes : (2pts)
• L’adresse de la première RAM commence par 0000 en hexadécimal,
• les plages d’adresses réservées aux circuits mémoires RAMs sont successives.

Déterminer ces plages d’adresses mémoires?

Circuit A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Hexa


mémoire
@début RAM0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000
. . . . . . . . . . . . . . . . .
@fin RAM0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 03FF
@début RAM1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000
. . . . . . . . . . . . . . . . .
@fin RAM1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 03FF
@début RAM2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000
. . . . . . . . . . . . . . . . .
@fin RAM2 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 03FF
@début RAM3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000
. . . . . . . . . . . . . . . . .
@fin RAM3 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 03FF
@début RAM4 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0400
. . . . . . . . . . . . . . . . .
@fin RAM4 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF
@début RAM5 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0400
. . . . . . . . . . . . . . . . .
@fin RAM5 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF
@début RAM6 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0400
. . . . . . . . . . . . . . . . .
@fin RAM6 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF
@début RAM7 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0400
. . . . . . . . . . . . . . . . .
@fin RAM7 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
Dernière @ ds la 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 FFFF
plage du µC

-4-
Liste des instructions

Annexe2 : Plan de la RAM (Memory Map)

-5-
-6-

Vous aimerez peut-être aussi