 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
madzi Član

Pridružen-a: Sre 24 Sep 2003 10:46 Prispevkov: 315 Aktiv.: 1.33 Kraj: Pragersko, Dragonja vas, Maribor
|
Objavljeno: Ned Nov 27, 2005 3:14 pm Naslov sporočila: AVR in ASM za začetnika |
|
|
Pozdravljeni!
Začel sem programirat z atmeli in sicer z ATMEGA8515 ki sem ga dobil zraven STK500. V šoli smo se učili assemblerja na 8051 tako da neke osnove poznam. Trenutni se mučim z nekim programo, ki bi deloval kot nightrider lučke in imam problem z stack pointerjem. Program je spodaj. Delay je sicer bol tak zastvljen na oko. Prosim da mi malo pomagate spraviti tole v pogon.
Koda: |
.include "m8515def.inc"
.org 0x00
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
rcall reset
.org 0x100
reset:
ser r16
out ddrb, r16
main:
ldi r16, 0xfe
rjmp delay
lsl r16
rjmp delay
lsl r16
rjmp delay
lsl r16
rjmp delay
lsl r16
rjmp delay
lsl r16
rjmp delay
lsl r16
rjmp delay
lsl r16
rjmp delay
lsr r16
rjmp delay
lsr r16
rjmp delay
lsr r16
rjmp delay
lsr r16
rjmp delay
lsr r16
rjmp delay
lsr r16
rjmp delay
lsr r16
rjmp main
delay:
out portb,r16
dec r17
dec r18
dec r19
dec r20
brne delay
ret
|
Lp
Madzi |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Ned Nov 27, 2005 3:53 pm Naslov sporočila: |
|
|
Zakaj pa rjmp na delay ? Mislim, da si hotel tam napisati rcall (oz. call) - brez tega se sp ne spremeni, zato bo ret pobral par neumniosti in vse skupaj se bo pokvarilo.
Ukazni nabor AVRjev - sam AVRjev sicer ne uporabljam, ampak taka referenca pride prav, dokler ne poznas nabora dovolj dobro na pamet. |
|
Nazaj na vrh |
|
 |
madzi Član

Pridružen-a: Sre 24 Sep 2003 10:46 Prispevkov: 315 Aktiv.: 1.33 Kraj: Pragersko, Dragonja vas, Maribor
|
Objavljeno: Ned Nov 27, 2005 8:09 pm Naslov sporočila: |
|
|
Pozdarvljeni!
Sokrat hvala da si me opozoril na rcall. No program mi sedaj deluje in izgleda takole
Koda: |
.include "m8515def.inc"
.org 0x00
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
rcall reset
.org 0x100
reset:
ser r16
out ddrb, r16
ldi r16, 0xff
main:
rol r16
rcall delay
rol r16
rcall delay
rol r16
rcall delay
rol r16
rcall delay
rol r16
rcall delay
rol r16
rcall delay
rol r16
rcall delay
rol r16
rcall delay
ror r16
rcall delay
ror r16
rcall delay
ror r16
rcall delay
ror r16
rcall delay
ror r16
rcall delay
ror r16
rcall delay
ror r16
rcall delay
ror r16
rjmp main
delay:
out portb,r16
dec r17
brne delay
dec r18
brne delay
reti
|
Potem pa sem ga malo spremenil in nastalo je to:
Koda: |
.include "m8515def.inc"
.org 0x00
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
rcall reset
.org 0x100
reset:
ser r16
out ddrb, r16
ldi r16, 0xff
desno:
rol r16
rcall delay
sbrc r16, 0x07
rjmp desno
levo:
ror r16
rcall delay
sbrc r16, 0x00
rjmp levo
rjmp desno
delay:
out portb,r16
dec r17
brne delay
dec r18
brne delay
reti
|
Program je malo manjši in deluje tudi lepše
Ima kdo kakšno idejo za mene ki bi jo lahko naredil na STK500. Kot nekakšno nalogo?
Lp
Madzi |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Ned Nov 27, 2005 9:33 pm Naslov sporočila: |
|
|
Ja - popravi bedarijo, ki si jo naredil pri vrhu v preveliki vnemi ob zamenjavi rjmp-ov z rcall-i Sicer ne skoduje nicemur v tej konkretni aplikaciji, a ce bos to ponavljal, se bos spraseval, zakaj se ti kdaj program s prevec gnezdenimi procedurami sesuva. Tam gor mora biti samo skok na reset in ne rcall, saj s tem pospravis na stack tudi nekaj registrov, ki jih nobena stvar ne pobere vec dol (efektivno si zmanjsas stack).
Druga stvar: kaj pocne tisti reti na koncu ? Tvoja delay procedura ni interrupt handler, torej uporabi ret in ne reti.
Sprememba iz zaporednega izvajanja v zanko je bil korak, ki sem ti ga hotel predlagati, a si sam prisel do tega. Tako je koda bolj elegantna in zasede manj prostora.
Zdaj, ko ti prvi program deluje po pricakovanjih, ti predlagam, da poberes z Interneta (www.atmel.com) datasheet in user guide za mikrokontroler, ki ga uporabljas, in se posvetis ukaznemu naboru - torej kaj dela kateri ukaz, kako vpliva na dolocene posebne registre (PC, SP, zastavice, itd.). Ob tem bos zagotovo dobil kaksno novo idejo. Ko bos koncal s tem, se posveti enotam, ki so v doticni mikrokontroler vgrajene (UART, itd.). |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70830.56
|
Objavljeno: Ned Nov 27, 2005 9:42 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
Zlikovec Neznanec

Pridružen-a: Tor 22 Nov 2005 12:10 Prispevkov: 2 Aktiv.: 0.01
|
Objavljeno: Pon Nov 28, 2005 3:46 pm Naslov sporočila: |
|
|
Za programiranje z STK500 lahko uporabiš program CodeVisionAVR, ki vsebuje podporo za programator, poleg tega pa vsebuje že celo vrsto narejenih funkcij.
Obstaja trial verzija, ki ima nekoliko manj funkcij, vendar še vedno zadosti. _________________ Ducati Monster |
|
Nazaj na vrh |
|
 |
siljo Član



Pridružen-a: Tor 28 Okt 2003 8:08 Prispevkov: 1035 Aktiv.: 4.37 Kraj: Ribn'ca
|
Objavljeno: Sre Nov 30, 2005 10:20 am Naslov sporočila: |
|
|
ali poskusi z www.fastavr.com (zelo dober slovenski BASIC prevajalnik)!
S pomočjo njega dobiš lahko assemblersko kodo, ki jo lahko tudi debugiraš v AVR Studiu! _________________ Lep pozdrav! |
|
Nazaj na vrh |
|
 |
madzi Član

Pridružen-a: Sre 24 Sep 2003 10:46 Prispevkov: 315 Aktiv.: 1.33 Kraj: Pragersko, Dragonja vas, Maribor
|
Objavljeno: Ned Dec 11, 2005 1:09 am Naslov sporočila: |
|
|
Programov je res malo morje. CVAVR in FastAVR sem med drugimi tudi že probal. Basic se mi ne zdi slab. Nisem še sicer programiral v njem ampak vsi majo nekaj za povedat preko njega tako da mi ni preveč za njega. C pa se verjetno bom začel malo učit ampak kasneje. Pred dvemi leti sem začel z asemblerjem že v šoli pa bom nekaj časa ostal pri njem. Pa tudi za maturitetno nalogo mam namen napisat nek progrem v asemblerju.
LP |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|