Fórum témák
» Több friss téma |
Cikkek » AVR Assembly kezdőknek AVR Assembly kezdőknek
Szerző: sgt, idő: Nov 23, 2011, Olvasva: 33223, Oldal olvasási idő: kb. 2 perc
Mivel minden programindulás resettel indul, ezért magát a programot is innen kell indítani. Következő lépésként ezt írjuk be:
.org egy direktíva, amellyel azt lehet megmondani, hogy az ezután lévő utasításokat a program memória melyik címére írja. Ez ebben az esetben nagyon fontos, mert a program memória elején a megszakítás tábla van. Amikor mi szeretnénk ezt a megszakítás táblát használni, akkor könnyen előfordulhat olyan, hogy egymásra írtuk a megszakítást, és a programunkat. Azt, hogy honnan kezdhetjük a programunkat, azt az adatlapban találhatjuk meg. Interrupts könyvjelző alatt találhatjuk meg. Atmega16A esetén 0x002A címről fog kezdődni a program. Jelen esetben mivel resetről van szó így alapértelmezetten minden uC-nél ennek a címe 0x0000.
Ha az I/O View-ban rákattintunk a PORTB-re, akkor az alatta lévő ablakban megjelenik három regiszter. Itt nagyszerűen követhetjük, hogy hogyan tölti fel egymás után a regisztereket, de természetesen használható a Szimulációs részben leírtak is. Következő program azt fogja csinálni, hogy az A port 0. bitjét figyeljük, és ha „0” szintű lesz, akkor az 1. biten ezt egy „1”-el jelezzük.
Most pedig futófény következik.
Futófény, de úgy, hogy ha megnyomjuk a gombot akkor vált, és minden gombnyomáskor vált. Ehhez egy cselre lesz szükségünk, aminek a neve T bit.
Eddigi kódok csak szimulációban működtek jól, hiszen a futófényből gyakorlatilag egy csíkot látunk, mert a szemünk nem tudja követni a gyorsaságot. Ezért alap időzítőt fogunk használni egy egyszerű programban. Ehhez szubrutin hívást fogunk alkalmazni, amihez pedig be kell állítani a stacket.
Ha még ez is túl gyors lenne, akkor lehet még egy hurkot bele tenni a szubrutinba vagy még egy pár nop-t a legbelső ciklusba, ezzel meg van oldva. A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |