Atmel start 4: Blinky två-växlar, Pull-Up motstånd och Bit Ops (3 / 11 steg)

Steg 3: Bitvis operationer

Portar med kräver blandat in- och utgångar, som i tabell 1, ofta maskering verksamhet som består av en mask och en bitvis operation [16]. Maskeringen väljer ut enskilda bitar eller en delmängd av port bitar för att testa. De bitvisa operationerna gör maskering verksamhet. På detta sätt kan de indata- och bitarna av en IO-port avskiljs och manipuleras.

Överväga några belysande exempel som ska användas med Blinky två. Dessa exempel skriva och manipulera bitarna i en 8-bitars variabel A ges av A = rstuvwxy där bokstäverna r, s, t,..., y är bitar med värden antingen 0 eller 1. A = 10001000 innebär till exempel att r = 1 och v = 1 och resten är noll. Vi arbetar med allmän A och inte tilldelats värden till r, s,..., y. I C-liknande notation, kan man skriva A = "0brstuvwxy" där 0b berättar kompilatorn numret är binary; denna notation fungerar dock inte i ett program.

1. bitvis "och" företräds av et-tecknet "&"

Överväga den 8-bitars variabel A = rstuvwxy. Antag att vi vill kontrollera värdet av bit #1 (inte bit #0). Är x = 0 eller är x = 1? Så definierar vi Mask = 00000010. Notera värdet 1 i bit #1 position som motsvarar positionen för lite i variabeln A som vi vill kontrollera. Ordet Mask är tänkt att innebära att vissa bitar kommer att tas bort från behandling och andra belyste för övervägande. Nu, överväga den bit-för-bit logiska och drift utgör av '&'. Överväga

Test = A & Mask.

Tabell 2 visar bitarna i A, Mask och resultatet av en bit-för-bit och. meddelande kolumnen längst till höger i tabellen representerar lite #0 som också är den minst signifikanta bit.

Tabell 2: Exempel på bitvis AND mellan två 8-bitars variabler

Variabel A

r

s

t

u

v

w

x

y

Mask

0

0

0

0

0

0

1

0

Test = A & Mask

0

0

0

0

0

0

x

0

Operatorn "&" är i huvudsak-av-bitars multiplikation med följande definitioner 1 & 1 = 1, 0 & 1 = 0, 1 & 0 = 0, 0 & 0 = 0 vilket kan ses som likvärdiga boolesk Algebra eller Aristoteles logik med 1 = True och 0 = False. De första två produkterna (specifikt, 1, 1 = 1, 0 & 1 = 0) visar uppföljningskod x & 1 = x i tabell 2. Detta är den egenskap som vi behöver för maskering med "&" sedan alla bitar i "Variabeln" kommer att mappas till noll utom i de fall där masken har en 1. Se referens [16] för mer information om bitvis operationer. Vi kan nu fråga om "Test" är lika med noll. Om Test = 0 då x måste vara noll.

2. bitvis OR representeras av den vertikala linjen ' |'

Igen, överväga den variabla A = rstuvwxy där är..., y representerar bitar med värdena 0 eller 1. Anta att denna tid vi vill se till att bits har #0 och #4 värdet 1 utan att ändra någon av de andra i A. Det vill säga vi vill ange y = 1 och du = 1. Till gör så, överväga en mask med alla nollbitar utom #0 och #4.

Mask2 = 00010001

Driften av maskering i detta fall blir den bit för bit OR åtgärd representeras av den vertikala linjen |. Eller påverkar den följande bitar: 1 | 1 = 1, 0 | 1 = 1, 1 | 0 = 1, 0 | 0 = 0. Eller kan anses vara likartade eller i Aristoteles logik-systemet med 1 = True och 0 = False. Tabell 3 visar de OR-åtgärden för A | Mask2.

Tabell 3: Exempel på bitvis eller mellan två 8-bitars nummer

8-bitars variabel 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

De två OR definitionerna av 1 | 0 = 1, 0 | 0 = 0 (dvs, ekvivalentt x | 0 = x) visar att dessa mask bitar i tabell 3 som är noll inte ändrar de motsvarande bitarna i variabeln (se bitar r-t, v-x) vid beräkning av Variable| Mask2 i den nedersta raden. Men bitvis eller definitivt ger en 1 i resultatet lite där masken har en 1 som du och y i tabellen.

Slutligen då, om vi tilldelar resultatet av "A | Mask2 "tillbaka till en (med C/C++ tilldelning operatören av '='), det vill säga A = A | Mask2, då vi kommer fram till det önskade resultatet av inställningen bitar 0 och 4 till värdet ett.

3. bitvis NEGATION föreställer av Twiddle ~

Igen, överväga den variabla A = rstuvwxy där är..., y representerar bitar med värdena 0 eller 1. Anta att denna tid vi vill se till att bits har #0 och #4 värdet 0 utan att ändra någon av de andra i A. Det vill säga vi vill ange y = 0 och du = 0. Till gör så, överväga en mask med alla nollbitar utom #0 och #4.

Mask3 = 00010001

som bekvämt råkar vara samma som Mask2 i föregående exempel. Det kan vara lättast att titta på tabell 4 se vad måste hända.

Tabell 4: Exempel på bitvis AND mellan två 8-bitars nummer

8-bitars variabel

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

Variabel & ~ Mask3

r

s

t

0

v

w

x

0

Vi vet från de tidigare exemplen, att OR kan användas för att ändra lite till 1, och det och kan användas för att ändra lite till en nolla. Så det verkar som att vi behöver det och. I tabell 4 visas har Mask3 en 1 på dessa platser att resultatet har en 0. Om du vill kombinera Mask3 med AND, vi har en hjärna storm och inse att vi behöver bara vända bitarna i Mask3 och sedan använda den och.

Den logiska inte eller NEGATION har följande definition ~ 0 = 1, ~ 1 = 0. Så nu lite positioner i ~ Mask3 (se tabell 4) med 0 är placerar av variabel A som ska anges till noll. Använda resultaten för det första exemplet och faktumet att y & 0 = 0 (etc) vi till den nedersta raden av tabell 4. Om vi lagrar resultatet tillbaka i variabeln A enligt

A = A & ~ Mask3

sedan har vi avslutat vår uppgift att inställningen bit #0 och #4 till noll i orginal numret. Här använder '=' som ett C/C++ uppdrag.

Se Steg
Relaterade Ämnen

Atmel start 1: Atmel Studio och programmerare

M. A. Parker c2015Installera Atmel Studio (AS) och en programmerare förkroppsligar de första stegen [0] på väg mot med hjälp av en Atmel AVR Microcontroller individenhet MCU [1] i motsats till MCU-på-en-styrelsen som Arduino [2]. Här startar resan, o...

Atmel start 2: Microcontroller kretsar och säkringar

M. A. Parker c2015Kretsar och säkringar konstruerar en enkel men viktig krets på en experimenter's skärbräda som ska användas som grundläggande plattform för många microcontroller projekt och för att ange parametrarna mikrokontroller (dvs säkringar)....

Atmel start 3: Binky en-PORT, PIN, DDR och LED

M. A. Parker c2015Blinky, blinkande LED, visar hur man använder språket som C/c ++ i Atmel Studio (AS) för att styra Atmel MCU portar för ingång och utgång (dvs IO) och avslöjar den "hemliga" liv av Atmel PORT, PIN och DDR register. Blinky använ...

Atmel start 5: Livlina

M. A. Parker c2015Livlinan är en enkel krets baserad på Atmel ATTiny2313A mikrokontroller enheten (MCU) som fungerar som ett substitut klocka källa för ett mål MCU återges ur funktion av felaktigt ställa in klockan säkringar. Projektet, tänkt att var...

DIY luft värmeväxlare - från läskburkar och pvc-rör

Du lära dig hur man gör en låg kostnad, lätt att bygga och mycket effektiv luft värmeväxlare med läskburkar, pvc-rör och några datorfläktar.Syftet med värmeväxlaren är att ventilera ett rum eller hus med frisk luft samtidigt inte förlora för mycket v...

Laptop automatisk Start/stopp anklagat för (med Arduino, Yun sköld och ESP8266)

Jag arbetar utanför mitt land och laptop är en stor hjälp för mig att ansluta till min familj och vänner och göra alla mina computing tyger också, men jag alltid kom över för att driva svagt batteri och jämn värst till kritisk nivå eller reserverade...

Automatic 18650 Analyzer

Flyttade uppdateringar till steg 2.Jag hade turen att få många dussintals begagnad laptop batterier från en vän som jobbar på en datorbutik. Efter laddning och urladdning några hundra cell 18650 celler med 3 Imax B6 laddare att mäta kapacitet, jag be...

Arduino Powered Home

Jag har gjort några uppdateringar till detta instructable sedan Aug 2014 ***Jag bestämde mig att dela denna information så att det kan hjälpa andra som har kämpat för att göra liknande saker med deras Arduino. Jag har nyligen fått med Arduino. Jag kö...

Gör din egen IR-fjärr som kan nå någonstans

Min hemmabio är långt borta från min säng och fjärrkontrollen kan inte nås där. Många gånger, tänkte jag styra hemmabiosystemet från min säng att njuta av musik när som helst (på grund av lathet förstås). Så jag gjorde en sökning och hittade denna fa...

Hur du använder ESP8266-01 stiften

IntroduktionESP8266-01 är en mycket låg kostnad WiFi aktiverat chip. Men det har mycket begränsad I/O. När du konfigurerar den för programmering används vid första anblicken, alla stiften.Denna instructiable bygger på med hjälp av ESP8266 GPIO0/GPIO2...

Säkerhet med en gammal Pentium 1 del II

Micro-styrenheter är mycket snyggt. Har ett par själv. Ansluter till micro-kontrollanter eller till en PC är i princip samma. Så har du inte en mikro-controller ännu, ta en gammal PC och få att fungera. Detta är en förlängning av ursprungliga instruc...

Hur du använder I2C i LabVIEW

För detta projekt ansluten jag PmodGYRO till chipKIT WF32 med LabVIEW och LabVIEW MakerHub LINX. Denna guide kommer att gå igenom hur du ställer in pull-up motstånd för framgångsrik I2C kommunikation och hur man läser ett datablad för att hitta det d...

Hur man gör en PIP-Boy (prototyp)

så vad är en PIP-Boy, du frågar? För de obekanta är en PIP-Boy en anordning som används av huvudpersonen i den populära Fallout-serien av spel för navigering, strålning upptäckt, data storage/uppspelning och lagerhantering. Är ett stort fan av serien...

Mobiltelefon larm för en motorcykel, bil eller något du vill

jag fick nog med normala larm vilket gör en massa oväsen, och ingen tar några märker av dem längre.Också utan att veta om någon hade bud med min cykel eftersom jag var för långt bort att höra larmet.Så jag bestämde mig att göra detta larm med en gamm...

Bärbar infödda MOD spelare baserat på Raspberry PI (spelar MOD, S3M, det, XM etc...). Använder BassPlay bibliotek.

Description:Hallon-PI grundval av ursprunglig MOD player för att spela musik moduler MOD, S3M, det, XM bland andra.Den använder kommandoradsverktyget spelare baserad på bas-play bibliotek.Kort beskrivning av musik moduler:Musik moduler påbörjar från...

1981 Portable VCR Raspberry PI Media Centre

Detta är en tidig 80-Sharp VC - 2300H bärbara Videobandspelare som jag har konverterat - det har nu en Raspberry Pi i centrum, kör de utmärkta Raspbmc medierna Center software. Andra uppgraderingar inkluderar en snazzy arduino-baserad klocka och en E...

FSR Tutorial!

Vad är en Force känsliga motstånd?FSRs är sensorer som gör att du kan upptäcka fysiskt tryck, klämma och vikt. De är enkla att använda och låg kostnad.FSRS är i grunden en resistor som ändrar dess resistiv värde (i ohm) beroende på hur mycket dess pr...

HD44780 LCD till I2C adapter styrelsen för buss pirat

billigt tecken LCD-skärmar baserat på HD44780 chipset kommer i olika storlekar: 2 x 16, 4 x 20, etc. Dessa skärmar har två standardgränssnitt lägen, 4 och 8 bitars parallellt. 8 bitar kräver sammanlagt 11 data linjer, 4 bitar kräver 7 (6 för lässkydd...

(7) noll till 132 volt AC eller DC!

jag gick hem med min fru en dag efter lunch i en av de många asiatiska restauranger som vi har i Oahu.Promenader är bra.Får hjärtat att arbeta hårdare, du bryta en svett och du förlora lite vikt du inte behöver släpa runt i första hand.Hawaii är en m...