Atmel démarrage 4: Deux Blinky – commutateurs, résistances de pull-up et Bit Ops (3 / 11 étapes)

Étape 3: Opérations de bits

Ports avec mélangé des entrées et sorties, comme dans le tableau 1, exigent souvent de masquage des opérations qui consistent en un masque et une opération de bits [16]. Le masquage sélectionne les bits individuels ou un sous-ensemble des mèches de port pour les tests. Les opérations de bits permettent les opérations de masquage. De cette façon, les bits d’entrée et de sortie d’un port d’e/s peuvent être séparés et manipulés.

Considérons quelques exemples illustratifs qui seront utilisés avec Blinky deux. Ces exemples écrive et de manipuler les bits d’une variable 8 bits donné par A = rstuvwxy où les lettres r, s, t,..., y sont des éléments avec des valeurs de 0 ou 1. Par exemple, A = 10001000 signifie que r = 1 / v = 1 et le reste sont nuls. Cependant, nous travaillons avec le général et n’avez pas attribué des valeurs de r, s,..., y. Dans la notation de type C, on peut écrire A = « 0brstuvwxy », où 0 indique le compilateur le nombre est binaire ; Cependant, cette notation ne fonctionnera pas dans un programme.

1. au niveau du bit « et » représenté par le signe « & »

Envisager l’A variable 8 bits = rstuvwxy. Supposons que nous voulons vérifier la valeur de bit #1 (pas de bit #0). Est x = 0 ou est x = 1 ? Ainsi, nous définissons masque = 00000010. Notez la 1 valeur dans la position de bit #1 qui correspond à la position de l’embout a variable que nous voulons vérifier. Le mot masque est censé implique que certaines parties seront supprimés du compte et d’autres mis en évidence à l’examen. Maintenant, considérons le bit par bit logique et fonctionnement représentent par « & ». Envisager de

Test = A & masque.

Le tableau 2 indique les bits du masque A et le résultat d’un bit par bit et avis représente la colonne à droite du tableau de bits #0 qui est aussi le moins significatif bit.

Tableau 2: Exemple montrant l’AND au niveau du bit entre deux variables 8 bits

A variable

r

s

t

u

v

w

x

y

Masque

0

0

0

0

0

0

1

0

Test = A & masque

0

0

0

0

0

0

x

0

L’opérateur « & » est essentiellement bit par bit multiplication avec les définitions suivantes 1 & 1 = 1, 0 & 1 = 0, 1 & 0 = 0, 0-0 = 0, ce qui peut être considérée comme équivalente à l’algèbre de Boole ou logique non-aristotélicienne avec 1 = True et 0 = False. Les deux premiers des produits (en particulier, 1-1 = 1, 0-1 = 0) montre la raison x & 1 = x dans le tableau 2. Il s’agit de la propriété dont nous avons besoin pour masquage avec le '&' depuis tous les bits dans la « Variable » sera mappé à zéro à l’exception de celles où le masque a un 1. Voir pour plus d’informations sur les opérations de bits de référence [16]. Nous pouvons maintenant demander si « Test » est égal à zéro. Si Test = 0, alors x doit être égal à zéro.

2. opération de bits OR représenté par la ligne verticale ' |'

Ici aussi, mettre la variable A = rstuvwxy où sont,..., y représentent bits avec des valeurs de 0 ou 1. Supposons que cette fois nous veulent s’assurer que les bits 0 # et #4 ont la valeur 1 sans changer les autres à l’a. Autrement dit, nous voulons mettre y = 1 et vous = 1. Pour cela, considérons un masque avec tous les bits de zéro à l’exception de #0 et #4.

Mask2 = 00010001

L’opération de masquage dans ce cas sera l’opération OR bit par bit représentée par la ligne verticale |. L’OR a l’effet suivant sur bits: 1 | 1 = 1, 0 | 1 = 1, 1 | 0 = 1, 0 | 0 = 0. L’OR peut être perçu comme étant semblable à l’OR dans le système logique non-aristotélicienne avec 1 = True et 0 = False. Le tableau 3 montre l’opération OR a | Mask2.

Tableau 3: Exemple montrant l’OR au niveau du bit entre deux nombres de 8 bits

8 bit Variable A

r

s

t

u

v

w

x

y

Mask2

0

0

0

1

0

0

0

1

A | Mask2

r

s

t

1

v

w

x

1

Les deux définitions d’OR de 1 | 0 = 1, 0 | 0 = 0 (c'est-à-dire, de manière équivalente x | 0 = x) montrent que les bits de masque dans le tableau 3 qui sont nuls ne changent pas les bits correspondants à la Variable (Voir bits r-t, v-x) lors du calcul Variable| Mask2 dans la rangée du bas. Mais l’opération de bits OR produit certainement un 1 dans le bit de résultat où le masque a un 1 comme pour vous et y dans la table.

Enfin alors, si nous affectons le résultat de ' A | Mask2' à un (en utilisant l’opérateur d’assignation de C/C++ de « = »), c'est-à-dire, A = A | Mask2, puis nous parvenir au résultat désiré de bits de réglage 0 et 4 à la valeur on.

3. au niveau du bit négation représentent par manipulation ~

Ici aussi, mettre la variable A = rstuvwxy où sont,..., y représentent bits avec des valeurs de 0 ou 1. Supposons que cette fois nous veulent s’assurer que les bits 0 # et #4 ont la valeur 0 sans changer les autres à l’a. Autrement dit, nous voulons mettre y = 0 et vous = 0. Pour cela, considérons un masque avec tous les bits de zéro à l’exception de #0 et #4.

Mask3 = 00010001

Idéalement, ce qui arrive à être le même que Mask2 dans l’exemple précédent. Peut-être serait-il plus facile de regarder le tableau 4 pour voir ce qui doit arriver.

Tableau 4: Exemple montrant l’AND au niveau du bit entre deux nombres de 8 bits

8 bit Variable

r

s

t

u

v

w

x

y

Mask3

0

0

0

1

0

0

0

1

~ Mask3

1

1

1

0

1

1

1

0

Variable & ~ Mask3

r

s

t

0

v

w

x

0

Nous savons par les exemples précédents, cet OR peut être utilisé pour changer un peu à un 1, et qu’et peut être utilisé pour changer un peu à un zéro. Il semble que nous devons l’et. Comme indiqué dans le tableau 4, Mask3 a un 1 dans ces endroits que le résultat a un 0. Pour combiner les Mask3 avec l’AND, nous avons une tempête de cerveau et me rends compte que nous avons juste besoin retourner les bits dans Mask3 puis appliquez l’et.

La logique n’est pas ou négation a la définition suivante ~ 0 = 1, ~ 1 = 0. Alors maintenant la mèche se positionne en ~ Mask3 (cf. tableau 4) avec un 0 sont les positions des éléments A qui doit être définie à zéro. Utiliser les résultats pour le premier exemple et le fait que y & 0 = 0 (etc.), nous arrivons à la dernière ligne du tableau 4. Si nous stockons le résultat retour à A variable selon

A = A & ~ Mask3

puis nous avons terminé notre tâche de définissant le bit 0 # et #4 à zéro du nombre original. Ici sont en utilisant le « = » comme une affectation de C/C++.

Articles Liés

Atmel démarrage 5: Ligne de vie

Atmel démarrage 5: Ligne de vie

M. A. Parker c2015La longe est un circuit simple basé sur l'unité de microcontrôleur Atmel ATTiny2313A (MCU) qui fonctionne comme une source d'horloge de substitut pour une cible MCU rendus inopérante par des fusibles à tort de réglage de l'horloge.
Atmel démarrage 3: Binky One – PORT, broches, DDR et del

Atmel démarrage 3: Binky One – PORT, broches, DDR et del

M. A. Parker c2015Blinky, le témoin clignotant, montre comment utiliser le langage C/C++ dans le Studio Atmel (AS) pour contrôler le MCU Atmel ports pour entrée et sortie (c.-à-d., IO) et révèle la vie « secrète » des registres Atmel PORT, de PIN et
Atmel démarrage 2: Circuits de microcontrôleur et les fusibles

Atmel démarrage 2: Circuits de microcontrôleur et les fusibles

M. A. Parker c2015Circuits et fusibles construit un circuit simple mais important sur la maquette de l'expérimentateur qui sera utilisé comme plateforme de base pour de nombreux projets de microcontrôleur et pour définir les paramètres de microcontrô
Atmel démarrage 1: Programmeur et Studio Atmel

Atmel démarrage 1: Programmeur et Studio Atmel

M. A. Parker c2015Installation Atmel Studio (AS) et un programmeur incarnent les prémices [0] sur le chemin d'accès à l'aide d'une unité individuelle de Microcontrôleur AVR Atmel MCU [1] par opposition à la MCU-a-bord comme Arduino [2]. Ici commence
Initiation à l’ordinateur de poche Mini

Initiation à l’ordinateur de poche Mini

Environ un mois et demi, j'ai créé un projet appelé l'ordinateur de poche Mini et écrit une Instructable sur la façon de le construire. Ce Instructable prend l'ensemble du projet un peu plus loin en vous aidant à démarrer avec votre ordinateur de poc
Cardan sans balais avec Arduino

Cardan sans balais avec Arduino

Il s'agit d'un projet de printemps 2014 Electronics à Pomona College créé par Andreas Biekert et Jonah Grubb. Merci au professeur Dwight Whitaker, Tony Grigsby et le département de physique de Pomona.Avec ce projet, notre but était de créer un cardan
Matrice de LED avec contrôleur de jeu - premier projet A

Matrice de LED avec contrôleur de jeu - premier projet A

ce projet a été construit pour mon cours d'introduction électronique à l'Université de Waterloo au Canada.  Il s'agissait de ma première introduction à l'électronique et donc, mon premier projet.Suivez ces étapes pour construire un tableau de LED 16
Commutateurs de lecture avec ATtiny2313

Commutateurs de lecture avec ATtiny2313

il y a eu plusieurs Instructables traitant des sorties de la ATtiny2313 et les dispositifs similaires à AVR. Par exemple,. Travaillant sur la dernière de l'Elliot réel, qui montre comment contrôler les moteurs pas à pas, j'ai trouvé qu'il serait vrai
ATMega328 : perdre le cristal et gagner deux broches

ATMega328 : perdre le cristal et gagner deux broches

Cette instructable explique comment faire fonctionner la puce Atmega328 comme la puce dans un Arduino sans le cristal, ce qui rend breadboarding plus facile et en vous donnant deux broches supplémentaires pour travailler avec. Ce programme ne fonctio
Commutateur du SIP & PUFF Arduino

Commutateur du SIP & PUFF Arduino

Arduino The série de microcontrôleurs ouvre un monde immense de possibilités pour les programmeurs débutants et amateurs ! Avec les systèmes de développement disponible gratuitement et tutoriels et une vaste gamme de fonctions de la bibliothèque et d
Trouble de marbre - un simulateur de labyrinthe en marbre avec inclinaison commutateurs

Trouble de marbre - un simulateur de labyrinthe en marbre avec inclinaison commutateurs

marbre trouble est un cas limite de Marble Madness :)Il simule un labyrinthe en marbre en détectant l'orientation de la boîte avec 2 interrupteurs d'inclinaison.Arrêter la presse : il existe une version nouvelle et plus intuitive qui ne nécessite pas
Commutateur intelligent

Commutateur intelligent

Le monde a changé si rapidement, et c'est toute la diligence science et la technologie. Choses ont amélioré, nouvelle ère est arrivé d'un meilleur et un monde intelligent. Mais selon moi, il y a une chose qui n'a pas changé encore... Un commutateur!!
Conduite de deux tubes Nixie avec un Arduino via un registre à décalage et deux SN74141s.

Conduite de deux tubes Nixie avec un Arduino via un registre à décalage et deux SN74141s.

tubes Nixie sont vraiment cool, à la recherche et deviennent très populaires pour leur look « rétro ». Bien qu'il existe un certain nombre de tutoriels là-bas sur l'utilisation de tubes nixie et certaines unités préemballées sympa (voir ces gentils d
Ajout d’un commutateur de puissance d’un pistolet à colle chaude

Ajout d’un commutateur de puissance d’un pistolet à colle chaude

j'ai fait cette modification il y a environ 8 ans et son encore en cours d'exécution forte.Le pistolet à colle chaude (d'où vient être nommé HGG) que j'ai possédé avait deux paramètres "Hot" (ferait fondre la colle chaude) et "Chaud" (