Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Microcontroler - Unitatea de Procesare Centrala

Microcontroler - Unitatea de Procesare Centrala

Unitatea de procesare centrala (CPU) este creierul microcontrolerului. Aceasta parte este responsabila cu gasirea si aducerea (citirea din memorie)-fetching instructiunii corecte ce trebuie executata, cu decodarea acelei instructiuni, si in final cu executarea ei.

Unitatea de procesare centrala conecteaza toate partile microcontrolerului intr-un intreg. Desigur, functia sa cea mai importanta este sa decodeze instructiunile de program. Cand programatorul scrie un program, instructiunile au o forma clara ca MOVLW 0x20. Totusi, pentru ca microcontrolerul sa inteleaga aceasta, aceasta forma de 'scrisoare' a unei instructiuni trebuie tradusa intr-o serie de zero-uri si unu-uri ce se numeste 'opcode'. Aceasta tranzitie de la o scrisoare la o forma binara este facuta de translatori ca translatorul assembler (cunoscut ca si assembler sau asamblor). Instructiunea astfel adusa-fetched din memoria programului trebuie sa fie decodata de unitatea de procesare centrala. Putem apoi selecta din tabela tuturor instructiunilor un set de actiuni ce executa o sarcina desemnata definita de instructiune. Pentru ca instructiunile pot sa contina in ele asignari ce cer diferite transferuri de date dintr-o memorie in alta, din memorie la porturi, sau alte calcule, CPU trebuie sa fie conectata cu toate partile microcontrolerului. Aceasta este posibil printr-un bus de date si un bus de adrese.



Unitatea de Logica Aritmetica (ALU)

Unitatea de logica aritmetica este responsabila de executarea operatiilor ca adunarea, scaderea, mutarea (la stanga sau la dreapta intr-un registru) si de operatiile logice. Mutarea datelor intr-un registru se mai numeste 'shifting'- transferare. PIC16F84 contine o unitate logica aritmetica de 8 biti si registri de lucru de 8 biti.

In instructiunile cu doi operanzi, in mod obisnuit un operand este in registrul de lucru (registrul W), iar celalalt este unul din registri sau o constanta. Prin operand intelegem continutul asupra caruia se fac unele operatii, iar un registru este oricare din registrii GPR sau SFR. GPR este o prescurtare de la 'General Purposes Registers'-Registri cu Scopuri Generale, iar SFR de la  'Special Function Registers'-Registri cu Functie Speciala. In instructiunile cu un operand, un operand este fie registrul W fie unul din registri. Pe langa operatiile aritmetice si logice, ALU controleaza bitii de stare (biti gasiti in registrul STATUS). Executarea unor instructiuni afecteaza bitii de stare, de care depinde rezultatul insusi. Depinzand de ce instructiune este executata, ALU poate afecta valorile bitilor Carry (C), Digit Carry (DC), si Zero (Z) in registrul STATUS.

Registru STATUS



bit 0 C (Carry) Transfer
Bit care este afectat de operatiile de adunare, scadere si transfer.  
1= transferul produs din bitul cel mai inalt al rezultatului
0= transferul nu s-a produs
Bitul C este afectat de instructiunile ADDWF, ADDLW, SUBLW, SUBWF.

bit 1 DC (Digit Carry) DC Transfer
Bit afectat de operatiile de adunare, scadere si transfer. Spre deosebire de bitul C, acest bit reprezinta transferul din al patrulea loc rezultat. Este setat de adunare cand se intampla un transport de la bitul 3 la bitul 4, sau de scadere cand se intampla imprumut de la bitul 4 la bitul 3, sau de transfer in ambele directii.
1= transfer produs la al patrulea bit conform cu ordinea, al rezultatului.
0= transferul nu s-a produs
Bitul DC este afectat de instructiunile ADDWF, ADDLW, SUBLW, SUBWF.

bit 2 Z (Zero bit) Indicarea unui rezultat zero.
Acest bit este setat cand rezultatul unei operatii aritmetice sau logice executate este zero. 
1= rezultatul egal cu zero
0= rezultatul nu este egal cu zero

