Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Microcontrollore

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ

0
voti

[1] Microcontrollore

Messaggioda Foto UtenteChip87 » 25 mag 2012, 10:55

Salve, sono nuovo del forum.

Voleo chiedervi se nelle istruzione contenute nel PIC 16f873 esiste un modo semplice per suddividere il numero binario a 8 bit in due nibbles, cioe due gruppi da 4 bit per la visualizzazione su due display 7 segmenti. In pratica devo effettutare una converione binario/bcd col PIC. :D
Avatar utente
Foto UtenteChip87
0 2
 
Messaggi: 10
Iscritto il: 25 mag 2012, 10:42

0
voti

[2] Re: Microcontrollore

Messaggioda Foto UtenteDADO91 » 25 mag 2012, 11:06

Sappi che la semplice suddivisione di 8 bit in gruppi da 4, non fa una conversione bin->dec.
Semmai bin->hex, anche perché il massimo numero rappresentabile con 8bit è 255 e quindi con 2 display non fai niente.
Cosa vuoi fare precisamente?
Arduino + Meteo = TempDuino (Articoli)
www.dmdevs.com
Avatar utente
Foto UtenteDADO91
3.552 3 12 13
Expert EY
Expert EY
 
Messaggi: 965
Iscritto il: 27 feb 2009, 18:19
Località: Prov. di Firenze

0
voti

[3] Re: Microcontrollore

Messaggioda Foto UtenteChip87 » 25 mag 2012, 11:11

Col PIC 16f873 prima effetuo una conversione A/D e poi devo convertire il numero binario in bcd per la visualizzazione su due display 7 segmenti.
Avatar utente
Foto UtenteChip87
0 2
 
Messaggi: 10
Iscritto il: 25 mag 2012, 10:42

0
voti

[4] Re: Microcontrollore

Messaggioda Foto UtentePaolino » 25 mag 2012, 11:45

La cosa più semplice da fare è la mascheratura.
Ad esempio:

byte di origine: 0x57

Lo metti in AND con 0x0F e ottieni:
0x57 AND 0x0F = 0x07

Lo metti in AND con 0xF0, fai uno shift a destra di 4 posizione e ottieni:
(0x57 AND 0xF0)>>4 = 0x05

Per lo shift a dx dovrai usare le istruzioni di rotate.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[5] Re: Microcontrollore

Messaggioda Foto UtenteChip87 » 25 mag 2012, 12:32

ci provo......
grazie di tutto per ora
Avatar utente
Foto UtenteChip87
0 2
 
Messaggi: 10
Iscritto il: 25 mag 2012, 10:42

2
voti

[6] Re: Microcontrollore

Messaggioda Foto UtenteTardoFreak » 25 mag 2012, 13:10

Per fare la conversione da esadecimale a decimale di un byte:
- Si isola la parte bassa del byte con un' operazione di and 0x0F.
- Se il risultato è maggiore di 0x09 si aggiunge al byte originario 0x06
- Si isola la parte alta del byte eventualmente modificato con un' operazione di and con 0xF0
- Se il risultato è maggiore di 0x90 si aggiunge al byte originario 0x60.

Scritto in C
Codice: Seleziona tutto
unsigned char decimalAdjust(unsigned char dato)
{
  if ((dato & 0x0F) > 0x09) dato += 0x06;
  if ((dato & 0xF0) > 0x90) dato += 0x60;
  return (dato);
}


Chiaramente la cosa vale solo per dati che vanno da 0 a 0x63 altrimenti si perde il riporto.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[7] Re: Microcontrollore

Messaggioda Foto UtenteChip87 » 31 mag 2012, 13:24

una piccola curiosità, l'istruzione MOVF f,d non mi carica il dato nell'accumulatore, da cosa è dovuto secondo voi....?
Avatar utente
Foto UtenteChip87
0 2
 
Messaggi: 10
Iscritto il: 25 mag 2012, 10:42

0
voti

[8] Re: Microcontrollore

Messaggioda Foto Utenteleft » 31 mag 2012, 13:32

Chip87 ha scritto:una piccola curiosità, l'istruzione MOVF f,d non mi carica il dato nell'accumulatore, da cosa è dovuto secondo voi....?


come spiega il datasheet:
movf registro,0 => risultato in W
movf registro,1 => risultato in f
Avatar utente
Foto Utenteleft
5 1 3
 
Messaggi: 12
Iscritto il: 17 nov 2011, 15:42

0
voti

[9] Re: Microcontrollore

Messaggioda Foto UtenteChip87 » 31 mag 2012, 13:43

Su quello non c'e dubbio, ma per esempio io ho impostato l'istruzione in tale modo:

MOVF CHO_HIGH,0
MOVWF R0


MA L'ISTRUZIONE "MOVF" NON MI SPOSTA IL DATO NELL'ACCUMULATORE
Avatar utente
Foto UtenteChip87
0 2
 
Messaggi: 10
Iscritto il: 25 mag 2012, 10:42

0
voti

[10] Re: Microcontrollore

Messaggioda Foto UtenteCox » 31 mag 2012, 14:22

Ciao, come hai dichiarato CHO_HIGH ?
Io ho perso un settimana per averla dichiarata senza "res" !!!
Avatar utente
Foto UtenteCox
333 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 320
Iscritto il: 9 dic 2010, 17:46

Prossimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 64 ospiti