Vai al contenuto
PLC Forum


Bin To Bcd


Omarro

Messaggi consigliati

Ciao,

siccome sto facendo un orologio con il ds1629, come forse gia precedentemente avrete letto, ho bisogno di convertire un numero BINARIO o ESADECIMALE in BCD.

Ho implimentato un menu che gira sul 16f876 e che visualizzo un lcd della hitachi, nel menu ci sono opzioni tipo imposta ora ecc ecc......

siccome l'ora la faccio visualizzare in questo modo 24:00

mi piacerebbe avere in un registro questo numero

Ora = 0x24

invece di Ora = 0x18

come faccio?

avete qualche routine già fatta? io uso CC5X

grazie mille

Link al commento
Condividi su altri siti


Gabriele Corrieri

Ciao

semplicemente devi fare una conversione Bin>Dec

N.ro  Dec           Bin

0     0000 0000     00000000
1     0000 0001     00000001
2     0000 0010     00000010
3     0000 0011     00000011
4     0000 0100     00000100
5     0000 0101     00000101
6     0000 0110     00000110
7     0000 0111     00000111
8     0000 1000     00001000
9     0000 1001     00001001
10    0001 0000     00001010
11    0001 0001     00001011
12    0001 0010     00001100
13    0001 0011     00001101
14    0001 0100     00001110
15    0001 0101     00001111
16    0001 0110     00010000
17    0001 0111     00010001
18    0001 1000     00010010
19    0001 1001     00010011
20    0010 0000     00010100
21    0010 0001     00010101
22    0010 0010     00010110
23    0010 0011     00010111
24    0010 0100     00011000

qui trovi un po' di codice in assembler

http://www.renesas.com/media/products/mpum...ms/e74ref45.pdf

Ciao

Modificato: da Gabriele Corrieri
Link al commento
Condividi su altri siti

Se devi convertire da esadecimale a decimale o BCD devi fare una routine di conversione; in pratica devi convertire la base di numerazione. Ora l'eadecimale ha come base 16, mentre il decimale ha come base.... dieci.

Si definisce il limite del numero esadecimale da convertire, per esempio 0FFFFhex ==>65535d.

arichi il numero Hex da convertire e cominci a confrontare:

if Nhex > 10000 then A=Nhex / 10000;

A = A * 10000;

Nhex = Nhex - A ;

if Nhex > 1000 then B = Nhex / 1000;

....

ecosì fino a 10

Poi si sommano A, B, C, D ed il resto che equivale alle unità; in questo modo hai il numero in decimale, se in vece devi presentare il numero in BCD su dei visualizzatori, eviti di moliplicare i risultati delle divisioni per 10000, 1000, 100 e 10

Link al commento
Condividi su altri siti

Normalmente odio parlare di cose che non conosco quindi mi sono documentato, ho scaricato il datasheet del ds1629 è ho verificato che:

nel DS1629 il CLOCK REGISTER FORMAT rilascia i dati in formato BCD!!! Quindi non c'è bisogno di fare nessuna conversione. L'unica cosa che devi fare è:

Quando vai a fare il programma per il tuo micro devi ragionare in bcd non in binario o esadecimale cioè molto semplicemente se raggiungi in esadecimale 0Ah metti con una routine di controllo 10h (che corrisponde 10 in bcd a due cifre), 1Ah --> 20h e 25h-->00h

Il risultato è che lavori in esadecimale (o binario tanto è la stessa cosa) ma ottieni valori in bcd

Ripeto, i valori letti dal ds1629 sono bcd, ESEMPIO

Vuoi fare una routine di cambio ora, hai 4 display e su ognuno è visualizzato un numero

sono le 13:45 e vuoi cambiare la sola ora

metti il dato in 4 registri

1 = reg1

3 = reg2

4 = reg3

5 = reg4

Incrementa il reg2 = 4 e visualizza ---> 14:45

ma ti ricordo il famoso controllo: se invece l'ora è 19:45 un incremento di reg2 ti produce Ah quindi fai un semplice controllo che se incrementando hai una Ah devi mettere lo 0!

=20:45

Ciao a tutti

Macbet

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...