-         

Ergebnis 1 bis 9 von 9

Thema: [Hyperterminal] Bitcode einlesen

  1. #1

    [Hyperterminal] Bitcode einlesen

    Anzeige

    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.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    46
    Beiträge
    2.236
    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
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Vielleicht kennt sonst noch jemand ein Terminalprogramm mit dem es klappen könnte aber schonmal danke für die Antwort.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    26.04.2006
    Beiträge
    14
    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

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.897
    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.

  6. #6
    @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?

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.01.2007
    Beiträge
    134
    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

  8. #8
    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 ^^

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.897
    @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 (0x3.
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •