Forum: Mikrocontroller und Digitale Elektronik Bascom + String


von Kay (Gast)


Lesenswert?

Hallo,

ich würde gerne einen String, der aus 8 Zeichen besteht ( 01010101 )
über die Serielle an meinen AVR schicken. das ist ja auch kein problem.
jetzt soll genau dieser String am PortB ausgeben werden.

PORTB    = &B01010101

Nur wie kann ich mithilfe von Bascom den Empfangenen String auslesen
und auf PortB wiedergeben ?

mfg Kay

von Kay (Gast)


Lesenswert?

sorry, muss noch dazusagen, das sich der String natürlich auch ändert.
also nicht immer 01010101 !

ciao Kay

von anfänger (Gast)


Lesenswert?

ähm...ein string ist eine zeichenkette. das was du meinst sind wohl
bytes.

du schreibst das empfange byte in eine variable (als byte deklariert)
und setzt den port dann auf diese variable (portb = variable)

von Kay (Gast)


Lesenswert?

hallo anfänger,

ich habe ein Terminalprogramm. mit dem sende ich "01010101" an den
AVR. das sind doch aber 8 Byte oder ? muss ich dann jedes Byte einzeln
deklarieren ?

mfg Kay

von ATmega8Tester (Gast)


Lesenswert?

Hallo Kay,

du darfst nicht den String "01010101" senden,
sondern nur e i n Zeichen/Byte wie z.B. U!

Zur Erklärung:
&B01010101 = Dezimal 85 = Ascii-Zeichen U
&B01000001 = Dezimal 65 = Ascii-Zeichen A
usw.

Also sendest du einfach z.B. ein "U" über die serielle
Schnittstelle.

In BASCOM:

DDRB = &B11111111   ' PortB alles Ausgänge
Do
  PORTB = Waitkey() ' warten auf ein Zeichen/Byte auf
                    ' der Schnittstelle und
                    ' nach Eingang dem PortB zuweisen
Loop

Grüße
ATmega8Tester

von Dirk (Gast)


Lesenswert?

Hi,

du kannst es auch anders machen. Mit dem Befehl Inputbin kannste direkt
Byte's pruefen.


Mfg

Dirk

von ATmega8Tester (Gast)


Lesenswert?

Hallo

@Dirk
es gibt ja wie bekannt verschiedene Wege nach Rom... :-)

@Alle
Ich für meinen Teil habe mir angewöhnt in BASCOM die zu realisierende
Aufgabenstellung durchaus mit zwei, drei Ansätzen zu untersuchen.
Der Unterschied in den vom Compilat (bin-Daten) belegten Ressourcen im
Flash kann nicht unerheblich sein.

In unserem Beispiel wohl eher zu vernachlässigen:
PORTB = Waitkey()   14 Byte   weniger wie  Inputbin PORTB
auch hier wohl eher zu vernachlässigen:
LCD Chr(65);Chr(66);Chr(67);Chr(67);Chr(68);Chr(69) 10 Byte weniger wie
LCD "ABCDEF"

PS:
Funktionen wie Waitkey, Input, Print verwende ich eigentlich nur für
Testzwecke, da sie eine BASCOM-Software-Emulation der USART darstellen
und sehr viel Ressourcen benötigen.
Ich verwende lieber die AVR-Register und Interrupts der USART direkt in
BASCOM und kann somit eine gepufferte interruptgesteuerte Übertragung
mit weitaus weniger Ressourcen realisieren.

Gruß
ATmega8Tester

von Kay (Gast)


Lesenswert?

Hallo Dirk,

wie kann ich das mit InputBin lösen ? die Bascom Hilfe dazu versteh ich
net. danke

Kay

von ATmega8Tester (Gast)


Lesenswert?

DDRB = &B11111111   ' PortB alles Ausgänge
Do
  Inputbin PORTB  ' warten auf ein Zeichen/Byte auf
                  ' der Schnittstelle und
                  ' nach Eingang dem PortB zuweisen
Loop

von Dirk (Gast)


Lesenswert?

Hi,

es ist aber sinnvoll noch ein Ringbuffer fuer den Empfang zunutzen und
nicht direkt den interrupt des UART's.

Config Serialbuffer .....


Mfg

Dirk

von Kay (Gast)


Lesenswert?

hi,

es gibt also keine relativ einfache möglichkeit, einen "String" z.b.
01010101 über die serielle zu schicken und mir dann so am Portx
auszugeben ?

dann werde ich halt rumprobieren müssen.

danke für eure antworten

gruß Kay

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.