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?
1 | **** PIRQ - ISR Wenn PA7 eingetroffen **********************************************
|
2 | PIRQ ;PC_CODE holen und in D speichern
|
3 | tsx ; Stransfer Stack Pointer to X
|
4 | ldaa 0,x ;
|
5 | ldab 1,x ;
|
6 |
|
7 | ;PC_CODE anzeigen
|
8 | ldy #PC_CODE+4 ; Ans Ende des Opcodes Zeigen
|
9 | ldab #$03 ; ETX anfügen
|
10 | stab 0,y ;
|
11 | dey ; Pointer neu setzen
|
12 | bsr HX4A ; Funktion um Wert zu speichern in ASCII
|
13 | iny ; Anfangsposition für Wort
|
14 | bsr STOU ; String ausgeben (y Zeigt schon auf OP_CODE)
|
15 |
|
16 | ; Interrupt wieder Freischalten (wichtig!)
|
17 | psha ; Akku A retten
|
18 | ldaa #%00010000 ; PA7 löschen, damit neuer Interrupt möglich ist
|
19 | staa TFLG2 ;
|
20 | pula ; und wieder holen
|
21 |
|
22 | 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