 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Ned Okt 31, 2004 1:35 am Naslov sporočila: ASCII <-> HEX pretvorbe |
|
|
Brisana vsebina odstranjenega uporabnika.
|
|
Nazaj na vrh |
|
 |
alex007 Član

Pridružen-a: Pon 29 Dec 2003 0:19 Prispevkov: 56 Aktiv.: 0.24 Kraj: Sevnica
|
Objavljeno: Sre Maj 18, 2005 5:22 pm Naslov sporočila: |
|
|
Pozdravljeni!
Da ne odpiram nove teme, bom kar tukaj vprašal. Torej ima kdo napisano rutino, ki bi mi pretvorila 16 bitni podatek v ASCII. Če ima kdo in če je tako dober, bi ga lepo prosil, da to pripne na tukaj.
LP,Alex
|
|
Nazaj na vrh |
|
 |
Slowfly Član


Pridružen-a: Sre 18 Feb 2004 2:07 Prispevkov: 4082 Aktiv.: 17.23 Kraj: Ljubljana
|
|
Nazaj na vrh |
|
 |
alex007 Član

Pridružen-a: Pon 29 Dec 2003 0:19 Prispevkov: 56 Aktiv.: 0.24 Kraj: Sevnica
|
Objavljeno: Čet Maj 19, 2005 3:18 pm Naslov sporočila: |
|
|
S tistim linkom si nimam kaj dosti za pomagat. Namreč jaz rabim rutino napisano v PIC asemblerju, ki mi 16 bitni podatek razdeli v pet registrov, katere bom uporabljal za izpis številk na LCD.
LP
|
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Čet Maj 19, 2005 4:04 pm Naslov sporočila: |
|
|
Zakaj rabiš 5 registrov za 16 bitni podatek?
Če se prav spomnim imajo Pici 12F.. in 16F.. 8 bitne registe. Potemtakem bi rabil samo 2 da razdeliš 16 bitni podatek na 2 8 bitna. (No še carry bit mogoče rabiš)
Pa še: Kje pa misliš dobiti 16 bitni podatek? Ker so vsi registri 8 bitni? Če hočeš operirati z 16 bitnimi podatki morajo že v osnovi biti razbiti na 8 bitov.
Nisi povedal za kateri pic rabiš kodo.
Koda: |
movlw high arg1 ; Move literal to W register Višji bajt argumenta arg1 gre v HIcnt
movwf HIcnt ; Move W register to HIcnt
movlw low arg1 ; Move literal to W register Nižji bajt argumenta arg1 gre v LOcnt
movwf LOcnt ; Move W register to LOcnt
|
Tale koda drugače razbije 16 bitno številko recimo .1000 na dva registra. Številka je zapisana v arg1 spremenljivki. Višja mesta gresta v HIcnt register, nižja mesta gresta v LPcnt register.
_________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
alex007 Član

Pridružen-a: Pon 29 Dec 2003 0:19 Prispevkov: 56 Aktiv.: 0.24 Kraj: Sevnica
|
Objavljeno: Čet Maj 19, 2005 5:19 pm Naslov sporočila: |
|
|
Hi!
Zgleda da me ne razumete najbolje, oziroma se tudi sam nisem najbolje izrazil.
Torej imam 16 bitni podatek že razdeljen v dva 8bitna registra.
Recimo FFFF--------> HI_byte=FF........LO_byte=FF.
FFFF=65535 desetiško in to številko želim razčlenit na desettisočice, tisočice, stotice, desetice in enice in vsaka od teh naj bo v svojem registru, zato je potrebno pet registrov. Delam pa z PIC16F877.
Upam da sem sedaj napisal bol jasno, kaj želim in če ima kdo napisano rutino za tak postopek, bi ga prosil, če bi jo delil z mano.
LP, alex
|
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Čet Maj 19, 2005 8:10 pm Naslov sporočila: |
|
|
Malo sem pobrskal, ker se mi ne da tipkat.
Imam knjigo Programirajmo PIC mikrokontrolerje, kjer je napisana koda točno za tvoje potrebe .
V knjigi je tudi povezava na asm datoteko, ki pa žal ne deluje?
Za tipkat je malo preveč, pa tudi nimam toliko časa.
Drugače naj bi bila datoteka tule: www.svet-el.si/download/stej16.asm.
Mogoče bi ti jo poslali, če bi prijazno "zatežil"?
_________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Maj 19, 2005 8:16 pm Naslov sporočila: |
|
|
alex007,
Če ne boš dobil, ti bom spisal eno procedurco čez vikend.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
alex007 Član

