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" :)