|
|||||||
| Arcade | Registrazione | Blogs | Regolamento | Feedback | FAQ | Lista Utenti | Calendario | Segna come Letti |
| Ultimi 5 blog pubblicati su PcTuner Blog | ||
|
||
![]() |
|
|
Strumenti Discussione | Modalità Visualizzazione |
|
|
#1 |
|
Registered User
|
problema inverso.....
Allora, come arrivare ad un valore unico formato inizialmente da 2 registri decine e unità ci sono arrivato (almeno teoricamente).
Ma il contrario come si fa? Ho un valore in un registro ad esempio 24 (decimale) come faccio ad ottenere 2 valori; uno 2 (decine) e l'altro 4 (unità)? Dovrei dividere x 10 il valore, ma come si effettua una divisione in binario? |
|
|
|
|
|
#2 |
|
Registered User
|
Ti passo una mia routine usata in C ma è scritta in ASM per PIC18.
__________________Togli tutti quei ,R che funziona anche per gli altri PIC, l'istruzione bra sostituiscila con goto. Intanto vedi qualcosa dell'assembly PIC18. Come da commento funziona solo fino a 99 se vuoi estenderla per convertire un byte devi fare uno sforzo algoritmico. Codice:
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//
// Funzione : Char2ASCII
//
// Descrizione : Conversione di un char (prm2) senza segno in ASCII a 2 caratteri.
// Usa prm1 e prm2 modificandolo.
//
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
void Char2ASCII(void){
/*-----------------21/10/02 09.07-------------------
Conversione di un char (prm2) senza segno in ASCII a 2 caratteri.
NB se il char Š superiore a 99 la conversione Š errata.
Il carattere da convertire Š passato in prm2.
Ritorna con: prm1=decine e prm2=unit….
*/
_asm
movlw 10
clrf prm1,R
loopc2a:
incf prm1,F,R
subwf prm2,F,R
btfss prm2,7,R // Skip se negativo.
bra loopc2a
addwf prm2,F,R
decf prm1,F,R
movlw '0'
addwf prm2,F,R
addwf prm1,F,R
_endasm
}//----------------------- fine di Char2ASCII ---------------------------------
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau. Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein |
|
|
|
|
|
#3 |
|
Registered User
|
L'ho testata su un 16F84.
E' proprio quello che mi serve. Confesso... io, se casomai fossi riuscito ad ottenere lo stesso risultato, avrei adoperato sicuramente un centinaio di istruzionie un centinaio di ore. Se hai 2 minuti pui spiegarmi a grandi linee come funzica. Grazie Ciauuuz |
|
|
|
|
|
#4 | |
|
Registered User
|
Quote:
Devi comportarti come se fossi la CPU ed eseguire istruzione per istruzione. Io quando lo facevo mi aiutavo con dei cartoncini dove scrivevo il valore dei registri e delle variabili. Se usi un simulatore sei avvantaggiato. Forse una cosa che non sai è che un numero con il suo BIT più alto (MSB) è negativo. Ed ora sono io che voglio la spiegazione da te. Il passo successivo sarà quello di aggiungere le centinaia, per avere la conversione completa da 0 a 255.
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau. Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein |
|
|
|
|
|
|
#7 |
|
Registered User
|
ok provo a grandi linee a darti una spiegazione.
1) metto 10 in w 2)incremento prm1 3)eseguo prm2 - 10 e lo lascio in prm2 Questo fino a che prm2 non sarà negativo. Per vedere se negativo testo il bit 7 se alto allora è diventato negativo. Quando ciò accade devrò decrementare di 1 prm1 che mi indica le decine (se ad esempio inizialmente in prm2 ho 14 quando tramite il loop chiamiamolo di sottrazione diventa negativo in prm1 avrò 2 (ho fatto 2 giri) per cui lo devo decrementare di 1) Poi aggiungo 10 a prm2 che nello stesso momento di cui sopra vale ora -6, rportandolo a 4 cioè le unità iniziali. Ad entrabe aggiungo 48 cioè 0 in ascii Fatto. Corretto? |
|
|
|
|
|
#8 | |
|
Registered User
|
Quote:
Direi che la spiegazione è corretta. Ed ora vai a combiare la __CONFIG.
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau. Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein |
|
|
|
|
![]() |
Per le vostre immagini su questo forum potete usare PcTunerUp! Iscriviti gratuitamente alla nostra newsletter. |
| Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 visitatori) | |
| Strumenti Discussione | |
| Modalità Visualizzazione | |
|
|