Vous êtes sur la page 1sur 6

Module : Système à microcontrôleur

Epreuve finale

Dimanche 30 Juin 2019


Durée : 1 heur 30

QCM (choisissez une seule bonne réponse) :

1) CISC signifie ______?


A) Common Instruction Set Computers
B) Complex Instruction Set Compilers
C) Complex Instruction Set Computers
D) Compound Instruction Set Computers

2) L’ALU utilise _______ pour stocker les résultats intermédiaires.


A) L’accumulateur
E) Les registres
F) Le tas
G) La pile

3) Le transfert de données entre la mémoire principale et le registre du CPU s’effectue via deux
registres, à savoir _____?
A) Registre à usage général et registre mémoire
B) Accumulateur et compteur ordinale
C) Registre mémoire et registre d’adresse
D) Registre d’adresse et accumulateur

4) Pipelining augmente ________ des instructions du processeur.


A) l’efficacité
B) la latence
C) le débit
D) les deux A et C sont vrais.

5) Le temps d’accès à la mémoire est _____ le temps nécessaire pour effectuer une seule
opération du CPU.
A) plus court que
E) plus long que
F) Négligeable à
G) Identique à

1/6
6) La mémoire de l’ordinateur qui doit être actualisée est ______?
B) DRAM
C) SRAM
D) ROM
E) PROM

7) Indiquez si l’instruction suivante est Vrai ou Faux pour le bus PCI:


Le bus PCI se règle à 33 MHz et peut transférer 32 bits de données (quatre octets) à chaque
impulsion d’horloge.
A) Vrai
B) Faux

8) Soit un signal transmis via le RS232 en parité paire et deux bits de stop Que vaut
l'information interprété par le signal suivant :
A) 10001001
B) 10111011
C) 10010001

Exercice 1 : (6 points)

Solution 1

/*
Application :
- compteur/décompteur selon le mode choisi
- le mode change en fonction du bouton appuyé
- interruption sur les broches RB4, RB5
*/

int x; // variable qui fixe le mode du compteur

voidmain()
{
int i;

trisa=0x00;
trisb=0xff;

INTCON.GIE=1;//validation générale des interruptions


INTCON.RBIE=1; //autorise l'interruption sur les broches RB4,5,6,7

porta = 0;
portb = 0;

x = 1; // premier mode par défaut (compteur)


i = 0;

while(1)
{

2/6
porta = i;

i = ( ((i + x) % 10) + 10) % 10;

//if (x == 1) i = (i + 1) % 10;
//else i = ( ((i - 1) % 10) + 10) % 10;

delay_ms(500);

}
}

voidinterrupt () // routine d'interruption


{
if (INTCON.RBIF == 1) // interruption RB
{ // changer le x en fonction du bouton appuyé (mode)
if (portb.f4 == 1) x = 1;
else if (portb.f5 == 1) x = -1;

INTCON.RBIF = 0; // fin de l'interruption RB


}
}
Solution 2

/*
Application :
- compteur/décompteur selon le mode choisi
- le mode change en fonction du bouton appuyé
- interruption sur les broches RB4, RB5
*/

int x; // variable qui fixe le mode du compteur

voidmain()
{
int i;

trisa=0x00;
trisb=0xff;

INTCON.GIE=1;//validation générale des interruptions


INTCON.RBIE=1; //autorise l'interruption sur les broches RB4,5,6,7

porta = 0;
portb = 0;

x = 1; // premier mode par défaut (compteur)

i = 0;

while(1)
{
porta = i;

3/6
if (x == 1){
i = i + 1;
if (i == 10) i = 0;
}
else {
i = i - 1;
if (i == -1) i = 9;
}

delay_ms(500);

}
}

voidinterrupt () // routine d'interruption


{
if (INTCON.RBIF == 1) // interruption RB
{ // changer le x en fonction du bouton appuyé (mode)
if (portb.f4 == 1) x = 1;
else if (portb.f5 == 1) x = -1;

INTCON.RBIF = 0; // fin de l'interruption RB0/INT


}
}

Exercice 2 : (6 points)
1. A partir de scénario « clignotement à droite » compléter les affectations des états des
boutons, les feux des clignotements et le bip sonneur.

Position Boutons Début jusqu'à la fin de clignotement des feux


des boutons
Poignée du Clign_doite 0 1 0 0 0
guidon Clign_gauche 0 0 0 0 0
l’axe de Bouton poussoir droite 0 0 0 1 0
guidon Boutons poussoir gauche 0 0 0 0 0
Feu clignotement avant à droite 0 1 1 1 0
Feu clignotement avant à gauche 0 0 0 0 0
Feu clignotement arrière à droite 0 1 1 1 0
Feu clignotement arrière à gauche 0 0 0 0 0
bip sonneur 0 1 1 1 0

2. Propose le circuit correspondant à ce cahier de charge. (il faux noter que les feux fonction
avec une tension de 12V).

4/6
0.25 pts 0.25 pts

0.25 pts 0.25 pts

0.25 pts

0.25 pts
0.25 pts

0.25 pts

0.25 pts 0.25 pts

3. A partir de circuit porosité, compléter les affectations des deux registres TRIS A et TRIS B.

TRISA RA0 RA1 RA2 RA3 RA4


0 0 0 0 0
TRISB RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7
0 0 0 0 1 1 1 1

4. Ecrire un programme en mikroC qui permet de rependre à ce cahier de charge.

int Clign_gauche;
int Clign_doite;
int Bt_poussoir_doite;
int Bt_poussoir_gauche;
void main() {
trisa=0b00000;
trisb=0b11111111;
porta = 0;
INTCON.GIE = 1;
INTCON.RBIE = 1;
OPTION_REG.INTEDG = 1;

5/6
while(1){
if(Clign_doite==0 && Clign_gauche==0) {porta = 0;}
if(Clign_doite==1) {
porta =0b00101;
delay_ms(2000);
porta =0b00000;
delay_ms(2000);
}
if(Clign_gauche==1) { porta =0b00110;
delay_ms(500);
porta =0b00000;
delay_ms(2000);
}
if(Bt_poussoir_doite) Clign_doite = 0;
if(Bt_poussoir_gauche) Clign_gauche = 0;
}

}
Voidinterrupt()
{
if(INTCON.RBIF == 1){
if(portb.f4=1) { Clign_gauche = 1; } else { Clign_gauche = 0 ; }
if(portb.f5=1) { Clign_doite = 1; } else { Clign_doite = 0 ; }
if(portb.f6=1) { Bt_poussoir_doite = 1; } else { Bt_poussoir_doite = 0 ; }
if(portb.f7=1) { Bt_poussoir_gauche = 1; } else { Bt_poussoir_gauche = 0 ; }
INTCON.RBIF = 0;
}
}

6/6

Vous aimerez peut-être aussi