Vai Indietro   PcTuner Forum > Sezione Hardware > Programmazione PIC
Arcade Registrazione Blogs Regolamento Feedback FAQ Lista Utenti Calendario Segna come Letti

Ultimi 5 blog pubblicati su PcTuner Blog
Data Titolo

Rispondi
 
Strumenti Discussione Modalità Visualizzazione
Vecchio 07-03-2006, 08.50.17   #1
Registered User
 

Iscritto da: 28-02-2006
Locazione: Ancona
Messaggi: 323
Feedback: (0)
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?
superciuck Non in Linea   Rispondi Citando
Vecchio 07-03-2006, 09.51.52   #2
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 967
Feedback: (0)
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
Camillo Non in Linea   Rispondi Citando
Vecchio 07-03-2006, 10.57.56   #3
Registered User
 

Iscritto da: 28-02-2006
Locazione: Ancona
Messaggi: 323
Feedback: (0)
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
superciuck Non in Linea   Rispondi Citando
Vecchio 07-03-2006, 12.13.58   #4
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 967
Feedback: (0)
Quote:
Originariamente inviato da suprciuck
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
Non ho nessuna intenzione di spiegarti il funzionamento perché lo devi capire analizzando il programma.
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
Camillo Non in Linea   Rispondi Citando
Vecchio 07-03-2006, 12.41.01   #5
Registered User
 

Iscritto da: 28-02-2006
Locazione: Ancona
Messaggi: 323
Feedback: (0)
azz.... però c'hai ragione.
mo ce provo.....
superciuck Non in Linea   Rispondi Citando
Vecchio 07-03-2006, 13.01.47   #6
Registered User
 

Iscritto da: 28-02-2006
Locazione: Ancona
Messaggi: 323
Feedback: (0)
domanda: se faccio 4-10 cioè 00000100-00001010 cosa ottengo in binario?
superciuck Non in Linea   Rispondi Citando
Vecchio 07-03-2006, 13.12.53   #7
Registered User
 

Iscritto da: 28-02-2006
Locazione: Ancona
Messaggi: 323
Feedback: (0)
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?
superciuck Non in Linea   Rispondi Citando
Vecchio 07-03-2006, 13.51.44   #8
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 967
Feedback: (0)
Quote:
Originariamente inviato da suprciuck
domanda: se faccio 4-10 cioè 00000100-00001010 cosa ottengo in binario?
11111010b -6d FAh difatti se fai FAh+6h=0h

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
Camillo Non in Linea   Rispondi Citando
Rispondi 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

Regole di scrittura
non Puoi inserire messaggi
non Puoi rispondere ai messaggi
non Puoi inviare allegati
non Puoi modificare i tuoi messaggi

codice vB è Attivo
Smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Disattivato
Pingbacks are Disattivato
Refbacks are Disattivato
Vai al Forum


Tutti gli Orari sono GMT +1. Attualmente sono le 09.02.50.


Powered by vBulletin Versione 3.6.12
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0