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


von blawa (Gast)


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 ^^

von Reiner (Gast)


Lesenswert?

Versuch mal % in der Hilfe zu finden

Reiner

von blawa (Gast)


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 ^^

von Schoaschi (Gast)


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

von Reiner (Gast)


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

von peter dannegger (Gast)


Lesenswert?

Ich hab da was in der Codesammlung gefunden:

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


Peter

von blawa (Gast)


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?

von Markus K. (markus-)


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.

von blawa (Gast)


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 ^^

von blawa (Gast)


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?

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.