Sunteți pe pagina 1din 5

CONVERSIA ZECIMAL / BINAR / HEXAZECIMAL

Pentru ca n finalul leciei de azi s revenim cu cteva precizri legate tot de Configuration Word, poate c este necesar s facem o scurt ramificaie n cursul discuiei... Deoarece este (mai ales) o lucrare pentru nceptori, ne vom opri puin asupra conversiei zecimal / binar. tim deja din clasele mici c orice numr se poate reprezenta n zecimal (baza de numeraie 10), dar la fel de bine i n binar (baza de numeraie 2) sau hexazecimal (baza de numeraie 16). Dac sistemul de numeraie zecimal pare pentru toi cel mai natural posibil - i este de neles care este motivul (prezena celor 10 degete la mini, primul instrument istoric de numrare) - celelalte dou sisteme sunt extrem de utilizate n tiina i arhitectura computerelor. Ca o convenie asupra notaiei, n cele ce urmeaz, prin: - 23 sau D '23' vom nelege un numr zecimal - 10001 sau B '10001' - vom nelege un numr binar - 3FFF sau H '3FFF' (sau 0x3FFF / 0X3FFF) vom nelege un numr hexazecimal Muli dintre dvs. probabil tiu deja c sunt convenii de notare folosite i n MPLAB (cele din paranteze fiind folosite i n limbajul C). Dac ar fi s exprimm algoritmul de conversie zecimal / binar sub forma unui program scris n (pseudo) pseudo-cod, acesta ar avea forma (recunosc c nu este prea riguros exprimat): citete numrul; ctul = numrul / 2; restul = numrul % 2; ct timp (ctul <> 0) { ctul = numrul / 2; restul = numrul % 2; } ... se formeaz numrul binar prin citirea resturilor obinute de la coad la cap; Pentru a ne lmuri, vom lua dou exemple. Primul exemplu (numrul zecimal 10): 10 / 2 = 5 rest 0 5/2=2 rest 1 2/2=1 rest 0 1/2=0 rest 1 este prima cifr a numrului binar => B '1010' = D '10' Al doilea exemplu (numrul zecimal 15): 15 / 2 = 7 rest 1 7/2=3 rest 1 3/2=1 rest 1 1/2=0 rest 1 este prima cifr a numrului binar => B '1111' = D '15'

Conversia din zecimal n hexazecimal se face absolut la fel, doar mprirea se face la 16 i nu la 2! Ceea ce este important, remarcm c peste cifra 9 nu mai avem cifre i trebuie s completm. n acest sens, vom avea (Tabelul 1): 0000 (sau B '0000') = D '0' = H '0' 0001 (sau B '0001') = D '1' = H '1' 0010 (sau B '0010') = D '2' = H '2' 0011 (sau B '0011') = D '3' = H '3' 0100 (sau B '0100') = D '4' = H '4' 0101 (sau B '0101') = D '5' = H '5' 0110 (sau B '0110') = D '6' = H '6' 0111 (sau B '0111') = D '7' = H '7' 1000 (sau B '1000') = D '8' = H '8' 1001 (sau B '1001') = D '9' = H '9' 1010 (sau B '1010') = D '10' = H 'A' 1011 (sau B '1011') = D '11' = H 'B' 1100 (sau B '1100') = D '12' = H 'C' 1101 (sau B '1101') = D '13' = H 'D' 1110 (sau B '1110') = D '14' = H 'E' 1111 (sau B '1111') = D '15' = H 'F' Un punct important care trebuie atins (veti vedea, cu aplicabilitate direct asupra Configuration Word), este conversia binar / hexazecimal. Cei mai muli dintre dvs., probabil tiu deja de ce este foarte util: n lipsa acesteia, ar trebui s lucrm cu numere kilometrice binare, foarte greu de manevrat. n cele ce urmeaz, tocmai pentru a face conversiile mai lizibile, ntre grupele de 4 cifre binare vom folosi drept separatoare caractere underscore (ca o remarc, JALv2 permite asta, exact n acest scop). Avem urmtorul numr: 11_1111_1111_1111. Deoarece prima grup de 4 cifre (cea mai din stnga, sau cea mai semnificativ) este incomplet, vom completa cu dou zero-uri. Numarul devine 0011_1111_1111_1111, iar n acest moment, pentru a face conversia n hexazecimal, este suficient s privim Tabelul 1 (pornim de la stnga la dreapta): pentru grupa 0011 => H '3' pentru grupa 1111 => H 'F' pentru grupa 1111 => H 'F' pentru grupa 1111 => H 'F' Prin alturare va rezulta simplu, numrul H '3FFF', numr care, dac vei citi cu atenie foaia de catalog a dispozitivului, vei constata c este scris implicit drept cuvnt de configurare... Astfel, n capitolul Special features of the microcontroller, fabricantul precizeaz: biii de configurare pot fi programai (citii ca 0 logic) sau pot fi lsai neprogramai (citii ca 1 logic) pentru a selecta diverse variante de configurare de dispozitiv. Cu alte cuvinte, lsarea biilor de configurare n starea implicit ar nsemna ca toi acetia pot fi citii drept 1, ceea ce n hexa ar nsemna chiar 3FFF! Trebuie ns spus c pstrarea acestora n starea implicit, nu este ntotdeauna favorabil...

