FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc
Come trasformo due variabili decimali da 8 bit in una a 16 bit?
Autore
Messaggio
opzioni
valfus
postato il: 12.02.2022, alle ore 00:40
Come trasformo due variabili decimali da 8 bit in una a 16 bit?
Salve a tutti.
Avrei un problemino con una seriale da cui si leggono dei valori decimali da 8 bit
questi valori poi formano una variabile a 16 bit
Vorrei sapere se esiste il modo di trasformare due numeri decimali che possono arrivare da 0 a 255 in una variabile da 16 bit che quindi può arrivare da 0 a 65535.
Praticamente se i numeri fossero binari per esempio se ho 11000000 che vale 192 in decimale e 00001000 che vale 8.
Se li unisco insieme diventerebbe 1100000000001000 che varrebbe quindi 49160.
Ma se ho invece sono i numeri decimali, 192 e 8, quali calcoli devo fare per ottenere 49160.
Spero di essermi spiegato bene...
RidiculousLab
postato il: 12.02.2022, alle ore 08:25
Ciao. Molto semplice. Devi moltiplicare la parte piu significativa per 256 e poi sommarla alla parte restante.
192x256 + 8
In pratica è come shiftare a sinistra di 8 bit ovvero moltiplicare per 2 alla 8
https://www.ridiculouslab.com
RidiculousLab
postato il: 12.02.2022, alle ore 08:33
Ovviamente devi anche sapere se il numero rappresentato ha il segno oppure no.
In caso affermativo il 16 bit è quello che determina se il numero è positivo o negativo.
Per cui il calcolo di cui sopra nel caso di intero con segno (+32768 -32767) vale solo se il byte piu significativo è inferiore a 128. I valori che superano 127 sono quindi negativi.
https://www.ridiculouslab.com
double_wrap
postato il: 12.02.2022, alle ore 12:27
Cosa arriva dalla seriale e con quale funzione lo leggi?
A seconda della funzione usata il compilatore fa delle formattazioni prima di caricare la variabile.
Ad esempio la cifra decimale <5> potrebbe arrivare alla seriale su otto bit come carattere asci <53> cioe' <00110101>. Il compilatore la converte in <5> e nella variabile di lettura scrive <00000101>. Oppure potrebbe arrivare in binario come <00000101> ed il compilatore DEVE sapere cosa farne.
Nel tuo caso il tuo numero <decimale> 192 come arriva alla seriale? In binario ad otto bit <11000000> oppure in decimale come<49><57><50><CR>?
"se peso cado, ma se cado non peso"
adamatj.altervista.org
valfus
postato il: 13.02.2022, alle ore 15:12
Grazie mille per le pronte risposte comunque come diceva RidiculousLab ho risolto la faccenda.
Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito