Vous êtes sur la page 1sur 3

TP1 : ARCHITECTURE DES MICROCONTROLEURS

Exercice 0 :
On souhaite réaliser un système à base du PIC 16F84 permettant de faire clignoter une led jaune (pin RA3)
automatiquement (allumée 0,5s puis éteinte 0,5s).
1) Télécharger le fichier TP1_Ex0.asm envoyé par l’enseignant : ce fichier contient l’organisation du code
assembleur à compléter.

2) Comprendre la routine d’attente :


a. Sachant que le quartz (circuit d’horloge externe) est cadencé à 4MHz, quelle est la durée d’exécution
d’une instruction assembleur ?
Réponse :
1 cycle d’instruction = 4 * cycle_horloge_externe.
= 4 * (1 / fréquence_horloge_externe)
= 4 * (1 / 4Mhz)
= 4 * (1 / 4*106 Hz)
= 10-6 s = 1µs

b. Le principe de cette sous-routine est de déclarer des variables (cmpt1, cmpt2 et cmpt3) et de les
décrémenter afin de laisser écouler du temps (des cycles instructions) sans affecter le fonctionnement de
notre système.
Pourquoi a-t-on besoin de 3 variables ? Commenter les lignes de code et justifier l’achèvement de 0,5s
avec cette sous-routine tempo.

Rappel :
* Les variables sont stockées dans la mémoire de données RAM à partir de l’adresse 0x00C qui est la
première case GPR (General Purpose Register), chaque variable est de taille 1octet = 8 bits donc les
valeurs possibles pour une variable sont comprises dans l’intervalle [0-255]
* les instructions movlw, movwf, clrf, nop s’exécutent chacune en seulement 1 cycle d’instruction.
* l’instruction goto et return s’exécutent chacune en 2 cycles.
* l’instruction decfsz est une instruction qui décrémente une variable et teste au même temps si la
nouvelle valeur après la décrémentation est égale à 0 ou pas.
Si lors de l’exécution ce résultat=0, on saute une ligne et on passe directement à l’exécution de
l’instruction d’après (cela s’exécutera en 2 cycles), sinon, on exécute la ligne qui suit directement
l’instruction decfsz (et donc cela s’exécutera en 1 cycle seulement).

3) Dresser le montage électronique nécessaire, écrire le code assembleur adéquat et tester le fonctionnement
en sachant :

L’appel d’une sous-routine dans le programme principal se fait par l’instruction :


call + nom de la sous-routine

Exercice 1 :
On souhaite réaliser un système de défilement des feux de signalisation à base d’un PIC 16F84 comme le
montre la figure suivante :
A. Rouge pendant 1s
B. Orange pendant 0,5s
C. Vert pendant 1s
D. Orange pendant 0,5s

1
TP1 : ARCHITECTURE DES MICROCONTROLEURS

1. Dresser le montage électronique sur ISIS


2. Dessiner l’organigramme du programme
3. Ecrire le code assembleur sur MPLAB
• Utiliser les directives de MPLAB afin de simplifier votre programme DEFINE, MACRO bank0,
MACRO bank1. ( voir fichier « organisation d’un fichier .asm » envoyé par l’enseignant)
• Utiliser la sous-routine tempo pour les attentes.
4. Tester le fonctionnement sur ISIS et simuler.

Exercice 2 :
Pour les compétitions d’athlétisme, on désire réaliser un afficheur numérique qui permet de faire le compte à rebours
pour annoncer les départs des courses sprint.
Le travail demandé :
1. Réaliser le montage sur ISIS, le montage suivant :

2. Dessiner l’organigramme et rédiger le code assembleur qui permet de faire le compte à rebours des 3
secondes.
Fonctionnement :
Au repos l’afficheur est éteint, suite à l’activation de l’entrée ON, on affiche la séquence des chiffres « 3 », « 2
», « 1 », puis la lettre « P ». Chaque chiffre est affiché pendant 1 seconde.

2
TP1 : ARCHITECTURE DES MICROCONTROLEURS

Rappel :
L’afficheur 7 segments est le suivant : Exemple : Pour le nombre décimal 2, la représentation
binaire est 00000010, pour l’afficher, les segments
A,B,D,E et G doivent être allumés comme suit :

Remarques :
* utiliser les instructions CLRF, MOVLW, MOVWF…
* utiliser le code de la sous-routine « tempo ».

3. Simuler et tester le système.


4. Remplacer l’afficheur 7 segments digital par un afficheur 7 segments BCD (4 entrées) connecté aux pins RB0,
RB1, RB2, RB3 et reprendre le même fonctionnement avec la séquence « 3 », « 2 », « 1 », « 0 ».
Rappel sur l’afficheur 7 segments-BCD:

Remarques :
* utiliser les instructions INCF, INCFSZ, DECF, DECFSZ, SUBWF…
* utiliser le code de la sous-routine « tempo ».