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 27-04-2006, 22.03.39   #1
Registered User
 

Iscritto da: 26-08-2005
Messaggi: 42
Feedback: (0)
conversione binario-ascii

Ciao a tutti, mi era venuta un idea che mi sembrava grandiosa( per le mie conoscenze), ma si e' subito arenata per un problema ancora piu' grandioso!!
vorrei trasferire dei valore binari(0-255) presente in un registro del 16f84A in codice ascii verso un pc e visualizzarne il valore con hyperterminal( in verita' i reg. sn 38 ma poi faccio un loop).
il problema e' che per trasformare un val bin. in acsii l'unico modo che mi viene in mente e' di fare 255 subrutine ognuna delle quali settera' tre registri
con i valori corrispondenti che verranno poi' inviati sulla porta tx del pic (seguiti da un quarto reg. settato come "spazio") Se riuscissi a fare ogni sub. di sole 4 istruzioni sarei gia' fuori dalla prom.C'e forse un modo piu' ortodosso
per fargli fare questa conversione?? ogni consiglio sara' ben accetto....
jonatha Non in Linea   Rispondi Citando
Vecchio 27-04-2006, 22.20.39   #2
Super Moderator
 
L'avatar di  FluidGuitar
 

Iscritto da: 04-01-2001
Locazione: Torino
Messaggi: 4,014
Feedback: (0)
Ma scusa, il codice ascii è già un valore compreso fra 0 e 255. Cos'è che dovresti convertire?
__________________

Tu non sai niente, Jon Snow!
FluidGuitar Non in Linea   Rispondi Citando
Vecchio 27-04-2006, 22.55.55   #3
Registered User
 

Iscritto da: 26-08-2005
Messaggi: 42
Feedback: (0)
se ad esempio volessi visualizzare il num."128" sul pc, dovrei mandare in uscita ,( almeno credo..) prima il val.49 in binario per l'1, poi il 50 per il 2 ed il 56 per l'8,( e poi l'8 per il backspace ) e mi sembra un po' eccessivo.. per 255 possibili valori presenti nei registri divento matto..
jonatha Non in Linea   Rispondi Citando
Vecchio 27-04-2006, 23.32.35   #4
Mod. Sezione Elettronica
 
L'avatar di  caspita
 
Tornei vinti: 1

Iscritto da: 12-12-2005
Locazione: BERGAMO
Messaggi: 3,772
Feedback: (1)
ma perchè tutto ciò?
tu come vuoi visualizzare il numero? con che programma?
seriale o parallelo?

un numero a 8 bit ha 256 possibili combinazioni, che sono i numeri che vanno da 0 a 255, basta che invii 8 bit...

o mi sto perdendo io da qualche parte??
__________________
sembra di sentirlo ancora dire al mercante di liquore: "tu che lo vendi cosa ti compri di migliore?" (cit. De Andrè)

Dobbiamo andare e non fermarci finchè non siamo arrivati...Dove andiamo? Non lo so, ma dobbiamo andare... (cit. Jack Kerouac)
caspita Non in Linea   Rispondi Citando
Vecchio 28-04-2006, 00.44.46   #5
Registered User
 

Iscritto da: 20-04-2006
Locazione: Roma
Messaggi: 27
Feedback: (0)
Ciao jonatha,

se non ho capito male questo link può esserti di aiuto
http://www.foxflier.com/pic/RCPulseCnt.asm
c'e una porzione di codice (bin2ascii) che trasforma il valore di un byte in digit decimali.

Saluti
pokerino2005 Non in Linea   Rispondi Citando
Vecchio 28-04-2006, 07.38.31   #6
Super Moderator
 
L'avatar di  FluidGuitar
 

Iscritto da: 04-01-2001
Locazione: Torino
Messaggi: 4,014
Feedback: (0)
Quote:
Originariamente inviato da jonatha
se ad esempio volessi visualizzare il num."128" sul pc, dovrei mandare in uscita ,( almeno credo..) prima il val.49 in binario per l'1, poi il 50 per il 2 ed il 56 per l'8,( e poi l'8 per il backspace ) e mi sembra un po' eccessivo.. per 255 possibili valori presenti nei registri divento matto..
Ma trasmettere in ascii significa proprio quello che hai appena descritto.
Altrimenti trasmetti il valore in binario puro su 8 bit e poi lo converti in decimale. Ma in tutto ciò l'ascii non rientra
__________________

Tu non sai niente, Jon Snow!
FluidGuitar Non in Linea   Rispondi Citando
Vecchio 28-04-2006, 13.38.56   #7
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 939
Feedback: (0)
Quote:
Originariamente inviato da pokerino2005
Ciao jonatha,

se non ho capito male questo link può esserti di aiuto
http://www.foxflier.com/pic/RCPulseCnt.asm
c'e una porzione di codice (bin2ascii) che trasforma il valore di un byte in digit decimali.

Saluti
Quanto scritto dal mio collega d'oltre oceano mi sembra uscita dall'ufficio "Complicazioni affari semplici".
Avevo gia scritto qualcosa qui:problema inverso.....
Ho adattato un codice in C e ne è uscito questo:
Codice:
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
;
; Routine     : Char3ASCII dì 21/10/02 adattamento dal C del 28/04/06
;
; Descrizione : Conversione di un byte senza segno in ASCII a 3 caratteri.
;		  Il carattere da convertire è passato in W.
;		  Ritorna con le 3 variabili già caricate ASCII.
;		Le variabili sono: etto, deci e uni.
;
; Routine     : Char2ASCII dì come sopra.
;
; Descrizione : Conversione di un byte senza segno in ASCII a 2 caratteri.
;		  Il carattere da convertire è passato in uni.
;		NB. se uni fosse maggiore di 99 la conversione sarà errata.
;		  Ritorna con le 2 variabili già caricate ASCII.
;		Le variabili sono: deci e uni.
;
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
Char3ASCII:
	movwf	uni	; Sistema il convertibile.
	movlw	'0'
	movwf	etto
	movlw	200
	subwf	uni,F	; F-W se F>=W Carry=1 (risultato positivo).
	skpc		; Se F>=W fa il saltino.
	goto	$+4
	movlw	'2'
	movwf	etto
	goto	Char2ASCII
	addwf	uni,F	; E' minore di 200 per cui si ripristina.
	movlw	100
	subwf	uni,F	; F-W se F>=W Carry=1 (risultato positivo).
	skpc		; Se F>=W fa il saltino.
	goto	$+4
	movlw	'1'
	movwf	etto
	goto	Char2ASCII
	addwf	uni,F	; E' minore di 100 per cui si ripristina.
Char2ASCII:
	movlw	10
	clrf	deci,R
loopc2a:
	incf	deci,F,R
	subwf	uni,F,R
	btfss	uni,7,R	; Skip se negativo.
	bra	loopc2a
	addwf	uni,F,R
	decf	deci,F,R
	movlw	'0'
	addwf	uni,F,R
	addwf	deci,F,R
	return
;----------------------- fine di Char3ASCII ---------------------------------
E' circa la metà di quello dello sconosciuto collega.
La routine in questa sua forma non è stata assemblata e tantomeno provata ma la do per funzionante.
__________________
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 30-04-2006, 18.36.49   #8
Registered User
 

Iscritto da: 26-08-2005
Messaggi: 42
Feedback: (0)
Be, grazie a tutti , specialmente a Camillo, penso che il codice che ha postato sia propio cio' di cui ho bisogno, ora lo studio e vedo di adattarlo, anche se ci sono 2 cose che non ho mai visto prima, nel loop2a.
la R, posta dopo la variabile e la destinazione(o il flag), a cosa serve??
e l'istruzione skpc testa "da sola" il carry?
jonatha Non in Linea   Rispondi Citando
Vecchio 02-05-2006, 09.23.51   #9
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 939
Feedback: (0)
Quote:
Originariamente inviato da jonatha
Be, grazie a tutti , specialmente a Camillo, penso che il codice che ha postato sia propio cio' di cui ho bisogno, ora lo studio e vedo di adattarlo, anche se ci sono 2 cose che non ho mai visto prima, nel loop2a.
la R, posta dopo la variabile e la destinazione(o il flag), a cosa serve??
e l'istruzione skpc testa "da sola" il carry?
Devo scusarmi; essendo il pezzo una routine scritta per il PIC 18Fxxxx è rimasto il terzo operando che questo assembler ha bisogno e che indica (in questo caso) che la variabile si trova nel banco 0.
Puoi togliere tranquillamente rutti i ,R che trovi.
skpc (significa skip con carry) è una pseudoistruzione integrata dell'assembly di Microchip. Fa parte di un nutrito gruppo di pseudoistruzioni molte delle quali sono molto utili, altre un po' di meno. Il loro elenco con traduzione si trova nel manuale dell'assembler.
__________________
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 00.37.58.


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