mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 89S8252 und Unterprogramme


Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen !

Habe ein Problem mit meinem 89S8252 ...
Er mag keine Unterprogramme ?!
Ich habe ein kleines Programm geschrieben zum An- und ausschalten
einer Portleitung (P1.0) mit clr und setb - es funktioniert.
Setze ich einen Befehl davon in ein Unterprogramm und rufe es mit
call auf, tut sich am Port gar nichts mehr, aber auf der ALE-Leitung
habe ich Pulse, obwohl diese nur bei movx Befehlen auftreten sollten
(habe es so eingestellt mit mov 8Eh,#1).
Habe es auch mit zwei anderen gleichen Prozessoren ausprobiert -
verhalten sich genauso.

Hat jemand eine Ahnung woran das liegen kann ?

Vielen Dank im voraus.

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe keine Ahnung von den 89Sxxx, doch wenn ein Programm grundsätzlich
läuft, als Unterprogramm aber nicht, dann ist das im Regelfall ein
Stack-Problem.

Gruß, Frank

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank,

danke für den Tipp. Habe auch sowas im Sinn, allerdings habe ich auch
bei www.Phyton.com einen Emulator für den Controller gefunden und das
Programm(mit Unterprogramm) durchlaufen lassen, gab keine Probleme.
Ich habe auch im Programm den Stack in einen "sicheren" Bereich
verlegt(mov sp,#30H).
Kann aber auch sein, daß der Emulator nicht so toll ist ...

Gruss, Georg

Autor: Leopold (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohne stackpointer initialisierung läuft nix!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Leopold,

"ohne stackpointer initialisierung läuft nix!"

Nein !

Beim 8051 zeigt der Stack nach dem Reset bereits auf einen gültigen
Bereich.



@Georg,

ohne Dein Program zu kennen, kann man nur spekulieren und deshalb
verkneife ich mir das.


Peter

Autor: Leopold (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@peter

tschuldigung, hab mit avr verwechselt

greets da|poidi

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen !

Bin nach viel ausprobieren drauf gekommen :-)
Der 89S8252 hat im Gegensatz zum 89S53 ein 2k großes EEPROM im
Adreßbereich 000h-7FFh.
Durch org 100h wind das Programm an 100h geschrieben, und das muß wohl
mit dem Speicherbereich vom EEPROM kollidieren, vor allem da ich mich
nicht um die Defaultwerte beim Controller gekümmert habe.
Jetzt habe ich das Programm einfach dahinter gesetzt mit org 800h
und Unterroutinen funktionieren jetzt auch.
Werd mir das noch mal genau anschauen wie das mit dem EEPROM läuft...

cseg
org 0
jmp start

org 100h
start: mov sp,#48
       mov 8Eh,#1
begin: nop
       nop
       setb P10
       nop
       nop
       call sub
       jmp begin

sub:   clr P10
       ret
end

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.