REGISTRUL DE CONFIGURARE
n lecia de data trecut am vzut c o caracteristic a familiei microcontrollerelor PIC oarecum neobinuit n comparaie cu alte microcontrollere - este implementarea propriului registru de configurare. Biii registrului sunt utilizai pentru a activa componente hardware (sau pentru a configura stri hardware). Acest cuvnt de dimensiunea instruciunii, care este plasat "n afara" zonei de memorie program la microcontrollerele din gamele low-end (familiile 10Fxx / 12Fxx) i mid-range (familia 16Fxxx), este responsabil pentru specificarea: - modului de oscilator folosit - proteciei codului n memoria program - parametrilor de reset - activrii / inhibrii Watchdog timer-ului - implementrii modului de depanare (la microcontrollerele PIC evoluate din gama medie 16F87x) Am spus deja c este recomandabil ca valoarea pentru registrul de configurare s fie scris atunci cnd dispozitivul este programat. n componentele din gamele tip low-end i midrange trebuie precizat faptul c biii de configurare nu pot fi accesai de aplicaie. n timpul programrii, program counter-ul (PC numrtorul de program care conine adresa instruciunii curente, registru esenial pentru rularea programului de aplicaie vom reveni) este utilizat pentru a accesa adresa registrului de configurare al microcontrollerului. Pentru dispozitivele din clasa medie (mid-range - care fac obiectul acestui tutorial), registrul de configurare este ntotdeauna la adresa 0x2007. Ca o remarc, la dispozitivele din clasa nalt (high-end), mecanismele implementate pot s difere foarte mult. La PIC 17Cxx, cuvntul de configurare fiind lung, registrul este situat la adresele 0x0FE00 pn la 0x0FE07 (pentru octetul low) i la adresele 0x0FE08 pn la 0x0FE0F (pentru octetul high) iar aceste registre pot fi accesate n timpul executrii aplicaiei. Fiecare fiier .inc de dispozitiv din MPLAB curinde o list de parametri pentru diferite opiuni. Aceti parametri sunt folosii cu directiva __ CONFIG in fiierul de asamblare. n fapt, directiva __CONFIG este folosit pentru a face o operaie de tip I logic (logical AND) cu constantele precizate n fiierul de includere (.inc). Dup cum am spus, lsarea biilor neprogramai (1 logic) va avea drept consecin scrierea valorii H '3FFF' in registru. Programarea anumitor bii (echivalent trecerii lor n 0 logic conform precizrii fabricantului) va da o alt valoare acestui cuvnt de configurare. n cele ce urmeaz, vom incerca s o calculm noi nine... Pentru simplitate putem lua ca exemplu mai nti, tot MCU PIC 16F84A. Vei constata n timp faptul c informaiile acumulate despre un anume microcontroller se motenesc la un dispozitiv superior, iar efortul de nvare este evolutiv. Dup ce ne vom familiariza cu 16F84A, vom lua si exemple mai consistente (PIC 16F877A i PIC 16F648A). Finalul fiierului de includere al PIC 16F84A arat astfel:

P16F84A.inc file ; -----------_CP_ON _CP_OFF _PWRTE_OFF _PWRTE_ON _WDT_ON _WDT_OFF _LP_OSC _XT_OSC _HS_OSC _RC_OSC

EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU

