Conversie de format - materiale utile - electronică și automatizare pe microni

În viața de zi cu zi avem de-a face cu numere obișnuite 0 - 9, din care există un număr semnificativ - din două cifre, format din trei cifre, patru, cinci, șase, opt, douăzeci, etc. -valued. Aceste numere sunt reprezentate în așa-numita reprezentare zecimală. De ce este așa? Deoarece pentru a reprezenta orice număr de utilizări 10 cifre - de la 0 la 9. Știm din copilărie, acest format, dar nu cred că este zecimală. Este mai convenabil pentru noi să lucrăm cu el.

Cu toate acestea, suntem implicați în programarea microcontrolerelor, cu care este mult mai convenabil să lucrați folosind alte formate de numere - binare și hexazecimale. Să ne ocupăm mai mult de ele.

După cum probabil ați ghicit deja, numele lor se formează din numărul de cifre utilizate pentru a reprezenta aceste numere. Așa este! Formatul binar înseamnă funcționarea cu numai două cifre - zero și una.

Acest format pe care îl folosim în mod obișnuit atunci când lucrăm cu porturile și registrele microcontrolerului, deoarece această metodă de reprezentare a numărului pentru ele este cea mai convenabilă - vedem imediat ce bit al portului sau registrului este setat și care este resetat. Registrele și porturile sunt de obicei opt biți. Numerele în format binar au, de asemenea, o lungime de 8 biți, dar uneori nesemnificative zerouri de conducere nu sunt scrise.

Pentru a înțelege modul în care se formează un număr binar, să examinăm următorul exemplu:

Luăm orice număr. Pentru a nu complica, pentru început, lăsați să fie numărul 183. În format binar, același număr va arăta ca% 10110111

"%" Este folosit pentru a desemna un număr binar.

De ce așa, întrebi? Deoarece crearea unui număr binar se bazează pe două, ridicate la puterea numărului poziției de zero sau unul din numărul binar. Poate că este scris înfricoșător, dar, de fapt, nimic complicat. Toată lumea știe cum să ridice un număr la o putere, așa cred. Formula pentru conversia unui număr binar în zecimal este:

Adică, înmulțind cu 0 dă zero și înmulțind cu o unitate de două în puterea numărului de poziție dă un anumit număr. Le adăugăm și obținem întregul rezultat. Transformarea inversă se realizează prin împărțirea cu 2.

De obicei, un număr hexazecimal este scris sub forma a două caractere.

Să ne întoarcem la oile noastre, mai precis, la numărul luat pentru un exemplu - 183

După cum am văzut deja, în format binar seamănă cu% 10110111

Acum, pentru a obține un număr hexazecimal, găsim din tabel cea mai mare nibble (% 1011) din acest număr și cel mai mic nibble (% 0111). Și vom compune numărul în format hexazecimal - $ B7

E simplu! Cu acest format este mai convenabil să scrieți numere mari, deoarece acestea ocupă mai puțin spațiu. Când programați microcontrolerul, încărcați programul în acest format. Se numește un fișier HEX.

Deci, ne-am familiarizat cu principalele formate de reprezentare a datelor - sistemele de calcul. În practică, există cazuri în care trebuie să convertiți numerele într-un format special. Pare a fi unul, dar nu chiar. Aceasta înseamnă că apare fie în binar, fie în zecimal sau în formă hexazecimală, dar poartă o sarcină semantică puțin diferită. Acesta este un format zecimal codat binar sau, cu alte cuvinte, un format BCD (format zecimal binar). În această formă, fiecare cifră zecimală (!) Este scrisă ca un binar binar. Știm că o nibble poate lua maximum 16 valori. Și nu avem nevoie de prea mult. Avem nevoie de numai 10 valori - de la 0 la 9.

Plecând de la toate cele de mai sus, avem:

Numărul 183 în format zecimal codat binar va arăta

Dacă transformăm acum numărul rezultat înapoi într-un format zecimal, atunci obținem un rezultat complet diferit

În practică, avem de obicei nevoie de numere cu două zecimale semnificative - de obicei, un ceas în timp real. Acolo operăm cu numere de la 0 la 59. Adică - două cifre semnificative. Aici vom începe din acest exemplu.

