mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fragen zu einem ganz kleinen Anfängerprogramm


Autor: Bastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens Renner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RET solltest Du auch nur verwenden, wenn Du mit CALL/RCALL/ICALL ins
Unterprogramm verzweigst.
Ansonsten ist es auch kein echtes Unterprogramm, btw.

Autor: bukongahelas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Uli,

nein, der Stackpointer ist gerade nicht betroffen.

Es sind nur die 16Bit-Timer und ADC Register, da diese ja durch
Hardware während des Auslesens geändert werden könnten.


Peter

Autor: bukongahelas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.