Sari la conținut
ELFORUM - Forumul electronistilor

Conversie string in word


Postări Recomandate

Am un proiect unde de la o tastatura (4x4) introduc 4 cifre. Aceste cifre sunt echivalentul iesirii unui DAC (12b) cu referinta de 4,096V.

 

Sa zicem ca introduc 12,34 ca sa cer DAC-ului sa scoata 1,234V (aproximativ). Am facut partea de program (e in teste) care ia cele 4 cifre introduse (1, 2, 3 si 4) si le transforma intr-un string (1234).

 

Cum fac sa convertesc acest 1234 (string) in 1234 (sau orice valoare) in format word (16b) ca apoi sa i-o comunic DAC-ului? Orice ajutor in pseudo-cod ar ajuta.

 

Partea de program (in Mikrobasic) mai jos. Nu cred ca este relevanta, pentru ca foloseste ceva functii specifice Mikrobasic.

' ******************************* STRING OPERATIONS - TEST BEGINdim msg as string[20]    svar1, svar2, svar3, svar4 as string[3]' ******************************* STRING OPERATIONS - TEST ENDmain program' ******************************* STRING OPERATIONS - TEST BEGIN' Values pre-defined: 0 to 9  var1 = 49 ' ASCII for 1  var2 = 50  var3 = 51  var4 = 52' The LCD will display 12.34 on LCD line #3.  Lcd_Chr(3, 1, var1)      ' Print ASCII value on LCD  Lcd_Chr(3, 2, var2)     Lcd_Chr(3, 3, ".")  Lcd_Chr(3, 4, var3)     Lcd_Chr(3, 5, var4)      var1 = var1 - 48         ' ASCII to byte  var2 = var2 - 48  var3 = var3 - 48  var4 = var4 - 48  ByteToStr(var1, svar1)   ' Byte to string  ByteToStr(var2, svar2)  ByteToStr(var3, svar3)  ByteToStr(var4, svar4)' Prepare message for output - I need to have a 4 char string instead of 12 char string  Ltrim(svar1)             ' Trims the leading 2 spaces of the string, 001 becomes 1  Ltrim(svar2)  Ltrim(svar3)  Ltrim(svar4)   msg = svar1 + svar2 + svar3 + svar4  ' Concatenate the 4 strings  Lcd_Out(4, 1, msg)                   ' Displays on LCD => 1234 instead of "space-space-1-space-space-2-space-space-3-space-space-4"' ******************************* STRING OPERATIONS - TEST END
Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Nu cunosc sintaxa in Microbasic, da la conversie din ascii in numeric inmultesit corespondentu numeric a fiecarei cifre cu puterea lui 10 corespunzatoare. Daca nu ai virgula mobila si ai deja conversia din ascii pe fiecare cifra in var1..var4:

  var_word= var1*1000+var2*100+var3*10+var4

Editat de ventzel
Link spre comentariu
Din tabela cu codurile ASCII se observă că primul caracter tipăribil este spaţiu şi are codul 32 in zecimal.
Caracterele care ne interesează sînt cele de la 48 zecimal = 0 pînă la 57 zecimal = 9.
 
Rutina ar trebui să arate cam aşa, zic şi eu:
 
1. Se stabileşte adresa de memorie unde vor fi stocate caracterele ASCII      EX: MEMASCII  şi se înscrie 4 valori de zero în 4 adrese consecutive = iniţializare conţinut memorie
2. Se încarcă un registru contor cu 4 = numărul de caractere ASCII conţinute de nr.ul tău
3. Se încarcă caracterul ASCII din memorie într-un registru, de exemplu, acumulatorul
4. Se scade 48 din codul ASCII şi se obţine numărul
5. Se depune acest număr la adresa de memorie unde vor fi stocate numerele  MEMNR
6. Se incrementează adresa de memorie     MEMNR = MEMNR + 1
7. Se decrementează contorul
8. Se incrementează adresa de memorie unde sînt stocate caracterele ASCII     MEMASCII = MEMASCII + 1
9. Salt la punctul 3 pînă cînd contorul devine egal cu zero
 
La ieşirea din rutina de mai sus ar trebui să ai cifrele la adresele de memorie consecutive MEMNR şi aplici formula descrisă de ventzel în care var1...var4 sînt cele 4 numere.
Dacă foloseşti numere reale, rutina este puţin mai complicată în sensul că va trebui să trateze separat virgula.
De asemenea, nu este absolut necesar să foloseşti un contor dacă la sfîrşitul numerelor tastate se introduce un cod de control (de exemplu ASCII 13 = ENTER) la detectarea căruia se iese din buclă. În această situaţie se citeşte valoarea şi se ia decizia potrivită, adică dacă codul citit este diferit de 13, se continuă bucla, altfel se iese.
Editat de klaxxon
Link spre comentariu

... da la conversie din ascii in numeric inmultesit corespondentu numeric a fiecarei cifre cu puterea lui 10 corespunzatoare...

And the winner is:

wmsg = (var1-48)*1000 + (var2-48)*100 + (var3-48)*10 + (var4-48)

Ceea ce era evident, daca gandeam un pic  :41 inversul afisarii digit cu digit: 

  ch07 = (adc_rd07 div 1000) mod 10  Lcd_Chr(2, 4, 48+ch07)

Multumesc tuturor pentru ajutor, chiar daca numai mesajul lui @ventzel e citat.

 

LE: Scuze pentru confuzia cu virgula. Vad ca v-ati legat de ea. DAC-ul primeste acest word (wmsg) si scoate la iesire tensiune... cu virgula. Ce voiam era mai simplu decat am explicat eu si v-am ghidat cu informatii inutile.

Editat de thunderer
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări