Sei sulla pagina 1di 4

Binary-coded decimal

La codifica binary-coded decimal (BCD) è un modo comunemente utilizzato


in informatica ed elettronica per rappresentare le cifre decimali in codice binario, che
sfrutta in parte la convertibilità da base 2 a base 16.
In questo formato, ogni cifra di un numero decimale è rappresentata come per un numero
a base 16 da un codice binario di quattro bit, il valore del quale è compreso tra 0 (0000) e
9 (1001). Le restanti sei cifre della base 16 possono essere usate per rappresentare
simboli. Per esempio il numero 127 è rappresentato in BCD come 0001, 0010, 0111.
Sebbene il BCD comporti un notevole spreco di bit (circa 1/6 di memoria inutilizzata in
packed BCD), in alcuni casi è preferibile perché ha una diretta corrispondenza con il
codice ASCII. È sufficiente infatti sostituire i primi quattro bit inutilizzati con 0011 per
ottenere il corrispondente ASCII.
Nella somma, se il risultato supera 9 (1001), si somma 6(0110).
Poiché i computer memorizzano i dati in byte, di otto bit, con tale codifica è possibile
memorizzare una cifra per byte e riempire i restanti quattro bit con zeri o uno (come nel
codice EBCDIC), oppure mettere due cifre per byte, modalità chiamata packed BCD.
I numeri in notazione packed BCD normalmente terminano con un codice di segno,
solitamente 1100 per il + e 1101 per il meno. Il numero 127 si rappresenta 11110001,
11110010, 11110111 in EBCDIC e 00010010, 01111100 in packed BCD.
Il codice BCD è molto usato in elettronica, specialmente in circuiti digitali privi
di microprocessore, perché facilita la visualizzazione di lunghe cifre sui display a sette
segmenti. Infatti ad ogni display fisico corrisponde esattamente una cifra. Esistono
appositi circuiti integrati che effettuano la conversione da BCD nella corrispondente
sequenza di accensione dei segmenti. Anche l'esecuzione di semplici calcoli aritmetici è
più semplice da effettuarsi su cifre BCD per circuiti logici combinatori.
I BIOS dei personal computer memorizzano la data e l'ora in BCD; ciò presumibilmente
avviene per ragioni storiche, tenendo conto che in alcuni sistemi recenti l'anno viene
rappresentato diversamente per ovviare al Millennium bug.

L'IBM e il BCD
L'IBM utilizza il termine binary-coded decimal o BCD per un codice alfanumerico
proprietario a sei bit (base 64: 2^6), che rappresenta numeri, lettere alfabetiche maiuscole
e altri caratteri speciali.
Nei primi computer IBM (IBM 1620, serie IBM 1400 e unità non decimali delle serie IBM
700/7000) furono adottate diverse varianti del BCD. Con l'introduzione del System/360,
l'IBM sostituì il BCD con il codice EBCDIC a otto bit.
Le posizioni dei bit nel codice BCD IBM sono comunemente etichettate B, A, 8, 4, 2, 1. A e
B valgono zero quando è codificata una cifra numerica.
Nel BCD 1062 caratteri alfabetici erano codificati usando i bit pari in coppie di bit, ed
usando i bit dispari per le cifre. Un apposito hardware convertiva tra questa codifica
interna e in codice BCD a sei bit usato all'esterno.
La seguente tabella riassume la codifica delle cifre da zero a nove di alcuni sistemi BCD.
Per chiarezza il BCD standard descritto all'inizio è chiamato Simple Binary-Coded
Decimal (SBCD) o BCD 8421, dove 8421 indica il peso dei bit.
SBCD BCD BCD IBM 1401
Cifra Excess-3
8421 2421 84-2-1 8421
0 0000 0011 0000 0000 1010
1 0001 0100 0001 0111 0001
2 0010 0101 0010 0110 0010
3 0011 0110 0011 0101 0011
4 0100 0111 0100 0100 0100
5 0101 1000 1011 1011 0101
6 0110 1001 1100 1010 0110
7 0111 1010 1101 1001 0111
8 1000 1011 1110 1000 1000
9 1001 1100 1111 1111 1001

La codifica BCD e i display a 7 segmenti

BCD è un acronimo che sta per Binary Coded Decimal : Decimale codificato in
binario. E’ un sistema utilizzato in informatica e in elettronica per rappresentare
una singola cifra decimale con il suo equivalente in binario. La codifica,
dovendo rappresentare soltanto le cifre (quindi da 0 a 9) richiede unicamente
un nibble (4 bit) per ogni cifra.

Il numero 248, ad esempio, in BCD sarà codificato come 0010 – 0100 – 1000
(ogni cifra è rappresentata in formato binario: 0010 =2, 0100=4, 1000=8).

Utilizzando i normali sistemi ad 8 bit, ovviamente ci troveremo ad avere i primi 4


bit inutilizzati: per convenzione, quindi, ogni cifra espressa in BCD avrà i primi 4
bit posti a zero (altri usano posti a uno), seguiti quindi dai 4 bit che codificano la
cifra (8 sarà quindi codificato come 00001000, come avviene normalmente per
codificare ad 8 bit un numero decimale).

Dal momento che 4 bit vengono “sprecati”, a volte si utilizza la codifica packet


BCD, ovvero vengono messe due cifre per ogni byte. Nella codifica packet BCD,
inoltre, viene anche aggiunto alla fine un codice per indicare il segno del
numero: 1100 per il + e 1101 per il -, il numero 248, quindi sarà rappresentato in
packet BCD come: 00100100 – 10001100.
In realtà la codifica BCD, sebbene porti degli “sprechi” di
informazioni, è molto utilizzata per vari motivi in elettronica.
Prima di tutto perchè permette un facile utilizzo dei display a
led a 7 segmenti: esistono numerosi circuiti integrati che
permettono di pilotare direttamente un display a 7 segmenti,
passandogli la codifica in BCD della cifra da visualizzare.

Immaginiamo di dover pilotare un display a 7 segmenti con un


picmicro: avremo bisogno di 7 pin di I/O per visualizzare una
cifra: uno per ogni segmento del display, questo può non
essere un problema se abbiamo a disposizione molti I/O
oppure se la nostra applicazione non necessita di molti I/O.

Ma se dobbiamo pilotare numerosi display? La cosa si complica: si ricorre


sicuramente al multiplex (si abilitano i display uno alla volta, molto velocemente)
e si preferisce utilizzare un integrato BCD-to-seven-segments-driver (come il
CD4511 o l’SN7447 per citarne alcuni), in maniera tale che anzichè 7 I/O per
cifra, ne dobbiamo utilizzare soltanto 4, risparmiando ben 3 pin (e questo ci
permette, ad esempio, di utilizzare un display a 7 segmenti anche con un
picmicro da 8 pin).

Nell’esempio affianco (che illustra il collegamento classico di un BCD-to-7-


segment-driver), per visualizzare, ad esempio, la cifra 7, imposteremo gli
ingressi dell’SN7447 (ABCD – scritti in maiuscolo!) sul valore 0111 (7 codificato
in BCD), (A=0,B=1,C=1,D=1), per contro l’integrato manderà tensione ai
segmenti contrassegnati come a,b e c (scritti in minuscolo) per visualizzare il
numero 7 sul display.

I segmenti di un display vengono generalmente identificati con le lettere come


da disegno:
Per visualizzare il numero 2, si accenderanno i segmenti a,b,g,e,d.

Un altro motivo per cui la codifica BCD è così utilizzata sta nel fatto che ha una
corrispondenza quasi diretta con il codice ASCII: basta difatti sostituire le prime
4 cifre binarie della codifica BCD con 0011 per ottenere il corrispondente valore
ASCII della cifra che si vuole rappresentare!

Prendiamo ad esempio il numero 8: in BCD sarà scritto come 1000 o meglio


0000 1000. Sostituendo le prime  4cifre binarie, inutilizzate, con 0011 otteniamo
0011 1000,  ovvero 56 in decimale, che è proprio il codice ASCII del numero 8!

 Datasheet SN7447 (BCD to 7 segment driver) (3206 download)


 Datasheet CD4511 (BCD to 7 segment driver) (1876 download)

Potrebbero piacerti anche