2010-10-21 6 views
0

Je suis en train de suivre un cours de microprocesseur et j'ai de la difficulté à écrire un programme qui conservera une valeur dans un port pendant deux secondes avant de passer au port suivant.besoin d'aide pour écrire un programme

Quelqu'un peut-il aider à faire plus de sens?
J'ai pensé à utiliser NOP mais j'ai réalisé que c'était un peu irréaliste, j'ai essayé ACALL DELAY mais pour une raison quelconque, il est devenu une commande inconnue.

Je suis perplexe à ce stade et apprécierait toute aide que je pourrais obtenir. J'utilise le DS89C450 Avec une horloge de 11 MHz, j'ai essayé de demander au professeur et il me dit que c'est un morceau de gâteau que vous devriez avoir ce pas de problème, mais lire et écrire du code est nouveau et original pour moi. seulement fait ça pendant deux semaines. quand je regarde le livre c'est presque comme il écrit en chinois c'est difficile à comprendre, mes camarades de classe sont tout aussi stupéfaits que je suis, je pensais que mon dernier recours serait de demander à quelqu'un en ligne qui pourrait avoir un semblable problème ou quelqu'un qui a un peu plus de perspicacité qui pourrait être capable de me pont dans la bonne direction.

Je sais que j'ai besoin de charger chaque port avec la valeur spécifiée mes problèmes réside dans la commutation des ports en leur donnant le délai de 2 secondes.

Mon programme ressemble à ce MOV P0, # 33H MOV P1, # 7FH MOV P2, B7H MOV P3, EFH donc avec ces quatre ports étant chargés de ces valeurs j'ai besoin de P0 pour aller à P1, P1-P2 et ainsi En arrivant à P3, sa valeur doit aller à P0 et boucler le tout. J'allais utiliser SJMP pour le boucler au début afin que le programme fonctionne toujours

En faisant cela, il y a le délai de deux secondes où chaque valeur ne reste dans chaque port que pendant deux secondes ce qui est encore floue, fait le reste sonne bien?

+0

doivent avoir été fournis. Que font les autres étudiants? Avez-vous interrogé votre professeur? –

+1

Vous devez spécifier le microprocesseur que vous utilisez, à tout le moins. –

+0

J'utilise le DS89C450 Avec une horloge de 11 MHz, j'ai essayé de demander au professeur et il me dit que c'est un morceau de gâteau que vous ne devriez pas avoir de problème, mais lire et écrire du code est nouveau pour moi. pendant deux semaines.quand je regarde le livre c'est presque comme il écrit en chinois c'est difficile à comprendre, mes camarades de classe sont tout aussi stupéfaits que je suis, je pensais que mon dernier recours serait de demander à quelqu'un en ligne qui pourrait avoir un semblable problème ou quelqu'un qui a un peu plus de perspicacité qui pourrait être capable de me pont dans la bonne direction. – Kyle

Répondre

0

Je ne l'ai jamais fait cela avec cette puce particulière (et je ne supporte la syntaxe sais pas l'ensemble), mais une approche pseudo-code serait quelque chose comme ceci:

Load initial values into ports 
Initialize counter with (delay in seconds * clock ticks per second)/(clock ticks in loop) 
While counter != 0 
    Decrement counter 
Swap port values: 
    P3 -> temp, P2 -> P3, P1 -> P2, P0 -> P1, temp -> P0 
Loop (4 times?) 

Je pense que tout cela est vous avez vraiment besoin de structure. Sur la base de ma lecture de 10 minutes sur l'ensemble 8051, la boucle de retard ressemblerait à ceci:

  MOV A, b6h ; ~91 ticks/sec @ 11 ms/tick 
DELAY: DEC A 
      JNZ DELAY ; NOP-type delay loop 
+0

alors votre acall dire le délai droit? quand j'ai essayé cette approche plus tôt, il m'a dit que ACALL dakay était une commande inconnue? – Kyle

+0

Mon programme ressemble à ceci – Kyle

+0

Je n'ai aucune idée de ce que signifie "retard d'acall". Dans l'assembleur x86, je charge CX avec ma valeur, place une étiquette et une instruction de boucle qui pointe sur la même ligne, et voila - delay loop. –

0

je l'ai fait quelque chose de similaire dans le micro-contrôleur PIC 16F84

pour faire un délai que vous avez 2 façons soit interruptions d'utilisation ou des boucles

puisque vous connaissez le Instructions_per_second vous pouvez utiliser une boucle pour générer le nombre requis d'instructions qui prend le temps nécessaire

ce link illustre comment déterminer les index de boucle (comme vous pourriez avoir besoin de boucles imbriquées si le nombre d'instructions requises est nécessaire .. en PIC j'ai dû faire 1 million d'instruction pour faire un retard de 1 seconde)

Questions connexes