Was soll der MC auch machen, nachdem er das Programm einmal durchgegangen ist ? Du solltest eine Schleife einbauen.
Hi Ihr Profis!
Ich bin grad am verzweifeln! Ich möchte zwei MCU miteineander verbinden über uart.
habe schon viel probiert und es geht am besten mit dem Input Befehl sieht in etwa so aus:
On URXC OnRxD 'Interrupt-Routine setzen
Enable URXC 'Interrupt URXC einschalten
Enable Interrupts 'Interrupts global zulassen
.
.
.
OnRxD:
Input X 'X = Udr
Print X 'Byte als Echo zurückgeben
Return
Leider geht die Sache genau einmal dann erst nach einem Neustart wieder.
Ich bin mir sicher da kann mir einer von Euch helfen.
Was soll der MC auch machen, nachdem er das Programm einmal durchgegangen ist ? Du solltest eine Schleife einbauen.
Hi
Ist schon klar!
ist ja auch nur ein Ausschnitt...
Sonst noch jemand Ideen?
Hi. hast du mal versuchsweise das Enable URXC ans ende der interruptroutine gemacht? Ich machs wie auf www.rowalt.de beschrieben. Weiss nicht was in Bascom der input befehl bewirkt, vielleicht disabled er ja den interrupt? (nur ne vermutung)
Ja hab ich auch chon probiert und es will leider nicht. Naja ich habs mit dem Input - Befehl langsam aufgegeben...
Die Beispiele von rowalt.de hab ich mir auch schon angeschaut. Es klappt auch einzelne Zeichen zu empfangen. Nur wie schaffe ich es diese wieder zu einem Integer zusammen zu setzten?
Beispiel:
Ich emfange eine 1 dann eine 2 und zuletzt eine 3. Wie schaffe ich es jetzt diese zu einer 123 zusammen zu bauen? Habe es schon mit einem Feld probiert aber dabei geht immer ein Zeichen verlohren.
$regfile = "2313def.dat"
$crystal = 3686400
$baud = 9600
Dim S As Word At &H60
Dim B(3) As Byte At &H60 Overlay
Dim N As Byte
On Urxc Onrxd
Enable Urxc
Enable Interrupts
Main:
If N > 3 Then
Printbin S
N = 0
End If
Goto Main
Onrxd:
N = N + 1
B(n) = Udr
Return
Danke schon mal!
machst aus s nen string, und dann kannst du den ja mit "val" in ein byte oder integerwert interpretieren lassen.. dann müsste es gehen, glaub ich
Hallo
Schau dir das Beispiel mal an. Wenn du fragen hast frage nochmal, habe im Moment aber wenig Zeit.
Das passt ja schon mal nicht so ganz. Word hat nur 2 Bytes.Dim S As Word At &H60
Dim B(3) As Byte At &H60 Overlay
So sollte es gehen, wenn du die Zeichen von dem anderen uC per Print Befehl ausgibst.Code:$regfile = "2313def.dat" $crystal = 3686400 $baud = 9600 Dim S As Integer Dim Temp As Byte Dim B(3) As Byte Dim N As Byte On Urxc Onrxd Enable Urxc Enable Interrupts Main: If N = 3 Then 'wenn 3 zeichen empfangen wurden, auswerten S = B(1) * 100 '1. Zeichen hat eine 100 Wertigkeit Temp = B(2) * 10 '2. Zahl hat eine 10 Wertigkeit S = S + Temp '100er und 10er addieren S = S + B(3) 'und noch die Einer dazu, fertig Print S N = 0 End If Goto Main Onrxd: N = N + 1 B(n) = Udr - 48 'aus ASC II Code den Wert gewinnen, 0 = 48, 1 = 49 usw 9 = 57 Return
MFG
Dieter
Jo danke Euch!
Werd mir die Sache dann noch mal in Ruhe anschaun. Wenn ich noch Fragen hab meld ich mich.
hey so geht es auch voll gut mit viel weniger rechenaufwand!
Super jetzt geht die Sache. Hab gestern noch bis um 3 programmiert und jetzt bin ich in der FH oder doch besser ich liege in der FH.
War eine super Tip Dieter. Danke
Lesezeichen