Ich vermute, dass hier der Return-Stapel nicht richtig verwaltet wird. Weiß jemand Genaueres?
Code: Alles auswählen
' Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' Wenn innerhalb einer Interruptserviceroutine ein Unterprogramm mit einem
' Parameter aufgerufen wird, dann verliert dieser Parameter bei der 2. Benutzung
' seinen Wert.
' In diesem Programm wird der Parameter 123 übergeben. Beim ersten Printbin wird
' er noch korrekt ausgegeben, danach wird die Zahl 1 ans Terminalprogramm gesendet.
'----------------------------------------------------------------------------
$regfile = "attiny2313.dat" 'Attiny2313
$crystal = 4000000 '4 MHz
$baud = 9600
'**********************************************************
'******************* Deklarationen ************************
Dim Anzahl As Byte
Declare Sub Ausgeben(a As Byte)
'****************** Initialisierung ***********************
Ddrb = &B11111111 'Port B als Ausgangsport
Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge auf high legen
Waitms 20 'Kondensator bei Ta0 laden
Enable Int0
Config Int0 = Falling
On Int0 Test 'Wenn Ta0 gedrückt wird...
Enable Interrupts
'**********************************************************
'******************** Hauptprogramm ***********************
Anzahl = 123
Do
Loop
'**********************************************************
'******************* Unterprogramme ***********************
Sub Ausgeben(a As Byte)
Printbin A
Printbin A
End Sub
'**********************************************************
'******************Interruptroutinen***********************
Test:
Call Ausgeben(anzahl)
Return
'**********************************************************