bit 3 PD (Power-down bit)
Bit ce este setat cand microcontrolerul este alimentat atunci cand incepe sa functioneze, dupa fiecare reset obisnuit si dupa executarea instructiunii CLRWDT. Instructiunea SLEEP il reseteaza cand microcontrolerul intra in regimul consum/uzaj redus. Setarea lui repetata este posibila prin reset sau prin pornirea sau oprirea sursei. Starea poate fi triggerata de asemenea de un semnal la pinul RB0/INT, de o schimbare la portul RB, de terminarea scrierii in EEPROM-ul de date intern, si de watchdog de asemenea.
1= dupa ce sursa a fost pornita
0= executarea instructiunii SLEEP

bit 4 TO Time-out ; depasirea-overflow watchdog-ului.
Bitul este setat dupa pornirea sursei si executarea instructiunilor  CLRWDT si SLEEP. Bitul este resetat cand  watchdog-ul ajunge la sfarsit semnaland ca ceva nu este in ordine.
1= depasirea-oveflow nu s-a produs
0= depasirea-overflow s-a produs

bit6:5 RP1:RP0 (Register Bank Select bits-Biti de Selectare a Bancului de Registri)
Acesti doi biti sunt partea superioara a adresei la adresarea directa. Pentru ca instructiunile ce adreseaza memoria direct au doar sapte biti, ei au nevoie doar de inca un bit pentru a adresa cei 256 bytes adica cati are PIC16F84. Bitul  RP1 nu este folosit, dar este lasat pentru expansiuni viitoare ale acestui microcntroler. 
01= primul banc
00= bancul zero

bit 7 IRP (Register Bank Select bit-Bit de Selectare a Bancului de Registri) 
Bit al carui rol este de a fi al optulea bit la adresarea indirecta a RAM-ului intern.
1= bancul 2 si 3
0= bancul 0 si 1 (de la 00h la FFh)

Registrul STATUS contine starea aritmetica ALU (C, DC, Z),  starea RESET (TO, PD) si bitii pentru selectarea bancului de memorie (IRP, RP1, RP0).  Considerand ca selectia bancului de memorie este controlata prin acest registru, el trebuie sa fie prezent in fiecare banc. Bancul de memorie se va discuta mai in detaliu in capitolul Organizarea memoriei. Registrul STATUS poate fi o destinatie pentru orice instructiune, cu oricare alt registru. Daca registrul STATUS este o destinatie pentru instructiunile ce afecteaza bitii Z, DC or C, atunci scrierea in acesti trei biti nu este posibila. 

Registrul OPTION





bit 0:2 PS0, PS1, PS2 (Prescaler Rate Select bit-Bit Selectie Rata Prescaler)
Acesti trei biti definesc bitul de selectie a ratei prescalerului. Ce este un prescaler si cum pot afecta acesti biti functionarea unui microcontroler va fi explicat in sectiunea depre TMRO.

bit 3 PSA (Prescaler Assignment bit-Bit de Asignare Prescaler)
Bit ce asigneaza prescalerul intre TMRO si watchdog.
1= prescalerul este asignat watchdogului
0= prescalerul este asignat timer-ului liber (ree-run) TMRO

bit 4 T0SE (TMR0 Source Edge Select bit-Bit Selectie a Frontului Sursei TMR0)
Daca este permis de a se triggera TMRO prin impulsurile de la pinul RA4/T0CKI, acest bit determina daca aceasta va fi la frontul descrescator sau crescator al unui semnal. 
1= front crescator
0= front descrescator

bit 5 TOCS (TMR0 Clock Source Select bit-Bit Selectie Sursa Ceas TMR0)
Acest pin permite timerului liber (free-run) sa incrementeze starea lui fie de la oscilatorul intern la fiecare ¼ a ceasului oscilatorului, fie prin impulsuri externe la pinul  RA4/T0CKI.
1= impulsuri externe
0= ceas intern 1/4

bit 6 INTEDG (Interrupt Edge Select bit-Bit de Selectie a Frontului Intrerupere)
Daca intreruperea este activata este posibil ca acest bit sa determine frontul la care o intrerupere va fi activata la pinul RB0/INT.
1= front crescator
0= front descrescator

bit 7 RBPU (PORTB Pull-up Enable bit-Bit Enable-Activare Pull-up PORTB) 
Acest bit porneste si opreste rezistorii interni 'pull-up'-scoatere la portul B.
1= Rezistori oprire 'pull-up'
0= Rezistori pornire 'pull-up'