LaDissertation.com - Dissertations, fiches de lectures, exemples du BAC
Recherche

Programmation en assembleur

TD : Programmation en assembleur. Recherche parmi 303 000+ dissertations

Par   •  10 Janvier 2026  •  TD  •  920 Mots (4 Pages)  •  5 Vues

Page 1 sur 4

TD3- Programmation en assembleur

Exercice 1 : Gestion des entrées/sorties – Commande d’une Led par un bouton

1) Ecrire une fonction assembleur qui retourne l’état du bouton B1 (bleu) de la carte qui est connecté sur

PC13. Cette fonction retourne 1 si le bouton est appuyé et 0 sinon. Cette fonction aura l’entête suivante

dans le main.c :

uint8_t lire_B1() ;

Indications :

Inspirez-vous des exemples de lecture d’une entrée qui sont disponibles dans les slides 32, puis 44 à

48 du cours 7. Les exemples sont en langage C, mais pour faire la lecture d’une entrée en assembleur,

il faut :

 Chercher l’adresse du registre IDR du port en question et la position de la pin correspondant

au bouton.

 Savoir que le bouton B1 est câblé en mode pull-up dans la carte, ce qui signifie que le signal

est à 1 si le bouton n’est pas appuyé et 0 sinon (voir les slides 33 à 39 du cours 7 pour plus

de détails sur les modes pull-up et pull-down).

Pour tester cette fonction, déclarez une variable globale uint8_t etat_bouton=0; et écrivez l’instruction

etat_bouton=lire_B1() ; dans la boucle while de la fonction main. Placez un point d’arrêt devant cette fonction

et vérifier le contenu de la variable « etat_bouton » (dans la fenêtre Expressions) quand le bouton est appuyé

et quand il est relâché.

2) On veut commander la led LD2 par le bouton B1 (bouton bleu sur la carte). Ecrire une fonction assembleur

qui lit l’état du bouton B1 en appelant la fonction lire_B1() de la question précédente et allume la led LD2

quand le bouton est appuyé et l’éteint quand le bouton est relâché. Pour allumer et éteindre la led, les

fonctions assembleur allumer_LD2() et eteindre_LD2() écrites dans l’exercice du TD2 seront réutilisées.

Cette fonction aura l’entête suivante dans le main.c :

void LD2_B1() ;

Tester cette fonction dans la boucle while de la fonction main.

2

3) Ecrire une fonction assembleur inverser_LD2() qui inverse l’état de la led LD2 (le bouton n’intervient pas

dans cette fonction).

Cette fonction aura l’entête suivante dans le main.c :

void inverser_LD2() ;

Indication : Pour inverser un bit on peut utiliser un « ou exclusif ». Pour savoir le nom de l’instruction

assembleur qui fait le ou exclusif, cherchez « Exclusive OR » dans le manuel de programmation.

Pour tester la fonction inverser_LD2(), appelez-la dans la boucle while de la fonction main et placez un point

d’arrêt devant cet appel de fonction.

4) Ecrire une fonction en langage C qui inverse l’état de la led LD2 à chaque fois que le bouton B1 est

appuyé (le premier appui allume la led, le deuxième l’éteint, etc.). Cette fonction fera appel aux fonctions

lire_B1() et inverser_LD2().

Cette fonction aura l’entête suivante dans le main.c :

void inverser_LD2_B1() ;

Tester ce fonctionnement en faisant l’appel de la fonction dans la boucle while de la fonction main.

5) On veut reproduire le même fonctionnement de la question précédente avec un bouton et une led externes.

Led sera connectée sur

...

Télécharger au format  txt (6.1 Kb)   pdf (68.4 Kb)   docx (10.9 Kb)  
Voir 3 pages de plus »
Uniquement disponible sur LaDissertation.com