BASCOM : INKEY() funktioniert nicht

Gast #4038570
Lesenswert?
• ▲
▼
Hallo -

ich möchte Zeichen aus der seriellen Schnittstelle lesen, aber ohne 
Wartezeit, wenn der Empfangsbuffer leer ist.
Sollte eigentlich mittels INKEY() ein Klacks sein...
(Mit ISCHARWAITING() übrigens dasselbe in Grün...)

Der untenstehende Code funktioniert - aber nicht, wenn die beiden 
auskommentierten Zeilen aktiv sind....

Nach 3 Stunden Kopfkratzen sehe ich den Wald vor lauter Bäumen nicht 
mehr ... fürchte ich ...

Vielen Dank schon mal im voraus für einen hilfreichen Tipp...

LG
Peter
1
$regfile = "m16def.dat"
2
$crystal = 16000000
3

4
Dim Rxbuffer As String * 255 ' Empfangsbuffer
5
Dim Txbuffer As String * 255 ' Sendebuffer
6
Dim I As Byte
7

8
Txbuffer = ""
9
Rxbuffer = ""
10

11
Ucsrb = 1 ' enable Hardware-UART
12

13
Open "comd.1:115200,8,n,1" For Output As #1
14
Config Serialin = Buffered , Size = 25
15
Open "comd.0:115200,8,n,1" For Input As #2
16

17
Do
18
Mainloop:
19
I = Inkey()
20
'If I > 0 Then
21
    Input #2 , Rxbuffer
22
    Print #1 , Rxbuffer
23
'End If
24
Loop
#4038584
Lesenswert?
• ▲
▼
Peter Baumgartner schrieb:
> Hallo -
>
> ich möchte Zeichen aus der seriellen Schnittstelle lesen, aber ohne
> Wartezeit, wenn der Empfangsbuffer leer ist.
> Sollte eigentlich mittels INKEY() ein Klacks sein...
> (Mit ISCHARWAITING() übrigens dasselbe in Grün...)

Ich würde mich an deiner Stelle mal fragen, woher eigentlich INKEY 
wissen soll, dass es vom Kanal #2 lesen soll.
Gast #4045544
Lesenswert?
• ▲
▼
Danke an alle die auf meine Bitte geantwortet haben -

ich hab zwar nicht die Lösung auf dem Tablett präsntirt bekommen, aber 
Anregung genug, mich slbst in die Thematik reinzuknieen - besonders den 
Unterschied zwischen SW-UART und HW-UART.

Falls es jemanden interessieren sollte - hier der funktionierende Code:
(noch besser gehts per Interrupt)


$regfile = "m16def.dat"
$crystal = 16000000

$baud = 115200                                              ' use baud 
rate
$hwstack = 32                                               ' default
$swstack = 10                                               ' default
$framesize = 40                                             ' default

Dim Rxbuffer As String * 1                                  ' 
Empfangsbuffe
Dim Txbuffer As String * 255                                ' 
Sendebuffer
Dim Ibu As Byte

Txbuffer = ""
Rxbuffer = ""

Do
Mainloop:
   Ibu = Ischarwaiting()
   If Ibu <> 0 Then
      Rxbuffer = Inkey()
      Print Rxbuffer;
   End If
Loop


LG
Peter

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.