PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AT90S2313



Elektronik303
15.01.2006, 14:13
Hi!

Da es ja kein Assembler Forum gibt poste ich es hier.

Hab mir gestern mal ein AT90S2313 gekauft und hab auch gleich mal ein Tut gelesen... Ich programmiere die Dinger mit Assembler. Jetzt wollt ich mir ein Wechselblinker basteln. Das Problem ist das wenn ich einfach:


.nolist
.include "2313def.inc"
.list

ldi r16, 0b00000101
out DDRD, r16

looping:
ldi r16, 0b00000001
out PORTD, r16

ldi r16, 0b00000100
out PORTD, r16
rjmp looping

mache, ist es ja logisch das es aussieht als wenn beide LEDs die ganzen Zeit leuchten.
Also brauch ich irgendwie ein Unterprogramm,was so 0,5 Secs wartet... Wie kann man das Proggen?

Mfg

Elektronik303

albundy
15.01.2006, 17:59
Google mal nach "AVR Delay Loop" für Assembler.

Elektronik303
15.01.2006, 18:56
Der Code funzt aber komischerweiße nich:



.nolist
.include "2313def.inc"
.list

ldi r16, 0b00000101
out DDRD, r16

looping: ;Blink-Schleife

ldi r16, 0b00000001

out PORTD, r16

rcall delaymsec

ldi r16, 0b00000100

out PORTD, r16

rcall delaymsec




rjmp looping



delaymsec:
ldi R16, $12
WGLOOP0: ldi R17, $BC
WGLOOP1: ldi R18, $C4
WGLOOP2: dec R18
brne WGLOOP2
dec R17
brne WGLOOP1
dec R16
brne WGLOOP0
nop
nop
ret


Müsste doch eigentlich klappen?!

uwegw
15.01.2006, 20:35
Für welche Zeit ist die Schleife denn berechnet?

Elektronik303
16.01.2006, 14:09
0,5 Secs bei 4Mhz...

albundy
16.01.2006, 19:09
Müsste doch eigentlich klappen?!

Ja, müsste eigendlich funktionieren.

Nur so eine Idee ...
Es wäre nicht schlecht, vorher den Stackpointer und den RAM zu initialisieren.



ldi r16,low(ramend) ;Stackpointer setzen
out spl,r16
ldi r16,high(ramend)
out sph,r16
ldi yl,0x60 ;Beginn des RAM
ldi yh,0
clr r16
init:
st y+,r16 ;RAM-löschen
cpi yl,low(ramend+1)
brne init
cpi yh,high(ramend+1)
brne init

Elektronik303
16.01.2006, 20:56
Sorry, aber wenn ich deinen Code bei mir einfüge, sagt er mir da wär ein Fehler drin...

Und ich habe was lustiges rausgefunden... Mein AVR macht nur dann Wechselblinker, wenn er auch lust drauf hat... Heute z.b. Ging der Wechselblinker für ungefähr 1. Minute dann ist er auch wieder ausgegangen... Ich hab die Batterie nochmal neu drangemacht und es ging immernoch nicht. Das ist mir ein Rätsel. Glaubt ihr das Teil ist kaputt und ich sollte ein neues holen? Die Schaltung kann nicht falsch sein...