Fragen zu einem ganz kleinen Anfängerprogramm

Gast #63464
Lesenswert?
• ▲
▼
Hallo,
hätte da mal zwei Fragen zu dem anhängenden Programm.
1. Warum muss ich kein Stackpointer initialisieren?
   Habe das Programm schon getest und es funktioniert.

2. Sobalt ich Pin 1 von Port D drücke schaltet sich schon der Port B
   komplett ein. Aber leider leichten auch einige Leds, die an Port
   D hängen. Sie leuchten auch nicht voll sondern vielleicht nur
   halb so hell. Wie kann das denn sein? Port D habe ich doch als
   Eingang definiert.
Angehängte Dateien:
Gast #63465
Lesenswert?
• ▲
▼
1. Weil Du den Stack nicht benutzt. Der Stack wird von
Interrupt-Aufrufen, Unterprogramm-Aufrufen und den Stack-Operationen
(Push, Pop) verwendet (habe ich etwas vergessen?).
2. Weil Du Pull-Up Widerstände (nicht wie fälschlicherweise im Programm
angegeben Pull-Down) am PortD eingeschaltet hast. Dadurch fließt ein
geringer Strom, der eben ausreicht, um die LEDs zum Glimmen zu bringen.
Gast #63466
Lesenswert?
• ▲
▼
Hy thkais,
also das mit dem Stack leuchtet mir schon ein.
Aber wenn ich 00hex ausgebe schalte ich doch auch die Pull-Down ein.
Sonst würde das Programm doch nicht funktionieren. Schalte nämlich über
die Schalter "High".
Dadurch kann doch eigentlich gar keine Spannung an der Eingängen
zustande kommen. Außerdem leuchten die LEDs total ungleichmäßig.
Gast #63467
Lesenswert?
• ▲
▼
Habe das Programm mal abgeändert.
Kehre jetzt nicht nach dem Sprung mit dem Befehl ret zurück, sonder
springe einfach mit rjmp zu dem einlesen des Port D zurück. Jetzt
leuchte die LEDs der Eingänge nicht mehr mit auf.
Erklären kann ich mir das aber nicht.
Gast #63469
Lesenswert?
• ▲
▼
Falle bei 16 Bit Schreiboperationen (Stackpointer!):
Beim Schreiben erst HiByte und dann LoByte schreiben,
beim Lesen erst LoByte und dann HiByte lesen.
Der AVRSTUDIO Simulator zeigts aber korrekt an,auch wenn
falsche Reihenfolge.Steht zwar im Manual,kostete mich
aber Tage wegen unerklärlicher Fehler.
Uli
Gast #63471
Lesenswert?
• ▲
▼
Peter:Dank für Korrektur,aber:

Hab das vor Jahren mit dem STK200 und 8515 probiert und hatte
das Problem (StackPointer).
Hast bestimmt recht,aber wieso sollte ich mich an einen Fehler
vor 4 Jahren so intensiv erinnern ?
Programm lief,als ich die Reihenfolge änderte,sonst nicht.
Dachte,es sei der Fehler,wer weiß?
Müßte jetzt nochmals experimentieren,um recht zu haben,is mir
aber egal.
Andersrum:Hat es negative Effekte,wenn man HiByte,LoByte
schreibt und LoByte,Hibyte bei Registerpaar liest?
Dann mach ich es immer so (Faustregel).
Mag es eben gern einfach.
Uli

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren