Suppi!
Danke, mein Code funktioniert.
Für alle, die es interessiert, der Code sieht jetzt so aus!
Code:
$regfile = "m48def.dat" ' ATmega48, Alternativ: ATmega88 o. ATmega168
$hwstack = 32
$swstack = 32
$framesize = 32
$crystal = 20000000 ' CPU kann 20MHz
Dim SubRoutine as word ' Adresse Subroutine (wird in ISR_Horizontal aufgerufen)
SubRoutine = Loadlabel(Test_Routine2) ' Adresse Sub-Routine setzen
print hex(SubRoutine)
!call Test_Routine1
'SubRoutine = SubRoutine \ 2
print hex(SubRoutine)
on int0 ISR_Horizontal nosave
enable int0
enable interrupts
do
nop
loop
' Horizontal-Interrupt
ISR_Horizontal:
push r24 ' r24 sichern
lds r24,sreg ' Statusregister nach r24
push r24 ' Statusregister sichern
push r30 ' Register Z sichern
push r31
lds ZL , {SubRoutine} ' Adresse von SubRoutine nach Z
lds ZH , {SubRoutine+1}
LSR ZH ' R31
ROR ZL ' R30
Icall ' SubRoutine aufrufen
pop r31 ' Z-Register restaurieren
pop r30
pop r24 ' Statusregister vom Stack holen
sts sreg,r24 ' Statusregister restaurieren
pop r24 ' r24 restaurieren
Return
Test_Routine1:
nop
Return
Test_Routine2:
nop
Return
Lesezeichen