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: Programmierung Basic (von Klaus Knorr - 22.03.2006 19:26)
 Als Antwort auf Re: RS 232 Buffer-Problem von Dietmar - 18.03.2006 23:38
Klaus Knorr nutzt:  CC1-M-Unit V1.1
Hallo Dietmar,

vielen Dank für Dein Beitrag. Er hat mir weitergeholfen. Aber nur wirklich in Verbindung mit dem Asemblerprogramm "lesen.s19" von Marcel Kroll" (marcel.kroll@gmx.net).

Damit gelingt es mir ein längeren Bytestrom über die RS 232 bei 9600Baud einzulesen. Dabei ist eine definierte länge nich mehr wichtig. Bei der undefinierten Länge half das Asemblerprogrämchen.

Also nochmal herzlichen Dank. Das war die entscheidene Hilfe.

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 Klaus
>
> > Ich muss 32 Bytes hintereinander über die RS232 in die M-Unit 1.1 einlesen.
>
> Das ist selbst in BASIC möglich, allerdings darf die Leseschleife kein FOR..NEXT enthalten und der PAUSE-Befehl ist natürlich ebenso tabu. Ein "PAUSE 100" wartet 2 Sekunden. In der Zeit könnten 1920 Bytes über die RS232 übertragen werden. Hier ein Beispiel in OCBASIC. Mit diesem Verfahren lassen sich auch einige Bytes überlesen und nur ein Teil der Daten auswerten. Für CCBASIC muß OPTION und WHILE..WEND entfernt werden. Außerdem muß PUSH definiert werden und CCBASIC kennt nur "GET PUSH".
>
> ' 32 Bytes von der seriellen Schnittstelle (RS232) mit der C-Control 1.1 lesen
> ' Programmiersprache: OCBASIC und CCBASIC
>
> OPTION CCBAS
>
> DEFINE led PORT[2]
>
> DEFINE i BYTE
> DEFINE d1 BYTE
> DEFINE d2 BYTE
>
> WHILE TRUE
>
>   led=ON
>
>   GET i : GET i : GET i : GET i : GET i                  '30 Bytes empfangen
>   GET i : GET i : GET i : GET i : GET i
>   GET i : GET i : GET i : GET i : GET i
>   GET i : GET i : GET i : GET i : GET i
>   GET i : GET i : GET i : GET i : GET i
>   GET i : GET i : GET i : GET i : GET i
>
> '  PUSH GET : PUSH GET : PUSH GET : PUSH GET : PUSH GET  'oder 30 Bytes ueberlesen
> '  PUSH GET : PUSH GET : PUSH GET : PUSH GET : PUSH GET
> '  PUSH GET : PUSH GET : PUSH GET : PUSH GET : PUSH GET  'In CCBASIC erforderlich:
> '  PUSH GET : PUSH GET : PUSH GET : PUSH GET : PUSH GET  'DEFINE PUSH AD[1]
> '  PUSH GET : PUSH GET : PUSH GET : PUSH GET : PUSH GET
> '  PUSH GET : PUSH GET : PUSH GET : PUSH GET : PUSH GET
>
>   GET d1    'die letzten beiden Bytes lesen
>   GET d2
>
>   led=OFF
>
>   PRINT d1  'und deren Wert ausgeben
>   PRINT d2
>
> WEND
>
> Viele Grüße
> Dietmar

 Antwort schreiben

Bisherige Antworten: