-         

Ergebnis 1 bis 6 von 6

Thema: Wer versteht diesen Code?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.10.2007
    Ort
    Münster
    Beiträge
    27

    Wer versteht diesen Code?

    Anzeige

    Guten Abend,

    ich möchte gerne über eine serielle Schnittstelle Daten senden und habe gehört, dass das mit dem folgenden Bascom-Code gehen soll. Ich verstehe ihn aber nicht ganz. Kann mir jemand erklären, was z.B. die Funktion inkey() genau macht?

    Die Variable Z1 ist als String definiert mit der Länge 1.

    Code:
    Sub Senden(was As String * 100)
    While Z1 <> "A"
    Print Was ; Chr(13)
    Waitms 5
    Z1 = Inkey()
    Wend
    Z1 = Inkey()
    Z1 = Inkey()
    Z1 = Inkey()
    Z1 = ""
    End Sub
    Gruß

    Sebastian

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    06.01.2007
    Beiträge
    52
    Abend,
    hast du mal in die Bascom Hilfe geschaut?
    Da steht das recht gut beschrieben drin.
    Willst du dem Atmel nur was senden oder Informationen hin und her schicken?

    Also zum senden vom Atmel weg is der standartbefehl Print "tralala" der aber recht viele Resourcen benötigt.
    Und zum empfangen gibt es zich verschiedene möglichkeiten.
    Ich benutze entweder die möglichkeit über den Interrupt:
    Code:
    On Urxc Onrxd                                               'Interrupt Empfange String von RXD
    Enable Urxc
    
    Enable Interrupts                                           'Interrupts Global einschalten
    
    Dim S As Byte                                                 'eben das Byte welches empfangen wird
    
    Onrxd:                                                      'isr wenn daten über die serielle schnitstelle kommen
      S = Udr
    Return
    Wobei dann in der Variablen S das Byte steht was er gerade empfangen hat. Oder die andere Variante:
    Code:
    dim B as byte 
    If Ucsra.rxc = 1 Then 'wenn byte vollständig eingelesen
          B = Udr               'Byte aus der UART auslesen
     End If
    Bei der ersten Methode wir halt nur was gemacht wenn auch tatsächlich Daten ankommen und das Programm wird unterbrochen und bei der zweiten Methode wir halt dauernd abgefragt ob was da is und wenn was da ist dann wird ausgelesen (Pollen)

    Gruß Bastian 07

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    22.10.2007
    Ort
    Münster
    Beiträge
    27
    Danke für den Beitrag.

    Eigentlich möchte ich von Bascom auf eine andere Sprache umsteigen, entweder auf Basic oder C. Bei dem gezeigten Code weiß ich, dass er funktioniert hat, jedenfalls auf meinem alten Atmega32. Daher würde ich ihn schon ganz gerne wieder verwenden. Aber dazu müsste ich ihn unbedingt verstehen.

    Bisher verstehe ich nur soviel:

    Die este Schleife wird so lange durchlaufen, wie Z1 ungleich "A" ist. In dieser Schleife wird über den Befehl Print eine Variable "Was" gesendet. Das "A" wird irgendwann von inkey() zurückgeliefert.
    Liefert inkey() ein "A" zurück, wird 3 mal die Anweisung Z1 = inkey() aufgerufen und danach die Varaible Z1 wieder geleert.

    Ich habe aber keine Ahnung, was hier hardwaremäßig vor sich geht.

    Sebastian

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Wie soll man dir denn erklären was die Funktion Inkey() macht, wenn du sie nicht postest?
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    also soweit ich weiß schreibt die Inkeyfunktion das ASCII Zeichen, welches von der seriellen Schnittstelle empfangen wurde in die Variable Z1 (in deinem Fall)
    ...

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Sebriko hat den Code absolut korrekt durchschaut.
    Der Sinn von den 3 zusätzlichen Inkey ist aus dem Code heraus nicht ersichtlich,
    Wahrscheinlich schickt der Partner in Wirklichkeit den text "ACK" zurück.
    Es sollen also nur die Zeichen nach dem "A" gekübelt werden.

    "INKEY" schaut nach, ob ein Zeichen empfangen wurde, wartet aber NICHT.
    is nix da, wird "0x00"=&H00=d'0' zurückgegeben (nach "Z1", das hat tobias ja auch schon gesagt.

    remark:
    mit der UART senden kann man, wenn man erst vorne
    $BAUD=9600 (oder sowas) sagt (das initialisiert das Zeugs)

    Im Code dann einfach

    PRINT "wtltbrnft" (mit Zeilenvorschub <CR><LF>) oder
    PRINT "wtltbrnft" ; ohne
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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