Archiv verlassen und diese Seite im Standarddesign anzeigen : rs232 und Hyperterminal
surf_andre
06.05.2005, 18:32
Gleich eine neue Frage die sich bei mir auf wirft.
Habe die RS232 auch mit erfolg getestet. der Text den ich an den pc gesendet habe kam wie gewollte an.
möchte nun aber das der text nicht neben einander sondern untereinander erscheint...
soll so eine art Menüaufbau werden...
Weiß jemand was ich an das Terminal programm senden muß das es einem Enter gleich kommt?
habe hier im forum und in den beiden µc kochbüchern leider nichts gefunden
mfg andre
AndreasH
06.05.2005, 18:56
Probier es mal mit Carriage Return (13) und/oder Linefeed (10).
Das müßte eigentlich gehen. Habe es letztlich bei Hyperterminal so gemacht.
Grüße
Andreas
Hallo,
du musst ein carriage Return (0Dh) senden, dass den Cursor nach links setzt, und ein LineFeed (0Ah) für die neue Zeile.
Siehe auch http://www.asciitable.com/
surf_andre
06.05.2005, 21:45
den text sende ich aus einem DB raus. d.h. das ich nach dem letzten anführungszeichen also: ,0Dh,0AH schreibe und dann eine text end kennung setzte?
DB "!!!! TEXT !!! ",0Ah,0DH,Textendkennung
oder mache ich da nun einen gedanken fehler
mfg andre
AndreasH
06.05.2005, 22:02
Nee, keinen Denkfehler.
Wofür Textendekennung. Nimm doch einfach LF als Textende.
Du übergibst die Anfangsadresse des Textes und sendest Byte für Byte. Bis Linefeed kommt. Das ist dann auch gleichtzeitig das Ende des Textes.
Grüße
Andreas
surf_andre
06.05.2005, 23:07
Ja stimmt geht so ganz gut.
habe dann auch gleich weiter probiert und wollte mehrere zeilen senden, bin zuerst davon ausgegangen das der nach dem LF und CR in der nächsten Zeile weiterschreibt... falsch gedacht....
habe das dann so gemacht das ich für jede zeile einen einzelnen Aufruf mit Datenpointer gemacht habe der auf eine einzelne Zeile weißt...
gibt es da noch bessere wege ?
auszug:
....
MOV DPTR,#Sendetext
MOV Position,#0
SJMP Hauptprogramm
text1:
MOV DPTR,#Sendetext1
MOV Position,#0
CALL SENDE_TEXT
text2:
MOV DPTR,#Sendetext2
MOV Position,#0
CALL SENDE_TEXT
text3:
MOV DPTR,#Sendetext3
MOV Position,#0
CALL SENDE_TEXT
CALL ENDLOSSCHLEIFE
Hauptprogramm:
LCALL Sende_Text
LCALL TEXT1
LCALL text2
LCALL text3
......
Sende_Text:
MOV A,Position ;Textposition in den Akku kopieren
MOVC A,@A+DPTR ;Zeichen aus dem Beispieltext einlesen
MOV SBUF, A ;Senden der Daten
SETB Sendebusy
_warte:
JB Sendebusy,_warte
IF A = #10 THEN RET
INC Position ;Textposition hochzählen
SJMP Sende_Text
Sendetext:
DB"text",0dh,0ah
Sendetext1:
DB"text",0dh,0ah
.....
AndreasH
07.05.2005, 00:00
Ich habe das immer so gemacht, dass ich am Ende des Textes ein EOT (4) gesetzt habe. Dann nur so:
.equ EOT, 4
.equ LF, 10
.equ CR, 13
MOV DPTR,#Sendetext1
CALL SENDE_TEXT
CALL ENDLOSSCHLEIFE
Sende_Text:
MOVC A,@DPTR ;Zeichen aus dem Beispieltext einlesen
CJNE A,EOT,Senden
ret
Senden:
_warte:
JB Sendebusy,_warte
MOV SBUF, A ;Senden der Daten
SETB Sendebusy
inc dptr
SJMP Sende_Text
Sendetext:
DB"textzeile1",CR,LF,"textzeile2",CR,LF,"textzeile3",CR,LF,EOT
Von der Logik her müsste es gehen. Bin mir nicht sicher ob die Syntax stimmt. Programmiere im Moment AVR. Habe schon länger nicht mehr 8051 programmiert.
Warum setzt Du "Position". Das habe ich nicht verstanden. Willst Du auch mal mitten aus einer Textzeile senden? Also z.B statt "Text" "xt"?
Bei der obigen Lösung kannst Du auch beliebig viele CR/LF in Deine Zeilen setzen. D.h. ein ganzes Menu direkt ausgeben.
Ausserdem fehlen bei Dir vor text2: bzw. text3:
"ret"s
surf_andre
07.05.2005, 00:14
das war einmal ein Beispielprogramm aus dem Progstudio das ich zu test zwecken mal umgebaut habe.... Leider ist in den µC-Kochbüchern nichts ausführliches zufinden zum thema senden über 232.
Aber warum da nun ein Positionszähler zu finden ist weiß ich nicht....
Ich werde das mal testen...
mfg andre
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.