5lis/09
Konwersje BIN/BCD w ASM 8051
Kilka prostych procedur napisanych dla znajomych z innego kierunku:
Listing:
-
;poniższy kod można podmienić na prezentujący inna z załączonych procedurę.
-
-
mov R0,#0x14 ;przykladowa liczba do konwersji
-
mov R1,#0x38 ;druga czesc liczby
-
-
lcall BCD2BIN2BYTES ;procedura konwertujaca
-
-
FINISH: ;petla zapobieajaca wykonywaniu dalszej części programu.
-
LJMP FINISH
Konwersja 2 bajtowa:
Listing:
-
BCD2BIN2BYTES:
-
;liczba jest w R0 i R1
-
;bardziej znaczacy w R0, mniej w R1
-
;wynik również tam umieścimy.
-
mov A,R0
-
lcall BCD2BIN1BYTE ;konwertujemy pierwszy
-
mov B, #100
-
MUL AB ; wynik został pomnożony razy 100
-
mov R2, B
-
mov R3, A ; wynik mnożenia zachowany
-
-
mov A, R1
-
lcall BCD2BIN1BYTE ; konwersja mniej znaczącej części
-
CLR C ; dodawania z przeniesieniem
-
ADDC A, R3
-
mov R3, A
-
mov A, R2
-
ADDC A, #0
-
mov R0,A
-
mov A,R3
-
mov R1, A
-
RET
Listing:
-
BIN2BCD1BYTE: ;konwersja BIN2BCD na jednym bajcie - pochodzi z datasheetu - proste i zrozumiałe
-
mov B, #10
-
DIV AB
-
SWAP A
-
ADD A, B
-
RET
-
-
BCD2BIN1BYTE: ; i w druga stronę
-
mov R7, A
-
ANL A,#0xF0 ; zostawiamy tylko cyfrę dziesiątek
-
SWAP A
-
mov B, #10
-
MUL AB
-
XCH A, R7 ; zamiana miejscami
-
ANL A, #0x0F ; cyfra jedności
-
ADD A, R7
-
RET
Komentarze wyjaśniają mniej typowe rzeczy, zaś działanie pozostałych sprowadza się praktycznie do opisu działania instrukcji. W razie niezrozumienia jakiegoś szczegółów można zapytać na mailu komentarzu.
Maj 28th, 2013 - 00:41
Czy ten program był kiedykolwiek przetestowany? W temacie jest info BIN/BCD natomiast w nazwie procesury w programie BCD2BIN2BYTES więc wygląda na to że raczej konwersja odwrotna z kodu BCD na binarny a nie jak w temacie.
To co rzekomo pochodzi z datasheetu
BIN2BCD1BYTE: ;konwersja BIN2BCD na jednym bajcie – pochodzi z datasheetu – proste i zrozumiałe
mov B, #10
DIV AB
SWAP A
ADD A, B
RET
to może jakiś trik który by należało sprawdzić ale tylko na jednym bajcie gdzie tutaj jest faktycznie w całym programie konwersja dwóch bajtów binarnych na BCD?
Maj 28th, 2013 - 07:52
Nie ma takiej konwersji, nie została nigdzie obiecana
Jak nazwy procedur wskazują jest konwersja 1 bajtowa BCD -> BIN, 1 bajtowa BIN -> BCD, oraz dwu bajtowa BCD -> BIN.
Jeżeli konwersja z datasheetu wygląda na „trik” i jest niezrozumiałą można obejrzeć proces konwersji w symulatorze 8051.