PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mal wieder RS232: Pogrammierung



Goblin
13.04.2005, 11:25
Hi!

Ich hab nen einfaches Prog in PicBasicPro geschrieben:


Define OSC 20
B0 var Byte

pause 1000
Lcdout $fe, 1
lcdout "Disp-Test"

loop:
serin2 PORTB.1,84,[B0]
goto display

goto loop

display:

Lcdout $fe, 1
lcdout B0
pause 500
goto loop

nicht über den programmierstil beschweren, es ist 100x umgeschrieben worden! :)

Das Prog stellt einfach das, was seriell reinkommt aufm Display dar.

Also wie ihr seht, benutze ich ne Byte-Variable, um die Eingabe zu speichern und darzustellen. Bei einem Character funktioniert das auch wunderbar, aber wenn ich ihm jetzt nen Wort gebe, dann stellt er nur den ersten Buchstaben dar. Liegt das daran, dass die Variable zu klein ist, oder woran könnte es sonst noch liegen. Am Terminalprog sicher nicht, weil ich da einige durchprobiert hab.

Edit:

Na an der Variable wirds nicht liegen. Ich hab mal testweise ne WORD-Variable genommen. Gleiches Ergebnis. Ausserdem kann ich in ner Byte-Variable Quellcodeintern auch Wörter speichern..

stegr
13.04.2005, 14:24
Also, wenn ich das richtig verstanden habe, dann wird immer nur ein Byte von der Seriellen gelesen und das ans Display geschickt...
Als Puffer wird der interne Speicher des Displays verwendet - soweit OK.

Nur sehe ich nicht, wie du von der ersten Stelle auf dem Display zur nächsten kommst... Ich weiss nicht genau, was lcdout $fe, 1 bedeutet, aber ich denke mal, dass es die Initialisierung von dem Display ist...
und wenn der 1er logisch belegt ist, dann wäre das die erste Stelle.

Da deine Byte-Variable nur ein Byte speichern kann, muss jedes Zeichen einzeln zum Display geschickt werden. Nur wird auch jedes Zeichen einzeln von der seriellen ausgelesen? Da musst du dir einfach mal deine Routinen anschauen, dürfte ja im Handbuch stehen...

MfG
Stefan

Goblin
13.04.2005, 14:32
lcdout $fe,1 löscht das display. damit die zeichen sich nicht überschreiben. ich habe mittlerweile festgestellt (grundsätztlich benutz ich jetzt ne WORD-Variable), dass es daran liegt, dass das der SERIN2-Befehl nicht wartet, bis der stding eingelesen ist, sondern sofort abgeschlossen ist, wenn irgendein zeichen empfangen wird. im manal steht sehr viel zu speziellen WAIT-Argumenten im Befehl SERIN2. Wenn ich z.b.
serin2 PORTB.1,84,[WAIT("*"),B0,WAIT("%")] schreibe, gibt er erst was aus, wenn ich im terminal-prog "*hallo%" schreibe. dummerweise allerdings auch nur 1 character. in diesem fall "h". ich experimentere noch ein wenig damit rum, bis ich irgendwann frustriert die programmiersprache wechsele! :)

stegr
13.04.2005, 14:40
hehe... ich kann dir dazu C empfehlen... ;)
von CCS gibts da nen sehr günstigen Compiler (ca. 125 Euro).

Was du machen kannst, ist, dass du einfach jedes Zeichen einzeln auf das Display schreibst und das immer um ein Zeichen versetzt.
Dann kommt dir das grade gelegen, dass das serin dir immer nur ein Zeichen gibt, d.h. immer wenn das serin ein Zeichen gefangen hat, schickst du das direkt ans Display.

MfG
Stefan

Goblin
13.04.2005, 14:48
das is doch schnickschnack! :) das display ist für mich eigentlich nur mittel zum zweck. ich will irgendwann mit commandos aufm pc bestimmte aktionen auf dem µc abrufen, und das mit ner sinnvollen zeichenfolge und nicht nur mit einem character. deshalb will ich mir jetzt erstmal anzeigen lassen, was der µc so empfängt. damit ich irgendwann gucken kann, was ich für signale senden kann und welche nicht. naja, und irgendwie muss das ja möglich sein!