Forum: Mikrocontroller und Digitale Elektronik Problem mit ASCII Code


von norad (Gast)


Lesenswert?

Hi!

ASCII-Code nach ISO-Norm 8859-1 haben die "ÄÖÜäöü"
hexwert "C4h,D6h,DCh,E4h,F6h"

d.h. wenn man nun im Texteditor die Umlaute eingibt haben sie auch den
entsprechenden o.g.  Hexwert

Wenn ich die ASCII-Code Tabelle mit dieser Routine Ausgebe

#include <stdio.h>


void main(void)
{
  int i;

  for(i=0; i<256; i++)
  {
    printf("%d, %x,  %c\n",i,i,i);
  }



}

Haben die Umlaute ganz andere Hexwerte für Ü = 9Ah, Ö = 99h, Ä = 8Eh.


So jetzt die frage woher kommt der Unterschied?

Hab nämlich das Problem diese Abweichung in meiner ASCII-CODE Tabelle
zuberechnen.

Weiss da jemand einen Rat bzw. hat ne Lösung?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du beschreibst nicht, wo Du das "Programm" laufen lässt. Angenommen,
es sei ein Konsolenfenster auf einem PC, dann gilt, daß dieses eine
andere Zeichencodierung verwendet, nämlich die sogenannte Codepage 850
oder 437. Diese stammen noch aus der Ursteinzeit des PC und geben die
von IBM eingeführte 8-Bit-Zeichencodierung wieder.

Mach mal folgendes:

Stelle im Konsolenfenster die Schriftart "Lucida Konsole" anstelle
der Rasterschriftart ein.

Gebe folgendes in der Eingabeaufforderung im selben Konsolenfenster
ein:

   mode con cp select=1252

und rufe dann im selben Konsolenfenster Dein Programm auf.

Na, was passiert?

von Ralf (Gast)


Lesenswert?

Du bist drauf reingefallen, dass unter Windows der _ANSI_-Zeichensatz
gilt.
Der ASCII- ist mit dem ANSI-Zeichensatz nur bis 0x7F bzw. 127 (= die
ersten 128 Zeichen) identisch.
Da in beiden die Umlaute einen größeren Wert als 127 haben, hast du
somit auch den Unterschied erklärt.

HTH

Ralf

von Besserwisser (Gast)


Lesenswert?

Aha!

Das würde bedeuten, dass ich im Editor oder wo auch immer den ANSI
Zeichensatz rausschmeissen muss sonnst compiliert der mir ja falsch.

Es geht darum auf einem Grafik Display Umlaute auszugeben und ich
dachte das man mit dem ASCII-Code.

Der µC den ich einsetzte ist ein Atmel AT89C51ED2


Trotzdem Danke!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Du ein LC-Display verwendest, dann musst Du schon ins Datenblatt
des LC-Displays sehen, was das für einen Zeichensatz verwendet. Die
beliebten HD44780-Controller haben oberhalb 0x7f eine völlig eigene
Sichtweise und halten sich an keinerlei Norm.

Der Anmerkung von Ralf sei noch hinzugefügt, daß ASCII nur einen
7-Bit-Zeichensatz beschreibt.
8-Bit-Zeichensätze vor ANSI (auch CP1252, Latin-1 oder ISO 8859-1)
waren teilweise sehr kreativ "anders", wie der berühmte
IBM-Zeichensatz, der des Atari ST oder die auf Macs verwendete
Variante.

von Norad (Gast)


Lesenswert?

@Rufus!

Das Display hat keinen Zeichensatz den muss ich ja selber bereitstellen
und die Zeichen senden.

Display ist von Electronik Assembly  EA DIP122-5NLED

von Kai R. (kairiek)


Angehängte Dateien:

Lesenswert?

Hallo Norad,

dann programmiere deinen Zeichensatz fürs Display so, dass er zu deinen
ASCII Zeichen passt. Ich habe das gleiche Display und stand ebenfalls
vor diesem Problem. Ich habe dann einfach den HC44780 Zeichensatz
kopiert. Anbei eine ZIPped BMP Datei mit meinem Zeichengenerator. Liest
sich von Links nach Rechts und alle Zeichen haben das Format 5x7 Pixel.
Die grauen Linien dienen nur als Orientierung.

MFG

Kai

von Kai R. (kairiek)


Lesenswert?

PS: Ich hab mir ein Spezieltool programmiert, das mir dieses BMP in HEX
Code umwandelt. So muss ich die ganzen Daten nicht von Hand eingeben,
ist bei 256 Zeichen ganz schön viel (~1,5kB mit einem Byte Abstand).

von Norad (Gast)


Lesenswert?

Ich hab meine Tabelle mal grob angepasst.

Also wenn ich das richtig interpretiere muss ich den Ansicode von den
Adressen her gleich abbilden d.h. die 256 Zeichen.



Danke Kai.

von rkhb (Gast)


Lesenswert?

>muss ich den Ansicode von den
>Adressen her gleich abbilden d.h. die 256 Zeichen.

Nach Deinem Beispiel: ja. Solltest Du Tastatureingaben auswerten, musst
Du in der Dokumentation Deines Compilers nachschlagen, ob und wann zwei
Bytes zurückgegeben werden (Unicode). Meist ist das aber nicht der
Fall.

Ich fasse mal kurz zusammen:

Ein Windows-Programm (GUI) arbeitet normalerweise mit dem, was
Microsoft ANSI-Format nennt. Das ist identisch mit der IANA-Bezeichnung
"Windows-1252". Eine Gegenüberstellung der Zeichensätze gibt es hier:

http://de.selfhtml.org/inter/sprache.htm

ISO-8859-1 und Windows-1252 sind nicht identisch, was Du immer wieder
erfährst, wenn Du mit Firefox auf Homepages gehst, die
fahrlässigerweise in Windows erstellt und lediglich mit dem Internet
Explorer getestet wurden oder umgekehrt mit dem Internet Explorer einen
Linuxianer besuchst.

HTH
viele grüße
ralph

von rkhb (Gast)


Lesenswert?

Noch was vergessen:

Ein Programm in der Windows-Konsole ("Eingabeaufforderung") arbeitet
normalerweise mit einem Zeichensatz, den Microsoft ASCII nennt:

http://msdn2.microsoft.com/de-de/library/9hxt0028(VS.80).aspx

Manchmal wird er auch Codepage 850 genannt und wenn ein uraltes
DOS-Programm keine richtigen Linien zeichnen kann, stellt man
zweckmäßigerweise die Codepage auf 437 um. Rufus T. Butterfly hat
gezeigt, wie man die Codepage in der Konsole auf Windows-1252 umstellen
kann.

viele grüße
ralph

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.