![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
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 #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 |