PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kann ich Integer in Hex wandeln ?



EasyRider
17.01.2006, 22:11
Habe folgendes Problem.

int pos=41;

P2=0x29; //funktioniert
P2=0xpos; //geht nicht

Ich möchte P2 über eine Variable pos einen Hex wert zuweisen!

Kann mir bitte jemand helfen?
MFG Easy Rider

PasstScho
17.01.2006, 22:22
Hi,
P2=pos; // geht :D

Hab grad keine Zeit zu erklären warum... sry
MfG Alex

izaseba
17.01.2006, 22:22
Darf ich fragen, was Du vor hast?
geht es sich um die Darstellung der Zahl, oder was ?

Gruß Sebastian

Psiyou
17.01.2006, 22:27
Ähm, sorry das ich das so sage, aber da fehlen ganz klar die Grundlagen.

Hex, Dezimal, Binär, Octal und was es da noch so alles gibt sind alles nur andere Darstellungsformen für ein und die selbe Zahl. Es ist also sch.... egal ob du sagst P2=41; P2=0x29; usw für den PC/Compiler/uC ist das alles genau das gleich und speichern tut er es eh nur in binärem Format.

Was soll den Deiner Meinung nach der Unterschied sein ? Denke Du hängst da an einem völlig anderem Problem.
Philipp

EasyRider
18.01.2006, 16:27
Geht leider doch nicht so einfach.
Am Controller hängt ein Grafik Display von Noritake.
Das Display akzeptiert für die Cusor Positionierung
nur direkte Hex zuweisungen wie P2=0x41;

Das Programm funktioniert aber nur mit Integer variablen die ich über
eine Funktion übergebe.

Das Display setzt den Cursor nur z.B. mit P2=0x41;
an dir richtige stelle.

Für mein Programm muss aber anstelle 0x41 eine Variable stehen.

izaseba
18.01.2006, 16:46
Wie übergibst Du dieses P2=0x41 an das Display? als String, oder wie?

EasyRider
18.01.2006, 17:13
Nein nicht als String.
Die Hex Zahl wird direkt so übergeben.
z.B.

P2=0x41;

Psiyou
18.01.2006, 20:59
Kenn das Display jetzt nicht...
Wie wird das den Übergeben ?? Nehme mal an parallel ? und P2 steht für einen Port am Atmel ?
Poste doch mal Deinen Code und ein Link auf das Datenblatt. Und vor allem Deinen Schaltplan nicht vergessen ;)
Aber wenn P2=0x42; geht, gehat auf jeden falle auch P2=pos; mit zB pos=0x42;

Vitis
18.01.2006, 21:56
also ich kann mir das mit der Datenübertragung als hex-wert
irgendwie nicht vorstellen ... gibt meine phantasie nicht her.
Das Display hängt irgendwie am Controller, soweit so gut,
die Daten werden aber wie auch immer in Form von Bits übertragen
1 oder 0, Saft auf der Leitung oder nicht, ob parallel oder
seriell ist relativ. Ob der Wer der Konstanten binär, oktal, dezimal oder hex
eingegeben wird bei der programmierung der Controllers es müssen dabei
schlussendlich Bits rauskommen sonst läuft da nix.

askazo
19.01.2006, 07:59
Wenn Deine Variable pos den int-Wert 41 hat, was willst Du dann an das Display übergeben?
a) 0x29 oder
b) 0x41?

Fall a)
Dann geht's einfach mit P2 = pos;

Fall b)
Dafür müsstest Du eine kleine Funktion zum umrechnen schreiben:


unsigned char dec2hex (int x)
{
unsigned char y;
y = (x/10)*16 + (x%10);
return y;
}

//Funktions-Aufruf:
P2 = dec2hex(pos);


Damit wäre dex2hex(41) = 65 = 0x41.
Allerdings kannst Du so dann keine Hex- Werte ans Display übergeben, die Buchstaben enthalten, wie z.B. 0xD3. Schließlich kennt int keine Buchstaben.

askazo

EasyRider
19.01.2006, 20:43
Danke, für die vielen Infos.
Das muss ich jetzt erst mal testen.
MFG Easy Rider