Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Input geht genau einmal?
globe711
20.12.2004, 15:59
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?
sebastian.heyn
20.12.2004, 18:37
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!
sebastian.heyn
20.12.2004, 19:52
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 8-[
Dino Dieter
20.12.2004, 20:25
Hallo
Schau dir das Beispiel mal an. Wenn du fragen hast frage nochmal, habe im Moment aber wenig Zeit.
Dim S As Word At &H60
Dim B(3) As Byte At &H60 Overlay
Das passt ja schon mal nicht so ganz. Word hat nur 2 Bytes.
$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
So sollte es gehen, wenn du die Zeichen von dem anderen uC per Print Befehl ausgibst.
MFG
Dieter
Jo danke Euch!
Werd mir die Sache dann noch mal in Ruhe anschaun. Wenn ich noch Fragen hab meld ich mich.
sebastian.heyn
20.12.2004, 21:47
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.