Académique Documents
Professionnel Documents
Culture Documents
INGC1
2019-2020
TD Architecture des calculateurs
1) Quelle est la différence entre les instructions PORTC = 0x00 et DDRC = 0x00 ?
2) Ecrire un code pour faire basculer toutes les lignes du port A toutes les 200ms.
3) Ecrire un code pour faire basculer les lignes 2 et 5 du port D toutes les 200ms.
4) Quelle différence existe t’il entre les instructions DDRK = 0x3A et DDRK |= 0x3A ?
Et entre PORTK |= 0x0F et PORTK = 0x0F ?
5) Que fait l’instruction PORTK &= ~0x0F ?
6) On exécute la séquence d’instructions suivante : DDRB = 0x2F ; PORTB |= 0x28 ; PORTB &= ~0x07 ;
Quel est alors le contenu du registre PINB ?
Est-il possible d’obtenir le résultat des 2 instructions PORTB |= 0x28 ; PORTB &= ~0x07 ; avec une seule
instruction ? laquelle ?
7) On considère un bouton poussoir BP relié à la ligne PB2 et une led verte reliée à la ligne PB5 (en logique
inverse); configurer convenablement les deux lignes PB2 et PB5. On souhaite que la led verte clignote
indéfiniment tant que le bouton poussoir BP est appuyé ; proposer une séquence d’instructions permettant
d’atteindre ce résultat.
8) On considère les deux fonctions suivantes où S1 et S4 sont des boutons poussoirs :
void version1(void) void version2(void)
{ {
if (((PINE & S4) != 0) && ((PINK & S1) == 0)) while (((PINE & S4) != 0) && ((PINK & S1) == 0))
{ {
PORTF |= led_bleue; PORTF |= led_bleue;
_delay_ms(500); _delay_ms(500);
PORTF &= ~led_bleue; PORTF &= ~led_bleue;
_delay_ms(500); _delay_ms(500);
} }
if (((PINE & S4) == 0) && ((PINK & S1) != 0)) while (((PINE & S4) == 0) && ((PINK & S1) != 0))
{ {
PORTF |= led_verte; PORTF |= led_verte;
_delay_ms(500); _delay_ms(500);
PORTF &= ~led_verte; PORTF &= ~led_verte;
_delay_ms(500); _delay_ms(500);
} }
if (((PINE & S4) == 0) && ((PINK & S1) == 0)) while (((PINE & S4) == 0) && ((PINK & S1) == 0))
{ {
PORTF |= led_blanche; PORTF |= led_blanche;
_delay_ms(500); _delay_ms(500);
PORTF &= ~led_blanche; PORTF &= ~led_blanche;
_delay_ms(500); _delay_ms(500);
} }
_delay_ms(5000); _delay_ms(5000);
} }
Que se passe t’il lors de l’exécution de ces 2 fonctions ?
9) On souhaite manipuler un groupe de 5 Leds {rouge(PF0), jaune(PF2), verte (PF5), blanche(PF6),
bleue(PF7)} en logique inverse à partir de 3 boutons (S1, S2 et S3) connectés sur une carte à base de
Atmega2560.
a. Déterminer les masques pour les 5 Leds et les 3 boutons.
b. Expliquer comment effectuer la configuration des 3 boutons S1(PK2), S2(PB4) et S3(PC6) avec
des résistances de tirage à Vcc (Rpullup).
c. Ecrire une fonction init_ports() qui effectue la configuration de l’Atmega2560 pour les 5 Leds.
d. Ecrire une fonction init_boutons() qui effectue la configuration de l’Atmega2560 pour les 3
boutons (sans interruption, avec résistances de tirage à Vcc).
Ingénieur de Conception en Télécommunications
INGC1
2019-2020
TD Architecture des calculateurs
NB: Effet chenillard: une led est allumée par exemple 200ms pendant que les autres sont éteintes, puis elle s’éteint et la
suivante s’allume et ainsi de suite et le cycle recommence.