www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik modulo und char array bei uCs?


Autor: blawa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja also ich hab folgendes Problem bei dem ich nicht weiterkomme:
Ich will bei einem µC vom Typ 80C535 und will Werte die ich vom A/D-C
bekomme auf ein Display ausgeben... das Problem ist nun, das ich nicht
weis wie ich die Zahl (Integer, immer 3 stellig) in die einzelnen
Ziffern Zerlegen soll. Ich hatte 2 Ideen, die aber der µC scheinbar
nicht unterstützt, bzw ich nicht weis in welcher Header ich diese
Funktionen finde.

1) Char array
char Zahl[4]
Zahl[]= AD-Zahl

SO nun meckert der Compiler weil in der Klammer keine Zahl steht.
Deshalb wollte ich das Problem mit der Modulo Funktion Lösen:
2)
x=(xyz - mod(xyz,100)) / 100  = Einstellige Zahl der 100er Stelle
und so weiter bis ich alle 3 Stellen habe, jedoch find ich die mod
Funktion nicht einmal in der hilfe (Ich verwende Keil)

Währe über Hilfe erfreut ^^

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal % in der Hilfe zu finden

Reiner

Autor: blawa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bzw wenn ich die Funktionen finden würde, steh ich vor noch einem
Problem:

Wenn ich schreibe Port1='A' gibt mein Display auch ein A aus.
Wenn ich schreibe Port1=0x.. also in Hexa-Zahlen dann gehts.
Aber solbald ich eine Zahl bzw Buchstaben in einer Char-Variable
speicher gibte r irgendwas aus.... und deshalb glaub ich, dass ich die
Integers zuerst in Hex umwandeln muss, aber hab leider keine Ahnung wie
ich das machen soll... also wenns jemand weis bitte sagen

danke ^^

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Modulooperator ist %.

Probier mal deine Zahl mit sprintf auf einen String zu kopieren. Damit
würdest du dir das mit dem Modulo-Operator auch ersparen.

mfg schoasch

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht was Du machen willst:

'A' ist der Character 'A' d.h. die Zahl = 0x41 (65d)
0xA ist die Zahl A (oder 10d) und das ist ein Linefeed.

0x0 ist die Zahl 0 = 0x0 (0d)
0x1 ist die Zahl 1 = 0x1 (1d)
'0' ist der Character '0' d.h. die Zahl 0x30 (48d)
'1' ist der Character '1' d.h. die Zahl 0x31 (49d)

Will ich die Zahl 1 in den Character '1' umwandeln dann hilft 1 +
0x30
Beispiel:
int a = 1;
char x;
x = a + 0x30  oder x = a + '0'

Hex oder Dezimal sind eine Schreibweise.  Integers sind in Hex!!

Gruß
Reiner

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab da was in der Codesammlung gefunden:

http://www.mikrocontroller.net/forum/read-4-46127.html#new


Peter

Autor: blawa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Reiner:
Ich versteh nicht ganz warum ich, wenn ich meine '1' als Integer
gespiechert habe, 0x30 dazuzählen muss, um es in einer char variable
speichern zu können?
wenn ich schreibe cahr x=1, dann steht ja im x ne '1' drinnen?
Oder ist das was du schreibst eine umwandlung, so dass dann in meiner
char Variable ein hex wert steht?

Autor: Markus K. (markus-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@blawa:

Man benutzt chars für zwei Dinge:
a) Als kleine Zahlenvariable. Sowas wie int oder long, hat aber nur
8Bit.
b) Um Buchstaben bzw. Texte (Array) zu speichern.

Nun ist es leider so, dass die beiden Anwendungen nicht kompatibel
sind.  Bei Texten hat die Ziffer 1 den Wert 0x31, die Ziffer 2 den Wert
0x32 usw. Will Du von einer Anwendung zur anderen, dann mußt Du die
Ziffern konvertieren. Dann macht man z.B. so wie Reiner beschrieben
hat.

Wenn Du char x = 1 schreibst, dann steht dort die Zahl 1 drin. Wenn Du
dagegen char x = '1' schreibst, dann ist dort die (Text-)Ziffer 1
drin, die hat den Zahlenwert 0x31.

Autor: blawa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke erstmal an alle für die schnellen Antworten... ich mach erst am
Do mit meinem Projekt weiter, werd dann alles ausprobieren und hoffe das
alles klappt ^^

Autor: blawa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok habs mal ausprobiert, jedoch ist mir was merkwürdiges aufgefallen:

wenn ich mache:
for(;;)
{
  int x[5];
  char y[5];
  n++;
  x[n]=n;
  y[n]=x[n]+0x30;
  P1=y[n];
  if n==4 break;
}

funktioniert das ganze wunderbar, ausser wenn n=0 ist, da krieg ich auf
meinem Port 1 0x60 raus... kann mir jemand erklären, wieso dass so ist?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.