-
        

Ergebnis 1 bis 10 von 10

Thema: Input geht genau einmal?

  1. #1
    globe711
    Gast

    Input geht genau einmal?

    Anzeige

    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.

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Was soll der MC auch machen, nachdem er das Programm einmal durchgegangen ist ? Du solltest eine Schleife einbauen.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    15.12.2004
    Ort
    Lohr am Main
    Alter
    36
    Beiträge
    43
    Hi

    Ist schon klar!

    ist ja auch nur ein Ausschnitt...

    Sonst noch jemand Ideen?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    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)

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    15.12.2004
    Ort
    Lohr am Main
    Alter
    36
    Beiträge
    43
    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!

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    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

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    51
    Beiträge
    247
    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.


    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
    So sollte es gehen, wenn du die Zeichen von dem anderen uC per Print Befehl ausgibst.


    MFG
    Dieter

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    15.12.2004
    Ort
    Lohr am Main
    Alter
    36
    Beiträge
    43
    Jo danke Euch!
    Werd mir die Sache dann noch mal in Ruhe anschaun. Wenn ich noch Fragen hab meld ich mich.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    hey so geht es auch voll gut mit viel weniger rechenaufwand!

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    15.12.2004
    Ort
    Lohr am Main
    Alter
    36
    Beiträge
    43
    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

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •