PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wie funktioniert Timer/Schleife für Lauflicht?



Eisen3Chlorid
01.09.2004, 21:53
Hallo hab mal ein kleines Programm geschrieben. Soll ein Luaflicht werden. Ich weiß, daß das auch einfacher geht wie jedes Bit einzeln zu setzten. Darum geht es mir bis jetzt aber auch noch nicht. Ich hab das Problem, daß wenn ich die Schleife die jetzt im unterprogramm warten steht zwischen jede en einzelnen Block setzt Funktionierts. Also hab ich rigendwie ein problem mit dem Aufruf des Unterprogramms. Wollte das ganze (Zeitschleife) eh mit einem Timer realisieren. Aber das habe ich bis jetzt noch gar nicht verstanden. Setzt einen 12 Mhz Quarz ein. Dadurch brauche ich eine lange Schleife, um das Lauflicht überhaupt sehen zu können. Könnt ihr mir da vielleicht weiter helfen?

Vielen Dank schon mal

.include "m8def.inc"


ldi r16, 0xFF
out DDRD, r16
rcall warten
ldi r16, 0b11111111
out PORTD, r16
rcall warten
ldi r16, 0b00000010
out PORTD, r16
rcall warten
ldi r16, 0b00000100
out PORTD, r16
rcall warten
ldi r16, 0b00001000
out PORTD, r16
rcall warten
ldi r16, 0b00010000
out PORTD, r16
rcall warten
ldi r16, 0b00100000
out PORTD, r16
rcall warten
ldi r16, 0b01000000
out PORTD, r16
rcall warten
ldi r16, 0b10000000
out PORTD, r16
rcall warten
ldi r16, 0b00000000
out PORTD, r16

warten:
ldi r16, 1255
ldi r17, 255
loop1:
dec r17
brne loop1
dec r16
brne loop1
ret

Ach ja, was ist der Unterschied zwischen rcall und call? Könnte ich das Unterprogramm auch mir call aufrufen?

Kjion
01.09.2004, 22:46
Hi,

du hast den Stackpointer nicht initialisiert. Daher kann der AVR nicht mehr aus dem Unterprogramm zurückspringen. Füg mal folgendes vor deinen Code ein :

ldi r16, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
out SPL, r16
ldi r16, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
out SPH, r16

( siehe auch das Tutorial auf http://www.mikrocontroller.net/tutorial/stack.htm )

MfG Kjion

Florian
02.09.2004, 17:27
warten:
ldi r16, 1255
ldi r17, 255
loop1:
dec r17
brne loop1
dec r16
brne loop1
ret


Hi Eisen3Chlorid! ;o)
Beim obersten "ldi"-Befehl willst Du 1255 in r16 schreiben, das geht aber nicht!
Ich denke das war ein Flüchtigkeitsfehler, aber ich wollts nur kurz sagen! :o)

Eisen3Chlorid
04.09.2004, 13:06
jup da hast recht gehabt, war in eile. Danke nochmal für die Hulfe, jetzt funktionierts.

Florian
04.09.2004, 13:38
Gut! Das freut mich! :o)

04.09.2004, 16:21
@Florian
Warum schreibst du unter deinen Namen immer einen Link, der soundso nicht erreichbar ist?
www.cer-online.de

Florian
04.09.2004, 19:20
Hi Gast!
Leider ist der Link noch nicht aktiv!
Ich hoffe ich schaffe es demnächst die vorläufige Version online zu stellen!

04.09.2004, 20:57
Achso, du machst du Leute erst neugierig :)
Ist auch ne gute Taktik.

Florian
04.09.2004, 21:18
Hi Gast!
So ist das eiegntlich nicht gedacht, ich wollte eigentlich schon längst die Seite online stellen, habe es aber noch nicht geschafft! :o(
Ich hoffe, ich schaffe das bald mal! :o)

Ich werde erstamal einen Vermerk (siehe unten) machen!

05.10.2004, 12:50
[glow=red:3aad367199][shadow=red:3aad367199]EUER SYSTEM GEHÖRT MIR!!!!!!!
Ihr habt nicht die geringste Chance
[/shadow:3aad367199][/glow:3aad367199]

Adam
05.10.2004, 16:26
hm?