sobota, 23 listopad 2024
 
Strona główna Mikrokontrolery 8051 Konwersje danych

Konwersje danych

  1. BCD→BIN

  1. BCD→BIN

    Podprogram 1-bajtowej konwersji BCD→BIN zamienia liczbę z zakresu 0-99 zapisaną w upakowanym kodzie BCD zawartą w akumulatorze na liczbę dwójkową. Wynik zapisywany jest również w akumulatorze. Algorytm wykorzystuje do rozdzielenia cyfr dziesiętnych operację dzielenia przez 16 (DIV). Daje ona cyfrę dziesiątek (a1) w ACC, a jedności (a0) w rejestrze B. Potem wystarczy obliczyć a1*10+a0 i już!

    BCDBIN2 (1 bajt)
    ;dane:    ACC - liczba dziesiętna w upakowanym kodzie BCD
    ;wyniki:  ACC - liczba dwójkowa
    ;stos:    3 bajty
    ;uwagi:   podprogram modyfikuje rejestry B i PSW
    
    DECBIN2:MOV     B,#16
            DIV     AB        ;rozdzielenie cyfr
            PUSH    B         ;a0 na stos
            MOV     B,#10
            MUL     AB        ;ACC = a1*10
            POP     B
            ADD     A,B       ;ACC = a1*10+a0
            RET
    

    Podprogram 2-bajtowej konwersji BCD→BIN zamienia liczbę z zakresu 0-9999 zapisaną w upakowanym kodzie BCD zawartą pamięci adresowanej rejestrem R0 (najpierw młodsze cyfry) na liczbę dwójkową. Wynik zapisywany jest w tym samym obszarze pamięci. Algorytm wykorzystuje wcześniej opisany podprogram dla dwójek cyfr dziesiętnych.

    BCDBIN4 (2 bajty)
    dane:    Liczba zapisana w upakowanym kodzie BCD w pamięci od adresu R0
                (2 bajty, najpierw młodszy)
    wyniki:  Liczba dwójkowa w tym samym miejscu w pamięci
                (2 bajty, najpierw młodszy)
    stos:    6 bajtów
    uwagi:   podprogram modyfikuje rejestry ACC, B i PSW
             zawartość R0 nie zmienia się
    
    BCDBIN4:MOV     A,@R0     ;a1 i a0
            ACALL   DECBIN2   ;ACC = a1*10+a0
            PUSH    ACC
            INC     R0
            MOV     A,@R0     ;a3 i a2
            ACALL   DECBIN2   ;ACC = a3*10+a2
            MOV     B,#100
            MUL     AB        ;B.A = a3*1000+a2*100
            MOV     @R0,B
            DEC     R0
            POP     B
            ADD     A,B       ;a3*1000+a2*100+a1*10+a0 - młodszy bajt
            MOV     @R0,A
            INC     R0
            MOV     A,@R0
            ADDC    A,#0      ;uwzględnij ew. przeniesienie
            MOV     @R0,A
            DEC     R0
            RET
    
    do góry
© mgr inż. Piotr Kotarski, Kalety