PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Falscher Rücksprung aus ISR



Furtion
09.01.2009, 18:24
Hi,

ich habe hier grade ein ziemlich komisches Problem mit Bascom bzw. dem
AVR. Der Versuchsaufbau sieht so aus, dass Empangene Daten vom
HW Uart zu einem Software UART weitergereicht werden sollen, ebenso
andersrum. Beides ist Interruptgesteuert (der RxD pin des Softuarts liegt
an INT0). Das Problem das sich auftut liegt in der Do..Loop Schleife. Zu
Testzwecken ist noch ein 2ter Softuart angeschlossen. Nur komischerweise
überspringt der Code manchmal die If Abfrage und ich erhalte an #3 eine 0.
Wie kann man dieses Überspringen verhindern?

Hier der Code:

$regfile = "m168def.dat"
$crystal = 14745000
$baud = 115200

Open "comd.6:115200,8,n,1" For Output As #1
Open "comd.7:115200,8,n,1" For Input As #2
Open "comb.1:19200,8,n,1" For Output As #3

On Urxc R1
On Int1 R2 Nosave
Config Int1 = Falling
Enable Urxc
Enable Int1
Enable Interrupts

Dim A As Byte
Dim F As Byte
Dim S As Byte

Do
If S = 1 Then
Print #3 , S
End If
Loop

R1:
A = Udr
Print #1 , Chr(a);
Return

R2:
F = Inkey(#2)
Print Chr(f);
Return

Close #1
Close #2
Close #3

End

PicNick
09.01.2009, 19:55
"Nosave" heisst, du willst dich selber um das Register-Sichern kümmern.
Das kann ich aber in deinem Code nicht sehen.

Furtion
09.01.2009, 20:56
Hi,

wenn ich das Nosave lösche, sollte sich Bascom ja eigendlich um die
Sicherung der Register kümmern, aber ohne Nosave funktioniert der
Interrupt nicht richtig (Obwohl er das ja eingdlich sollte...) Irgendeine Ahnung
woran das liegt?

PicNick
10.01.2009, 19:00
Du musst vermutlich SW-Stack erhöhen > 32
https://www.roboternetz.de/wissen/index.php/Bascom_Inside