|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2012 Messages : 1 ![]() |
Bonjour à tous, je suis en train de m'autoformer à la programmation des microcontroleurs de type 80c51 (j'utilise un P89V51RD2), en langage assembleur. J'ai déja reussi à faire pas mal de choses comme allumer des leds, piloter un afficheur LCD, dialoguer avec le PC via la connexion UART RS232, mais là j'attaque le chapitre des interruptions et je bloque.
J'ai un programme tout bête qui allume des leds une à une avec une tempo de 0.2s entre deux. J'arrive à génerer 2 interruptions exterieurs avec 2 BP, un sur l'entrée INT0 et l'autre sur l'entrée INT1. Quand j'appuie sur le 1er BP ça allume toutes les leds du port P0, et instantanement après, le programme principal reprend son cours là où il en était resté. Quand j'appuie sur le 1er BP ça allume toutes les leds du port P2, et instantanement après, le programme principal reprend son cours là où il en était resté. Là ca fonctionne bien. Maintenant si je rajoute l'instruction CALL TEMPO (en bleu), et que j'appui par exemple sur le 1er BP, toutes les leds du port P0 s'allume, mais après le micro met environ 30s pour retourner au programme principal. Pourquoi ? La tempo générée par le sous-programme TEMPO ne dure que 0.2s. C'est la même utilisée dans le programme principal. A-t-on le droit d'utiliser l'instruction CALL ou LCALL dans une interruption? Je développe avec Keil µvision3 et je programme le micro avec flash magic. Voici mon programme : Merci d'avance pour votre aide. Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Ingénieur développement logiciels temps réel Inscription : février 2012 Messages : 43 ![]() |
bonjour titititi38
Je vais peut-être dire une bétise, mais pourquoi n'utilises tu pas les timers du microcontrolleur pour faire tes temporisations ? Je programmerai une interruption timer dans la routine d'interruption et je placerai l'allumage de la LED dans les routines du timer. Tu peux trouver des infos sur la programmation des timers 8051 ici: http://www.engineersgarage.com/tutor...mming-tutorial Ton sous-programme TEMPO ne me semble pas très précis vu qu'il utilise 3 boucles imbriquées pour réaliser un délai. De plus je confirme que le temps passé dans une routine d'interruption doit être le plus court possible |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com