2016-01-18 2 views
2

Je n'arrive pas à trouver de réponse à cette question.8051 bouton de montage cliquez sur

Une LED est connectée au port P2.4 et un bouton au port connecté P1.7. Nous avons variable COUNT, et nous l'incrémentons chaque fois que le bouton est cliqué. Donc, si nous appuyons sur le bouton 5 fois led est allumé, si nous appuyons sur le bouton 10 fois led est éteint et son continue 15 led est allumé, 20 est éteint. Je pense qu'il pourrait être nécessaire d'utiliser l'instruction CJNE, mais je ne suis pas sûr.

LED EQU P2.4 
button EQU P1.7 
COUNT EQU 30H 
    ORG 00H 
    LJMP main 
    main: 
      CLR P2.4 
      SETB P1.7 
      MOV COUNT,#0 
    again: 
      JB button,$ 
      JNB button,$ 
      INC COUNT 
      MOV A,COUNT 
      ANL A,#01h 
      MOV P2.4,A 
      JMP again 
    END 
+0

Je serais intéressé de savoir si vous trouvez une des réponses d'une valeur upvote ou accepter et comment cela est avéré. –

Répondre

0

Vous ne nous dire comment vous avez COUNT et BUTTON défini. Cela m'amène à deux erreurs possibles ici.

Tout d'abord, je ne suis pas sûr que ce soit une erreur de copier-coller, mais je ne crois pas que

MOV COUNT 

est légal. Je suis à peu près certain que vous devez spécifier une source et une destination. Je suppose que cela est censé être:

MOV COUNT,0 

Deuxièmement, vous avez ceci:

SETB P1.7 

Vous ne nous dites, mais je suppose que c'est la broche que le bouton est connecté à. Pourtant, plus tard, vous faites ceci:

JB BUTTON, $ 
JNB BUTTON, $ 

Depuis que je ne vous définissez BUTTON comme identificateur pour P1.7 vois nulle part, je vais supposer que votre code est infiniment bloqué à JNB BUTTON,$. Je crois que ce serait corriger:

JB P1.7, $ 
JNB P1.7, $ 

Révision en fonction de votre mise à jour Vous avez défini le nombre comme une valeur, mais vous avez pas réservé une mémoire pour elle. Le résultat est que vous incrémentez (probablement) par inadvertance un octet en mémoire plutôt qu'un octet que vous contrôlez. Vous voudrez réserver de la mémoire pour cela. Je devrais lancer ce que vous avez dans un émulateur pour voir ce qu'il va faire dans le monde réel.

je me attends à ce à ressembler à quelque chose comme ceci:

DSEG 
     ORG 30h 
COUNT DS 1 

CSEG 
     ORG 0h 
    <Your code goes here> 
+0

J'ai oublié ce programme démarrage ÉQUIPE LED P2.4 BOUTON EQUIP P1.7 COUNT EQU 30H ORG 00H LJMP PRINCIPAL .... –

+0

Et oui MOV COUNT, # 0 mais ne fonctionne pas. –

0

Il semble que vous utilisiez COUNT pour vérifier si un nombre impair et était même régler la LED en conséquence. Je ne suis pas sûr que tu devais faire ça. Une version simplifiée pourrait être:

LED EQU P2.4 
button EQU P1.7 

COUNT EQU 30H 
ORG 00H 
main: 
     MOV COUNT, #0 
     SETB button ; Enabled button 
again: 
     SETB LED  ; Turn off LED segment 
     JB button,$ ; Wait until button pressed 
     CLR LED  ; Turn on the LED segment 
     JNB button,$ ; Wait until button released 
     INC COUNT ; Increment count on release 
     JMP again ; Do again 
END 

J'ai gardé la variable COUNT mais je ne sais pas quand vous l'intention de l'incrémenter. J'ai supposé après que vous libérez le bouton donné le code que vous avez présenté.

Cela suppose que les ports sont corrects. Je ne suis pas convaincu que le LED est sur P2, et je ne suis pas sûr que P1 est le commutateur. Est-il possible que vous les ayez inversés?S'ils vous pouvez modifier les deux premières lignes à:

LED EQU P1.4 
button EQU P2.7