Forum: Mikrocontroller und Digitale Elektronik 89S8252 und Unterprogramme


von Georg (Gast)


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.

von Frank Linde (Gast)


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

von Georg (Gast)


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

von Leopold (Gast)


Lesenswert?

ohne stackpointer initialisierung läuft nix!

von Peter D. (peda)


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

von Leopold (Gast)


Lesenswert?

@peter

tschuldigung, hab mit avr verwechselt

greets da|poidi

von Georg (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.