PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rcall läuft auf Atmega8 nicht



Dolfo
01.12.2007, 13:18
Hallo,

eine kleine Routine, macht nichts anderes als über einen Adressbus 8 Pins abfragen ("Eingabeport") und dann an einem Ausgabebus ausgeben. Funktioniert einwandfrei - nur nicht, wenn das Anwählen des Eingabeports als Subroutine programmiert ist.

a) So läufts auf Atiny 2313 und Atmega8:

ldi Adresse, 1
out Adressbus,Adresse
START:
in Temp, Datenbus_in
out Magnetbus,Temp
rjmp START


b) So läufts auf Atiny 2313, aber nicht auf Atmega8:

rcall Tastatur
START:
in Temp, Datenbus_in
out Magnetbus,Temp
rjmp START
Tastatur:
ldi Adresse, 1
out Adressbus,Adresse
ret

Ich habe keine Ahnung, wo ich ansetzen muß. Bitte Hilfe!

izaseba
01.12.2007, 13:36
was ist mit stackpointer ?

Dolfo
01.12.2007, 13:58
danke für schnelle Antwort!

Ich habe eine ungefähre Ahnung, was ein Stackpointer macht, aber nicht mehr. Hatte bisher nur Atiny2313 programmiert, da funktionierten die rcalls ohne weiteren Aufwand. Was muß ich tun?

izaseba
01.12.2007, 14:48
http://www.izaseba.roboterbastler.de/index.php?popup=Tutorial&section=Lektion8#Stack

Vielleicht hilft das ?

Dolfo
01.12.2007, 15:18
super erklärt, verstanden.
Aber auch das Beispielprogramm läuft auf dem Atmega8 nicht (Atiny2312 schon). Im Datenblatt und Instruction Manual habe ich nichts gefunden. Verstehe nicht wo das Problem ist, siehe "Unterprogramme aufrufen" => "Das schöne daran ist, ablegen der Adresse usw. macht der assembler für uns automatisch, wir brauchen uns nicht darum zu kümmern."
Vor allem den Unterschied zw. Atiny2313 und Atmega8 nicht. Die Befehle sind doch identisch!

izaseba
01.12.2007, 15:48
:-k Den Stackpointer muß man initialisieren, wenn man mit Funktionsaufrufen
arbeitet, egal ob m8 oder Tiny.


Ist das jetzt alles am Programm, oder nur ein Ausschnitt ?
Poste bitte das ganze Programm

Gruß Sebastian

Dolfo
01.12.2007, 16:06
Sebastian, das mit dem Initialisieren war es! Tausend Dank für Deine Anleitung!!! Warum die Programme auf dem Atiny2313 trotzdem immer liefen, ich weiß es nicht. Aber das Problem ist nachhaltig gelöst.

Nochmals vielen, vielen Dank! \:D/ (Hoffe, das ist das richtige Smeili)

Evtl. kann ich mich mal mit etwas Relais- oder Hubmagnete-Wissen revanchieren.

izaseba
01.12.2007, 16:25
Sebastian, das mit dem Initialisieren war es!
Das ist gut, viel Spaß weiterhin beim Programmieren ;-)

Gruß Sebastian