AVR Assembler handledning 5 (5 / 8 steg)

Steg 5: Del 2: logik Gates



Vi har ägnat detta hela tutorial talar om programmet minnesadresser och register och allt det där. Nu skulle jag vilja ta några minuter och gräva ner i vad som händer på dessa adresser. Med andra ord, hur förvarar jag ett byte data på någon adress? Vad som pågår där? Vad är en "register"? Dvs. Vad är den elektriska kretsen som jag kan bygga som kommer att lagra en 8-bitars nummer som 0x03 eller en 0b10101011 till exempel?

Nu har du märkt att alla instruktionerna i instruktionsuppsättningen kan reduceras till två typer. Först lagra, Hämta eller kopiera bitar från och mellan register. Den andra typen utför logiska operationer på dessa data. Till exempel att lägga till, subtrahera, ANDing, ORing, XORing, etc. Det är egentligen allt som händer här. Olika kombinationer av lagra nummer och sedan utför matematiska operationer på dessa nummer är vad resulterar i alla coola saker datorer och microcontrollers kan göra. Det är ganska otroligt när man tänker på det.

I del 2 i denna handledning kommer vi att gå ner en sista steget och titta på en av de viktigaste komponenterna i denna process. Vi kommer först att bygga en viss typ av "logisk grind" kallas en NOR grind, och då kommer vi att använda NOR gates för att bygga en SR-spärren.

Ta en titt på bilden av logik utfärda utegångsförbud för jag har gett ovan. De är Schematiskt diagram som betecknar en viss matematisk operation. Ni minns att dessa typer av verksamhet är allt vi behöver göra instruktioner för en instruktionsuppsättning. När vi diskuterade SREG innan du såg att alla flaggor beroende av vissa logik beräkningen använder bitarna i våra register och utför OR, AND, etc på dem. Om man tittar på diagrammet du se att alla dessa "logik gates" har två ingångar (som i huvudsak ledningar) och en utgång (också en tråd). Så om du hade en AND-gate till exempel, ser du att om jag sätter 5 V på varje ingående trådarna, då jag kommer att få 5V på produktionen. Å andra sidan, skulle någon annan kombination av inspänningar (0 eller 1) resultera i 0V på produktionen. På samma sätt för andra logik utfärda utegångsförbud för. Så detta är ett sätt att fatta beslut och utföra beräkningar på bitar i våra register, precis som de beräkningar som görs av Processorn att räkna ut vilka flaggor få aktiverat i SREG.

Så låt oss titta på utfärda utegångsförbud för NOR. Utfärda utegångsförbud för NOR är helt enkelt en eller-grind med en N framför den. Det betyder "sanningen bordlägger" av eller-grind och tar komplimangen av alla svar. Så en 1 blir en 0 och en 0 blir en 1. Märka något särskilt. Det enda sättet jag kan få 5V ut på andra sidan av en utfärda utegångsförbud för NOR är om det finns någon volt kommer in från antingen input! Detta är typ av cool. Det är därför vi kommer att använda denna baby för att göra något ännu coolare, en SR-spärren.

En SR-Latch byggs genom att ta två utfärda utegångsförbud för NOR och att konfigurera en återkoppling så att utdata från en blir en av ingångarna för andra och vice versa. Ta en titt på min andra diagram som visar en SR-spärren. Se om du kan se varför tabellen logik är vad som visas. Till exempel, säg jag satte 5V på R och 0V på S. Tja vet du hur en utfärda utegångsförbud för NOR fungerar, eftersom det finns 5V på R vet vi att ljudutgången på Q är 0V eftersom det enda sättet att få en signal från en NOR grind är om båda ingångarna är avstängda. Så det betyder att 0V kommer ut en Q och matas tillbaka till S. Så andra NOR grinden har 0V kommer in från S, och även 0V kommer in från feedbackloop. Därför kommer det som den andra utgången Q att 5V. Så nu ser du hur det fungerar just?

Anledningen till att det kallas en SR-spärren är att S står för "Set" och R står för "Reset". Säger jag ansluta en LED1 till Q och en annan LED2 q och jag börjar med S inställd på 1 (dvs. på 5V) och R anges till 0 (dvs 0V), sedan LED1 kommer att vara på och LED2 kommer att vara avstängd. Sedan antar jag släppa S så att det går tillbaka till 0V. Vi har fortfarande 5V på Q eftersom R är 0V och feedback från Q är också 0V. Men nu S är på 0V istället för 5V så vad kommer att förändras? Ingenting! Vi kan hålla kopplande S mellan 0V och 5V och ingenting kommer att hända. LAMPAN i Q kommer att bo och lampan i Q kommer att stanna utanför. Vi har "satt" spärren på. (Q är upplysta medel på)

Vad händer nu om vi sätter 5V på R? Nåväl sedan 0V kommer från Q feedback och 5V kommer från R, NOR porten stängs av och Q kommer att stänga av. Sedan fodret tillbaka från Q kommer att 0V och eftersom S är 0V vi se andra LED på Q kommer att slå på! Nu övertyga dig själv att om vi hålla byter R nu kommer ingenting att ändras lampan i Q kommer att förbli på oavsett vad vi gör till R. Det enda sättet att stänga av är att push S igen. Resultatet av denna SR-spärren är att trycka S kommer att lysa upp en av lamporna och det kommer att hålla även efter du låta S gå tillbaka till 0V, låset är fortfarande "set". Det enda sättet att få bort är att push R som kommer att stänga av som ledde och slå på annan. Sedan kan du låta R gå tillbaka till 0V och spärren förblir "reset".

Så är en SR-spärr ett sätt att lagra en bit av data. Om du definierar den vara "1" när Q-lampan är tänd och en "0" när Q LED är på du har effektivt lagras en enda bit. Du kan skicka en spänning puls till spärren och uppsättningen det till 1 och sedan du kan bara lämna den vara och det kommer att förbli en 1. Sedan om du skickar en annan spänning puls till R det återställs till 0 och kommer att förbli så också.

Detta är den grundläggande delen av lagring i datorn. Det finns något mer sofistikerad lagring metoder som Flip-flops och D-lås, men de är alla gjorda av en SR-spärren med några extra funktioner som en klocka-signalingång som anger och återställer spärren enligt klockan puls och en annan gate eller två på en av ingångarna. Men den grundläggande enheten är SR-spärren.

Vi kunde gå längre in i teorin och visar hur du kan ta 8 av dessa lås och göra en "8-bitars Register" av dem. Dvs kan du lagra 8 bitar, en på vardera 8 SR-spärrarna. Våra generella arbetande register i atmega328p är i grunden en samling av SR-lås. I själva verket kan en dag jag ta en skärbräda och bygga 8 SR-lås som de som vi konstruerar här i del 2 i denna tutorial och sedan koppla in dem tillsammans för att göra ett Register. Det kan vara kul att sedan utföra logiska operationer på det och saker sådär. Om jag någonsin bygga ett register som det tror jag att jag kommer att kalla den "r16" :)

Se Steg
Relaterade Ämnen

AVR Assembler handledning 11

Välkommen till handledning 11!I den här korta guiden kommer vi slutligen att bygga den första delen av vårt sista projekt.Det första du bör göra är att gå till det allra sista steget i denna tutorial och titta på videon. Sedan komma tillbaka hit. [pa...

AVR Assembler handledning 6

Välkommen till Tutorial 6!Dagens handledning kommer att vara kort där vi kommer att utveckla en enkel metod att kommunicera data mellan en atmega328p och en med två portar ansluta dem. Vi kommer ta sedan tärningarna rullen från läraren 4 och registre...

AVR Assembler handledning 8

Välkommen till Tutorial 8!I denna kort tutorial ska vi ta lite av en skenmanöver från att införa nya aspekter av assembler programmering att visa hur man flytta våra prototyper komponenter till ett separat "tryckta" kretskort. Anledningen är att...

AVR Assembler handledning 10

Välkommen till handledning 10!Ledsen att det tog så lång tid för att få denna nästa avbetalning ut men detta är en ganska hektisk tid på året. I alla fall, är här det!Vi har kommit långt och du förmodligen redan är kompetenta nog att skriva många int...

AVR Assembler handledning 3

Välkommen till tutorial nummer 3!Innan vi börjar vill jag göra en filosofisk punkt. Inte vara rädd för att experimentera med kretsar och den kod som vi konstruerar i dessa tutorials. Ändra sladdar runt, lägga till nya komponenter, ta komponenter ut,...

AVR Assembler Tutorial 1

Jag har beslutat att skriva en serie tutorials om hur man skriver assembler program för den Atmega328p som är mikrokontroller används i Arduino. Om människor förblir intresserad fortsätter jag att lägga ut en en vecka eller så tills jag får slut på l...

AVR Assembler Övningsexempel 7

Välkommen till Övningsexempel 7!Idag vi första visar hur du rensar en knappsats och sedan visar hur du använder Analog ingång hamnarna för att kommunicera med knappsatsen.Vi kommer att göra med avbrott och en enda tråd som indata. Vi kommer tråd knap...

AVR Assembler Övningsexempel 9

Välkommen till Övningsexempel 9.Idag kommer vi att visa hur du kan styra både 7-segment display och en 4-siffrig display med våra ATmega328P och AVR assembler kod. I samband med detta får vi ta omvägar till hur du använder stacken för att minska anta...

AVR Assembler Tutorial 2

Denna handledning är en fortsättning på "AVR Assembler Tutorial 1"Om du inte har gått igenom Tutorial 1 bör du sluta nu och göra att man först.I den här guiden kommer vi fortsätta vår studie av assembler programmering av den atmega328p som använ...

AVR Assembler Övningsexempel 4

Välkommen till tutorial nummer 4!I den här guiden kommer vi att bygga en krets som kommer att simulera rullning av två tärningar. Sedan kommer vi först skriva en brute force-program som gör jobbet. Sedan kommer vi förenklar det programmet på olika sä...

En avancerad metod för Arduino & AVR programmering

Detta instructable är ett måste läsa för alla som är bekanta med core AVR chips och Arduino.Tja, mer konkret, när jag läste den instructable kommer du att kunna:1) vet väl skillnaden mellan AVR och Arduino.2) programmering Arduino med WinAVR & använd...

Utveckling styrelsen för Attiny84 mikrokontroller

Detta är en utveckling styrelse för Attiny84 mikrokontroller. Tha Attiny84 chip har 11 pins adresserbara med Arduino IDE, 8k flashminne för lagring av program och 512 byte ram tillgängligt för variablerna stack och program.En funktion av den Attiny84...

Hur man ladda program till en Arduino UNO från Atmel Studio 7

I denna korta Instructable kommer vi att lära sig att ladda ett program till en Arduino UNO ombord med Atmel Studio istället för Arduino IDE. Detta är användbart när du behöver utveckla ett program med fler advance funktioner eller på ett annat språk...

MRETV - Video, ljud och mycket mer från en standard Arduino!

MRETV - Video, ljud och mycket mer från en standard Arduino!Nu uppdaterad för Arduino 1.6.6 November 2015!Använd endast två resistorer och två dioder för att generera full skärm video. Text 47 x 29 8 x 8 tecken, dubbla vertikala upplösningen (47 x 57...

Älskling, jag krympte Arduino: flytta från Arduino till ATtiny och skriva din kod i ren AVR-C

Arduino är en stor hård- och mjukvaruplattform, men med alla dess funktioner är det också lite uppsvälld och ofta behöver du bara en liten del av alla funktioner. Projektet kräver ibland för att ha mindre och billigare enheter. Vad du behöver är ATti...

65xx teknik-församlingen språk programmering med W65C02SXB-handledning 1

Western Design Center (WDC) har beslutat att skriva en serie tutorials på hur du kommer igång med vår 65xx teknik och hur man skriver assembler program för 65xx familjen för ICs. Denna handledning kommer att baseras på använda det Standard W65C02 chi...

AVR fuse grunderna: kör en avr med en extern klocka

säkringar är bland de svåraste ämnen som jag stött på samtidigt lära sig om programmering microcontrollers. Även efter att söka och läsa flitigt, kunde jag fortfarande inte lyckas rensa mitt begrepp om dem. Men sedan jag började lära dem ta en i tage...

AVR programmering med Arduino, AVRdude och AVR-gcc

AVR är en gemensam, billig typ av mikro-controller som kan verka skrämmande att arbeta med, men oroa dig inte! När du har Ställ in grundläggande kunskap och kan de bli inte bara nyttigt, men viktigt att nya projektidéer som du drömmer upp!Denna handl...

Idiot's Guide till programmering AVR: s på de billiga (med Arduino IDE!)

Mikrokontroller är, utan tvekan, fantastiska små saker. De är mångsidiga, kraftfull och mycket små. Tyvärr, den sistnämnda drag också delas av både min plånbok och mina kunskaper i programmering. Min förståelse av C är dålig, och jag har knappt råd a...