GEL24b_ExamenMai_Session1_2015-2016

publicité
Examen GEL24b : partie microcontrôleur
Durée 2h ; feuille A4 manuscrite et calculatrice autorisées
Le barème est donné à titre indicatif
Exercice 1 : jeu d’instruction du PIC 16F877A (4 points)
A l’aide des documents donnés en annexe :
a) Quelle est la taille d’une instruction en mémoire ?
b) Donner le code (en binaire et en hexadécimal) des instructions suivantes :
 CLRW,
 GOTO 0x5
 MOVLW 0xFF
 BSF PORTB,3
 ADDWF PORTB,F
Rappel : Le registre PORTB est à l’adresse 0x6
c) Expliquez les instructions : DECFSZ, BTFSC, ANDLW et donner un exemple d’utilisation pour
chacune de ces instructions.
d) L’instruction « MOVF REG,F » prend le contenu du registre REG le replace dans ce même registre
REG. Quel est le rôle de cette instruction à priori inutile ?
Exercice 2 : architecture du PIC 16F877A (3 points)
A partir des documents donnés en annexe :
a) Quelles sont les trois types de mémoire disponible sur le microcontrôleur PIC 16F877A ? Donnez les
tailles de ces mémoires.
b) Quelle est la profondeur de la pile (c’est-à-dire sa taille) ? Expliquer le rôle de cette pile.
c) Donnez la taille du bus de données et du bus programme.
d) La figure 1-2 montre que trois bits du registre de statut proviennent de l’unité arithmétique et
logique. Donner le nom d’au moins deux de ces trois bits, ainsi que leur rôle.
Exercice 3 : utilisation du TIMER0 (2 points)
Pour une application, on a besoin d’effectuer une action périodiquement (toutes les 65,5 ms). Pour cela, on
choisit d’utiliser le timer0 du PIC 16F877A. Le microcontrôleur est cadencé à 4 MHz.
a) Décrire quels sont les registres que vous allez utiliser pour la configuration du timer0. Quelles
valeurs allez-vous mettre dans ces registres afin de respecter la période de 65,5 ms ?
b) Quel bit vous informera sur le débordement du timer0 (c.à.d. la période de 65,5 ms est écoulée) ?
Exercice 4 : interruptions (4 points)
On souhaite réaliser un programme embarqué sur PIC 16F877A qui :
- Incrémente une variable (située à l’adresse 0x20) lorsqu’il y a un front descendant sur la ligne 0
du port B (RB0).
- Réinitialise cette variable (c.à.d. la remet à zéro) si le timer0 déborde.
On choisit d’utiliser les interruptions pour traiter les 2 évènements (détection de front descendant et
débordement du timer).
a) Décrire comment fonctionne une interruption. Quel est l’intérêt principal d’utiliser un traitement
par interruption ?
b) Quel(s) registre(s) utiliserez-vous pour configurer les interruptions ?
c) Proposer l’algorigramme permettant de répondre au besoin.
d) Donner le code assembleur de ce programme.
GEL24b
17/05/2016
Exercice 5 : programme assembleur pas à pas (4 points)
Le programme suivant est contenu à partir de l’adresse 0 de la mémoire programme du PIC 16F877A :
MOVLW 0x11
MOVWF 0x20
ADDLW 0xEF
BTFSS STATUS,C
CLRF 0X20
MOVF 0x20,W
ADDWF 0x20,F
GOTO 0X7
Remplissez un tableau qui donnera, pour chaque instruction du programme, les valeurs de :
- Registre de travail W
- Bit C du registre STATUS
- Bit Z du registre STATUS
- Octet contenu dans la mémoire de donnée à l’adresse 0x20
- Program counter PC
Exercice 6 : langage C (3 points)
Voici le code source en C d’un programme :
#include <p16f877A.h>
#define input 0xFF
#define output 0
char a = 0;
char on = 0b00000001;
char off = 0x00;
void main(void)
{
TRISA = input;
TRISB = output;
while(1)
{
a = PORTA
if (a & 0x10)
PORTB = on ;
else
PORTB = off ;
}
}
Traduire ce code en langage assembleur.
2/9
GEL24b
17/05/2016
3/9
GEL24b
17/05/2016
4/9
GEL24b
17/05/2016
5/9
GEL24b
17/05/2016
6/9
GEL24b
17/05/2016
7/9
GEL24b
17/05/2016
8/9
GEL24b
17/05/2016
9/9
Téléchargement