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. 3 perc
Jöjjenek hát a megszakítások. Mint már említettem a program memória elején van a megszakítás tábla. A megszakítás forrásától függ, hogy ezen a táblán hova fog ugrani. Úgy van megcsinálva a tábla, hogy a megszakításhoz egy ugró utasítást tudunk tenni, és ez még nem lóg bele a másik memória területre, ami a másik forrásé. Így olyan hosszú megszakítási rutint írhatunk, amit nem szégyellünk. Alábbi program annyit csinál, hogy ha az INT1 lábon történik valamilyen változás, akkor megszakít, és a B port 0. lábát negáljuk.
Visszatérve az include fájlhoz, ebben tulajdonképpen csak rövidítések vannak. Ha a legvégét megnézzük, akkor ott találjuk a megszakításokhoz használt azonosításokat. Használjuk bátran ezeket (és az ez előtt lévőket is), mert olvashatóbbá teszi a programunkat. Most viszont használjuk az SRAM-t, és fibonacci számokkal írjuk teli. Fibonacci sorozat abból áll, hogy az első két eleme 0, és 1, majd a következő mindig az előző két elem összege lesz.
.def szintén egy direktíva. Ezzel regisztereket nevezhetünk el könnyebben megjegyezhető formává. Ennek az algoritmusnak eme formája csak erős megkötésekkel működik. Hiszen gondoljunk bele ez csak 8 biten képes ábrázolni, ami maximálisan 255 lehet. Természetesen, ha más elgondolás alapján csináljuk, akkor ki lehet ezt bővíteni 16 bitre, vagy akár 32 bitre is. Végül egy "komolyabb" algoritmust mutatok be, még pedig a buborék rendezés. Mint tudjuk ez úgy működik, hogy összehasonlítja az első két elemet, majd ha nincs jó sorrendben akkor cseréli. Majd ugrik a második és harmadikra. Ha nincs jó sorrendben akkor cseréli. Egészen el megy a végéig, majd ismét elkezdi előröl, és csinálja egészen addig, amíg csere nélkül végig tud futni. Ez alábbi program pontosan ezt csinálja. 4 elemet képes rendezni, de ha cyc-t nagyobbra írjuk, akkor többet is. Már a szimulációs lapon említve lett a Toggle Memory Window. Erre szükségünk lesz, és az első négy elemét írjuk át random számokra. Végül mehet a próba.
Ez már túl bonyolult ahhoz, hogy csak úgy bemásoljam leírás nélkül. Init-ben történik meg a regiszterek inicializálása, értelemszerűen. Ennek mindig le kell futnia, ha a program az adatsor végére ért, hogy az adatsor elején kezdhesse előröl. Main-ben történik meg a soron következő két elem kiolvasása, majd az összehasonlítása. Csak akkor kell tennünk valamit, ha a komparálás eredménye azt hozza ki, hogy kisebb. Ekkor a smaller fut le, ahol kicseréli a két adatot, és visszaírja az SRAM-ba. Az, hogy mikor lettek az adatok sorba rendezve, az a T bit segítségével derül ki. Minden újra kezdésnél "1"-be állítom a T bitet, és ha történik csere, akkor törlöm, ha nem történik egyszer sem, akkor a program végén a brtc branch tovább fogja engedi, és vége. Sorba lett rendezve, még ha ez a legbutább algoritmussal is történt. A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |