Documente Academic
Documente Profesional
Documente Cultură
Această porţiune include ALU şi registrul acumulator. Regiştrii de intrare nu sunt accesibili
direct utilizatorului, dar aducerea din memorie se poate face aparent direct în ALU pentru
operaţii cu variabile stocate în acumulator şi respectiv în memorie, cu instrucţiuni de forma:
adrese
Numărător de RAM FSR
Program (PC)
EPROM MUX
memorie Adrese
program 4k
x 14 biţi
Stivă pe 8 Registru de
niveluri 13 biţi Registru de stare
instrucţiuni
14 8 Diverse
14 periferice
MUX
8
Decodare A B
8
instrucţiuni ALU
8
W Magistrala
de date
Acest circuit este partea centrală a oricărui sistem de calcul. Aici se efectuează
operaţiile logice (ŞI, SAU, SAU exclusiv, complementarea) şi aritmetice de bază (adunarea,
incrementarea cu 1, scăderea, scăderea unei unităţi). Deoarece aceste operaţii sunt, în
majoritatea lor, operaţii binare, un circuit ALU (un ALU, pe scurt), are nevoie de o
memorie proprie, în care să se păstreze cei doi operanzi, precum şi rezultatul. Circuitele de
memorie specifice se numesc regiştri ALU şi se notează uzual A, B şi Acc sau W (Acc
reprezintă prescurtarea “acumulator”, loc în care se ‘acumulează’ rezultatul operaţiei).
Schema acestei memorii locale (regiştri) a ALU este ilustrată în fig. 2. O particularitate a
registrului acumulator este că el poate transfera datele (rezultatele) direct primului registru
de intrare, A. În acest fel, rezultatul poate deveni, imediat, dată de intrare.
Operaţii aritmetice şi logice realizate cu microcontrolere PIC. ALU şi regiştri 21
Regiştri de
Registrul A Registrul B
intrare
de la Acc numai la A.
Ultima regulă este valabilă numai la unele procesoare1; multe procesoare fac accesibil
registrului B datele din acumulator prin intermediul unui multiplexor (de ex., PIC16F84A)
(vezi fig.3).
1
Toate regulile pot avea excepţii, mai ales pentru procesoarele proiectate “la
comandă”, pentru aplicaţii specifice.
22 Elemente de utilizare a micro-controlerelor
Horia-Nicolai Teodorescu
Multiplexor
Registrul A Registrul B
ALU
Registrul
acumulator
Multiplexor
Registrul A Registrul B
ALU Circuit
I/O
Registru
acumulator
Modul efectiv de lucru al ALU este dictat (prin program) prin intermediul unei setări
menţinute de un registru de instrucţiuni.
Operaţii aritmetice şi logice realizate cu microcontrolere PIC. ALU şi regiştri 23
Instrucţiuni – o introducere
Controlerele PIC MICROCHIP sunt controlere de tip RISC, deci au un set redus de
instrucţiuni. Prezentăm introductiv câteva instrucţiuni folosite în lucrare. Acestea sunt:
MOVF f, d
Exemplu:
movf R1, 0 ; d = 0 indică ca destinaţie acumulatorul
; copie conţinut registru R1 în w
movf R1, 1 ; d = 1 indică ca destinaţie registrul R
; copie conţinut R1 tot în R1
;scop instrucţiune – setare flag zero Z (se va vedea ulterior)
movf R1 ; valoare implicită d = 1
MOVLW const
Exemplu:
movlw 92h ; pune valoarea 92h în w
MOVWF f
Exemplu:
movwf TempR_2 ; pune conţinut w în registrul notat TempR_2.
Instrucţiunile pot avea efect asupra unui întreg octet (byte) sau asupra unui singur bit,
specificat, dintr-un octet. Trei instrucţiuni aritmetice întâlnite în această lucrare sunt:
CLRW (clear W)
Această instrucţiune are efect asupra acumulatorului şi asupra unui bit din registrul de
stare. Anume, instrucţiunea setează la 1 bitul de zero Z, dar nu C, DC din registrul de stare.
Instrucţiunea de ştergere a unui bit, cu numărul (locaţia în cadrul cuvântului) b, din
locaţia f, este:
Comenzi MPLAB
processor 16F84
org 0010h
Comenzi de definire de constante sunt equ şi (preluat din C), #define. Exemplu:
end
După această comandă nu se mai execută nici o instrucţiune eventual aflată (eronat) în
program.
Operaţii aritmetice şi logice realizate cu microcontrolere PIC. ALU şi regiştri 25
ADDWF f, d
Pune f1 în W
Adunăm f2 cu W, rezultat în W
Pune W în f3.
MOVF f, d cu d=0.
Pentru a pune rezultatul final, aflat în acumulator, W, la locaţia f3, avem la dispoziţie
instrucţiunea:
MOVF f 1 , 0
solutie a)
ADD WF f 2 , 0 solutie b)
MOVWF f 3
Am neglijat în discuţia noastră două aspecte. Primul se referă la biţii de stare: cum
sunt aceştia modificaţi? Trebuie să avem grijă de ei? Al doilea aspect este: în ce stare dorim
să lăsăm, la terminarea operaţiilor, acumulatorul? (încărcat cu rezultatul final sau şters?).
Folosind a doua operaţie şi ţinând cont că bitul “carry” de transport se află în registrul
de stare, ştergerea acestui bit se face prin:
CLRW
MOVF f1,0
ADDWF f2 ,0
MOVWF f3
CLRW
Considerăm patru numere, aflate la locaţiile f1, f2, f3 şi f4. Alegerea unui număr (4) ce
reprezintă putere a lui 2 nu este întâmplătoare. Pentru puteri ale lui 2, împărţirea (fără rest)
se reduce la deplasarea la dreapta cu un număr de ori egal cu puterea lui doi:
RRF f , d.
“Prima coloană” (adică ce începe pe prima poziţie a unei linii) este destinată doar
etichetelor.
Ce se întâmplă altfel: va apare o avertizare (warning), care nu compromite rularea.
Avertizare este de forma:
Operaţii aritmetice şi logice realizate cu microcontrolere PIC. ALU şi regiştri 27
Soluţii:
Se va lăsa un spaţiu înaintea unei directive sau a codului unei operaţii.
Nu se va lăsa spaţiu înaintea unei etichete.
Exemplu
Corect:
Dar nu:
Problema 1. Adună două numere aflate în doi regiştri cu adrese cunoscute. Păstrează
rezultatul adunării în acumulator.
Program Adunare:
Adună_1.asm
;Adunare.asm este numele programului.
;Terminaţia (prefixul) .asm denotă faptul
;că fişierul este de tip asamblor.
;Programul adună două numere, aflate în doi regiştri cu
;adresă cunoscută, prestabilită.
;*************************************************
processor 16F84 ; această linie indică tipul procesorului
; pe care urmează să se ruleze programul
org 0010h ; locul de unde începe programul, în memorie
;
acc equ 0 ; Definiţie equ înseamnă “egal cu”.
; Programul face înlocuirea simbolului din stânga lui “equ”
; cu simbolul (sau şirul de simboluri din dreapta).
; Unii programatori preferă folosirea de litere mnemonice
; în locul cifrelor, pentru uşurinţa şi pentru
; claritatea programului. Metoda este recomandată!
; O regulă “de aur” spune că nu trebuie sacrificată în nici
; un caz claritatea codului pentru a micşora lungimea
; codului scris.
;
f equ 1 ; Definiţie de simbol
Reg_1 equ H'10' ; Definiţie de registru temporar la h'10'
Reg_2 equ H'15' ; alt registru de lucru la H'15'
Listarea de dezasamblare
Vizualizarea memoriei
ii) Apoi compilăm proiectul (fişierul). După compilare, în fereastra pentru memoria
de program trebuie să apară scrise instrucţiunile din program, ca în fig. 5:
Program propriu-zis
Adresa de început a programului a
fost specificată prin instrucţiunea
Pentru aceasta, se selectează întâi din meniu Debugger Clear Memory All. Apoi
se dă comanda Build all. Din meniu, se selectează Debugger Step into (sau F7), apoi F8,
în mod repetat. Astfel, se rulează pas cu pas programul şi se observă modificarea
conţinutului regiştrilor. Se constată dacă la sfârşitul rulării apare în registrul precizat
(Reg_3, în exerciţiu) rezultatul dorit (23 în zecimal, 17 în hexa).
32 Elemente de utilizare a micro-controlerelor
Horia-Nicolai Teodorescu
Programul de mai sus nu ne spune nimic cum s-au încărcat regiştrii Reg_1 şi Reg_2.
Pentru cazul în care aceşti regiştri trebuie încărcaţi chiar de către program, cu două numere
prestabilite, trebuie să efectuăm operaţii suplimentare (de transfer de valori constante în
acumulator, respectiv din acumulator în regiştri). Să considerăm următoarea problemă:
Problema 2. Adună două numere date prin program; reţine (încarcă) cele două numere
în doi regiştri cu adrese cunoscute, Reg_1 şi Reg_2. Păstrează rezultatul adunării în
acumulator, dar şi într-un registru Reg_3.
Problema 3. Adună două valori date prin program şi scade din rezultat o a treia
valoare dată prin program. Rezultatul final este păstrat în acumulator. Valorile date prin
program sunt, în acest exemplu, H’03’, H’32’ şi H’92’.
Deşi problema nu impune o păstrare în memorie, rezolvarea problemei necesită
folosirea unor regiştri de păstrare a unor valori temporare:
Modul de lucru
TEMĂ
Să se scrie un proiect cu un fişier tip .asm, două fişiere .inc şi un fişier .h. În fişierul
header se vor include următoarele informaţii:
Numele programului
Numele realizatorului (numele Dvs.)
grupa
data scrierii
Revendicarea de copyright ©
34 Elemente de utilizare a micro-controlerelor
Horia-Nicolai Teodorescu
Conţinutul referatului
Referinţe