mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uart unter Bascom


Autor: Mats Marcus (elektrofreak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich möchte gerne mit Bascom auslesen, was am Uart eintrifft, jedoch 
kommen immer irgendwelche Fehler (bsp. weis ich net, als was ich die 
temporäre Variable dimmen soll...)

Jetzt ganz einfach habe ich mir gedacht, ob es nicht ein Beispielprog 
gibt, welches das wieder mit Print ausspuckt, was es empfangen hat.

Wenn ja, kann man mir einen Link zu Verfügung stellen? Wenn nicht, 
sollte es dich ein Wenigzeiler sein, vll. könnte jemand diesen kurz 
Posten.


Ich hoffe dass ich vier nicht totale Basics abfrage und mich zum Affen 
mache, aber es klappt mit Inkey oder Input einfach nicht :-(


Edit: Controller ist ein ATMega 32, Print klappt soweit recht gut...

Autor: MR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$regfile = "m161def.dat"                                    ' specify 
the used micro

$crystal = 4000000                                          ' used 
crystal frequency

$baud = 9600                                                ' use baud 
rate

$hwstack = 32                                               ' default 
use 32 for the hardware stack

$swstack = 10                                               ' default 
use 10 for the SW stack

$framesize = 40                                             ' default 
use 40 for the frame space
'first compile and run this program with the line below remarked

Config Serialin = Buffered , Size = 20

Dim Na As String * 10
'the enabling of interrupts is not needed for the normal serial mode

'So the line below must be remarked to for the first test

Enable Interrupts

Print "Start"

Do

   'get a char from the UART

   If Ischarwaiting() = 1 Then                              'was there a 
char?

      Input Na

      Print Na                                              'print it

   End If

   Wait 1                                                   'wait 1 
second

Loop

Autor: Mats Marcus (elektrofreak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähnlich hab ich jetzt gelöst:
Do

   Dim Complete As Bit
   Complete = 1

   Waitms 100
   Do


      If Ischarwaiting() = 1 Then
         Bkey = Inkey()
         Ckey = Chr(bkey)
         Akey = Akey + Ckey

         Complete = 0

      End If

      If Ckey = "!"then
         Print Akey
         Akey = ""
         Ckey = "0"
         Complete = 1
      End If

   Loop Until Complete = 1

Loop

wenn das letzte Zeichen ein "!" ist, wird das ganze "geprintet", aber 
das Problem ist, dass Inkey nur ein Zeichen ist, desshalb "verpasst" der 
einige Zeichen am Anfang

Füge ich vorne
Config Serialin = Buffered , Size = 20

an, so kommt gar keine Antwort (und auch gar kein Print) mehr an...

Woran könnte das liegen?

Autor: MR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du must die ankommenden zeichen mit CHR() in einem string umwandeln
und dann in eine string variable  addieren.
DIM Dat As String

 Dat = ""
    Do
      Z = Inkey()
      If Z <> 0 Then Dat = Dat + Chr(z)
    Loop Until Z = 0

Autor: Mats Marcus (elektrofreak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nee, daran lag es nicht (habe ich ja ;-) )

Es lag daran, dass ich Enable Interrupts vergessen habe. Ansich klappt 
jetzt alles :D


Nur eine Function erstellen, die einen String ausgeben soll, klappt 
nicht (hatte das Problem schonmal :-/ ) Unknown ASM nmemonic

Autor: MR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie man funktionen erstellt glaube ich schon mal im bascom-forum 
gesehen.

Autor: Elektrofreak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es geht ja, wenn ich es mit integer mache, aber nicht mit string (mein 
der mag das string "* 16" nicht, klappt aber nicht mit und auch nicht 
ohne "* 16")

Autor: MR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohne "* 16" weil der string in der funktion dimensionslos ist

Autor: MR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Declare Function mpfange_daten(dat As String) As Byte


Function empfange_daten(dat As String) As Byte
Local Z As Byte

    Waitms 20
    Dat = ""
    Do                                                      n
      Z = Inkey()
      If Z <> 0 Then Dat = Dat + Chr(z)
    Loop Until Z = 0
    Rn_empfange_funkstring = 0
End Function

Autor: Elektrofreak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nicht ganz, eher so:

Declare Function mpfange_daten(dat As String) As [b]String[/b]


Function empfange_daten(dat As String) As [b]String[/b]
Local Z As Byte

    Waitms 20
    Dat = ""
    Do                                                      n
      Z = Inkey()
      If Z <> 0 Then Dat = Dat + Chr(z)
    Loop Until Z = 0
    Rn_empfange_funkstring = 0
End Function

Autor: MR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das geht nicht funktionen geben meistens nur eine 0 oder 1 zurück aber 
string wird wohl nicht klappen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.