www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Programmcounter Speicherung auf Stack


Autor: Fabi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chip: 68HC11 Mirkoconroller
Sprache: Assembler

Ich soll für die Uni ein Programm dazu schreiben.
Das funst auch bisher Prima.

Jetzt soll ein interrupt stattfinden. Das klappt auch Super.
Nun will ich den letzten Programmcounter-Stand vor dem Interrupt über 
ein Terminal ausgeben.
Das macht die Funktion STOU.
Ans Ende wird noch ein ETX angefügt.
Diese Funktion funktioniert und gibt das worauf das Register Y(16bit) 
zeigt im Terminal aus (bis zum ETX).
Eine Funktion HX4A Wandelt den 16 bit Wert in ASCII Code...

Das zur erläuterung.
Meine Frage ist jetzt:
Wie bekomme ich den Stand des Programmcounters in meinen Doppelakku 
(a+b)

Dies soll am Anfang der ISR geschehen.
gehe ich recht in der annahme das der PC auf den Stack geschmissen wird, 
wenn ein Interrupt stattfindet?
**** PIRQ - ISR Wenn PA7 eingetroffen **********************************************
PIRQ    ;PC_CODE holen und in D speichern
        tsx                ; Stransfer Stack Pointer to X
        ldaa  0,x          ; 
        ldab  1,x          ;
    
        ;PC_CODE anzeigen
        ldy  #PC_CODE+4    ; Ans Ende des Opcodes Zeigen
        ldab  #$03         ; ETX anfügen
        stab  0,y          ;
        dey                ; Pointer neu setzen
        bsr  HX4A          ; Funktion um Wert zu speichern in ASCII
        iny                ; Anfangsposition für Wort
        bsr  STOU          ; String ausgeben (y Zeigt schon auf OP_CODE)
    
        ; Interrupt wieder Freischalten (wichtig!)
        psha               ; Akku A retten
        ldaa  #%00010000   ; PA7 löschen, damit neuer Interrupt möglich ist
        staa  TFLG2        ;
        pula               ; und wieder holen

        rti

Also die unteren beiden Teile Funktionieren prima. Ich bekomm nur nie 
den PC stand, der da (da ein Interrupt ja immer eintreten kann) immer 
unterschiedlich sein sollte.

Danke schonmal für die Hilfe

Autor: Fabi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für alle die es Interessiert:
PIRQ    ;PC_CODE anzeigen
    ldy  #PC_CODE+2  ; Ans Ende des Opcodes Zeigen
    ldab  #$03    ; ETX anfügen
    stab  0,y    ;
    dey      ; Pointer neu setzen
      ;PC_CODE holen
      tsx    ; Stack to X
      ldd  7,x  ; Lade D
    bsr  HX4A    ; Funktion um Wert zu speichern in ASCII
    iny      ; Anfangsposition für Wort
    bsr  STOU    ; String ausgeben (y Zeigt schon auf OP_CODE)
    
    ; Interrupt wieder Freischalten (wichtig!)
    psha      ; Akku A retten
    ldaa  #%00010000  ; PA7 löschen, damit neuer Interrupt möglich ist
    staa  TFLG2    ;
    pula      ; und wieder holen

    rti

Aber fragt mich nicht warum man einen Offset von 7 bei ldd braucht.
Müsste eigentlich LDD 2,x sein. isses aber nicht...

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.