Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: RS 232 Buffer-Problem Kategorie: C-Control I Micro (von Klaus Knorr - 22.03.2006 19:33)
 Als Antwort auf Re: RS 232 Buffer-Problem von Naturbanause - 18.03.2006 16:14
Klaus Knorr nutzt:  CC1-M-Unit V1.1
Hallo Mario,

vielen Dank für Dein Beitrag. Das Asemblerprogramm "lesen.s19" von Marcel Kroll" (marcel.kroll@gmx.net) kannte ich schon und hatte auch mit Marcel kontakt.
Alleine mit dem Asemblerprogramm und Basicprogramm (wie bei Fernwirken) kam ich nicht weiter. Nach 8-10Bytes war ebenfals schluß.

Aber mit der Idee von Dietmar und zusammen und dem Asemblerprogrämmchen gelang es mir ein längeren Bytestrom über die RS 232 bei 9600Baud mit dynamischer Länge einzulesen. Dabei ist eine definierte länge nich mehr wichtig. Bei der undefinierten Länge half das Asemblerprogrämchen.

Also nochmal herzlichen Dank.

Hier mein Testprogramm.

'---------------------------------------------------------------------------------------------------------------------------------------------
' C-Control/BASIC      
'
' Systemvoraussetzungen:  - C-Control - M-UNIT 1.1
'
' Autor: Klaus Knorr (Klaus-Knorr@t-online.de)
'
' Programm zum Abfragen und Auswerten einer langen Bytefolge über RS232 (9600 Baud mit 4MHz Quarz, 19200Baud mit 8MHz Quarz)
' dieses ist mit dem Beispiel nur möglich, in Verbindung mit dem Asemblerprogramm "lesen.s19" von Marcel Kroll" (marcel.kroll@gmx.net)
'
' Datum 20.03.2006
'---------------------------------------------------------------------------------------------------------------------------------------------


define a byte
define b byte
define c byte
define a1 byte
define a2 byte
define a3 byte
define a4 byte
define a5 byte
define a6 byte
define a7 byte
define a8 byte
define a9 byte
define a10 byte
define a11 byte
define a12 byte
define a13 byte
define a14 byte
define a15 byte
define a16 byte
define a17 byte
define a18 byte
define a19 byte
define a20 byte

define i byte

define Zahl word

define lesen &H11F

PRINT

#loop
  GOSUB Auslesen
  Pause 100
loop

'-----------------Handy auslesen-------------
#Auslesen
'Print "_1"

get a: get b: get a: get b: get a: get b: get a: get b: get a
get a1: get a2: get a3: get a4: get a5: get a6: get a7: get a8: get a9: get a10
get a11: get a12': get a13: get a14: get a15: get a16: get a17: get a18: get a19: get a20

  OPEN# FOR WRITE
    SYS lesen  'in der Subroutine "lesen" wird die SMS augelesen
  CLOSE#

  GOSUB Ausgeben

Return

'-----------------ausgeben Print-------------
#ausgeben

Print "a",a
Print "b",b
Print "a1",a1,a1-48
Print "a2",a2,a2-48
Print "a3",a3,a3-48
Print "a4",a4,a4-48
Print "a5",a5,a5-48
Print "a6",a6,a6-48
Print "a7",a7,a7-48
Print "a8",a8,a8-48
Print "a9",a9,a9-48
Print "a10",a10,a10-48
Print "a11",a11,a11-48
Print "a12",a12,a12-48
Print "a13",a13,a13-48
Print "a14",a14,a14-48

Zahl=(a2-48)*10000+(a3-48)*1000+(a4-48)*100+(a5-48)*10+(a6-48)
Print "0";Zahl
Return


SYSCODE "lesen.s19"
------------------------------------------------


Viele Grüße
 Klaus


> Hallo,
>
> schau doch mal zu http://www.fernwirken.tk. Dort findest du unter Download ein kleines Assembler-Programm, mit dem Daten von RS232 in eine Datei geschrieben werden.
>
> Gruß Mario
>
> > Hallo Achim,
> >
> > danke für deine Antwort. Genauso hab ich das auch getan. Ich muss mit 9600 Baud arbeiten. Damit bekomme ich max. 10 Byte sauber heraus. Hier mein Progrämmchen.
> >
> > DEFINE zaehler byte
> > DEFINE wert byte
> > DEFINE response byte
> > DEFINE FLAGS byte
> >
> > Flags = 0
> >
> > #MAIN
> >      PAUSE 100
> >      GOSUB auslesen
> >      PAUSE 100
> >      GOSUB anzeigen
> >      PAUSE 100
> > GOTO MAIN
> >
> > #auslesen
> >    OPEN# FOR Write
> >    Print "_1"  
> >     FOR zaehler = 1 TO 30
> >       Get Wert
> >       PRINT# Wert
> >      NEXT
> >    CLOSE#
> >
> >
> > '-------------------------------------------
> > #anzeigen
> >   OPEN# FOR READ
> >   Print "_2"
> >     FOR zaehler = 1 TO 30
> >       INPUT# response
> >       Print response
> >       IF EOF THEN zaehler = 30
> >     NEXT
> >   CLOSE#
> >
> >    OPEN# FOR Write
> >     FOR zaehler = 1 TO 30
> >       PRINT# Flags
> >     NEXT
> >    CLOSE#
> >
> >  Return
> >
> > Gruß
> > Klaus
> >
> >
> > > > wer kann mir weiterhelfen. Ich muss 32 Bytes hintereinander über die RS232 in die M-Unit 1.1 einlesen. Leider kann diese auf dem normalen Weg 8 Bytes (nur 8 Byte Buffer im Basic).
> > > > Hat jemand dafür ein kleines Asemblerprogramm (S19), welches 100% tig funktioniert. Bitte mit Basic-Beispiel mit Einbindung des Asemblerprogramms.
> > >
> > > Ich habe leider kein Assemblerprogramm, aber die 8 Byte Puffer sind ja auch mit Basic solange kein Problem, wie Du die ankommenden Bytes schnell genug abholst. Mit welcher Baud-rate kommen die Bytes denn an?
> > >
> > > Hast Du mal ausprobiert, die Bytes im EEPROM zwischenzuspeichern? Etwa so:
> > >
> > > open# for write
> > > for i=1 to 32
> > >   get b
> > >   print# b
> > > next
> > > close#
> > >
> > > Gehen dabei Bytes verloren?
> > >
> > > HTH
> > >
> > > Bye
> > >  Achim

 Antwort schreiben

Bisherige Antworten: