Définir un seul bit dans un code à 8 bits, sans modifier les autres bits
-
27-09-2019 - |
Question
Utilisation WinAVR pour le code suivant.
J'obtenu un 8 bits PIN ici que je dois OU avec 00.000.010 ou 0x02 pour régler le bit 7.
Maintenant, ce que je dois faire est le suivant:
- Set Port B bit 7
- Attendez 1ms
- Port Effacer B bit 7
- 19ms d'attente
Mais, je ne devrais pas changer les autres bits dans ces étapes.
Je dois donc:
- Lire le port B
- Set bit nécessaire
- écrire le dos de valeur modifiée au port
- effacer des bits
- Ecrire retour à Port B
Donc, mon code de test est:
B=PINB|0x02
Loop delay for 1ms
BP=PINB&0x00
Loop for 19ms
Mais je pense que les autres bits vont être modifiés dans ce processus, ma question est, comment suis-je censé manipuler un peu d'un port 8 bits sans modifier les autres bits?
Merci beaucoup !!
La solution
Vous avez besoin BP=PINB & ~0x02
L'opérateur ~ est NON logique. L'opérateur et ne conserve que les bits autre à 2.
Autres conseils
Vous utilisez la négation logique du masque de réglage, et et que:
B = PINB & ~0x02
Pour le bit sélectionné, les ensembles de négation logique qui bit vers zéro; tous les autres sont un. Ceux ne changent pas la valeur PINB quand ANDED.
Cette page a un bon résumé de plusieurs tours avec les opérateurs au niveau du bit. http://www.catonmat.net/blog / bas niveau-bit-hacks-vous-absolument incontournable