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