2010-06-09 21 views
2

J'écris un programme pour un microcontrôleur 8051. Dans la première partie du programme, je fais quelques calculs et en fonction du résultat, j'allume la LED ou non (en utilisant CLR P1.7, où P1.7 est le port auquel la LED est attachée dans le microcontrôleur).(8051) Vérifiez si un seul bit est défini

Dans la partie suivante du programme, je veux récupérer le bit, peut-être le stocker quelque part, et l'utiliser dans une instruction if-jump comme JB. Comment puis je faire ça?

En outre, j'ai vu l'instruction MOV C, P1.7 dans un exemple de code. Quel est le C ici?

Répondre

4

Le C est le drapeau de transport du 8051 - appelé ainsi parce qu'il peut être utilisé pour maintenir le "carry" en faisant des opérations d'addition sur plusieurs octets. Il peut également être utilisé comme un registre à un seul bit - donc (comme ici) où vous voulez déplacer des bits, vous pouvez le charger avec une valeur de port (par exemple P1.7) puis le stocker ailleurs, par exemple :

MOV C, P1.7 
MOV <bit-address>, C 

Ensuite, vous pouvez plus tard branche sur l'aide:

JB <bit-address>, <label> 
+0

Une autre astuce utilisée par le compilateur C51 est d'utiliser 'PUSH PSW' pour pousser l'indicateur' C' (avec le reste du mot d'état), par exemple pour stocker l'état d'interruption précédent en utilisant '#pragma disable'. –

1

Certains des registres de fonctions spéciales sont également bit adressable. Je crois que c'est tous ceux qui se terminent par 0 ou 8. Ne pas avoir de référence devant moi mais vous pouvez faire quelque chose comme setb r0.1. De cette façon, si vous avez besoin de porter pour quelque chose, vous n'avez pas à vous soucier de le pousser et d'utiliser de l'espace sur votre pile.