Totul despre microcontrolere

Dar a doua, nu mai puțin importantă întrebare ("De ce exact?") În acest articol nu există nici un răspuns. În general, se pare că acest autor însuși nu are un răspuns clar la această întrebare.







Sper că cititorul interesat va găsi răspunsul la acest articol în acest articol.

Pentru a înțelege această problemă, este necesar să înțelegem următoarele subiecte adiacente programării: sisteme de numere, fundamentele aritmetice binare și algebra logică.

Permiteți-mi să vă reamintesc că majoritatea MK-urilor folosesc codul binar 8-4-2-1. Este rezumat în Tabelul 1. Toate numerele binare ale acestei tabele sunt de patru biți, adică sunt tetrade.

Tabelul 1. Cod binar 8-4-2-1

Totul despre microcontrolere

Cu codul 8-4-2-1, puteți codifica 10 cifre ale sistemului numeric zecimal și toate cele 16 hexazecimale.

Rețineți tetradurile marcate cu umplere gri. Aceste tetraduri pentru codul zecimal binar sunt în mod evident inutile. Ele sunt uneori numite tetraduri interzise sau pseudotetrade. Când convertiți un cod binar într-unul zecimal binar (pseudotetrad), este necesar să îl scăpați competent. Aceasta este una dintre problemele acestei transformări.

De asemenea, este necesar să ne imaginăm că schimbarea unui număr binar un bit (bit) la stânga este echivalentă cu înmulțirea cu doi.

Exemplu: 1010 0111 = 167
Să mutați un număr binar puțin în stânga și să obțineți de două ori numărul: 1 0100 1110 = 334.

Reamintind toate acestea, suntem gata să studiem în continuare transformarea codului binar într-o metodă zecimală binară a stângii.

Noi trebuie să aibă în vedere faptul că codul BCD nu trebuie să conțină psevdotetrad (a se vedea tabelul 1 ..) și că, la aceleași probleme de conversie cu transferul între tetradelor 1, fiecare - este o zecimală.

Astfel, atunci când se deplasează una dintre cele mai tinere cifre BCD (tetradelor) următorul rang superior (ciugulitură următoare), numărul de unități „pierdute“ 6, ca factor de ponderare a acestei descărcare 10, și într-un sistem numeric binar și (prea și hexazecimal), este 16. Astfel, deplasarea spre stânga numărul necesar pentru a produce corecția corespunzătoare pentru a obține rezultatul corect.

Luăm un număr binar arbitrar de opt cifre. De exemplu: 11101101 (în sistemul zecimal este 237, iar în hexazecimal - EDh). Apoi vom "muta" acest număr binar de la dreapta la stânga, în așa-numita rețea de biți zecimale binare, producând corecția necesară conversiei.

Primele trei schimburi pentru acest număr pot fi făcute "fără durere", fără nici o corecție. Cifra de ordin inferior al grilei zecimale binare este numerotată 7.
Următorul al patrulea schimb va dubla (amintiți-vă că schimbarea stânga este înmulțirea cu două): 1110 = 14
Am primit un tetrad interzis (pseudotetrad). Pentru a scăpa de pseudo-cuvântul "a scăpa", trebuie adăugat numărul 6 (110 în sistemul binar).
Să facem această operațiune: 1110 + 110 = 10100. Amintiți-vă că numărul obținut nu este un număr binar simplu, ci un număr binar-zece. Coeficientul de greutate al celui mai mare bit al său nu este 16, dar 10. Deci, numărul zecimal binar 10100 va fi egal cu numărul zecimal 14. Se face corecția.






