Forum: Mikrocontroller und Digitale Elektronik Bascom Uart


von Dirk (Gast)


Lesenswert?

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

von Dirk (Gast)


Lesenswert?

Hi,

ok habs gefunden .


Thread closed.

Mfg
Dirk

von guenter (Gast)


Lesenswert?

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

von Dirk (Gast)


Lesenswert?

Hi,

musste bis heute abend warten... dann kann ich posten.

mfg

Dirk

von Dirk (Gast)


Lesenswert?

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

von Sven A. (Gast)


Lesenswert?

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.

von Sven A. (Gast)


Lesenswert?

uuppsss,
nochwas vergessen, f natürlich in a umbenenen, sonst geht's
nicht,sorry.

Sven A.

von Dirk (Gast)


Lesenswert?

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

von Dirk (Gast)


Lesenswert?

Hi,


keiner da der mir das mal mit no0bie Worten erklaeren kann?


Mfg

Dirk

von Sven A. (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.