Pridružen-a: Pon 29 Dec 2003 0:19 Prispevkov: 56 Aktiv.: 0.24 Kraj: Sevnica
|
Objavljeno: Sob Maj 21, 2005 12:43 pm Naslov sporočila: |
|
|
Če utegneš Silvo, bom zelo vesel tvoje pomoči.
LP
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.72 Kraj: Kranj - struževo
|
Objavljeno: Sob Maj 21, 2005 5:27 pm Naslov sporočila: |
|
|
Tu je moja koda za pretvorbo 8-bitov v ASCII. Mislim da predelava v 16-bitno ne bi smela biti problematična. Samo dodaš še en vhodni register in s carry-bitom povežeš obadva pri seštevanju in odštevanju.
Koda: |
; projekt: BIN to ASCII
; verzija: 1
; avtor: Aljaz Ogrin
; datum: 17. feb. 2003
; *************************************************************************************************
; * Konverzija BIN 0-255 => DEC
; * vhodni parameter = W
; *************************************************************************************************
bin2ascii movWF temp
clrF Cifra100
clrF Cifra10
clrF Cifra1
movLW D'100'
b2a_re100 incF Cifra100, F
subWF temp, F ; F - W -> F
btFss STATUS, C
goto b2a_go10 ; C=0 ... negativen rezultat -> popravimo in nadaljujemo z odštevanjem 10
goto b2a_re100 ; C=1 ... pozitiven rezultat -> ponovimo odštevanje 100
b2a_go10 decF Cifra100, F
addWF temp, F ; korekcija: temp + 100 -> temp
movLW D'10'
b2a_re10 incF Cifra10, F
subWF temp, F ; F - W -> F
btFss STATUS, C
goto b2a_go1 ; C=0 ... negativen rezultat -> popravimo in koncamo
goto b2a_re10 ; C=1 ... pozitiven rezultat -> ponovimo odštevanje 10
b2a_go1 decF Cifra10, F
addWF temp, W ; korekcija: temp + 10 -> W
addLW D'48' ; offset cifer v ASCII tabeli
movWF Cifra1
movLW D'48' ; offset cifer v ASCII tabeli
addWF Cifra10, F
addWF Cifra100, F
RETURN
; *********************************************************************************************** |
Če pa izbrskam kje 16-bitno, jo bom pripel sem. Za AVRje imam 8, 16 in 24-bitne procedure.
LP, aly.
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Maj 21, 2005 8:14 pm Naslov sporočila: |
|
|
Za 16 bitno bo potrebno kar precej več kode. Varinat je nešteto. V prilogi sem eno spisal (sicer je sem naredil kar en 5 mestni števec, ki šteje brezveze gor) tako da sem videl, če dela. Samo kodo bi lahko še strnil z uporabo indirektnega naslavljanja ter tabele če bi bila kriza za programski polnilnik. (del procedure sem sicer naslavljal indireknto).
8 bitna pretvorba, ki sem jo prav tako uporabil v proceduri. Mislim, da je še krajša od zgornje Aly-eve
Koda: |
;-----------------------------------------------
;pretvorba vrednosti dobljene v w v 3 registe
;v katerih bo vrednost od 0-9 primerno za
;prikaz na displej
;-----------------------------------------------
N_PRETVORBA
clrf CIFRA ;\
clrf CIFRA+1 ;|
clrf CIFRA+2 ; >najprej obrisem vse registre v katerih bo rezultat pretvorbe
clrf CIFRA+3 ;|
clrf CIFRA+4 ;/
movwf TMP ;shranem vrednost katero bom pretvarjal
NA_100
movlw .100
subwf TMP,W ;vrednosti odstejem 100
btfss STATUS,C ;je rezultat se vedno pozitiven
goto NA_10 ;ne
movwf TMP ;odsteto vrednost shranem nazaj v TMP
incf CIFRA+2,f ;povecam register z stotico za 1
goto NA_100
NA_10
movlw .10
subwf TMP,W ;TMP odstejem 10
btfss STATUS,C ;je se rezultat pozitiven?
goto NA_1 ;ne
movwf TMP ;odsteti rezultat shranem
incf CIFRA+1,f ;povecam rezultat z desetico
goto NA_10
NA_1
movf TMP,w
movwf CIFRA ;rezultat za enico je ostanek v TMP
return
|
Opis: |
|
 Download |
Ime datoteke: |
stevec.zip |
Velikost datoteke: |
2.72 KB |
Downloadano: |
11 krat |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Maj 21, 2005 10:31 pm Naslov sporočila: |
|
|
Pripenjam še proceduro, kjer sem uporabil tabelo. Kode je znatno manj.
Opis: |
|
 Download |
Ime datoteke: |
stevec2.zip |
Velikost datoteke: |
2.53 KB |
Downloadano: |
14 krat |
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.72 Kraj: Kranj - struževo
|
Objavljeno: Pon Maj 23, 2005 10:55 am Naslov sporočila: |
|
|
Silvo je napisal/a: |
8 bitna pretvorba, ki sem jo prav tako uporabil v proceduri. Mislim, da je še krajša od zgornje Aly-eve |
Princip je isti, le da jaz na koncu še prištejem k rezultatom 48, da dobim ASCII cifro za izpis na LCD
Sicer pa hvala za 16b rutino, jo bom tudi jaz verjetno še rabil.
LP, aly.
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Maj 23, 2005 11:31 am Naslov sporočila: |
|
|
Tale zadnja rutina je pisana tako, da jo brez težav razširiš v še več bitno. Poveča se število registrov za rezultat, razširi se tabela, dodajo se še registri za pretvorbo katere vse enega za drugim "rolaš" desno, povečaš števec .... ja šlo bo tudi kar nekaj dodatnega procesorskega časa
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|