Fragen zu einem ganz kleinen Anfängerprogramm

Gast #63464
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
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
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
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 #63468
RET solltest Du auch nur verwenden, wenn Du mit CALL/RCALL/ICALL ins
Unterprogramm verzweigst.
Ansonsten ist es auch kein echtes Unterprogramm, btw.
Gast #63469
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
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.