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
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