PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Urxc bei Mega16, kein Senden durch Empfangen?



m_herr
03.02.2007, 20:44
Hallo Leute,

habe heute zum ersten mal einen Mega16 für das "gleichzeitige" Senden und Empfagen programmiert. Sonst hat der Mega gesendet oder empfangen. Das ging problemlos.

Nur bei bei Senden und Empfangen zu sammen habe ich das Problem, daß Urxc alles blockiert....


Ich sende ca alle 200ms einen 50Zeichen langen von einem anderen mega16 (8mhz mit baud=38400). die zeichen werden mit der allseits bekannten Urxc-routine aus dem rowalt-buch empfangen.
dann sollen sie ausgewertet und wieder verschickt werden.

soweit sollte es kein Problem sein, nur ich habe durch ein port toggeln mitbekommen, daß Urxc den mega fast vollkommen blockiert (das oszi zeigt kein toggeln an), selbst die "If Len(puffer) > 38 Then-Abfrage wird nicht ausgeführt.

erst wenn ich "On Urxc Onrxd " ausklammere geht das toggeln wie gewohnt. nun dann kann ich aber nichts empfangen.

versuche ich die "On Urxc Onrxd"- zu umgehen und platziere im Main die "Inchar = Udr "-Anweisungen gehen zeichen verloren.


Ich bin ratlos, weil bisher das Senden von einem mega16 an einen anderen Mega16 und das dortige Empfangen und Auswerten (sogar mit Display-Ausgabe) ohne Probleme klappt.

Nur bei meinem jetzigen Projekt (ohne LCD natürlich, sonst wäre es zu einfach) klappt es nicht...

gibt es da eine optimierte methode oder mache ich grundlegend etwas falsch?
geht eigentlich gepuffertes Senden und Empfangen zu gleich?




$regfile = "M16def.dat"
$crystal = 8000000
$baud = 38400

$hwstack = 70
$swstack = 24
$framesize = 50


Config Timer0 = Timer , Prescale = 64 ', Capture Edge = Rising

Config Serialout = Buffered , Size = 20

On Urxc Onrxd
On Timer0 Timer0_isr

Enable Urxc
Enable Timer0

Enable Interrupts

.
.
.


Onrxd:
Inchar = Udr


If Inchar = 33 Then Test = 1




If Test = 1 Then
Puffer = Puffer + Chr(inchar)

End If




If Len(puffer) > 38 Then 'wird auch nicht ausgeführt
Empfang = Puffer
Puffer = ""
Test = 0
A = 0

End If


Return