Moin,
habe mir eine Funktion geschrieben, die eine unsigned 16bit Variable für
einen Wertebereich 0..9999 BCD-codiert. Größere Werte resultieren in
Hexadezimalen Zeichen für die Tausender-Stelle. Das wird aber an anderer
Stelle abgefangen:
1 | /**
|
2 | * \brief BCD-konvertierten Wert des Arguments zurückgeben
|
3 | *
|
4 | **/
|
5 | UI16 ui16_bcd(UI16 arg)
|
6 | {
|
7 | UI16 tausender, hunderter, zehner, einer;
|
8 |
|
9 | tausender = arg / 1000;
|
10 | arg -= tausender * 1000;
|
11 | hunderter = arg / 100;
|
12 | arg -= hunderter * 100;
|
13 | zehner = arg / 10;
|
14 | arg -= zehner * 10;
|
15 | einer = arg;
|
16 |
|
17 | return (tausender << 12) | (hunderter << 8) | (zehner << 4) | einer;
|
18 | }
|
Allerdings braucht die durch die vielen Multiplikationen und Divisionen
jede Menge Platz im Flash und damit auch Laufzeit. Die Funktion wird mit
avr-gcc für einen ATtiny85 kompiliert.
Da hat doch bestimmt jemand ne Ahnung, wie man das geschickter wandeln
kann...
Danke für eure Beiträge
Boxi