Frage zu Keil µVision2 Simulator

Hallo,

bereite mich auf die Prüfung im April bereits vor. Mir macht eigentlich programmieren Spaß, aber der Mikrocontroller hat es schon in sich.
Mein Problem ist, ich kann mir schon 100 Befehle im Lernmodul durchlesen, aber anwenden ist wieder was ganz anderes.

Deshalb versuche ich im Simulator gerade nachzuverfolgen, was eigentlich passiert.

Im Memory-Windows kann ich nur RAM, ROM und SFR sehen mit C , D und I oder?
In der linken Box stehen die ganzen Register und unter Sys die anderen Speicher. a wird der akku sein, b das Register b oder? Aber wenn ich einen Befehl schreibe, der mir in den Akku was reinkopiert, ändert sich in der linken Box der Wert nicht. Was mache ich da falsch?

Wenn ich einfach nur einen Befehl mit z.b. Mov R0, 30H eingebe, sollte doch in der Simulation bei SYS unter a sich der Wert ändern oder?

Könnt ihr mir helfen?
 
AW: Frage zu Keil µVision2 Simulator

Hänge doch mal dein Programm an. Dann schauen wir mal. Bei MOV R0, 30H wird sich wahrscheinlich deswegen nichts (Sichtbares) tun, da dieser Befehl nicht den Wert 30h in den Akku kopiert, sondern den Inhalt der Speicherzelle 30h (in der zu Programmbeginn 00h steht, genauso wie im Akku). Versuche MOV R0, #30h. siehe auch Lernmodul 3, s. 24f
 
AW: Frage zu Keil µVision2 Simulator

Vielen Dank, weiß nicht was ich da gestern gemacht habe. Irgendwann hab ich auch mal die # probiert, aber selbst da passierte nichts.
Aber jetzt geht es, vielen Dank
 
AW: Frage zu Keil µVision2 Simulator

Hallo,

hab nochmal ein paar Fragen:


1. Wenn ich in den dptr eine 16-Bit-Adresse lade und den Akkuinhalt in den Inhalt der Speicheradresse, auf die der dptr zeigt kopiere, wo kann ich dann einsehen, was in der externen Ram-Adresse steht? C: steht für den internen ROM und I: für den internen RAM, für was ist D: S: T: U: X: zuständig?

2. Warum kann ich mit dem mov befehl nur bis Adresse A0 eine Konstante laden? Beispiel: mov 9Fh,#23h funktioniert, aber mov A0h,#23h funktioniert nicht mehr. Der interne RAM geht doch bis FFh oder?


Danke im vorraus
 
AW: Frage zu Keil µVision2 Simulator

Hallo,

Code:
       org 0000h             ; Programm-Beginn bei 0000h
       jmp 0100h             ; Sprung nach 0100h


       org 0100h             ; Hauptprogramm ab 0100h
HAUPT: mov a, #0ffh          ; FFh in Akku laden
       mov dptr, #1000h      ; DPTR auf 1000h setzen
       movx @dptr, a         ; Akku-Inhalt nach Adresse 1000h speichern
       mov 9fh, #23h         ; #23h in Adresse 9fh speichern
       mov 0a0h, #23h        ; #23h in Adresse a0h speichern
    
       end                   ; END-Statement
zu 1)
Du kannst unter dem Speicherblock X: (wahrscheinlich "X" wie "extern" ...) nachschauen, dass die Konstante ffh auch wirklich an die Adresse 1000h geschrieben wurde. Was ich ein bisschen verwirrend finde, ist, dass X: 6-stellige Adressen hat. Glaube aber, dass das daran liegt, dass dieser "Atmel 89C51" den wir am Anfang auswählen einfach ein weiterentwickeltes Derivat unseres µC's ist. Wie auch immer, jedenfalls steht bei der Adresse X:0x001000 die ff drin, nachdem du den Befehl movx @dptr, a ausgeführt hast.
Wofür D:, S:, T: und U: steht weis ich auch nicht. Vielleicht auch eine der Erweiterungen des 89C51 gegenüber dem 8051.

zu 2)
Glaube das liegt einfach daran, dass du die "0" vor der Adresse vergessen hast. Wenn du Hex-Zahlen größer 9fh hast musst du IMMER eine 0 davorsetzen, also immer 0a0h anstatt a0h oder 0ffh anstatt ffh schreiben.
 
Zuletzt bearbeitet:
Top