|
|||||||
| 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
|
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.... |
|
|
|
|
|
#3 |
|
Registered User
|
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..
|
|
|
|
|
|
#4 |
|
Mod. Sezione Elettronica
|
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) |
|
|
|
|
|
#5 |
|
Registered User
|
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 |
|
|
|
|
|
#6 | |
|
Super Moderator
|
Quote:
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! |
|
|
|
|
|
|
#7 | |
|
Registered User
|
Quote:
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 --------------------------------- 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 |
|
|
|
|
|
|
#8 |
|
Registered User
|
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? |
|
|
|
|
|
#9 | |
|
Registered User
|
Quote:
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 |
|
|
|
|
![]() |
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 | |
|
|