Set Instructiuni
Introducere
Set de Instructiuni in Familia
Microcontrolerului PIC16Cxx Transfer Date Aritmetica si logica Operatii cu biti Directionarea debitului de program Perioada de Executie a Instructiunilor Lista de cuvinte
Introducere
Am mentionat deja ca microcontrolerul nu este ca orice alt circuit integrat. Cand ies din productie cele mai multe circuite integrate sunt gata de a fi introduse in aparate ceea ce nu este cazul cu microcontrolerele. Pentru a 'face' microcontrolerul sa indeplineasca o sarcina, trebuie sa-i spunem exact ce sa faca, sau cu alte cuvinte trebuie sa scriem programul pe care microcontrolerul sa-l execute. Vom descrie in acest capitol instructiunile care alcatuiesc assembler-ul, sau limbajul de programare cu nivel scazut pentru microcontrolerele PIC.
Set de Instructiuni in Familia Microcontrolerului PIC16Cxx
Setul complet care cuprinde 35 de instructiuni este dat in tabela urmatoare. Un motiv pentru un numar asa de mic de instructiuni sta in primul rand in faptul ca discutam despre un microcontroler RISC ale carui instructiuni sunt bine optimizate avand in vedere viteza de lucru, simplitatea arhitecturala si compactitatea codului. Singurul neajuns este ca programatorul trebuie sa controleze o tehnica 'neconfortabila' in a utiliza un set modest de 35 de instructiuni.
Transfer de Date
Transferul de date intr-un microcontroler este facut intre registrul de lucru (W) si un registru 'f' ce reprezinta orice locatie in RAM-ul intern (indiferent daca acestia sunt registri speciali sau de scop general).
Primele trei instructiuni (a se vedea urmatorul tabel) fac ca o constanta sa fie inscrisa in registrul W (MOVLW este prescurtarea pentru MOVe Literal to W), si ca datele sa fie copiate din registrul W in RAM si datele din RAM sa fie copiate in registrul W (sau in aceeasi locatie RAM, la care punct numai starea steguletului Z se schimba). Instructiunea CLRF scrie constanta 0 in registrul 'f ', iar CLRW scrie constanta 0 in registrul W. Instructiunea SWAPF schimba locurile campului de nibbles- bucati de 4 biti in interiorul unui registru.
Aritmetica si logica
Din toate operatiile aritmetice, PIC ca majoritatea microcontrolerelor, accepta doar scaderea si adunarea. Steguletele C, DC si Z sunt setate functie de rezultatul adunarii sau scaderii, dar cu o exceptie: pentru ca scaderea se face ca o adunare a unei valori negative, eticheta C este inversa urmand scaderii. Cu alte cuvinte, este setata daca operatia este posibila, si este resetata daca un numar mai mare a fost scazut din unul mai mic.
Unitatea
logica a PIC-ului are capabilitatea de a face operatiile AND
(SI), OR (SAU), EX-OR (SAU-EXCLUSIV), complementare (COMF) si
rotatie (RLF si RRF).
Instructiunile ce rotesc continutul registrului muta bitii
in interiorul registrului prin eticheta C cu un spatiu la stanga
(catre bitul 7), sau la dreapta (catre bitul 0). Bitul ce 'iese'
din registru este scris in steguletul C, si valoarea
steguletului C este scrisa intr-un bit al 'partii
opuse' a registrului.
Operatii cu biti
Instructiunile BCF si BSF fac setarea sau stergerea unui singur bit oriunde in memorie. Chiar daca pare o simpla operatie, este executata in asa fel ca CPU citeste mai intai intregul byte, schimba un bit in el si apoi scrie intregul byte in acelasi loc.
Directionarea debitului unui program
Instructiunile GOTO, CALL si RETURN
sunt executate in acelasi fel ca si in celelalte microcontrolere,
numai stiva este independenta de RAM-ul intern si limitata la
opt nivele.
Instructiunea 'RETLW k' este identica cu instructiunea RETURN,
cu exceptia ca inainte de a se intoarce dintr-un subprogram,
constanta definita operandul de instructiuni este scrisa in
registrul W. Aceasta instructiune ne permite sa proiectam
usor tabelele (listele) Look-up. Cel mai mult le folosim la determinarea
pozitiei datelor in tabelul nostru adaugand-o la adresa la care incep
tabelele, si apoi citim datele din acea locatie (care este uzual
gasita in memoria program).
Tabelul poate fi format ca un subprogram ce consta dintr-o serie de instructiuni 'RETLW k', unde constantele 'k' sunt membri ai tabelului.
Scriem pozitia unui membru al tabelului nostru in registrul W, si folosind instructiunea CALL apelam un subprogram care creaza tabelul. Prima linie de subprogram ADDWF PCL, f adauga pozitia unui membru al registrului W la adresa de start a tabelului nostru, gasita in registrul PCL, si astfel obtinem adresa datelor reale in memoria program. Cand ne intoarcem dintr-un subprogram vom avea in registrul W continutul unui membru al tabelului adresat. In exemplul anterior, constanta 'k2' va fi in registrul W urmand unei intoarceri dintr-un subprogram.
RETFIE (RETurn From Interrupt - Interrupt Enable) este o intoarcere dintr-o rutina de intrerupere si difera de o RETURN numai in aceea ca seteaza automat bitul GIE (Global Interrupt Enable). La o intrerupere, acest bit este automat sters. Cand incepe intreruperea, numai valoarea contorului de program este pusa in varful stivei. Nu este prevazuta memorarea automata a valorilor si starii registrului.
Jump-urile (salturile) conditionale sunt sintetizate in doua instructiuni: BTFSC si BTFSS. Functie de starea bitului in registrul 'f' ce este testat, instructiunile sar sau nu peste instructiunea de program urmatoare.
Perioada de Executie a Instructiunii
Toate instructiunile sunt executate intr-un ciclu cu exceptia instructiunilor ramura conditionale daca conditia a fost adevarata, sau daca continutul contorului de program a fost schimbat de o anumita instructiune. In acest caz, executia cere doua cicluri de instructiuni, iar al doilea ciclu este executat ca NOP (No Operation-Fara operatii). Patru clock-uri oscilator fac un ciclu instructiune. Daca folosim un oscilator cu frecventa de 4 MHz, timpul normal pentru executia instructiunii este 1 µs, si in caz de branching-ramificare conditionala, perioada de executie este 2 µs.
Lista de cuvinte
f
orice locatie de memorie intr-un microcontroler
W registru de lucru
b pozitie bit in registru 'f'
d bit destinatie
label grup de opt caractere ce marcheaza inceputul unei
parti de program
TOS varful stivei
[] optiune
<> pozitie bit in registru
*1 Daca portul I/O este operand sursa,
este citita starea pinilor microcontrolerului
*2 Daca aceasta instructiune este executata in registrul
TMRO si daca d=1, prescaler-ul asignat acelui timer va fi
automat sters
*3 Daca PC s-a mo
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |