-
        

Ergebnis 1 bis 2 von 2

Thema: Uhr über Rs232 stellen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    30.01.2007
    Beiträge
    17

    Uhr über Rs232 stellen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo

    ich habe einen DS1307 an einem Mega16 hängen. Die Routinen zum schreiben und lesen der Uhrzeit/Datum funktionieren. Jetzt möchte ich gerne die Zeit über die RS232 stellen. Dazu möchte ich ein par Werte in die Schnittstelle schreiben und wenn alles angekommen ist die Uhr stellen.
    zb 100ST234500. Die ertsen 3 Stellen ist die ID des Moduls dann der Befehl an das Modul (hier zB ST = set time) und dann die Uhrzeit.
    In diesem Forum habe ich ein Codeschnippsel gefunden. Das habe ich ein wenig abgeändert.
    Code:
    'config UART Interrupt
    On Urxc Onrxd                           'Interrupt-Routine setzen
    Enable URXC        'Interrupt URXC einschalten
    Enable Interrupts  'Interrupts global zulassen
    
    'config VARIABLES
    Dim Id As String * 3 , Befehl As String * 2 , Wert As String * 6
    ...
    auslesen des DS1307
    ...
    
    'UART interrupt routine
    Onrxd:
     Inputbin Id , Befehl , Wert
     Print Id
     Print Befehl
     Print Wert
     Return
    Das Funktioniert auch. Allerdings wartet der Befehl ja solange bis 11 Zeichen empfangen worden sind. Das ist dumm. Wenn mal ein Zeichen verschlckt wird oder eins zuviel gesendet wird bleibt alles stehen.
    Gibt es eine ähnliche einfache Methode nur das die Schnittstelle nicht alles blockiert? Wie würdet Ihr sowas machen??
    Danke.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hi,
    ich habe das etwa so gemacht (aus dem Kopf, ohne Gewähr):

    Code:
    Config Serialin = Buffered , Size = 20 , Bytematch = 13 '(oder 10, weiss ich nicht mehr, jedenfalls return)
    ...
    
    Do                                                      'main Loop
       ...
       If Befehl_gelesen = 1 Then
          ...                                                   'befehle verarbeiten
          Befehl_gelesen = 0 
       Endif
       ...
    Loop
    
    Serialcharmatch:
       Zeichenkette = ""
       While Ischarwaiting()
          Zeichenkette = Zeichenkette + Inkey()
       Wend
       Befehl_gelesen = 1
    Return
    Gruß

    Rolf

Berechtigungen

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