konwersji HEX na BCD w C

E

erodeboy

Guest
Jak przekonwertować wartość szesnastkowa do BCD przy Keil C

 
Salam,

Nie wspominać to, co jest długość hex 8 bitów, 16 bitów ... etc

Ok oto prosty sposób przekształcić hex (8bit) do BCD

Jednym z ograniczeń tej metody jest vaild fot. cyfr od 0 - 99 tylko.

Na przykład, jeśli chcesz przekonwertować do 99 BCD

1 - podzielić 99 przez 10
2 - wprowadzone w wyniku wysokiej skubać zmiennej wynik
3 - wprowadzone przypomnienia w niskich skubać zmiennej wynik

Metoda ta jest bardzo łatwa do wdrożenia w C tak

Kod:

unsigned char hex2bcd (unsigned char x)

(

unsigned char y;

y = (x / 10) <<4;

y = y | (x% 10);

return (y);

)
 
Cytat:

Od fmayr (at) electronic.tu-graz.ac.at Mon Jan 6 10:24:30 1997

Data: Wed, 05 lutego 1997 15:36:00 0100

Od: Friedrich Mayr <fmayr(at)electronic.tu-graz.ac.at>

Do: 8051code (at) keil.com

Temat: Szybkie Long konwersji BCDFunkcja ta została napisana w środowisku Keil C51

dr Roehrer (Inst. f. Elektronik, TU-Graz) i ja

należnych od C - Program jak: "nieważne bin2bcd (void)"Następujące zmienne globalne (musi znajdować się w

wewnętrznej pamięci RAM procesora, "data" lub "idata") jest

wykorzystywane zarówno do przekazywania argumentów ( "długi" wartości) na

funkcji, jak również otrzymać wynik (6 cyfr):Unii

(

unsigned char buf [6];

długo;

) Idata U_b;Celem Kodeksu jest przekształcenie signed long wartości

do BCD - kod ze znakiem wiodącym w razie potrzeby.
Wartości przekraczającej

zakres 6 (-: 5) Wszystkie znaki powinny być wyświetlany "-".

Wykorzystania pamięci był krytyczny, ponieważ nie zewnętrznej pamięci RAM

w systemie, więc tylko Accu, B, R1, R2, R3, R4,

wykorzystywane są na bok od cyfr-(argument-i) bufor "U_b".Sztuczka stosowana w funkcji jest wykorzystanie

"małe" (skubać przez czepiać) podziału i rozległe

wykorzystania '51 - rozkazy XCHD i SWAP.

Powoduje to wykonanie bardzo szybko.

Funkcji można łatwo zmodyfikować, na przykład

do czasu obliczeń lub rozszerzone do pełnej "długi"

zakres.
 
/ / Pass wejście 8-bitowy BCD format i długość konwersji i wrócić Hex Values
/ / W bufor.
void Bcd_To_Hex (unsigned char * Input_Buff, unsigned char * Output_Buff, unsigned char Len)
(/ / Przez Neeraj Verma: neeraj.niet (at) gmail.com
unsigned char i, j;
for (i = 0, j = 0; i <Len i , j )
(If ((i 1)> = Len)
(
if (* (Input_Buff len-1-i)> 0x40)
* (Output_Buff j) = (* (Input_Buff len-1-i)-0x37);
w przeciwnym razie
* (Output_Buff j) = (* (Input_Buff len-1-i)-0x30);
)
w przeciwnym razie
(
if (* (Input_Buff len-1-i)> 0x40)
(If (* (Input_Buff Len-2-I)> 0x40)
(
* (Output_Buff j) = ((* (Input_Buff Len-i-2) 0x37) <<4) | (* (Input_Buff len-1-i)-0x37);
)
w przeciwnym razie
(
* (Output_Buff j) = ((* (Input_Buff Len-i-2) 0x30) <<4) | (* (Input_Buff len-1-i)-0x37);
)
)
w przeciwnym razie
(If (* (Input_Buff Len-2-I)> 0x40)
(
* (Output_Buff j) = ((* (Input_Buff Len-i-2) 0x37) <<4) | (* (Input_Buff len-1-i)-0x30);
)
w przeciwnym razie
(
* (Output_Buff j) = ((* (Input_Buff Len-i-2) 0x30) <<4) | (* (Input_Buff len-1-i)-0x30);
)
)
)
i ;
)
)

 
/ * Prototype * /
void Hex2Decimal (long num);

/ * Hex zmiennych w każdym rejestrze * /
unsigned long num = 0x499602D2; / * 1234567890 * /

int main ()
(
Hex2Decimal (num); / * konwersji na hex do cyfr * /

return 1; / * C DOBRY!, nie wymagane * /
)

/ * Funkcja * /

/ * Konwertuje unsigned dostępnej liczby hex w mikro rejestrów cyfr
i przechowuje cyfr w tablicy * /
void Hex2Decimal (long num)
(
unsigned char value [10];
unsigned char i = 0;

while (num> 0)
(
wartość =% num 10;
num / = 10;
i = i 1;
)
)

 

Welcome to EDABoard.com

Sponsor

Back
Top