Krzysztof Wesołowski » bin2bcd http://kwesoly.net Programowanie, elektronika, automatyka - doświadczenia i projekty Wed, 07 Sep 2011 14:03:29 +0000 pl-PL hourly 1 Konwersje BIN/BCD w ASM 8051 http://kwesoly.net/programowanie/konwersje-binbcd-w-asm-8051/ http://kwesoly.net/programowanie/konwersje-binbcd-w-asm-8051/#comments Wed, 04 Nov 2009 23:06:03 +0000 http://kwesoly.net/?p=412 Kilka prostych procedur napisanych dla znajomych z innego kierunku:

Listing:
  1. ;poniższy kod można podmienić na prezentujący inna z załączonych procedurę.
  2.  
  3. mov R0,#0x14 ;przykladowa liczba do konwersji
  4. mov R1,#0x38 ;druga czesc liczby
  5.  
  6. lcall BCD2BIN2BYTES ;procedura konwertujaca
  7.  
  8. FINISH: ;petla zapobieajaca wykonywaniu dalszej części programu.
  9.     LJMP FINISH


Konwersja 2 bajtowa:

Listing:
  1. BCD2BIN2BYTES:
  2.     ;liczba jest w R0 i R1
  3.     ;bardziej znaczacy w R0, mniej w R1
  4.     ;wynik również tam umieścimy.
  5.     mov A,R0
  6.     lcall BCD2BIN1BYTE ;konwertujemy pierwszy
  7.     mov B, #100
  8.     MUL AB         ; wynik został pomnożony razy 100
  9.     mov R2, B
  10.     mov R3, A      ; wynik mnożenia zachowany
  11.  
  12.     mov A, R1
  13.     lcall BCD2BIN1BYTE ; konwersja mniej znaczącej części
  14.     CLR C             ; dodawania z przeniesieniem
  15.     ADDC A, R3
  16.     mov R3, A
  17.     mov A, R2
  18.     ADDC A, #0
  19.     mov R0,A
  20.     mov A,R3
  21.     mov R1, A
  22. RET
Listing:
  1. BIN2BCD1BYTE: ;konwersja BIN2BCD na jednym bajcie - pochodzi z datasheetu - proste i zrozumiałe
  2.     mov B, #10
  3.     DIV AB
  4.     SWAP A
  5.     ADD A, B
  6. RET
  7.  
  8. BCD2BIN1BYTE: ; i w druga stronę
  9.     mov R7, A
  10.     ANL A,#0xF0   ; zostawiamy tylko cyfrę dziesiątek
  11.     SWAP A
  12.     mov B, #10
  13.     MUL AB
  14.     XCH A, R7       ; zamiana miejscami
  15.     ANL A, #0x0F  ; cyfra jedności
  16.     ADD A, R7
  17. 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.

]]>
http://kwesoly.net/programowanie/konwersje-binbcd-w-asm-8051/feed/ 2