c02-Setul de Instructiuni
-
Upload
florea-dan-valeriu -
Category
Documents
-
view
47 -
download
0
Transcript of c02-Setul de Instructiuni
-
SISTEME CU MICROPROCESOARE note de curs
1
2. SETUL DE INSTRUCIUNI
Cuprins
Introducere
Obiective
2.1 FORMATUL INSTRUCIUNILOR
2.1.1 Instruciuni pe octet
2.1.2 Instruciuni pe bit
2.1.3 Instruciuni cu constante
2.1.4 Instruciuni de control
2.2 CLASIFICAREA INSTRUCIUNILOR N FUNCIE DE
OPERAIILE REALIZATE
2.2.1 Instruciuni matematice pe octet
2.2.2 Instruciuni logice pe octet
2.2.3 Instruciuni matematice i logice cu constante
2.2.4 Instruciuni logice pe bit
2.2.5 Instruciuni de comparaie pe bit
2.2.6 Instruciuni de comparaie pe octet
2.2.7 Instruciuni de mutare
2.2.8 Instruciuni de control
2.2.9 Alte instruciuni
Concluzii
Teste de autoevaluare
Bibliografie
Dicionar
Teste de evaluare
-
SETUL DE INSTRUCIUNI
2
Introducere
Un program const dintr-o serie de instruciuni scrise ntr-o anumit
ordine n vederea realizrii unor sarcini. Instruciunile disponibile pentru
acest lucru sunt n strns legtur cu arhitectura microcontrolerului, iar
un dezvoltator de microsisteme ncorporate trebuie s fie foarte bine
familiarizat att cu arhitectura software ct i cu cea hardware, mai ales
dac va scrie programele sale n limbaj de asamblare.
Acest capitol cuprinde prezentarea instruciunilor disponible pentru
microcontrolerul PIC18F4455, precum i modul n care acestea sunt
reprezentate n memoria program.
Obiective
Dup parcurgerea acestui capitol cursantul va trebui:
- s cunoasc instruciunile disponibile pentru microcontrolerul PIC18F4455;
- s cunoasc modul n care sunt codificate instruciunile n memoria program;
- s cunoasc rolul pe care l au parametrii instruciunilor; - s utilizeze n mod adecvat instruciunile pentru implementarea
operaiilor necesare diferitelor programe.
2.1 FORMATUL INSTRUCIUNILOR
Scrierea unui program se poate asemna, ntr-o oarecare msur, cu ridicarea unei
case. Avnd la dispoziie o serie de materiale de costrucii, constructorul le asambleaz pe
acestea ntr-o anumit ordine pentru a obine produsul finit. Etapele necesare construciei:
sparea fundaiei, zidirea, tencuirea etc. pot fi asociate instruciunilor implementate de UCP,
iar materialele i echipamentele de construcii necesare: crmizi, mortar, ciment etc.
reprezint datele cu care lucreaz instruciunile.
n conformitate cu arhitectura de tip RISC pe care este bazat, microcontrolerul
PIC18F4455 implementez un set redus de instruciuni standard, format din 75 de
instruciuni, care este completat cu 8 instruciuni opionale care formeaz setul extins.
Acestea din urm, pe care le vom ignora n acest capitol, vizeaz optimizarea codului recursiv
sau care utilizeaz o stiv software.
Majoritatea instruciunilor disponibile (71) au lungimea de un cuvnt (16 bii), dar
exist i 4 instruciuni avnd lungimea de dou cuvinte (32 bii). Pentru reprezentarea acestor
-
SISTEME CU MICROPROCESOARE note de curs
3
instruciuni n memoria program sunt necesari 16, respectiv 32 de bii, adic 2, respectiv 4
locaii de memorie consecutive. Instruciunile lungi au fost introduse pentru a putea stoca
toat informaia necesar execuiei operaiilor pe care le implementeaz.
n esen majoritatea instruciunilor utilizeaz date stocate n memorie. n aceste
condiii, o instruciune trebuie s aib posibilitatea de a informa UCP despre tipul operaiei
pe care o implementeaz, respectiv despre locul unde se gsesc datele cu care aceast
instruciune opereaz. Astfel, o instruciune va codifica binar urmtoarele informaii:
- codul operaiei - unul sau mai muli operanzi (adres, constant, bit de destinaie, bit de acces)
Exist i cteva excepii de la aceast regul cum ar fi, de exemplu, instruciunea NOP
(No OPeration), care consum timpul procesorului fr a realiza ns o operaie.
Pentru acest microcontroler au fost definite mai multe formate de instruciuni.
Lungimea cmpului corespunztor codului operaiei variaz n funcie de tipul instruciunii,
permind astfel o utilizare mai eficient a lungimii instruciunii.
Setul de instruciuni al microcontrolerului PIC18F4455 poate fi mprit n patru
categorii de baz:
- Instruciuni pe octet - Instruciuni pe bit - Instruciuni cu constante (literali) - Instruciuni de control
2.1.1 Instruciuni pe octet Majoritatea instruciunilor orientate pe octet au trei operanzi:
1. Registrul (specificat prin operandul f) 2. Destinaia rezultatului (specificat prin operandul d) 3. Zona de memorie accesat (specificat prin operandul a)
n instruciunile pe octet, operandul f specific registrul care urmeaz a fi folosit de instruciune. Registrul f poate fi specificat fie prin numele su simbolic (dac are) fie prin adresa sa de 8 bii.
Operandul d, denumit i bit de destinaie al rezultatului, specific locul n care va fi plasat rezultatul operaiei realizate de instruciune. Dac d=0 (d=W) rezultatul operaiei va fi plasat n registrul de lucru WREG. Dac d=1 (d=F) rezultatul operaiei va nlocui coninutul registrului f specificat n instruciune.
-
SETUL DE INSTRUCIUNI
4
Operandul a, denumit i bit de acces, specific modul de acces la registrul f. Dac a=0 (a=ACCESS) atunci registrul f se gsete n Access Bank. Dac a=1 (a=BANKED) atunci registrul f se gsete n Bank-uri, iar pentru a-l accesa se utilizeaz registrul BSR. Asupra modului de acces se va reveni n capitolul 3.
n Fig. 2.1 se prezint formatul instruciunilor pe octet. Acest format reprezint modul
n care acest tip de instruciuni sunt codificate binar n memoria program a
microcontrolerului. Se poate observa c pentru codul instruciunii sunt alocai 6 bii (biii
), pentru adresa registrului f sunt alocai 8 bii (biii ), rmnnd 2 bii necesari pentru operanzii d (bitul 9), respectiv a (bitul 8).
15 10 9 8 7 0 Cod operaie d a f (adresa registrului)
Fig. 2.1. Formatul general al instruciunilor orientate pe octet
n program, aceste instruciuni vor fi scrise sub forma prezentat n Tabelul 2.1. Tot n
acest tabel se pune n eviden i cazul unor instruciuni care opereaz cu octei, dar care
utilizeaz doar dou argumente
Tabel 2.1. Formatul general al instruciunilor orientate pe octet
Format instruciuni orientate pe octet Exemplu de utilizare cod_operaie f,d,a cod_operaie f,a f=adresa pe 8 bii a registrului d=0 (d=W) destinaia rezultatului este registrul de lucru WREG d=1 (d=F) destinaia rezultatului este registrul f a=0 (a=ACCESS) registrul f se gsete n Access Bank a=1 (a=BANKED) registrul f se gsete n Bank-uri Excepie: MOVFF fs,fd fs=adresa pe 12 bii a registrului surs fd=adresa pe 12 bii a registrului destinaie
ADDWF REG1, W, BANKED CLRF 0x01, ACCESS MOVFF REG_s, REG_d
Excepie de la modul de reprezentare din Fig. 2.1 face instruciunea de mutare a unui
octet de la o adres surs la o adres destinaie (MOVFF). Aceast instruciune face parte din categoria instruciunilor lungi i necesit 32 de bii pentru reprezentare. Formatul general al
acestei instruciuni se prezint n Fig. 2.2.
15 12 11 0 Cod operaie fs (adresa registrului surs)
15 12 11 0 1 1 1 1 fd (adresa registrului destinaie)
Fig. 2.2. Formatul general al instruciunilor de mutare octet MOVFF
-
SISTEME CU MICROPROCESOARE note de curs
5
n cazul instruciunii MOVFF, prezentat mai sus, cmpurile alocate adreselor surs i destinaie au dimensiunea de 12 bii. Astfel, aceast instruciune permite utilizarea adreselor
absoulute n realizarea operaiei de mutare a unui octet ntre cele dou locaii de memorie.
Pentru codul operaiei sunt rezervai 4 bii (biii din cuvntul superior), iar cei 4 bii
rmai neutilizai sunt ntotdeauna 1 (biii din cuvntul inferior).
2.1.2 Instruciuni pe bit
Toate instruciunile orientate pe bit au trei operanzi:
1. Registrul (specificat prin operandul f) 2. Bitul din registru (specificat prin operandul b) 3. Zona de memorie accesat (specificat prin operandul a)
n aceste instruciuni, operandul b, format din trei bii, are rolul de a specifica poziia bitului n cadrul registrului f care este afectat de operaia realizat de instruciune. Operandul f conine adresa de opt bii a registrului din memorie implicat n instruciune, iar operandul a, zona de memorie n care se gsete registrul accesat.
n Fig 2.3 se prezint modul de reprezentare al instruciunilor pe bit n memoria
program, iar n Tabelul 2.2 se prezint formatul general al acestor instruciuni i un exemplu
de utilizare.
15 12 11 9 8 7 0 Cod operaie b (poziie bit) a f (adresa registrului)
Fig. 2.3. Formatul general al instruciunilor orientate pe bit
Tabel 2.2. Formatul general al instruciunilor orientate pe bit
Format instruciuni orientate pe bit Exemplu de utilizare cod_operaie f,b,a f=adresa pe 8 bii a registrului b=poziia bitului (0:7) n cadrul registrului f a=0 (a=ACCESS) registrul f se gsete n Access Bank a=1 (a=BANKED) registrul f se gsete n Bank-uri
BSF REG, 4, ACCESS
2.1.3 Instruciuni cu constante (literali)
Instruciunile cu constante utilizeaz un singur operand k. Acesta are rezervai cei opt bii inferiori ai instruciunii i reprezint valoarea unei constante, denumit i literal. Modul
de reprezentare al acestor instruciuni n memoria program se prezint n Fig. 2.4.
-
SETUL DE INSTRUCIUNI
6
15 8 7 0 Cod operaie k (constant)
Fig. 2.4. Formatul general al instruciunilor orientate pe bit
Excepia de la acest mod de reprezentare o constituie instruciunea LFSR, care este o instruciune lung i care va ncrca o constant de 12 bii n unul din cei trei regitrii speciali
FSR. Tabelul 2.3 pune n eviden modul de utilizare al acestor instruciuni n program.
Tabel 2.3. Formatul general al instruciunilor cu constante
Format instruciuni cu constante Exemplu de utilizare cod_operaie k k=valoarea efectiv pe 8 bii Excepie: LFSR f,k f=registrul FSR utilizat k=adresa pe 12 bii
MOVLW d23 LFSR FSR0, h100
2.1.4 Instruciuni de control
n funcie de tipul operaiei implementate, instruciunile de control pot utiliza
urmtorii operanzi:
- o adres din memoria program / etichet (specificat prin operandul n) - utilizarea stivei rapide n cazul instruciunilor CALL, RETURN i RETFIE (specificat
prin operandul s) - fr operand
Aceste instruciuni au rolul de a controla execuia programului prin implementarea de
bucle, salturi, apeluri de subrutina etc. Operandul n, specific o adresa de salt n memoria program. n urma apelului acestor instruciuni se va modifica valoarea stocat n numrtorul
de program, lucru care va conduce la realizarea efectiv a saltului. Aceast adres de salt
corespunde etichetelor care se introduc n codul surs pentru a marca adresa de nceput a
anumitor seciuni de cod.
n funcie de tipul operaiei realizate, pentru instruciunile de control sunt definite mai
multe moduri de reprezentare, prezentate succint n Tabelul 2.4, dar asupra crora nu se va
insista n acest capitol. Totui, cu scop informativ, n Fig. 2.5 se prezint formatul instruciunii
de control GOTO care permite realizarea de salturi n ntreg spaiul de adresare al memoriei program.
-
SISTEME CU MICROPROCESOARE note de curs
7
15 8 7 0 Cod operaie n (adres din memoria program)
15 12 11 0 1 1 1 1 n (adres din memoria program)
Fig. 2.5. Formatul general al unei instruciuni de control
Tabel 2.4. Formatul general al instruciunilor de control
Format instruciuni de control Exemplu de utilizare cod_operaie n cod_operaie n,{s} cod_operaie s cod_operaie n=etichet (adres din memoria program) s= utilizare stiv rapid Excepie: RETLW k k=constant pe 8 bii
GOTO main_loop CALL rutina RETURN FAST NOP RETLW 0x15
2.2 CLASIFICAREA INSTRUCIUNILOR N FUNCIE DE OPERAIILE REALIZATE
Pentru o mai bun nelegere i pentru identificarea facil a instruciunilor necesare
implementrii diferitelor programe, n acest paragraf se ncearc o clasificare a instruciunilor
disponibile n funcie de operaiile realizate.
2.2.1 Instruciuni matematice pe octet
n acest categorie s-au considerat instruciunile care realizeaz operaii matematice
elementare asupra datelor cu dimensiunea de opt bii. Operaiile realizate sunt: adunarea,
scderea, incrementarea, decremenetarea i nmulirea.
Exemplu
Se analizeaz cazul instruciunii cu forma general: ADDWF f, d, a
Aceast instruciune adun coninutul registrului de lucru WREG cu coninutul registrului a crui adres este specificat prin parametrul f. Dac bitul de destinaie al rezultatului va fi d=0 (d=W), rezultatul obinut n urma operaiei va fi depus n registrul de lucru WREG. Dac bitul de destinaie al rezultatului va fi d=1 (d=F), rezultatul obinut n urma operaiei va fi stocat n registrul f, nlocuind astfel operandul care se gsea
-
SETUL DE INSTRUCIUNI
8
acolo. Cele dou situaii posibile sunt puse n eviden n Fig. 2.6.
Parametrul a intervine n modul de formare al adresei f. Asupra acestui parametru se va reveni n capitolul 3. n exemplele care vor urma acest
parametru se consider ca avnd valoarea a=0.
Fig. 2.6. Selectarea destinaiei rezultatului pentru instruciunea ADDWF
n continuare se va analiza exemplul prezentat n Fig. 2.6. Se consider c
naintea execuiei instruciunii n registrul de lucru WREG se gsete valoarea b00101001=h29=d41, iar n registrul de la adresa 0x02C se gsete valoarea b01100111=h67=d103.
n cazul a., n urma realizrii operaiei:
ADDWF 0x2C, W, 0 rezultatul obinut b10010000=h90=d144 va fi stocat n registrul de lucru WREG, nlocuind operandul 1.
-
SISTEME CU MICROPROCESOARE note de curs
9
n cazul b.:
ADDWF 0x2C, F, 0 se produce acelai rezultat, dar acesta va fi stocat n memorie la adresa
0x02C, nlocuind operandul 2. Dup cum se poate vedea i din figur, operaiile realizate pot influena i
starea biilor indicatori din registrul STATUS. Bineneles, pentru valorile alese ale operanzilor, registrul STATUS nu este influenat n urma execuiei instruciunii.
n aceeai categorie a instruciunilor matematice pe octet se mai regsesc i
instruciunile din Tabelul 2.5. Tabel 2.5. Instruciuni matematice pe octet
Instruciuni Descriere Cicluri instr. ADDWF f,d,a Adun WREG cu f 1 ADDWFC f,d,a Adun WREG cu f i cu bitul de transport 1 SUBWF f,d,a Scade WREG din f 1 SUBWFB f,d,a Scade f din WREG cu bitul de mprunut 1 SUBFWB f,d,a Scade WREG din f cu bitul de mprumut 1 INCF f,d,a Incrementeaz f 1 DECF f,d,a Decrementeaz f 1 MULWF f,a nmulete f cu WREG1 1 NEGF f,a Negare f 1 2.2.2 Instruciuni logice pe octet
n acest categorie s-au considerat instruciunile care realizeaz operaii logice asupra
datelor cu dimensiunea de opt bii. Printre operaiile realizate se pot aminti: I logic, SAU
logic, SAU-EXCLUSIV, Complement, rotire de bii etc.
Tabelul 2.6 cuprinde instruciunile care se ncadreaz n categoria instruciunilor
logice pe octet.
O analiz comparativ ntre instruciunile din aceast categorie i cele din categoria
instruciunilor matematice pe octet pune n eviden faptul c parametrii acestor instruciuni
(f,d,a) sunt aceeai i ndeplinesc acelai rol. Se pot identifica totui cteva instruciuni, a cror nelegere poate ridica mici probleme. Este vorba despre instruciunile de rotire, la
stnga sau la dreapta, cu sau fr bit de transport (en. Carry). Aceste instruciuni vor fi
analizate n exemplul urmtor.
1 rezultatul acestei operaii se va regsi n regitrii PRODH:PRODL
-
SETUL DE INSTRUCIUNI
10
Tabel 2.6. Instruciuni logice pe octet
Instruciuni Descriere Cicluri instr. ANDWF f,d,a I logic ntre WREG i f 1 IORWF f,d,a SAU logic ntre WREG i f 1 XORWF f,d,a SAU-EXCLUSIV ntre WREG i f 1 COMF f,d,a Complement f 1 CLRF f,a Resetare bii din registrul f 1 SETF f,a Setare bii din registrul f 1 SWAPF f,d,a Interschimbare semioctei din registrul f 1 RLCF f,d,a Rotire f la stnga cu bit de transport 1 RLNCF f,d,a Rotire f la stnga fr bit de transport 1 RRCF f,d,a Rotire f la dreapta cu bit de transport 1 RRNCF f,d,a Rotire f la dreapta fr bit de transport 1
Exemplu
Se analizeaz cazul instruciunii cu forma general: RLCF f, d, a
Aceast instruciune realizeaz rotirea spre stnga cu bit de transport a
coninutului de la adresa specificat prin parametrul f. Rezultatul obinut va fi stocat n registrul f sau n registrul de lucru WREG, n funcie de starea bitului de destinaie al rezultatului d. Rotirea spre stnga cu bit de transport este evideniat n Fig. 2.7. Bitul de
transport (en. Carry) este un bit al registrului STATUS.
Fig. 2.7. Rotirea spre stnga cu bit de transport RLCF
Modul de utilizare al instruciunii de rotire cu bit de transport este
evideniat n continuare:
RLCF REG, W, 0 naintea instruciunii:
REG = 11100110 C = 0
Dup instruciune: REG = 11100110 WREG = 11001100 C = 1
-
SISTEME CU MICROPROCESOARE note de curs
11
Exemplu
Se analizeaz cazul instruciunii cu forma general: RLNCF f, d, a
Aceast instruciune realizeaz rotirea spre stnga fr bit de transport a
coninutului de la adresa specificat prin parametrul f. Rezultatul obinut va fi stocat n registrul f sau n registrul de lucru WREG, n funcie de starea bitului de destinaie al rezultatului d. Rotirea spre stnga fr bit de transport este evideniat n Fig. 2.8.
Fig. 2.8. Rotirea spre stnga cu bit de transport RLNCF
Modul de utilizare al instruciunii de rotire fr bit de transport este
evideniat n continuare:
RLCF REG, W, 0 naintea instruciunii:
REG = 11100110 C = 0
Dup instruciune: REG = 11100110 WREG = 11001101 C = 1
n cele dou exemple prezentate anterior, parametrul f al instruciunii este specificat
prin intermediul unei nume simbolic care nlocuiete adresa fizic a registrului. Acest nume
simbolic trebuie declarat anterior utilizrii. Mai multe detalii despre numele simbolice vor fi
prezentate n capitolul 4.
Rotirile spre dreapta, implementate de instruciunile RRCF i RRNCF, se realizeaz n mod asemntor.
-
SETUL DE INSTRUCIUNI
12
2.2.3 Instruciuni matematice i logice cu constante
Aceste instruciuni au fost grupate ntr-o singur categorie deoarece respect acelai
format i acelai principiu de funcionare, dup cum se poate vedea din Tabelul 2.7, dar i n
exemplul considerat.
Tabel 2.7. Instruciuni matematice i logice cu constante
Instruciuni Descriere Cicluri instr. ADDLW k Adun WREG cu literal 1 SUBLW k Scade WREG din literal 1 MULLW k nmulete WREG cu literal 1 ANDLW k I logic ntre WREG i literal 1 IORLW k SAU logic ntre WREG i literal 1 XORLW k SAU-EXCLUSIV ntre WREG i literal 1
Cu excepia instruciunii de nmulire MULLW, toate instruciunile din aceast categorie vor avea unul dintre operanzi n registrul de lucru WREG, cel de-al doilea operand va fi constanta k, iar rezultatul obinut n urma operaiei va fi stocat n registrul de lucru.
Instruciunea de nmulire cu o constant MULLW, la fel ca i cealalt instruciune de nmulire MULWF, amintit n categoria instruciunilor matematice pe octet, va depune ntotdeauna rezultatul n doi regitri speciali PRODH:PRODL. Acest lucru se datoreaz faptului c nmulirea a dou valori reprezentate pe opt bii poate conduce la un rezultat cu o
dimensiune mai mare de opt bii, care nu poate fi stocat nici n registrul de lucru WREG, nici n registrul f. (10 x 30 = 300. 300 este o valoare care se reprezint pe 9 bii)
Exemplu
Se analizeaz cazul instruciunii cu forma general: ANDLW k
Aceast instruciune realizeaz operaia logic I ntre coninutul registrul
de lucru i constanta de 8 bii k. Rezultatul obinut va fi stocat n registrul de lucru WREG.
Modul de utilizare al acestei instruciuni este evideniat n continuare:
ANDLW 0x0F naintea instruciunii:
WREG = 11100110 Dup instruciune:
WREG = 00000110
-
SISTEME CU MICROPROCESOARE note de curs
13
2.2.4 Instruciuni logice pe bit
n aceast categorie au fost grupate instruciunile care manipuleaz starea unui singur
bit prin realizarea unor operaii de setare, resetare sau schimbare a strii (en. toggle). De altfel,
aceast categorie cuprinde doar trei instruciuni cu format asemntor care implementeaz
cele trei operaii amintite anterior. Tabelul 2.8 centralizeaz aceste instruciuni.
Tabel 2.8. Instruciuni logice pe bit
Instruciuni Descriere Cicluri instr. BCF f,b,a Reseteaz bitul b din registrul f 1 BSF f,b,a Seteaz bitul b din registrul f 1 BTG f,b,a Schimb starea bitului b din registrul f 1
Pentru a exemplifica modul de utilizare al acestor instruciuni se consider urmtorul
exemplu.
Exemplu
Se analizeaz cazul instruciunii cu forma general: BCF f, b, a
Aceast instruciune realizeaz operaia de resetare, sau punere pe 0 logic,
a bitului de pe poziia b din registrul a crui adres se sprecific prin parametrul f al instruciunii. Rezultatul obinut n urma acestei operaii se va regsi ntotdeauna n registrul f. Avnd n vedere c regitrii microcontrolerului sunt de 8 bii, parametrul
b al acestor instruciuni va avea ntotdeauna o valoare cuprins ntre 0 i 7, unde 0 identific bitul cel mai puin semnificativ, iar 7 identific bitul
cel mai semnificativ al unui octet.
Modul de utilizare al acestei instruciuni este evideniat n continuare:
BCF REG, 2, 0 naintea instruciunii:
REG = 11100110 Dup instruciune:
REG = 11100010
-
SETUL DE INSTRUCIUNI
14
2.2.5 Instruciuni de comparaie pe bit
O categorie aparte de instruciuni sunt instruciunile de comparaie, deoarece acestea
permit implementarea ramificaiilor de tip if n programele realizate n limbaj de asamblare. Instruciunile de comparaie pe bit sunt doar dou la numr i permit testarea strii unui
anumit bit dintr-un registru. n Tabelul 2.9 sunt menionate cele dou instruciuni.
Tabel 2.9. Instruciuni de comparaie pe bit
Instruciuni Descriere Cicluri instr. BTFSC f,b,a Testeaz bitul b din reg. f, salt dac este 0 1 (2 sau 3) BTFSS f,b,a Testeaz bitul b din reg. f, salt dac este 1 1 (2 sau 3)
Exemplu
Se analizeaz cazul instruciunii cu forma general: BTFSC f, b, a
Aceast instruciune compar dac bitul de pe poziia b din cadrul registrului f este 0. Dac bitul este 0 se face salt peste instruciunea urmtoare. Fig. 2.9 curpinde o diagram care prezint principiul de
funcionare al acestei instruciuni.
Fig. 2.9. Principiul de funcionare al instruciunii BTFSC
n cazul prezentat n Fig. 2.9, avnd n vedere c n registrul cu numele
simbolic REG se gsete valoarea 01011001, care are bitul 3 setat, instruciunea care se va executa dupa BTFSC va fi instruciunea 1.
-
SISTEME CU MICROPROCESOARE note de curs
15
2.2.6 Instruciuni de comparaie pe octet
Instruciunile de comparaie pe octet pot fi grupate n dou sub-categorii: instruciuni
cu doi parametri, care realizeaz doar o comparaie urmat sau nu de un salt, respectiv
instruciuni cu trei parametri care mai realizeaz n plus o operaie de incrementare sau
decrementare. n funcie de specificul lor aceste instruciuni vor fi utilizate fie la
implementarea unor ramificaii de tip if, fie la implementarea unor bucle iterative de tip for.
Pentru a evidenia principiul de funcionare al instruciunilor din cele dou sub-
categorii se va considera cte un exemplu semnificativ pentru ambele formate de instruciuni.
Exemplu
Se analizeaz cazul instruciunii cu forma general: CPFSEQ f, a
Aceast instruciune compar coninutul registrului f cu cel al registrului de lucru WREG. Dac cele dou sunt identice se face salt peste instruciunea urmtoare. n Fig. 2.10 se prezint principiul de funcionare
al acestei instruciuni.
Fig. 2.10. Principiul de funcionare al instruciunii CPFSEQ
Exemplu
Se analizeaz cazul instruciunii cu forma general: DECFSZ f, d, a
Aceast instruciune realizeaz o decrementare a valorii stocate n
registrul f, iar dac rezultatul obinut n urma decrementrii este 0 se excut un salt peste instruciunea urmtoare. Prezena parametrului d n codul instruciunii indic faptul c rezultatul decrementrii poate fi stocat
fie n registrul de lucru WREG, fie la adresa specificat prin f.
-
SETUL DE INSTRUCIUNI
16
n Fig. 2.11 se prezint principiul de funcionare al acestei instruciuni.
Fig. 2.11. Principiul de funcionare al instruciunii DECFSZ
Instruciunea DECFSZ, prezentat anterior poate fi utilizat cu uurin pentru realizarea unor bucle de tip for. Exemplul urmtor consider o seciune de cod care realizeaz acest lucru.
Exemplu
Se consider cazul implementrii unei bucle de tip for care permite execuia unei instruciuni oarecare de o sut de ori.
Se pornete de la premisa conform creia registrul REG, utilizat pe post de iterator, este n prealabil iniializat cu valoarea 100. n aceste condiii
secvena urmtoare de cod permite execuia instruciunii CLRF de o sut de ori.
Bucla_for CLRF 0x00, 0 DECFSZ REG, F, 0 GOTO Bucla_for
Instruciunile de comparaie pe octet sunt centralizate n Tabelul 2.10.
-
SISTEME CU MICROPROCESOARE note de curs
17
Tabel 2.10. Instruciuni de comparaie pe octet
Instruciuni Descriere Cicluri instr. CPFSEQ f,a Compar f cu WREG, salt dac f=WREG 1 (2 sau 3) CPFSGT f,a Compar f cu WREG, salt dac f>WREG 1 (2 sau 3) CPFSLT f,a Compar f cu WREG, salt dac f
-
SETUL DE INSTRUCIUNI
18
2.2.8 Instruciuni de control
Majoritatea instruciunilor din aceast categorie controleaz modul de execuie al
programului ca urmare a modificrii valorii numrtorului de program, prin realizarea de
salturi condiionate sau necondiionate, apeluri de subrutin, revenire din subrutin etc.
Tabelul 2.12 cuprinde lista acestor instruciuni.
Tabel 2.11. Instruciuni de control
Instruciuni Descriere Cicluri instr. BC n Salt dac bitul de transport (carry) este 1 1 (2) BN n Salt dac bitul negativ este 1 1 (2) BOV n Salt dac bitul de depire (overflow) este 1 1 (2) BZ n Salt dac bitul zero este 1 1 (2) BNC n Salt dac bitul de transport (carry) este 0 1 (2) BNN n Salt dac bitul negativ este 0 1 (2) BNOV n Salt dac bitul de depire (overflow) este 0 1 (2) BNZ n Salt dac bitul zero este 0 1 (2) BRA n Salt necondiionat 2 GOTO n Salt la adresa / etichet 2 PUSH Pune n stiv (Salveaz PC n stiv) 1 POP Scoate din stiv (Reface PC) 1 CALL n,s Apel de subrutin 2 RETURN s Revenire din subrutin 2 RETLW k Revenire din subrutin cu literal n WREG 2 RETFIE s Revenire din rutina de tratare a ntreruperii 2 NOP Nici o operaie 1
Instruciunile de salt condiionat (BC, BN, BNC, BNN, BNOV, BNZ, BOV, BZ) realizeaz saltul la o instruciune destinaie marcat printr-o etichet dac rezultatul operaiilor anterioare ndeplinete anumite criterii care pot fi verificate prin intermediul biilor
indicatori din registrul STATUS. Instruciunile de salt necondiionat vor realiza saltul prin modificarea direct a valorii
numrtorului program. Astfel, instruciunea BRA realizeaz un salt la o instruciune destinaie prin adaugarea unui offset la adresa curent stocat de numrtorul program, iar
instruciunea GOTO realizeaz saltul direct la orice adres din spaiul de memorie al programului. Astfel, instruciunea BRA realizeaz un salt relativ, iar instruciunea GOTO realizeaz un salt absolut n memoria program.
Modul de execuie al celor dou instruciuni se prezint n Fig. 2.12.
-
SISTEME CU MICROPROCESOARE note de curs
19
Fig. 2.11. Exemplificarea diferenei ntre saltul necondiionat relativ (BRA)i cel absolut (GOTO)
Asupra instruciunilor de apel i revenire din subrutin (CALL, RETURN, RETFIE, RETLW) i a celor care intervin n utilizarea stivei (PUSH, POP) se va reveni n capitolele urmtoare.
2.2.9 Alte instruciuni
Instruciunile cuprinse n aceast categorie permit realizarea scrierii i citirii tabelare
din memoria program. Aceste instruciuni, vor fi doar amintite n acest capitol, n Tabelul
2.12, fiind prezentate mai detaliat n unul din capitolele urmtoare
Tabel 2.11. Instruciuni de scriere i citire tabelar
Instruciuni Descriere Cicluri instr. TBLRD* Citire tabelar 2 TBLRD*+ Citire tabelar cu post incrementare TBLRD*- Citire tabelar cu post decrementare TBLRD+* Citire tabelar cu pre incrementare TBLWT* Scriere tabelar 2 TBLWT*+ Scriere tabelar cu post incrementare TBLWT*- Scriere tabelar cu post decrementare TBLWT+* Scriere tabelar cu pre incrementare
-
SETUL DE INSTRUCIUNI
20
Concluzii
Acest capitol cuprinde prezentarea setului de instruciuni al
microcontrolerului PIC18F4455. Este prezentat modul n care sunt
codificate aceste instruciuni n memoria program, sunt prezentai
parametrii instruciunilor, iar clasificarea din subcapitolul 2.2 are scopul
de a facilita identificarea diferitelor instruciuni necesare pentru realizarea
programelor n funcie de tipul de operaie realizat. De asemenea,
exemplele ntlnite n acest capitol au rolul de a evidenia caracteristicile
comune ale diferitelor grupe de instruciuni.
n vederea unei ct mai bune nelegeri a instruciunilor
disponibile i a modului de utilizare al acestora, se propune ncheierea
capitolului cu urmtorul exemplu:
Exemplu
Se consider urmtoarea aplicaie:
- s se iniializeze registrul de la adresa 0x37 cu valoarea 71 - s se incrementeze aceast valoare de 50 de ori - s se seteze bitul 4 al rezultatului - dac rezultatul obinut este mai mare dect 200 s tearg
coninutul registrului de la adresa 0x37
- dac rezultatul obinut este mai mic dect 200 s se seteze toi biii registrului de la adresa 0x37
Se cere codul surs care implementeaz funcionalitatea propus.
REG EQU 0X37 CONTOR EQU 0X00 MOVLW D71 MOVWF REG, 0 MOVLW D50 MOVWF CONTOR, 0
Bucla_for:
INCF REG, F, 0 DECFSZ CONTOR, F, 0 GOTO Bucla_for BSF REG, 4, 0 MOVLW D200 CPFSGT REG, 0 SETF REG,0 CLRF REG,0
-
SISTEME CU MICROPROCESOARE note de curs
21
1. Ce rol ndeplinete parametrul d n codul instruciunii? 2. Care este diferena ntre instruciunile GOTO i BRA? 3. Care va fi coninutul registrului de lucru WREG ca urmare a celor
dou operaii implementate prin urmtorul cod surs:
ADDWF REG, W SUBWF REG, W
4. Cum s-ar implementa o operaie de deplasare la stnga cu 2 bii?
5. Ce reprezint operandul f din codul instruciunii? 6. Identificai cele 4 instruciuni reprezentate pe 32 de bii
7. Explicai instruciunea IORWF.
Teste de autoevaluare
8. S se scrie un mic program care iniializeaz registrul de lucru cu
valoarea 100, rotete la stnga coninutul registrului de lucru de 100
de ori apoi seteaz bitul 3 i reseteaz bitul 2.
[1] Sid Katzen The Essential PIC18 Microcontroller, Springer Verlag
London, 2010
[2] Genge Bela, Haller Piroska Proiectarea sistemelor dedicate i
ncorporate cu microcontrolerul PIC, Editura universitii Petru
Maior din Tg. Mure, 2008
[3] Microchip PIC18F2455/2550/4455/4550 Data Sheet, Microchip
Technology Inc. 2006
Bibliografie
[4] www.microchip.com
Dicionar
Carry
Bit de transport. Se gsete n registrul STATUS Codul operaiei
Tipul de operaie implementat de o anumit instruciune
Cuvnt
Doi octei. 16 bii
Decrementare
Operaie matematic echivalent cu scderea cu 1
Etichet
Identificator introdus n codul surs pentru a marca adresa de nceput a
-
SETUL DE INSTRUCIUNI
22
unei instruciuni
Incrementare
Operaie matematic echivalent adunrii cu 1
Instruciuni
Comenzi codificate binar pe care le execut UCP
Literal
Valoarea numeric constant
Memorie
Spaiu de stocare
Memorie de date
Spaiu de stocare temporar (RAM) pentru datele cu care lucreaz
programul
Memorie program
Spaiu de stocare pentru program
Numrtor de program
Numrtor binar utilizat pentru adresarea instruciunilor. Conine adresa
instruciunii care urmeaz a fi executat
Octet
1 Byte = 8 bii. Capacitatea de stocare a unui registru
Registru
Spaiu de stocare . Locaie de memorie .
Resetare
Punerea unui bit sau a unui grup de bii pe 0 logic
RISC
Reduced Instruction Set Computer
Setare
Punerea unui bit sau a unui grup de bii pe 1 logic
STATUS
Registru care indic starea operaiilor aritmetice executate de unitatea
aritmetic i logic
UCP
Unitate central de prelucrare
WREG
Registru de lucru / acumulator. n general conine unul din operanzii
instruciunilor.