Bascom Uart

Gast #52523
Hi,

ich versuche gerade per Bascom eine String vom Pc zuempfangen und
auszuwerten. Da ich leider die Stringlaenge nicht weiss wollte ich z.B.
warten bis das String ein "A" (spaeter return) ist und somit die
Laenge ermitteln.

Leider komme ich nicht so richtig  weiter... Ich hoffe jemand der eine
Antwort parat hat kann mir helfen.
$sim


$regfile = "8535def.dat"
$crystal = 7372800
$baud = 19200


Dim S As String * 24
Dim A As Byte
A = 0

On Urxc Onrxd
Enable Urxc
Enable Interrupts

Cls



Main:
Home
If A = 1 Then
Lcd "" ; S
Else
Goto Main
End If
Goto Main
End                                                         'end
program


Onrxd:
   If Chr(udr) = Chr(65) Then
   A = 1
   Return
   Else
   S = S + Chr(udr)
   End If
  Return


Mfg Dirk
Gast #52525
Hallo dirk

Schön für Dich ...

... aber da ich ein ähnliches Problem habe, wäre ich Dir sehr
verbunden,wenn Du mir Dein jetzt funktionierendes BASCOM-Listing zur
Verfügung stellen könntest.

Ist das zu machen ?

Bitte hier posten oder direktes email am mich
Gast #52527
Hi,

leider bin ich noch nicht wirklich viel weiter bekommen.

Ich frage jetzt ein startbit ab und ein Stopbit ab.

$sim
$regfile = "8535def.dat"
$crystal = 7372800
$baud = 19200

Dim S As String * 10
Dim A As Byte
A = 0
On Urxc Onrxd
Enable Urxc
Enable Interrupts

Cls



Main:
Home
Lcd S
Goto Main
End                                                         'end
program

Onrxd:
If Asc(udr) = 97 Then
A = 1
End If
If Asc(udr) = 13 Then
A = 0
End If
If A = 1 Then
S = S + Chr(udr)
End If
Return


Mfg Dirk
Gast #52528
Hallo,

ich würde lieber mit dem Uart puffer in bascom arbeiten, und in einer
do loop schleife den uart auslesen,nach erfolgreichen empfangen deines
Strings natürlich nicht vergessen den puffer wieder zu leeren.


$regfile = "8535def.dat"
$crystal = 7372800
$baud = 19200


Config Serialin = Buffered , Size = 20

Enable interrupts

dim s as string * 30
dim a as byte

do

a = ischarwaiting()
if a <> 0 then gosub lesen

loop

lesen:

dim f as byte

Do
      F = Inkey()

       If F = 10 Then Exit Do
       Select Case F
       Case 0
       Case 13
       Case 10
       Case Else
         S = S + Chr(f)
      End Select

  Loop
cls
lcd s
wait 5

'Buffer wieder leeren

do
f = inkey()
loop until f = 0 'Pointer auf 0



return

Guck mal ob's so klappt, habe es jetzt noch nicht ausprobiert....müßte
dir aber den empfangenen Text auf dem LCD anzeigen.


Gruß


Sven A.
Gast #52530
Hi,

ich glaube ich mache aus einer Mucke ein Elefanten.

In meiner Routine lese auch alle Zeichen aus auch Startbit und Stopbit.


Ich denke wohl einfach zu kompliziert. Ich weiss nur das erste Char das
Startbit ist danach folgen ein paar Strings. z.B. (1100 oder 170)
und danach das endbit. wie trenne ich den jetzt meine eigentlichen
Daten von den Start- und Stopbit?

@Sven A. :

welche Vorteile hat es den meine Daten aus dem Uartbuffer auszulesen?



Mfg

Dirk
Gast #52532
Hallo Dirk,

Ich weiß ja nicht, ob das das einzige ist was dein Programm machen
muß...
laufen in einer Hauptroutine z.b. noch andere Abfragen, kann es
Schwierigkeiten geben, das zeichen verlohren gehen...
Startbit und Stopbit brauchst du nicht zu trennen, das wird von bascom
selbst erledigt.....
eigentlich müsstest du mit dem obrigen Listing deine gesendeten Zeichen
auf dem Display sehen....

Gruß

Sven A.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.