În practică, se folosește o metodă mai convenabilă și mai universală de corecție. Esența lui este că corectarea se efectuează până la a patra schimbare și apoi numai atunci când este necesar. Faptul este că, după a treia schimbare, puteți decide cu siguranță dacă următoarea schimbare de pseudo-tetrad sau nu. Permiteți-mi să vă reamintesc că pseudo-tetradele apar pentru numere mai mari de nouă. Acest lucru înseamnă că, în cazul în care după a treia schimbare în cele trei LSB este un număr binar care nu este mai mare de 4 (100), apoi, după ce apare următoarea psevdotetrada schimbare. Psevdotetrady apar atunci când, înainte de a patra schimbare (adică, înainte de următoarea prin multiplicarea 2) în grila BCD va fi orice număr de ≥5 (101), la fel ca în cazul nostru, a fost 7. Pentru a pune în aplicare corecția la a patra schimbare necesară:

  1. Verificați numărul din cei trei biți inferiori ai grila BCD.
  2. Dacă este mai mică de 5, atunci nu efectuați o corecție.
  3. Dacă este ≥5 (101), atunci trebuie adăugat 3 (011).

Acest al treilea caz pe care tocmai îl observăm.
Continuați, adăugați un număr de trei și efectuați al patrulea schimb.

Rețineți, în grila zecimală binară după a patra schimbare, avem numărul 10100, adică de asemenea, numărul 14, ca atunci când se adaugă 6 după a patra schimbare în metoda de corecție considerată anterior.
De ce se întâmplă acest lucru?
Răspunsul este simplu. Cu schimbarea stânga, există o dublare atât a numărului corectat cât și a numărului corectat (3 × 2 = 6). Din punct de vedere matematic, metodele sunt echivalente.
Facem schimbarea a 5-a.

Totul despre microcontrolere

Rețineți că tetradul cel mai mic al unui număr zecimal binar este 1001 = 9, ceea ce este destul de acceptabil. Inutil număr BCD 101001 = 29. La următoarea schimbare fără număr de corecție rândul său, 1010011 = 53, și ar trebui să fie posibilă 29 × 2 = 58. Eroare luat naștere corectă în cazul în care, înainte de trecerea pentru a adăuga numărul de ture „numărul magic“ 3.

Totul despre microcontrolere

A apărut o nouă situație. În număr BCD LSnibble „expus“ numărul 9 (1001), iar în mijloc este 5 (101), mai precis 50 (vezi. Greutățile de biți din acest deceniu).
Aceasta înseamnă că înainte de următoarea schimbare este necesar să se facă corecția nu numai a celui mai tânăr tetrad, ci și a celui mai apropiat tetrad. Pentru a corecta tetradul mai tânăr, 3 ar trebui adăugat la acesta și pentru corecția tetradului mijlociu, 30, care se face mai jos.

Totul despre microcontrolere

Acum LSnibble este numărul 8 (1000), ceea ce înseamnă că următoarea (ultima) schimbare în absența corecției 1 muta la următoarea ciuguli să se descarce cu un factor de ponderare 10, în loc de 16 cum ar fi într-un număr binar convențional. Prin urmare, înainte de a treia tranziție la cel mai mic tetrad, trebuie să adăugați 3.

Totul despre microcontrolere

Se termină conversia numărului binar la zecimale binare. Codul zecimal binar al numărului zecimal de trei cifre 237
(10 0011 0111), dar aceasta este pe hârtie, în teorie. Într-un microcontroler real, totul pare similar, dar într-o oarecare măsură diferit. Dacă numai pentru că nu există registre de patru biți (patru biți) și este atribuit un registru complet pentru fiecare zecimală binară. Pentru familia de mijloc MK PIC (și nu numai) este de 8 biți. În tetradul mai vechi al acestui registru ar trebui să existe întotdeauna zerouri (0000). Acest lucru complică oarecum algoritmul de transformare.

Înțelegând toate acestea, este mult mai ușor să înțelegeți orice subrutină de conversie a unui număr binar într-o metodă zecimală binară a stângii.
Una dintre cele mai bune, în opinia mea, astfel de subrutine este subrutina universală a lui Alexei Cherepanov, care poate fi găsită aici.







Articole similare

Trimiteți-le prietenilor: