[asm]Zamiana trzybajtowej liczby dec na hex.

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
swiato
-
Posty: 4
Rejestracja: 07 lut 2013, 16:17
Lokalizacja: Warszawa

[asm]Zamiana trzybajtowej liczby dec na hex.

Post autor: swiato » 29 gru 2014, 8:24

Kiedyś, dość dawno temu, udało mi się napisać ręcznie procedurę zamiany dec na hex. Chodziło o wprowadzanie liczby z klawiatury w postaci dziesiętnej i konwertować do szestnastkowej. W moim urządzeniu suport napędzany jest przez śrubę, a jego pozycja zliczana jest impulsami z enkodera w obu kierunkach. Licznik pozycji dodaje i odejmuje w systemie szestnastkowym. Pozycję zadaną wpisuje jako dziesiętną i aby np. zatrzymać suport w zadanej pozycji muszę miec ją w zapisie hex. Niestety i kość z programem i notatki przepadły, a jako człowiek starszy nie mam już takiej lotności umysłu jak wtedy gdy pisałem tą procedurę. Poza tym jak wiadomo LENISTWO JEST RĘKOJMIĄ ZDROWIA. 8051 programować jestem w stanie jedynie w ASM, zatem gdyby ktoś podesłał mi przepis na coś takiego, byłbym bardzo wdzięczny. SWIATO.

trol.six
-
Posty: 2
Rejestracja: 21 mar 2015, 15:51
Lokalizacja: kraków
Kontakt:

Post autor: trol.six » 21 mar 2015, 16:29

Zasada jest prosta. Dla 16 bitowej liczby w rejestrach L1 L2
1. Zerowanie dwóch rejestrów L1 L2
2. wpisaniu liczby z kalawiatury do rejestru np KLAW
3. mnożeniu przez dziesięć liczby L1 L2
4. dodanie liczby KLAW do L1 L2
jesli mamy następna liczbe z klawiatury ponawiamy kroki 2 3 4

Mamy już liczbe w L1 L2 binarną.
postać binarna to postać prawie szesnastkowa. Kwestia formatu.
Bo liczba L1 to dwie szesnastkowe.

Jeśli mają one mieć postać kodu ASCII czyli znaku 0123456789abcdef
To trzeba je pociąć korzystając np z dodatkowego rejestru TMP

Czyli bierzemy L1 cztery pierwsze bity to pierwsza szesnastka.
TMP = L1
1. TMP & 0x0F zerowanie
2. Dla liczb TMP <= 9 dodajemy znak '0' (zero)
dla reszty dodajemy znak 'a' lub 'A' i odejmujemy 10.
3. mamy pierwszy hex i zpisujemy do H1
Potem górna połówka, najpierw zamiana bitów
TMP = L1
SWAP TMP
I powtarzamy kroki 1 2 3 i mamy H2

potem kolejny bajt L2 itd

ODPOWIEDZ