PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Hyperterminal] Bitcode einlesen



Aspire
16.04.2007, 14:20
Hi
Mein Problem:
Ich möchte eine Bitfolge vom Port 1 meines 8051 über die serielle Schnitstelle an das Hyperterminal übertragen aber ich bekomme anstatt einer Bitfolge nur Zeichen (Pfeile, Klammer usw.) .
Vielleicht wisst ihr was ich ändern muss damit ich einfach die 8 Bit vom Port 1 bekomme (zB. 00000001) und diese nicht wie ich vermute vom Hyperterminal "in ein Zeichen übesetzt werden".
Danke schonmal im voraus.

izaseba
16.04.2007, 19:26
Hmm,
da sehe ich zwei Möglichkeiten:
Du besorgst Dir ein Terminalprogramm, wo Du den Ausgabeformat so einstellen kannst,
oder Du wandelst in Deinem Kontroller die Zahlen in Strings um.
Terminalprogramm kann ich Dir leider nicht empfehlen :-( da ist mir nichts bekannt.
Ich benutze gtkterm, da kann ich aber die Ausgabe nur in hex umschalten.

Gruß Sebastian

Aspire
16.04.2007, 22:39
Vielleicht kennt sonst noch jemand ein Terminalprogramm mit dem es klappen könnte aber schonmal danke für die Antwort.

evilempire
17.04.2007, 08:01
Schau mal nach Realterm(realterm.sourceforge.net). Das hat mich bis jetzt von allem Terminalprogz am meisten überzeugt. Bedienung ist zwar am Anfang komisch, weil so viele Karteireiter existieren, aber das geht dann schon.

evil

wkrug
17.04.2007, 11:10
Mach doch aus dem einem Datenbyte 8 Byte ASCII Code also aus 0b00101100 -> 0b00110000,0b00110000,0b00110001,0b00110000,0b0011 0001,0b00110001,0b00110000,0b00110000.
dann noch ein <CR><LF>.
Das wird jedes beliebige Terminalprogramm als die Ziffern 00101100 darstellen und am Ende eines Bytes eine Zeilenumbruch machen.

In ASM sowas zu schreiben sollte kein größeres Problem sein.

Aspire
17.04.2007, 12:47
@evilempire
Werd mal dannach schauen danke =)

@wkrug

Ich hab die Methode leider kein Stück verstanden tut mir leid.
Ich hab noch sehr wenig Erfahrung in Assembler vielleicht kannst du mir
ein Beispiel geben?
Das CR LF dient nur für eine neue Zeile?

geronet
17.04.2007, 16:47
Lad dir das Bray Terminal runter, da kannst du mit einem klick die Zeichen in dezimal, hexadezimal und binär darstellen lassen.

Oder das hier geht auch: http://www.mikrocontroller.net/topic/26477

Grüsse, Stefan

Aspire
17.04.2007, 16:54
Hey danke Stefan,
Das Terminal Programm aus dem Link
funktioniert wunderbar !
Werd mich bestimmt bald wieder melden ich denk
auf mich kommen noch so einige Probleme zu ^^

wkrug
17.04.2007, 17:44
@Aspire
der ASCII Code der Ziffer 0 = 0x30 (HEX) = 0b00110000 (BIN)
der ASCII Code der Ziffer 1 = 0x31 (HEX) = 0b00110001 (BIN)
...
der ASCII Code der Ziffer 9 = 0x39 (HEX) = 0b00111001 (BIN)
(nur mal zur Info).

Für Dich bedeutet das, du wertest jedes einzelne Bit eines Eingangs aus und legst in 8 Speicherstellen hintereinander den entsprechenden Code ab , also 0b00110000 bei einer 0 und 0b00110001 bei einer 1 an der entsprechenden Stelle.
Diese 8 Bytes! überträgst Du dann über die serielle Schnittstelle, gefolgt von einem <CR> und <LF>(Den Bin Code für die beiden hab ich gerade nicht bei der Hand).
<CR> Stammt übrigens von Uralt Druckern und bedeutet Carriage Return (Wagen Rücklauf) und <LF>Line Feed (Zeilenvorschub) und hat sich bis in die heutige Zeit im ASCII Code herüber gerettet.
Beim Terminal Programm bewirken diese 2 Zeichen einen Zeilenumbruch (kann man im Terminalprogramm aber auch anders einstellen)

Nur mal ne Info für künftige Programmierversuche!:
Um übrigens die Zahlen von 0...9 über eine serielle Schnittstelle als ASCII zu übertragen kann man den Wert einfach mit 0b00110000 verodern also:

LDI r16,0b00001000 ;Der Wert 8
ORI r16,0b00110000 ;Oder mit 0x30 = 0x38

Im Register r16 steht jetzt der ASCII Code für die Ziffer 8 (0x38).
und der kann direkt an ein Terminalprogramm gesendet werden.
Wichtig bei der Geschichte ist, das das higher Nibble also die ersten 4 Bits beim Start des Programms 0 sind und der Zahlenwert nur im lower Nibble steht, sonst funktioniert das Ganze nicht.
Bei Ziffern über 9 also z.B. 'A' im HEX Code wird es etwas Schwieriger, weil die Großbuchstaben in ASCII bei 0x41 beginnen. Da musst Du halt dann 0x37 zum Zahlenwert dazuaddieren- 0x0A (Dez. 10) ist ja in der Ziffer schon drin.

Wenn Du mal sowas machen willst musst Du eine Verzweigung in dein Programm reinmachen, die bei 0...9 den einen Weg beschreitet, also die Veroderung bzw. Addition (geht auch) mit 0x30 und bei A...F den anderen Teil ausführt, der 0x37 addiert.

Das alles hört sich jetzt für dich sicher noch furchtbar kompliziert an, wenn Du dir mal ne ASCII Tabelle anschaust wird Dir sicherlich vieles klarer.