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 !!

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top