Documente Academic
Documente Profesional
Documente Cultură
-instructiunile si datele sunt stocatein acelasi spatiu de memorie, accesibil printr o singura
magistrala
-la un moment dat microprocesorul nu poate executa decat una dintre urmatoarele”
-magistrala unica
Un sistem cu microprocesor (SMP) poate fi caracterizat din punct de vedere formal astfel: SMP
= (UCP, MEM, I/E, MS), unde:
UCP - unitatea centrală de procesare, formată din microprocesor şi alte circuite auxiliare
(generator de tact, circuit de resetare etc.) absolut necesare pentru funcționarea acestuia.
MEM - subsistemul de stocare a informaţiei, format dintr-o memorie comună sau din memorii
separate pentru program (MEMP) și date (MEMD).
I/E este subsistemul de legătură cu exteriorul, spre (intrare) şi dinspre (ieşire) sistemul cu
microprocesor. 13 Fig.2.6. Accesul microprocesorului la memorie și la dispozitivele de I/E
(Harvard)
Memoria - are rolul de a stoca instrucțiunile programului și datele aferente acestuia și în aceste
cazuri (fig. 2.5 și 2.6) comunică direct doar cu microprocesorul, pe magistrala sistemului. 14
Fig.2.6. Accesul microprocesorului la memorie și la dispozitivele de I/E (Harvard)
Dispozitivele de I/E - permit interacțiunea sistemului cu exteriorul. Ele asigură o interfață între
sistemul cu microprocesor și dispozitivele externe, prin intermediul unor porturi de intrare (PI) și
de ieșire (PE). Comunicația dintre memorie și dispozitivele de I/E se realizează în acest caz doar
prin intermediul microprocesorului.
7. Tipuri de transfer de date în-tr-un sistem cu microprocesor.
Atunci când se dorește ca transferul de date să fie mai rapid, adică să se desfășoare cu acces
simultan la memoria de date și dispozitivele de I/E, este necesară prezența în sistem (fig.2.7) a
unui modul hardware suplimentar, specializat pentru accesul direct la memorie (DMAC – Direct
Memory Access Controller).
Memoria - organizată din punct de vedere logic sub forma unui tablou bidimensional de biți, pe l
linii și c coloane.
Accesul la memorie se face pe linii: se poate citi sau înscrie întotdeauna o linie completă,
denumită și cuvânt de memorie.
Un cuvânt de memorie conține un număr de biți egal cu numărul de coloane ale matricei:
lungimea cuvântului de memorie din Fig.2.9 este c. Un cuvânt de memorie este stocat pe o
anumită linie, denumită locație de memorie, caracterizată de un indice de linie. Valoarea
numerică a acestui indice - adresa locației - exprimată în binar sau într-o bază agregată, putere a
lui 2, de obicei în hexazecimal.
Cu cele a linii de adresă se pot forma 2a combinații binare, respectiv adrese ale unor locații de
memorie distincte.
Stabileste dimensiunea spatiului de memorie adreabila si este formata din linii camandate de
microprocesoare.
Pentru memoria care conține datele (sau variabilele) programului (MEMD), există o magistrală
de adrese
Astfel, o instrucțiune poate fi formată din unul sau mai multe cuvinte
de memorie, amplasate la adrese consecutive, în sensul crescător al
adreselor, de sus în jos, așa cum se arată în fig. 2.12 pentru o
memorie comună organizată pe 8 biți.
14. Formatul datelor și amplasare lor în memorie (little endian vs. big endian).
little endian - precizează că adresele și operanzii care ocupă mai multe cuvinte de memorie sunt
amplasate la adrese succesive, în sens crescător, începând cu cuvântul cel mai puțin semnificativ
big endian - precizeaza ca la adresa mai mică să fie amplasată partea mai semnificativă a
adresei sau operandului format din mai multe cuvinte de memorie.
17. Structura internă a unui microprocesor - principalele componente (ALU, RIC, registre
speciale și de uz general) și rolul lor.
Microprocesorul:
- construit în jurul unei unități de prelucrare aritmetică și logică(Arithmetic and Logic Unit –
ALU)
- Dispozitivele de I/E – reprezentate printr-un număr de locații denumite porturi de I/E, care
Unitatea centrala 8051 efectuează calcule cu ajutorul unei unități aritmetice și logice
(ALU) de 8 biți, care poate realiza operații aritmetice de adunare, scădere, înmulțire și împărțire,
precum și operații booleene (ȘI, SAU, SAU EXCLUSIV). Operanzii sunt aduși în register
temporare, la intrarea ALU, din registrul A și/sau din memoria RAM, iar rezultatul operației
poate fi stocat tot în registrul A (registru acumulator) sau într-o locație de memorie RAM.
Înafara rezultatului propriu-zis, ALU folosește și comandă o serie de bistabile/flaguri/indicatori
de condiții care semnalizează apariția unor situații deosebite privind rezultatul sau modul de
desfășurare al operațiilor aritmetice sau logice. Acești indicatori de condiții sunt grupați, alături
de alte informații de stare, în registrul de stare al programului (PSW – Program Status Word), de
8 biți.
CY=0 indică absenţa un transport sau împrumut, Z=1 indică un rezultat nul, AC=1 indică
prezenţa unui transport / împrumut între digiţi, P=0 indică un rezultat pozitiv;
Cel mai simplu mod de execuție este cea secvențială: instrucțiunile se execută una după alta, în
ordinea crescătoare a adreselor de memorie, iar dacă o instrucțiune dorește schimbarea acestei
ordini implicite, atunci trebuie să indice care este adresa instrucțiunii următoare.
a) von Neumann,
b) Harvard
Dacă microcontrolerul nu are memorie program internă, atunci este obligatorie conectarea unei
memorii externe de tip ROM, în care se va afla programul, începând cu adresa 0000h.
26. Conectarea memoriei program externe la MCS-51.
Datele amplasate în memoria externă de date pot fi adresate indirect, cu ajutorul registrului
DPTR (Data Pointer), al cărui conținut se depune pe liniile porturilor P2 și P0 (16 biți), ceea ce
face posibil accesul la un spațiu de memorie externă de 2 16 octeti (64 Kocteți). Citirea/scrierea
datelor din/în memoria externă se realizează cu ajutorul semnalelor 𝑅𝐷̅̅ (P3.7), respectiv 𝑊𝑅 ̅̅
(P3.6)
Memoria de date interna ocupa un spatiu de 256 de locatii (8biti) si este formata din 3 zone:
-zona inferioară - 128 de locații de memorie, cu adrese cuprinse între 00h și 7Fh, adresabilă prin
program atât direct (prin valoarea adresei indicate de instrucțiune), cât și indirect (adresa locației
se află într-un registru indicat de instrucțiune).
-zona superioară - 128 de locații de memorie, cu adrese cuprinse între 80h și FFh, adresabilă doar
indirect, printr-un registru pointer de 8 biți
-zona registrelor cu funcții speciale (Special Function Registers - SFR) – 128 de locații, cu
adrese cuprinse între 80h și FFh, la fel ca zona superioară, dar adresabilă doar direct, printr-o
adresă conținută de instrucțiune.
-ambele zone ocupa 128 de locatii de memorie ( zona inferioara intre 00h-7Fh, zona superioara
intre 80h-FFh)
-contine registrele cu functii speciale ale unitatii centrale (ACC, B, PSW, SP, DPTR – format din
DPH si DPL), mai puțin registrul PC, si registrele de date,de stare si de
control ale perifericelor integrate
- adresele 20h-2Fh (16 octeti) pot fi accesate la nivel de octet cat si pe bit
-adresele 30h-7Fh fi aceesate doar pe octet si pot fi utilizate oentru variabilele programului sau
stiva
Unitatea centrală dispune de o stivă LIFO (Last In – First Out) organizată în memoria RAM
internă, pentru salvarea/refacerea datelor și a conținutului registrului PC, o modalitate simplă și
comodă pentru stocarea datelor și a adreselor, care facilitează programarea structurată cu
subrutine și funcții apelate prin program sau la detectarea unor evenimente externe, prin
mecanismul de întreruperi. Accesul la stivă se face printr-un registru pointer de stivă de 8 biți
(SP), care indică în orice moment ultima locație ocupată din stivă.
32. Zona pentru amplasarea variabilelor booleene (spațiu ocupat, adrese de bit)
Zona inferioara de memorie cuprinsă între 20h și 2Fh (16 octeți) poate fi accesată atât la nivel de
octet, cât și pe bit. Această zonă poate fi folosită pentru amplasarea variabilelor booleene ale
programului, care vor ocupa fiecare doar un singur bit. Restul memoriei inferioare de date,
începând cu adresa de octet 30h, poate fi accesată doar pe octet și poate fi utilizată pentru
variabilele programului sau pentru stivă.
La începutul zonei inferioare (Fig.2.32), începând cu adresa 00h, se află 4 bancuri de registre de
uz general. Registrele accesibile prin program, R0-R7, sunt mapate în unul din cele 4 bancuri,
mai exact în cel selectat de biții RS1-RS0 din PSW (Fig. 2.28). După resetare, RS1=RS0=0, deci
va fi selectat bancul 0, având adresele cuprinse între 00h și 07h.
Un număr de 16 locaţii din spaţiul SFR (cele de pe prima coloană din Fig.2.33, având adresa de
octet multiplu de 8 (80h, 88h, 90h ș.a.m.d), sunt adresabile şi pe bit. Bitul cel mai puțin
semnificativ al SFR cu adresa 80h (P0) are adresa de bit 80h, iar bitul cel mai semnificativ are
adresa de bit 87h. Bitul cel mai puțin semnificativ al SFR cu adresa 88h (TCON) are adresa de
bit 88h, iar bitul cel mai semnificativ are adresa de bit 8Fh ș.a.m.d. Se observă că bitul cel mai
puțin semnificativ al registrelor SFR adresabile pe bit are adresa de bit egală va valoare cu adresa
de octet a registrului respectiv. Biţii registrelor speciale adresabile la nivel de bit pot fi referiți fie
prin numele SFR al bitului (ACC.0, PSW.2, P1.7, TCON.5), fie prin adresa de bit (E0h, D2h,
97h, 8Dh).
35. Organizarea memoriei externe de date (capacitate, mod și linii de acces)
Datele amplasate în memoria externă de date pot fi adresate indirect, cu ajutorul registrului
DPTR (Data Pointer), al cărui conținut se depune pe liniile porturilor P2 și P0 (16 biți), ceea ce
face posibil accesul la un spațiu de memorie externă de 2 16 octeti (64 Kocteți).
̅̅ Citirea/scrierea
̅
̅
datelor din/în memoria externă se realizează cu ajutorul semnalelor 𝑅𝐷̅ (P3.7), respectiv 𝑊𝑅 ̅̅ ̅̅
̅ ̅ ̅
(P3.6).
Liniile D8-D1 ale registrului sunt intrări și se conectează la liniile P0.7-P0.0 ale portului P0, iar
liniile Q8-Q1 vor furniza jumătatea inferioară a magistralei de adrese (liniile A7- A0).
Intrarea LE (Latch Enable) a registrului va fi comandată de linia ALE (Address Latch Enable) de
la microcontroler, iar linia 𝑂𝐸̅̅ (Output Enable), care validează ieșirile Q, va fi conectată la masă.
Liniile superioare ale magistralei de adrese (A15-A8) sunt furnizate de pinii portului P2 (P2.7-
P2.0).
37. Conectarea memoriei von Neumann (comună) la MCS-51.
La sistemele de dezvoltare este util ca o parte din memoria externă RAM să poată fi folosită ca
memorie von Neumann sau comună: atât ca memorie de date, cât și ca memorie program.
În acest caz, programul utilizatorului poate fi încărcat în această memoria comună (prin activarea
semnalului 𝑊𝑅 ,̅̅ conectat la linia 𝑊𝐸 )̅̅ și apoi lansat în execuție, pentru a fi testat.
La momentul execuției, extragerea instrucțiunilor se face cu semnalul 𝑃𝑆𝐸𝑁 ,̅̅ iar citirea datelor
cu semnalul 𝑅𝐷.
̅
Linia 𝑂𝐸̅a̅ memoriei comune de tip RAM trebuie activată în ambele cazuri: atât pentru 𝑃𝑆𝐸𝑁 =0,
̅̅
̅
cât și pentru 𝑅𝐷̅=0, ca în figura 2.36.
Circuitul de memorie comună este selectat cu linia mai semnificativă de adrese (P2.7=A15=0
̅
conectată la 𝐶𝑆̅).
ciclu mașină este format din 6 stări: S1, S2, . . . , S6 (12 perioade ale oscilatorului intern: S1P1,
S1P2, S2P1, … , S6P1, S6P2). Astfel, la o frecvenţă a oscilatorului de 12 MHz, durata unui ciclu
maşină este de 1µs.
Peste 50% dintre instrucţiunile familiei MCS 51 se execută într-un singur ciclu maşină
39. Durata instrucțiunilor (numărul de cicluri mașină).
Pentru execuţia unei instrucţiuni sunt generate două cicluri fetch: în S1 și în S4.
În cazul instrucţiunilor de un octet, cea de a doua operaţie fetch, din S4 extrage opcodul
instrucțiunii următoare, care se ignoră (fig.2.37a).
În cazul instrucţiunilor de 2 octeţi, în S4, este citit cel deal al doilea octet (fig.2.37b). Până la
sfârşitul stării S6 instrucţiunea este executată complet. În Fig.2.38 este dată evoluția semnalelor
de pe magistrala externă la extragerea și execuția instrucțiunilor din memoria program externă,
mai puțin cele de tip MOVX.
Se remarcă depunerea adreselor din registrul PC (PCH pe liniile Portului 2, PCL pe liniile
Portului 0), citirea instrucțiunilor (fetch) în stările S1 și S4 (depuse de memoria externa pe liniile
Portului 0), odată cu dezactivarea liniei 𝑃𝑆𝐸𝑁 ,̅̅ precum și reținerea octetului inferior al adresei
(PCL, din Portul 0), pe fronturile descrescătoare ale semnalului ALE, într-un latch extern.
- forţarea liniei RST) la „1” pe durata a două cicluri maşină (24 de perioade ale oscilatorului
intern), în timp ce oscilatorul este în funcţiune.
În fiecare ciclu maşină, linia RST este eşantionată în S5P2.
La detectarea activării pinului RST, UCP generează un semnal de reset intern.
Pinii porturilor vor păstra valoarea corespunzătoare activităţii curente încă 19 perioade de
oscilator după ce un “1” logic este identificat la pinul RST.
De asemenea şi semnalele ALE şi PSEN sunt trecute pe „1” logic.
Conţinutul memoriei RAM interne nu este afectat de resetare, ci numai de dispariţia alimentării.
Semnalul intern de resetare determină forţarea tuturor registrelor din zona SFR în „0” logic, cu
excepţia registrelor latch ale porturilor, a registrului SP şi a registrului SBUF. Latch-urile
porturilor sunt iniţializate cu FFh, registrul SP cu 07h, iar conţinutul lui SBUF este nedeterminat.
În plus, unii biţi ai registrelor IP, IE şi PCON rămân nedefiniţi. De asemenea, registrul PC
(Program Counter) este încărcat cu valoarea 0000h, deci la această adresă trebuie să se afle prima
instrucţiune care va fi executată după resetare.
Apariţia tensiunii de alimentare fără o resetare corectă poate determina CPU să înceapă execuţia
instrucţiunilor de la o locaţie nedeterminată. Aceasta deoarece registrul PC poate să fie incorect
iniţializat (0000h).
41. Funcțiile porturilor P0 și P2.
-Instructiunile sunt aduse din memoria interna ROM/externa de la adresa furnizata prin
intermediul porturilor P0 si P2.
-adresa operandului din memoria RAM externa este furnizata tot de porturile P0 P2.
44. Instrucțiuni care accesează registrul latch al unui port la MCS-51 (exemple și justificare)
-Linia 𝐴𝐿𝐸 comandă memorarea într-un registru latch extern a adresei inferioare (A7-A0) din P0
Address Latch Enable) când adresa de memorie externă este furnizată pe liniile P2:P0. Dacă
există memorie ROM internă, aceasta va fi folosită numai dacă linia de validare a accesului
extern nu este activă (𝐸𝐴̅̅ = 1).
45. Instrucțiuni care citesc starea pinilor unui port la MCS-51 (exemple și justificare).
-comanda „citeşte pinul” va transmite starea pinului portului adresat pe magistrala internă.
Semnalele de comandă „citire SFR” şi „citire pin” sunt activate de instrucţiuni diferite.
-Portul 3 poate transmite funcţiile alternative dacă SFR-ul său are biţii corespunzători poziţionaţi
pe „1” logic, ieşirile fiind controlate de semnalul „funcţie de ieşire alternativă”. Starea pinilor
P3.x este disponibilă la „funcţiile de intrare alternative” aferente.
Microprocesorul execută instrucțiuni formate din unul sau mai multe cuvinte de
memorie, pe care le extrage din memoria program. În esență, instrucțiunile sunt cuvinte
binare ,amplasate în memorie în sensul crescător al adreselor. Acestea sunt recunoscute și
executate direct de către microprocesor, de aceea ele alcătuiesc așa-numitul limbaj
mașină.
Un limbaj simbolic care atribuie câte un nume fiecărui tip de instrucțiune din
limbajul mașină, precum și resurselor interne ale unui microprocesor se numește limbaj
de asamblare. Acesta este limbajul cel mai apropiat de limbajul mașină care poate fi
folosit de om pentru programarea unei aplicații pentru un sistem cu microprocesorului.
Un program în limbaj de asamblare se scrie într-un fișier text (fișier sursă - ASCII), cu
ajutorul unui editor și se stochează pe un suport de memorie de masă (harddisk).
instrucțiuni de transfer, pentru copierea conținutului unei locații sursă într-o locație
destinație. Dimensiunea celor două locații trebuie să fie aceeași. Putem avea astfel
instrucțiuni de transfer între oricare două locații de tip registre, memorie, porturi I/E. Un
caz particular de transfer este cel al instrucțiunilor de inițializare al unor locații, cu o
valoare precizată explicit sau implicit de codul instrucțiunii (setare/resetare locații de 1
bit, inițializare a unei locații de 8 biți cu o valoare indicată de instrucțiune sau implicit cu
0, etc.). Un alt caz particular de transfer îl constituie salvarea și refacerea din vârful stivei
a conținutului registrelor de uz general. Instrucțiunile de transfer nu afectează indicatorii
de condiții, dacă în transfer nu este implicată unitatea aritmetică și logică (ALU).
49. Instrucțiuni aritmetice – tipuri de operații, localizarea operanzilor, efecte asupra indicatorilor
de condiții
50. Instrucțiuni logice - tipuri de operații, localizarea operanzilor, efecte asupra indicatorilor de
condiții
53. Modul de adresare directă – unde și cum este localizat operandul, exemple
Ex: MOV A, 30h; în A se încarcă octetul din memoria internă de date, de la adresa
30h
54. Modul de adresare indirectă – unde și cum este localizat operandul , ce registre se folosesc,
exemple
Prin adresare indirectă pot fi specificaţi operanzi atât din RAM-ul intern, cât şi din cel
extern. Pentru adrese de RAM intern (de 8 biţi) se pot utiliza registrele R0 sau R1 ale
bancului de registre curent sau registrul indicator al vârfului stivei, SP.
Pentru adrese de RAM extern (de 16 biţi) poate fi utilizat numai registrul DPTR.
În sintaxa instrucţiunii, numele acestor registre trebuie precedate de caracterul „@”.
EX: MOV @R0, A ; octetul din A este stocat în memoria internă de date, la adresa
din R0
55. Modul de adresare implicită - unde și cum este localizat operandul, exemple
Instrucţiunile care folosesc acest mod de adresare codifică registrul sau fanionul folosit
implicit în opcodul instrucţiunii
56. Modul de adresare imediată - unde și cum este localizat operandul, exemple
57. Modul de adresare indexată - unde și cum este localizat operandul , ce registre se folosesc,
exemple
-drept registre index se utilizează DPTR sau PC: acestea conţin adresa de bază, iar
deplasamentul locaţiei adresate se află implicit în acumulator, ceea ce permite codificarea
instrucţiunilor cu adresare indexată pe un singur octet. Se foloseşte la adresarea
operanzilor stocaţi în memoria program, facilitând procedura de acces la tabelelor
organizate în această memorie („look-up tables”), precum şi la o instrucţiune de salt
indirect.
Ex: MOVC A, @A+DPTR; în A se încarcă octetul din memoria program de la
adresa dată de
; A+DPTR
58. Modul de adresare relativă – cum se calculează adresa efectivă (cea la care se face saltul),
registrul folosit, exemple
Ex: JNZ rel ; salt relativ la adresa instrucţiunii curente, dacă valoarea din A e diferită
de 0
59. Instrucțiunile MCS-51 – dată fiind o instrucțiune sau o secvență de instructiuni, să se indice
în ce constă execuția ei (care este efectul asupra registrelor/memoriei/indicatorilor de
condiții)
instrucţiuni aritmetice;
instrucţiuni logice;
instrucţiuni de transfer;
instrucţiuni de ramificare.
numărător (counter)
temporizator (timer)
numărător (counter)
Un registru de 8 sau 16 biţi este incrementat la fiecare front descrescător al semnalului aplicat pe
pinul de intrare T0/ P3.4, respectiv T1/P3.5.
atât prin program (bitul TR0/TR1), cât şi prin semnalul aplicat la pinul INT0 /P3.2
respectiv INT1 /P3.3, dacă bitul GATE corespunzător este poziţionat pe “1”. Astfel,
aplicarea unui nivel “1” logic pe linia de întrerupere externă validează incrementarea
numărătorului, în timp ce un nivel “0” blochează numărarea.
Atunci când conţinutul registrului TH se schimbă din FFh în 00h (la depăşire), este setat
bistabilul de întrerupere asociat TF0/TF1, generându-se o cerere de întrerupere.
Modul 0
Semnalul de numărare poate să provină de la oscilatorul local (temporizator) sau din exterior, de
la pinul T0/T1 (numărător de evenimente), în funcţie de valoarea bitului C/ T din TMOD.
După ce semnalul de numărare este divizat modulo 32 de registrul TL (numărător format cu cei
mai puţin semnificativi 5 biţi), incrementează registrul TH, care lucrează ca un numărător pe 8
biţi.
Modul 1
Este identic cu modul 0, cu excepţia faptului că registrele TH0 şi TL0, respectiv TH1 şi TL1 se
utilizează complet, formând câte un numărător de 16 biţi pentru fiecare timer.
Se utilizează un numărător de 8 biţi format numai din registrul TL (mai puţin semnificativ).
Depăşirea la numărare determină, pe lângă setarea bistabilului TF şi lansarea unei cereri de 6
întrerupere, copierea automată în registrul numărător (TL) a valorii conţinute în registrul
constantei de timp TH, aşa cum se arată în fig.1 (Autoload).
Drept urmare, atunci când timerul 0 este programat să lucreze în modul 3, timerul 1 poate să
funcţioneze în oricare din modurile 0, 1 sau 2, fie ca temporizator fie ca numărător cu
următoarele două modificări:
locul lui TR1 este luat de biţii de selecţie mod M1 şi M0, oprirea numărării realizându-se prin
programarea timerului 1 în modul 3 (M1M0=11).
nu se poate semnaliza depăşirea. În acest caz, Timerul 1 este utilizat de regulă ca generator de
tact pentru Portul serial.
Cele două registre ale timerului 0 formează două canale independente de 8 biţi. Logica de
control a numărării este prezentată în fig.2.
Canalul format cu registrul TL0 foloseşte biţii de control specifici Timerului 0, cunoscuţi
de la modurile 0 şi 1. Funcţionarea acestuia este identică cu cea descrisă la aceste moduri.
Cel de-al doilea canal, format cu registrul TH0, utilizează bitul de control TR1 de la
Timerul 1, precum şi întreruperea acestuia (bistabilul TF1), dar poate funcţiona doar ca
temporizator.
locul lui TR1 este luat de biţii de selecţie mod M1 şi M0, oprirea numărării realizându-
se prin programarea timerului 1 în modul 3 (M1M0=11).
Dacă EXEN2=0 - numărător/temporizator de 16 biţi obişnuit, care îşi setează fanionul TF2 la
depăşire şi poate lansa o cerere de întrerupere. Dacă EXEN2=1: o tranziţie 10 pe intrarea
T2EX determină “captarea” conţinutului registrelor TL2 şi TH2 în registrele RCAP2L şi
respectiv RCAP2H.
Dacă EXEN2=0, depăşirea Timerului 2 setează TF2 şi determină reîncărcarea registrelor TL2 şi
TH2 cu valoarea de 16 biţi presetată în registrele RCAP2L, respectiv RCAP2H. Dacă EXEN2=1,
Timerul 2 funcţionează ca mai înainte, dar cu o nouă facilitate: la o tranziţie 10 pe T2EX, va fi
realizată reîncărcarea pe 16 biţi şi EXF2 va fi setat
Flagurile de generare a întreruperilor sunt eşantionate în starea S5P2 a fiecărui ciclu maşină.
Valorile memorate sunt testate în ciclul maşină următor.
Dacă există cel puţin o solicitare de întrerupere în aşteptare (având flagurile de generare şi de
validare setate), după rezolvarea priorităţilor sistemul de întreruperi va genera un apel
(echivalent cu o instrucţiune LCALL (Long Call) – dar care nu apare în program) la adresa de
tratare corespunzătoare (vezi tab.1), numai dacă:
nu există o altă cerere, pe un nivel cu prioritate mai mare sau egală, în curs de tratare;
ciclul curent este ultimul ciclu maşină al unei instrucţiuni;
instrucţiunea curentă nu este RETI (revenire din întrerupere) şi nici una care să acceseze
regiştrii cu funcţii speciale IE sau IP, implicaţi în gestiunea întreruperilor.
În unele cazuri, flagul de întrerupere este resetat automat, prin hardware, în momentul în
care întreruperea asociată este acceptată:
TF0, TF1, precum şi IE0, IE1 - dacă sunt active pe front (descrescator).
întreruperii) se execută până la apariţia unei întreruperi pe un nivel mai prioritar sau până la
execuţia unei instrucţiuni RETI.
Spre exemplu, 8051 are 5 surse de întreruperi, care pot fi amplasate pe 2 niveluri de prioritate.
Trei dintre sursele de întreruperi sunt ataşate componentelor interne (timere şi port serial), iar
celelalte două sunt accesibile numai din exterior, de la pinii INT0 şi INT1 ai microcontrolerului.
După caz, lor li se adaugă şi alte surse de întrerupere atât interne, corespunzătoare unor periferice
suplimentare integrate pe cip, cât şi externe, accesibile la pinii microcontrolerelor.
76. Care sunt evenimentele care determină setarea flagurilor de întrerupere?
Flagurile de întrerupere pot fi setate/resetate prin program, cu acelaşi efect ca şi cum ar fi fost
comandate de logica internă de întreruperi. Aceasta însemnă că:
O întrerupere poate fi generată şi prin program, prin setarea flagului asociat. Excepţie fac
întreruperile externe 0 şi 1 atunci când sunt active pe nivel, când flagurile IE0 şi IE1 sunt
afectate numai de starea pinilor INT0 /P3.2 respectiv INT1/P3.3.
O cerere de întrerupere în aşteptare poate fi anulată înainte de a fi acceptată dacă
întreruperea respectivă era invalidată la momentul apariţiei.
O cerere de întrerupere poate fi achitată în rutina de tratare prin resetarea flagului care a
generat-o, dacă acest lucru nu s-a produs deja, în mod automat, odată cu acceptarea ei de
către unitatea centrală.
77. Care sunt bistabilele care se setează atunci când apar cereri de întrerupere (flag-urile de
întreruperi)?
Atunci când conţinutul registrului TH se schimbă din FFh în 00h (la depăşire), este setat
bistabilul de întrerupere asociat TF0/TF1, generându-se o cerere de întrerupere.
Depăşirea la numărare determină, pe lângă setarea bistabilului TF şi lansarea unei cereri de
6 întrerupere
78. Care sunt flagurile de validare individuală a cererilor de întrerupere și ce rol au ele?
Fiecare sursă de întreruperi poate fi validată sau inhibată individual, prin setarea,
respectiv resetarea unui bit din registrul cu funcţii speciale IE.
În plus, acest registru mai conţine şi un bit de validare/inhibare globală a tuturor liniilor
de întrerupere, EA (Enable All), care are prioritate asupra biţilor de validare/inhibare
individuală.
Dacă flagul de validare al unei surse de întreruperi este 0), cererea de întrerupere înregistrată
în flagul corespunzător nu va fi înaintată către CPU.
Atunci când conţinutul registrului TH se schimbă din FFh în 00h (la depăşire), este setat
bistabilul de întrerupere asociat TF0/TF1, generându-se o cerere de întrerupere.
Dacă EXEN2=0 - numărător/temporizator de 16 biţi obişnuit, care îşi setează fanionul
TF2 la depăşire şi poate lansa o cerere de întrerupere.
Dacă linia de întrerupere este găsită pe “1” logic într-un ciclu maşină şi pe “0” logic în
următorul ciclu maşină, atunci este setat flagul de întrerupere corespunzător, care generează o
cerere de întrerupere.
83. Care sunt adresele la care trebuie să se afle amplasate rutinele de tratare a întreruperilor?
Se resetează automat.
În cazul în care, la un moment dat, există mai multe cereri de întrerupere, cererea de prioritate
maximă se alege folsind două reguli care se aplică succesiv (vezi fig.5.1):
90. Pe câte nivele de prioritate se poate afla o sursa de întrerupere și care este regula de prioritate
aplicată pentru cererile de la surse amplasate pe același nivel, dacă sunt mai multe active la
un moment dat?
Daca sunt mai multe cereri active la un moment dat, prioritate are prima acceptata.
91. Ce se întâmpla odată ce a fost acceptată o cerere de întrerupere, mai sunt acceptate alte cereri
înainte de a se termina tratarea celei în curs?
Odată acceptată o cerere de întrerupere, rutina de tratare a acesteia poate fi întreruptă de o
cerere apărută ulterior pe un nivel superior, dar nu şi de o cerere de pe acelaşi nivel sau
de pe un nivel inferior.
Drept urmare, tratarea unei întreruperi de pe nivelul cel mai prioritar din sistem nu poate fi
întreruptă de nici o altă cerere
92. Cum află microcontrolerul că s-a terminat tratarea unei cereri de întrerupere și de ce are
nevoie să știe acest lucru?
Dispozitivul care solicită întreruperea trebuie să menţină linia pe nivel coborât până când
microcontrolerul acceptă întreruperea şi îi confirmă acest lucru printr-o operaţie denumită
achitarea întreruperii.
Flagul de întrerupere este resetat abia atunci când dispozitivul solicitant îşi anulează cererea.
Aceasta trebuie să se producă înainte de terminarea rutinei de tratare, altfel, imediat după
revenire, se va genera o nouă întrerupere.
93. Ce este un port serial, cum se face transferul informației, prin comparație cu transferul
paralel?
Portul serial integrat pe chip poate să transmită şi să recepţioneze date simultan (full-
duplex) în modul asincron, sau half-duplex în modul sincron.
94. Transfer serial sincron vs. asincron – comparație.
Sincron: datele în format serie (8 biţi, mai întâi LSB) ies sau intră prin aceeaşi linie, RxD.
Linia TxD furnizează, respectiv primeşte semnalul de tact necesar pentru refacerea datelor, la
recepţie, în format paralel.
Viteza de comunicaţie este fixă şi egală cu 1 /12 din frecvenţa de lucru a oscilatorului intern.
Asincron: caracterele(10/11 biti) cu un bit de Start si unu de stop, 8 biti de date si optional un al
9-lea incarcat in bitul RB8 din SCON. Biti transmisi pe linia TxD si receptionati pe linia RxD.
transmiţătorul are doar un singur registru tampon, care îndeplineşte ambele functii ale registrului
serie/parallel si registrului de interfata.
Registrele de interfaţă cu unitatea centrală sunt fizic distincte, dar pot fi accesate printr-o singură
adresă de SFR: SBUF.
Pentru controlul funcţionării portului serial şi selectarea modului de lucru se utilizeaza registrul
SFR SCON
97. Modul 0 de funcționare al portului serial (modul sincron) – sursa semnalului de tact, linia de
transmisie/recepție date, linia de transmisie/recepție a semnalului de tact, viteza de
comunicație.
Modul 0: (sincron) datele în format serie (8 biţi, mai întâi LSB) ies sau intră prin aceeaşi linie,
RxD. Linia TxD furnizează, respectiv primeşte semnalul de tact necesar pentru refacerea datelor,
la recepţie, în format paralel.
Viteza de comunicaţie este fixă şi egală cu 1 /12 din frecvenţa de lucru a oscilatorului intern.
98. Transferul serial asincron – formatul unui caracter în modul 1 (10 biti/caracter) – rolul bitului
de START și al bitului de STOP
Modul 1: (asincron) caracterele (10 biţi) formate dintr-un bit de START (0), 8 biţi de date
(mai întâi LSB) şi un bit de STOP (1) sunt transmise pe linia TxD şi recepţionate pe linia
RxD.
La recepţie, bitul de STOP este încărcat în bitul RB8 din SCON. Viteza de comunicaţie
este variabilă.
99. Transferul serial asincron – formatul unui caracter în modurile 2 și 3 (11 biti/caracter) – rolul
celui de-al 9-lea bit de date (de unde este transmis, unde este recepționat, la ce ar putea să fie
folosit.
Modul 2: (asincron) caracterele (11 biţi) formate dintr-un bit de START (0), 8 biţi de date (mai
întâi LSB), un al 9-lea bit de date, programabil (TB8 din SCON) şi un bit de STOP (1) sunt
transmise pe linia TxD şi recepţionate pe linia RxD.
La recepţie, cel de-al 9-lea bit de date este încărcat în bitul RB8 din SCON, iar bitul de STOP
este ignorat.
Viteza de comunicaţie este programabilă: 1 /32 sau 1 /64 din frecvenţa oscilatorului intern.
104. Ce indică flag-ul TI și ce trebuie să facă programul când acesta este setat?
Pentru sincronizarea fluxului de date la transmisie este prevăzut indicatorul TI (buffer de
transmisie gol), care este setat hardware imediat după terminarea transmisiei unui
character.
Astfel, în rutina de tratare trebuie să se identifice exact cauza care a produs întreruperea:
recepţia unui nou caracter (RI=1), terminarea transmisiei unui caracter (TI=1) sau ambele
evenimente.
Aceste două flaguri trebuie şterse apoi prin program, înainte de revenirea din întrerupere.
105. Ce indică flag-ul RI și ce trebuie să facă programul când acesta este setat?
Pentru recepţie este prevăzut indicatorul RI (buffer de recepţie plin), care este setat
hardware de îndată ce un nou caracter a fost recepţionat şi este disponibil în SBUF.
Acest flag generează o întrerupere de recepţie, care poate fi utilizată de unitatea centrală
pentru a prelua din SBUF caracterul recepţionat.
Astfel, în rutina de tratare trebuie să se identifice exact cauza care a produs întreruperea:
recepţia unui nou caracter (RI=1), terminarea transmisiei unui caracter (TI=1) sau ambele
evenimente.
Aceste două flaguri trebuie şterse apoi prin program, înainte de revenirea din întrerupere.