H '000F' H '3FFF' H '3FF7' H '3FFF' H '3FFF' H '3FFB' H '3FFC' H '3FFD' H '3FFE' H '3FFF'

; linia 1 ; linia 2 ; linia 4 ; linia 5 ; linia 6 ; linia 7 ; linia 8 ; linia 9 ; linia 10 ; linia 11

Observai c pentru fiecare opiune, exist o valoare cu toi biii setai (1 logic), corespunztor setrii implicite. Prin operaia AND logic al valorilor parametrilor, biii programai ar trebui s fie cei specificai corect. Reamintim tabelul de adevr al operaiei I logic: xy 00 01 10 11 AND 0 0 0 1

La momentul elaborrii PIC 16F84, cuvntul de configurare proiectat nu a definit toi biii de configurare, n forma n care i tim astazi, de exemplu de la PIC 16F877A. Unii dintre ei au rmas rezervai, dar neimplementai aceasta fiind o practic utilizat i n acest moment. La acel timp doar anumite faciliti erau implementate pe cip (proiectantul va rezerva ntotdeauna bii pentru dezvoltri ulterioare ale familiei sau gamei): - protecia codului (prin biii CP n poziiile 13, 12 ... 4)
bit13 bit0

CP CP CP CP CP CP CP CP CP CP PWRTE 1 1 1 1 1 1 1 1 1 1 1

WDTE FOSC1 FOSC0 1 1 1

Posibile valori pentru bitul CP: 1 protecia codului dezactivat (opiunea implicit - conduce la 11_1111_1111_1111 = H '3FFF') Obs.: Se observ identitatea valorii cu cea de pe linia 2 a fiierului de includere. 0 - protecia codului activat (conduce la 00_0000_0000_1111 = H '000F') Obs.: Se observ identitatea valorii cu cea de pe linia 1 a fiierului de includere.

- activarea WDT (prin bitul WDTE n poziia 2)


bit13 bit0

CP CP CP CP CP CP CP CP CP CP PWRTE 1 1 1 1 1 1 1 1 1 1 1

WDTE FOSC1 FOSC0 1 1 1

Posibile valori pentru WDTE:

1 WDT activat (opiunea implicit - conduce la 11_1111_1111_1111 = H '3FFF') Obs.: Se observ identitatea valorii cu cea de pe linia 6 a fiierului de includere. 0 - WDT dezactivat (conduce la 11_1111_1111_1011 = H '3FFB') Obs.: Se observ identitatea valorii cu cea de pe linia 7 a fiierului de includere.

- activarea temporizatorului start-up (prin bitul PWRTE n poziia 3)


bit13 bit0

CP CP CP CP CP CP CP CP CP CP PWRTE 1 1 1 1 1 1 1 1 1 1 1

WDTE FOSC1 FOSC0 1 1 1

Posibile valori pentru PWRTE 1 PWRTE dezactivat (opiunea implicit - conduce la 11_1111_1111_0111 = H '3FF7') Obs.: Se observ identitatea valorii cu cea de pe linia 4 a fiierului de includere. 0 - PWRTE activat (conduce la 11_1111_1111_1011 = H '3FFF') Obs.: Se observ identitatea valorii cu cea de pe linia 5 a fiierului de includere.

- tipurile de oscilator (biii FOSC1:FOSC0 n poziiile 1 i 0)


bit13 bit0

CP CP CP CP CP CP CP CP CP CP PWRTE 1 1 1 1 1 1 1 1 1 1 1

WDTE FOSC1 FOSC0 1 1 1

Posibile valori pentru FOSC1:FOSC0 11 oscilator RC extern (opiunea implicit - conduce la 11_1111_1111_1111 = H '3FFF') 10 oscilator HS (high speed - conduce la 11_1111_1111_1110 = H '3FFE') 01 - oscilator XT (extended - conduce la 11_1111_1111_1101 = H '3FFD') 00 oscilator LP (conduce la 11_1111_1111_1100 = H 'FFFC') Obs.: Se observ identitatea valorilor cu cele de pe liniile respectiv - 11, 10, 9 i 8 ale fiierului de includere. nc un aspect interesant: opiunea implicit a oscilatorului este cea cu reea RC extern.

Continuarea n lecia urmtoare, care va urma foarte curnd...

S-ar putea să vă placă și