Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; https://www.instructables.com/id/Command-Line-Assembly-Language-Programming-for-Ard-1/ Här kan du läsa mer grundlig föklaring till koden.
- ; https://www.youtube.com/watch?v=pInCtpDUz98 Här är en video som visar hur man kan simulera en atmega328p i Atmel Studio
- ;----Registerdefinitioner
- .DEF rTemp = r16
- ;----Konstanter
- ;----Datasegment
- ;----Kodsegment
- .CSEG
- .ORG 0x0000
- jmp init
- init:
- ser rTemp ;Sätter alla bitar i rTemp till 1 , rTemp = 0b11111111
- out DDRB,rTemp ;DDRX står för data direction register, vilket X kan vara A, B, C eller D beroende på vilken typ av AVR mikrokontroller som används.
- ;När man sätter en bit till 1 på Data Direction I/0 registrer för portB, som man kan se här är DDRB, så blir motsvarande pin satt som output
- ;skulle man istället sätta en 0 så skulle samma pin bli satt som input.
- ;Eftersom att vi satt alla bitar i rTemp 1 så kommer alla PortB pins att bli satta som output.
- ldi rTemp,0b11111110;Här laddar vi in ett nytt värde i rTemp, eftersom vi laddar en konstant så använder vi load immediate
- ;Om det hade varit en minnesplats vi ladda ifrån så skulle vi kunnat använt ld istället
- out DDRD,rTemp ;Nu sätter vi istället DDRD till värdena som just lagrades i rTemp.
- ;Lägg märke till att denna gången är det portD vi jobbar med.
- ;Eftersom alla bittar är satta till 1 förutom sista biten så betyder det att PD0 är en input, medans resterande av högre värde bit plats är outputs.
- ;Om du tar en titt på Atmega328p pin mappningen så kmr du se PD går från 0-7, som en byte.
- clr rTemp ;Här sätter vi alla bitar i rTemp till 0, clr står för clear register.
- out PortB,rTemp ;Sätter portB till värdet i rTemp, d.v.s. alla bitar till 0, alla pins blir satta till noll för PortB.
- ldi rTemp,0b00000001 ;Laddar rTemp med ett nytt värde, alla bitar förutom sista satta till 0
- out PortD,rTemp ;Sätter PortD till rTemp, eftersom alla är bitar är nollor förutom sista så blir PD0 aktiv medans resterande kvarstår som avstängda
- ;Lägg märkte till att PD0 ÄR AKTIV INPUT.
- ; Main body of program:
- Main:
- in rTemp,PinD ;PinD håller status av PortD, vi kopierar denna statusen till temp,
- ;Om en knappen är ansluten till PD0 och blir klickad så ändras statusen på den den aktiva input biten till 1 från 0
- ;Om den är aktiv så blir rTemp satt till 0b00000001
- out PortB,rTemp ;Här laddar vi PortB med värdet från rTemp som fick sitt värde från input,
- ;Vad som händer nu är att ifall någon hade klickat på knappen innan så borde 0b00000001 nu blivi satt på PortB
- ;Detta skulle gjort så att PB0, den sista biten i PortB blev aktiv, om detta vore en led som var ikopplad på PB0, så skulle den nu blivit aktiv.
- rjmp Main ;Här loppar vi tillbaka till main, på det viset kollas hela tiden om något har aktiverat inputen på PD0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement