Frage zu Keil µVision2 Simulator

Dieses Thema im Forum "DAA Technikum" wurde erstellt von Xplosion, 31 Jan. 2013.

  1. 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?
     
  2. 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
     
  3. 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
     
  4. 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
     
  5. 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.
     
    #5 Kosekans, 16 Feb. 2013
    Zuletzt bearbeitet: 16 Feb. 2013
  6. AW: Frage zu Keil µVision2 Simulator

    vielen Dank, genau das war es!
     

Diese Seite empfehlen