Nu vom fi atașați la o anumită sintaxă, deoarece operațiile vor fi aceleași pentru orice compilator de bază.

Deci, hai să avem patru variabile:

BCDOUT - o variabilă de tipul Byte pentru stocarea rezultatului conversiei de la numărul binar la formatul BCD

BCDIN - tip Byte variabilă, care conține valoarea care urmează să fie convertite din format binar în BCD (sau altele) (imediat amintiți că acest număr scris ca număr zecimal reprezintă un număr scris în binar codificat format zecimal)

BININ - o variabilă de tip Byte, care conține o valoare binară pentru conversia în BCD (o vom scrie în formă zecimală pentru comoditate)

BINOUT - o variabilă de tipul Byte, care va conține rezultatul conversiei de la BCD la format binar

Variabilele BININ și BCDIN atribuie valori (bine, să presupunem că am luat USART aceste două numere):

BCDIN = 47 'Fie 47 de minute în format zecimal codat binar

BININ = 23 'Să fie 23 de ore

  • Vom converti formatul zecimal binar la binar:

Pentru a înțelege mai bine procesul, să ne imaginăm numerele inițiale în format binar. Fiți atenți la iluminarea din spate a nibblelor pentru a înțelege ce se întâmplă cu ei

BINOUT = BCDIN >> 4 'Deplasați șuvița senior în poziția cea mai de jos și obțineți BCDOUT numărul 2 (% 00000010). Înmulțește-l cu 10. Deoarece extragem cea mai mare nibble care conține zeci de numere. BINOUT = BINOUT * 10 'Acum avem numărul 20 (% 00010100) Acum extrageți cârligul inferior. Acest lucru se face simplu: o logică logică AND este executată cu numărul% 00001111 (sau $ 0F). O valoare bitwise AND cu zero va reveni 0 și cu una, care a fost înainte de această operație logică. BCDIN = BCDIN $ 0F 'Obțineți numărul% 00001111 (sau 15 în caz contrar) - Am egalat cea mai înaltă nibble a variabilei BCDIN cu zero Acum adăugăm două numere:

Întreaga operațiune poate fi scrisă într-o singură linie:

BINOUT = ((BCDIN >> 4) * 10) + (BCDIN $ 0F). dar este mai bine să o împărțiți în mai multe linii, deoarece în această formă operațiunea necesită mai multă memorie program

  • Acum convertiți de la binar la binar-la-zecimal.
BININ =% 00010111

Pe măsură ce fiecare ciuguli a format BCD conține o cifră, și știm că numărul nostru binar - două cifre, avem nevoie pentru a prelua numărul zece și numărul de unități, și apoi din ele un număr BCD.

Pentru a extrage zeci, divizăm pur și simplu numărul binar cu 10

Obținem numărul 2. Deoarece cel mai tânăr 3 este aruncat în divizie (avem de-a face cu matematica întregului).

Acum numărul nostru arată ca% 00000010.

Dar avem o duzină de ele! Așadar, trebuie să-l mutăm la vârstnicul superior:

Acum, pentru a extrage numărul mai mic (numărul de unități este de 3), trebuie să efectuăm o operație numită Modul în Picbasic. Această operație returnează restul diviziunii, dar nu cea pe care am crezut-o. Înainte de aceasta, am împărțit numărul 23 cu 10 și am 2. Acum obținem numărul 3 - ceea ce a rămas din diviziunea obișnuită cu 10

Acum vom forma un număr zecimal binar:

BCDOUT = BCDOUT + BININ = 32 + 3 = 35 este un număr în reprezentarea codată binar - aceasta nu este aceeași cu rezultatul din exemplul superior.

Din nou, tot ceea ce este scris mai sus, vă puteți încadra într-o singură linie.

BCDOUT = ((BININ / 10) <<4 ) + ( BININ // 10 )

Dar practica arată că, dacă spargeți această expresie în expresii separate, scurte, atunci vor lua mult mai puțină memorie de program.

Totuși, ar fi de dorit să notăm mai ales că formatul zecimal binar nu este un sistem de calcul. Acesta este formatul de reprezentare a numerelor. Numărul în acest format poate fi scris atât în ​​sisteme binare, hexazecimale și zecimale. Nu uitați că acest număr înseamnă și în ce formă este înregistrată.

Articole similare