www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

AVR in ASM za začetnika

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Ned Nov 27, 2005 3:14 pm    Naslov sporočila:  AVR in ASM za začetnika Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Ned Nov 27, 2005 3:53 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Ned Nov 27, 2005 8:09 pm    Naslov sporočila:   Odgovori s citatom

Pozdarvljeni!
Sokrat hvala da si me opozoril na rcall. No program mi sedaj deluje Very Happy 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 Very Happy
Ima kdo kakšno idejo za mene ki bi jo lahko naredil na STK500. Kot nekakšno nalogo? Smile


Lp
Madzi
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Ned Nov 27, 2005 9:33 pm    Naslov sporočila:   Odgovori s citatom

Ja - popravi bedarijo, ki si jo naredil pri vrhu v preveliki vnemi ob zamenjavi rjmp-ov z rcall-i Smile 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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70831.12

PrispevekObjavljeno: Ned Nov 27, 2005 9:42 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Zlikovec
Neznanec
Neznanec



Pridružen-a: Tor 22 Nov 2005 12:10
Prispevkov: 2
Aktiv.: 0.01

PrispevekObjavljeno: Pon Nov 28, 2005 3:46 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
siljo
Član
Član



Pridružen-a: Tor 28 Okt 2003 8:08
Prispevkov: 1035
Aktiv.: 4.37
Kraj: Ribn'ca

PrispevekObjavljeno: Sre Nov 30, 2005 10:20 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
madzi
Član
Član



Pridružen-a: Sre 24 Sep 2003 10:46
Prispevkov: 315
Aktiv.: 1.33
Kraj: Pragersko, Dragonja vas, Maribor

PrispevekObjavljeno: Ned Dec 11, 2005 1:09 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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