Conversia de la binar în zecimal

conversia BCD are loc în practică mai des decât zecimal, binar, dar un pic mai complicat. Necesară pentru a rezolva problema inversă determinării coeficienților cunoscuți polinomului binar zecimal.

În conformitate cu (1) toți coeficienții di (biții zecimala număr care urmează să fie determinată) pot fi găsite prin împărțirea D secvențiale 10 i. Deci, după prima divizie D / 10-n 1 MSB obține dn-1 ca câtul și un rest prin divizarea dn-10 * 2 n-2 + ... + d1 * 10 1 + d0 * 10 0. Apoi, prin împărțirea reziduului pe 10 n- 2 obține o descărcare regulată-DN2 etc.

Sub-byte număr binar conversie în zecimal 3 cifre enumerate mai jos. Trebuia să folosească două operațiuni de 100 și divizare cu 10.

Conversia numerelor unui singur octet (1), după cum vom vedea, este justificată. Dar, dacă aveți nevoie pentru a converti la o reprezentare zecimală, de exemplu, 3-octet număr binar, va fi necesar să se utilizeze mai multe sub-programe de diviziune la 10,100,1000 etc. schema Horner permite să gestioneze numai împărțirea la 10, nu depinde de mărimea numărului convertit.

Prima divizie a D (2) pentru a da 10 LSB d0 restul și coeficientul ... (dn-1 * 10 +-DN2) * 10 + ... + d1. Efectuarea divizia obținut în ciclul anterior al privat, 10, definim următorul d1 rang superior etc. Determinarea coeficienților de di schema Horner, spre deosebire de (1) se efectuează de la cel mai mic d0 cifre la dn-1 senior.

Subrutină Conversia 2 octeți număr binar zecimal 5 cifre (coeficienții decimale d4 ... d0 stocate în microcontroler SRAM):

Pentru conversia BCD există un algoritm asociat cu utilizarea rezultatului BCD de corecție. În comparație cu exemplul de mai sus, este nevoie de o mulțime de programe intensive de memorie și a registrelor, dar executate cu cea mai mare viteză.

Procesorul execută toate operațiile aritmetice în conformitate cu legile aritmeticii binare și interpretează orice date exact ca numere binare, prin urmare. Prin urmare, rezultatul unor astfel de operațiuni sunt, de asemenea, numerele reprezentate în format binar. Dacă utilizați unele sau alte forme de reprezentare a numerelor, este aproape sigur, orice acțiune produsă asupra lor, va duce la eroare. Acest lucru se va întâmpla prin faptul că numerele înregistrate în celălalt cod (altele decât poziția), și sub rezerva altor legi matematice.

Să presupunem că doriți să adăugați doi la un octet binar zecimal codificat numărul 0x95 și 0x76, care sunt intrarea numerelor zecimale 95 și 76, respectiv (în nibbles inferioare este scris numărul de unități în mai mare - numărul de zeci), și a obține suma de 0x171 (7 zeci, 1 unitate Acesta stabilește pavilion transporta C, ca o sută) reprezentat în format binar zecimal codificat. Numărul Cu toate acestea, după ce rulează adăuga Rd, Rr este primit 0x10B (0x0B montat și de transport de pavilion C) și este complet legal în ceea ce privește rezultatul unor calcule aritmetice binare.

Multe microprocesoare au o echipă specială care corectează rezultatul plus, în cazul în care termenii au fost prezentate în format binar zecimal codificat. În cazul nostru, o astfel de comandă ar converti suma 0x10B în 0x171. Cu toate acestea, astfel de instrucțiuni AVR-microcontroler, din păcate, lipsește. Cu toate acestea, corectarea BCD poate fi ușor de implementat în software-ul.

Utilizarea BCD circuit de corecție de calcul, împreună cu Horner poate converti numere binare în următoarea secvență:
B = (... (bn-1 * 2 +-bn 2) * 2 + ... + b1) * 2 + b0.

Pentru produsul bn-1 * 2 adăuga chiar lângă bit bn-2, și prin intermediul corecției BCD transformă suma binară bn-1 * 2 + bn-2 în binar codificat sub formă de depunere zecimală. În etapa următoare, de asemenea, produs de multiplicare (bn-1 * 2 +-bn 2) * 2 și, după adăugarea bn-3 biți, suma (bn-1 * 2 +-bn 2) * 2 +-bn 3 supuse corecției din nou etc.

subrutină următor convertește numărul binar trohbaytovogo situată în intervalul 0 ... 0xFFFFFF, în zecimal (0 ... 16777215). În loc de o serie de multiplicări bn-1 * 2 (bn-1 * 2 + bn-2) * 2, ... se folosește suma trecerea de antrenare de 1 bit spre stânga.