Programmation en assembleur
TD : Programmation en assembleur. Recherche parmi 303 000+ dissertationsPar Ize • 10 Janvier 2026 • TD • 920 Mots (4 Pages) • 5 Vues
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
...