|
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
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
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'