mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit WMCON und Keil Assembler A51 für 8051


Autor: LSC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alle,

ich hab das Problem, dass ich ein altes Projekt (ATMEL AT89S8252) 
übernommen habe. Nun soll ich ein paar Bytes an Code einsparen. Der 
einfachste Weg wäre der den HW watchdog zu verwenden, anstatt den 
Selbstgeschriebenen.
Im Datenblatt gibt es dafür das Register WMCON. Mit dem C-Compiler (C51) 
lässt sich dieses Register auch ändern. Mit dem Assembler scheint es 
aber nicht zu funktionieren.

Mein Assemblercode lautet (und so sollte es laut Assemblerspec 
funktionieren) :

WMCON sfr 96h    ; das WMCON Register befindet sich an Adresse 0x96

mov WMCON 03h    ; wdtreset enable wdt enable

die Zuweisung "sfr" scheint er nicht zu kennen. Benutze ich aber "data" 
schreibt er die 0x03 einfach ins RAM.

Gibt es irgendwelche anderen Möglichkeiten für eine Zuweisung auf ein 
SFR?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das dein Ernst?

Probier mal : mov WMCON,#03h

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst aber auch davor noch
Mov 03h,#03h
schreiben.
Werte immer mit "#" ! Sonst ist eben von Speicherstellen die Rede.

Autor: LSC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@Gast: Das Register WMCON kennt er nicht (im Gegensatz zu TCON).

@Stephan:

Sorry Schreibfehler. Zeile lautet:

  mov WMCON,#03h ; wdtreset enable wdt enable

Was soll mir "mov 03h,#03h" bringen?
Ich hab schon "mov 96h,#03h" versucht, funktioniert aber auch nicht.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muß data sein und mit #:

LOC  OBJ            LINE     SOURCE

  0096                 1     WMCON data 96h
                       2
0000 759603            3     mov WMCON #03h


Peter

Autor: LSC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke für eure Hilfe. Leider hab ich schon alles ausprobiert und 
nichts hat funktioniert.

@Peter:

Mit data schreibt er es nur ins RAM. Das Register ist aber ein SFR.

Im C-Compiler muss ich das WMCON Register aus explizit als SFR Register 
deklarieren.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LSC schrieb:

> Mit data schreibt er es nur ins RAM. Das Register ist aber ein SFR.
>
> Im C-Compiler muss ich das WMCON Register aus explizit als SFR Register
> deklarieren.

Geht es jetzt um Assembler oder C?

Der C-Compiler muss wissen, dass WMCON ein SFR ist, weil er es anders 
behandeln muss als eine gewöhnliche Variable in einer RAM-Zelle. Z.B. 
müssen alle Zugriffe instantemente durchgereicht werden und Zugriffe 
dürfen nicht wegoptimiert werden (Stichwort volatile). In Assembler ist 
diese Info nicht nötig bzw. programmierst DU entsprechend. Soweit ich im 
Instruction Set lese, gibt es bei der direct Addressierung keinen 
grundlegenden Unterschied zwischen SFR und RAM.

Bist du mal der Frage nachgegangen, wieso WMCON bei deinem Keil 
Assembler A51 für 8051 nicht bekannt ist? Arbeitest du eventuell mit dem 
falschen Target-µC?

Hast du mal kontrolliert, ob du mit dem Wert 0x03 (= WDTEN | WDTRST) 
gleichzeitig den Watchdog enablen und resetten darfst oder ob dazu 
getrennte Anweisungen nötig sind? Ich weiss auch nicht wie die Umgebung 
um diese Stelle in deinem Programm aussieht; ich würde aber 
programmlogisch einen getrennten Enable-Teil und einen Reset-Teil 
erwarten.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mit data schreibt er es nur ins RAM. Das Register ist aber ein SFR.

Nein, das RAM oberhal 7Fh ist nur indirekt ansprechbar. die 03h
müssen also im SFR landen.

Autor: LSC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gast

Stimmt hast recht. Er schreibt es nicht ins RAM. Leider aber auch nicht 
ins SFR Register.
Wahrscheinlich liegts an dem uralten Assembler. Der erkennt nicht, dass 
das kein Standard 8051 sondern ein erweiterter 8051 mit zusätzlichen 
SFRs ist.

Mit dem Seehau (ICE/Debugger) kann ich das WMCON auch nicht ändern. Nur 
die StantardSFRregister vom 8051.

Also muss ich mir nen neuen Assembler (am besten kostenlos) suchen.

Danke für eure Hilfe.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LSC schrieb:
> Stimmt hast recht. Er schreibt es nicht ins RAM. Leider aber auch nicht
> ins SFR Register.

Woher willst Du das wissen?
Diese Bits sind ja nicht rücklesbar.

> Wahrscheinlich liegts an dem uralten Assembler. Der erkennt nicht, dass
> das kein Standard 8051 sondern ein erweiterter 8051 mit zusätzlichen
> SFRs ist.

Das muß er auch nicht, er erzeugt nur den Befehl 75h mit 2 Argumenten 
und gut is.
Jeder 8051-Assembler geht für jeden 8051-Typ ohne Ausnahme.


Peter

Autor: LSC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter:

>> Stimmt hast recht. Er schreibt es nicht ins RAM. Leider aber auch nicht
>> ins SFR Register.

>Woher willst Du das wissen?
>Diese Bits sind ja nicht rücklesbar.

Ist nur das WMCON Register nicht rücklesbar? Mit meinem ICE (SEEHAU) 
kann ich nämlich die anderen SFRs beschreiben und lesen (in der IDE).

Und auch wenn es nicht lesbar wäre, müsste er doch wenigsten einen 
Watchdogreset auslösen :-(

>> Wahrscheinlich liegts an dem uralten Assembler. Der erkennt nicht, dass
>> das kein Standard 8051 sondern ein erweiterter 8051 mit zusätzlichen
>> SFRs ist.

>Das muß er auch nicht, er erzeugt nur den Befehl 75h mit 2 Argumenten
>und gut is.
>Jeder 8051-Assembler geht für jeden 8051-Typ ohne Ausnahme.

Ja stimmt. Meine Frau sagt schon immer zu mir :Erst denken, dann 
schreiben :-)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ist nur das WMCON Register nicht rücklesbar? Mit meinem ICE (SEEHAU)
>kann ich nämlich die anderen SFRs beschreiben und lesen (in der IDE).

Das geht schon, wenn du die SFR-Adresse direkt angibst:

mov A,96h

Oder umgekehrt.

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.