Sunteți pe pagina 1din 35

COLOCVIU SMP-intrebari

1.Structura generală a unui microprocesor (microprocesor, spațiu de memorie și de I/E)

-microcontrolerul este contruit in jurul ALU

-este conectat la memorie(doar lui accesibila) si la dispozitivele I/E printr-o magistrala

-memoria este reprezentata printr un numar de locatii de memorie

-contine registri cu functii speciale si registri de date

-dispozitivele I/E sunt reprezentate prin porturi, formand spatial I/E

2. Regimul de funcționare normală a unui microprocesor (etapele de execuție a instrucțiunilor)

Regimul de functionare normal: microprocesorul citeste si executa comenzi


secventiale(instructiuni)

-se extrage instructiunea, se incarca in registrul instructiunii curente(RIC), se decodifica si se


executa, apoi este inlocuita de urmatoarea

3. Caracteristicile arhitecturii von Neumann a unui sistem cu microprocesor.

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

-poate extrage o instructiune

-poate accesa o variabila din spatiun unic de memorie

-poate accesa un port I/E.

4. Caracteristicile arhitecturii Harvard a unui sistem cu microprocesor.

-spatii distincte de memorie pentru date si instructiuni si totodata magistrale diferite(MSD-pt


date si MSP-pt instructiuni)

-uneori RIC este inlocuita cu o coada de instructiuni

-se pot executa mai mult de 2 operatii in acelasi timp


5. Caracteristicile arhitecturii Harvard modificate a unui sistem cu microprocesor.

-se pastreaza zone diferite de memorie pt date si instructiuni

-magistrala unica

-se utilizeaza coada de instructiuni pentru cresterea vitezei

6. Componentele unui sistem cu microprocesor și rolul lor.

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)

 MS este magistrala sistemului - interconectează toate componentele unui sistem cu


microprocesor și permite schimbul de informaţii între ele - poate fi unică în cazul arhitecturii von
Neumann (fig. 2.5) sau poate fi separată într-o magistrală de sistem pentru accesul la memoria
program (MSP) și o magistrală de sistem pentru accesul la memoria de date (MSD), ca în fig.
2.6.

Unitatea centrală de procesare, formată în principal din microprocesor - controlează transferul


informației pe magistrala sistemului: microprocesorul decide între ce componente ale sistemului
și când are loc transferul de informație.

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

La cererea acestuia și cu permisiunea microprocesorului, controlerul DMA se conectează la


magistrala sistemului (MS la arhitectura von Neumann

8. Organizarea memoriei (legătura dintre numărul de linii de adrese, de date și numărul de


locații, respectiv capacitatea memoriei).

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.

l = 2a (legătura dintre numărul de biți de adresă și numărul de locații 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.

9. Rolul logicii de decodificare și selecție într-un sistem cu microprocesor.

Logica combinațională folosită pentru generarea semnalelor de selecție a circuitelor de memorie


se numește logică de decodificare și selecție a memoriei.

10. Magistrala de adrese (cine o generează și la ce servește).

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

Magistralele de adrese și de date - un număr de linii egal cu 8 sau multiplu de 8. De exemplu,


numărul de linii de date c poate fi egal cu 8, iar numărul de linii de adresă a poate fi 16. O locație
de memorie având c = 8 biți este un octet (engl. byte).
Din punct de vedere fizic, accesul la memorie se face printr-un set de a semnale sau linii de
adrese, comandate de microprocesor; acestea se notează cu (Aa-1, Aa-2, … A1, A0) și reprezintă
un subset de linii inferioare ale magistralei de adrese (MA).

11. Magistrala de date (rolul ei).

Magistrala de date (MD) este un ansamblu de conductoare utilizate pentru a trimite si a


receptiona date de la memorie la microprocessor sau invers.

12. Magistrala de comandă (cine o generează și la ce servește)

Magistrala de comanda (MC) serveste la indicarea sensului si momentului transferului datelor pe


magistrala de date. Aceasta este generate de microprocessor prin unul sau doua semnale de
comanda .

13. Formatul instrucțiunilor și amplasarea lor în memorie.

În cazul în care microprocesorul este conectat la o memorie comună


de instrucțiuni și date (von Neumann), lungimea cuvântului de date
impune și formatul instrucțiunilor.

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.

15. Dispozitivele de I/E (structura internă, rolul lor, tipuri de semnale)

Rol-asigura legatura sistemului cu microprocessor cu exteriorul


16. Microprocesorul - categorii de semnale la pini

-de adrese, de date, de control

-linii de alimentare(VCC,GND), de initializare(RESET), de sincronizare(XTAL1, XTAL2)

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)

- conectat la memorie și la dispozitive de intrare-ieșire (I/E) printr-un număr de conexiuni fizice

care formează magistrala sistemului (MS).

- Memoria - accesibilă doar microprocesorului

- Dispozitivele de I/E fac legătura cu dispozitivele externe

- Microprocesorul conține registre cu funcții speciale și registre de date - de uz general.

- Memoria - reprezentată printr-un număr de locații de memorie

- Dispozitivele de I/E – reprezentate printr-un număr de locații denumite porturi de I/E, care

formează spațiul de I/E.


18. ALU și indicatorii de condiții (rolul lor)

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;

19. Etapele execuției unei instrucțiuni.

1. μP depune pe MA adresa instrucţiunii;


2. μP activează semnalele de citire memorie;
3. μP citeşte în registrul instrucțiune codul operației din memorie pe MD;
4. μP decodifică instrucţiunea;
5. Execuţia propriu-zisă a instrucțiunii:
a. Operaţii interne: transfer, aritmetice, logice, de control al stării μP
b. Operaţii pe magistrală: transfer de operanzi (date, adrese) pe MD:
i. Citirea unui operand:
1. μP depune pe MA adresa operandului;
2. μP activează semnalele de citire memorie sau dispozitiv de I/E;
3. Memoria sau dispozitivul de I/E depune operandul pe MD
4. μP reține operandul pe MD, la dezactivarea semnalelor de citire.
ii. Scrierea unui operand:
1. μP depune pe MA adresa operandului;
2. μP depune operandul pe MD;
3. μP activează semnalele de scriere în memorie sau dispozitivul I/E;
4. Memoria sau dispozitivul de I/E reține operandul la dezactivarea
semnalelor de scriere.
20. Ordinea operațiilor la citirea din memorie sau port de intrare.

21. Ordinea operațiilor la scrierea în memorie sau port de ieșire.

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.

22. Structura internă a microcontrolerelor MCS-51 (componente și rolul lor).

Pe lângă unitatea centrală de prelucrare (Fig.2.26), microcontrolerele din familia MCS-51 și


compatibile integrează 1-2 porturi seriale (UART), 2-3 numărătoare/temporiza toare (timers),
128/256 octeți de memorie internă de date RAM (dintre care 16 octeți sunt adresabili pe bit),
până la 128 registre cu funcții speciale (SFR) pentru acces la dispozitive de I/E, până la 64KB de
memorie internă program și uneori o memorie de date RAM extinsă (XRAM) amplasată în
spațiul de date extern.

23. Microcontrolere MCS-51 - categorii de semnale la pini

a) von Neumann,
b) Harvard

24. Registrul PSW (informații conținute)

25. Organizarea memoriei program (internă, externă)

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)

27. Organizarea memoriei interne de date.

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.

28. Caracteristicile zonei inferioare vs. superioare (capacitate, mod de adresare).

-ambele zone ocupa 128 de locatii de memorie ( zona inferioara intre 00h-7Fh, zona superioara
intre 80h-FFh)

-zona inferioara se adreseaza direct(prin valoarea adresei indicate de instructiune) cat si


indirect(adresea se afla intr-un registru indicat de instructiune), iar cea superioara doar
indirect(printr-un registru de pointer de 8 biti)

29. Zona registrelor cu funcții speciale (ce conține, mod de adresare)

-reprezinta spatiul de I/E al microcontrolerului

-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

-poate fi adresat doar direct prin specificarea valorii adresei de catre


instructiuni

30. Configurația detaliata a zonei inferioare.


-de la adresa 00h la 1Fh, se afla 4 bacuri de register de uz general, a cate 8 registre (R0-R7)

- 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

31. Funcționarea stivei la MCS-51.

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

33. Bancurile de registre R0-R7 - mod de organizare și de selecție

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.

34. Registre SFR adresabile pe bit (localizare, adrese de bit).

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

36. Conectarea memoriei externe de date la MCS-51.

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.

Pentru încărcarea programului, memoria comună e folosită ca memorie de date.

Pentru înscriere se activează semnalului 𝑊𝑅 ,̅̅ conectat la linia 𝑊̅𝐸̅


̅ .

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 𝐶𝑆̅).

38. Ciclul mașină la MCS-51 (durată, operații efectuate)

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.

40. Inițializarea registrelor interne la MCS-51 la resetare.

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

-genereaza o magistrala de adrese si date utilizata la aceesul la memoria program si la memoria


de date

-pot fi folosite ca porturi de I/E de uz general

42. Funcții alternative la P1 și P3.

-pot fi folosite ca porturi de I/E de uz general

-sunt folositi implicit de catre perifericele interne, daca sunt activate

43. Condiții de utilizare a pinilor porturilor ca Intrare sau Ieșire la MCS-51

-Dacă nu se utilizează memorie externă, P0 și P2 pot fi folosite ca porturi de I/E de uz general, la


fel ca porturile P1 și P3.

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.

46. Limbaj mașină – limbaj de asamblare

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

47. Unelte de dezvoltare programe – asamblor (assembler), compilator (compiler), editor de


legături (linker), simulator, programator, depanator (debugger).

Asamblorul este un program ce stabileste si recunoaste (impreuna cu setul de instructiuni


al microporcesorului) urmatoarele reguli: cunoasterea instructiunilor
microprocesorului( numele, operanzii pe care ii utilizeaza, efectul produs in urma
executiei,contextul de folosire), organizarea fisierului sursa( formatul unei linii de text,
modul de indicare a adreselor instructiunilor, modul de definire al secventelor de
instructiuni, al constantelor si variabilelor, modul de amplasare al codului si datelor in
spatiul de memorie, definirea adreselor de memorie, accesul la dispozitivele de I/E etc).

Compilatorul este un program ce translateaza limbajele de nivel mai inalt ( ex limbajul


C), care simplifica scrierea programelor sursa, dar cu o penalizare in cee ace priveste
viteza de executie si dimensiunile.

Codul sursă se împarte de obicei în mai multe fișiere, care se asamblează/compilează


separat. Apoi se utilizează un program denumit editor de legături (linker), care pune
modulele generate de asamblor/compilator într-un singur fișier binar executabil.

Testarea/depanare codului generat se poate face direct pe sistemul țintă cu microprocesor


(target system) sau într-un simulator software, care permite testarea anumitor funcții și
în absența sistemului fizic cu microprocesor.
Aceleași programe utilitare pot avea facilități de lansare în execuție a programului
încărcat și de testare/depanare (debugger): execuție pas cu pas, instrucțiune cu
instrucțiune, inserare a unor puncte de oprire (breakpoint), vizualizarea unor variabile din
registre și din memorie, astfel încât să se poată urmări și verifica modul de execuție al
codului, evoluția datelor și evenimentele apărute pe parcursul rulării.

48. Instrucțiuni de transfer – descriere operație, surse și destinații posibile, localizarea


operanzilor, efecte asupra indicatorilor de condiții

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

Instrucțiuni aritmetice, pentru efectuarea unor operații aritmetice de adunare / scădere /


înmulțire / împărțire între operanzi de tip întreg, cu sau fără semn. Instrucțiunile trebuie
să indice tipul operației, numărul de operanzi (1, 2 sau mai mulți), valorile sau localizarea
acestora (registre, memorie, porturi de I/E), precum și locul unde se va memora rezultatul
operației. De regulă, tipul operației este indicat de numele instrucțiunii, cele mai multe
instrucțiuni aritmetice au 2 operanzi principali, iar unul dintre aceștia este amplasat
implicit în registrul acumulator, care memorează și rezultatul operației (dacă arhitectura
este orientată pe acumulator). Excepție fac instrucțiunile de incrementare/decrementare,
când unul din operanzi are implicit valoarea 1, precum și cazul în care se utilizează un al
treilea operand, care este indicatorul de 7 transport/împrumut (Carry). Instrucțiunile
aritmetice afectează indicatorii de condiții și pot aduce prin valorile lor informații
suplimentare referitoare la rezultatul obținut.

50. Instrucțiuni logice - tipuri de operații, localizarea operanzilor, efecte asupra indicatorilor de
condiții

Instrucțiuni logice, pentru efectuarea unor operații booleene de tip ȘI/SAU/SAU


exclusiv între operanzi de tip întreg fără semn. Ca și cele aritmetice, instrucțiunile logice
trebuie să indice tipul operației, numărul de operanzi (1 sau 2), valorile sau localizarea
acestora (registre, memorie, porturi de I/E), precum și locul unde se va memora rezultatul
operației. De regulă, tipul operației este indicat de numele instrucțiunii, cele mai multe
instrucțiuni logice au 2 operanzi principali, iar unul dintre aceștia este amplasat implicit
în registrul acumulator, care memorează și rezultatul operației (dacă arhitectura este
orientată pe acumulator). Excepție fac instrucțiunile de deplasare/rotire, când se utilizează
un singur operand, amplasat de regulă în acumulator (dacă există). Instrucțiunile logice
afectează indicatorii de condiții și pot aduce astfel informații suplimentare referitoare la
rezultatul obținut

51. Instrucțiuni de ramificare – tipuri de ramificare, moduri de realizare, utilizarea stivei

Instrucțiuni de ramificare, folosite pentru modificarea secvenței liniare de instrucțiuni,


în ordinea crescătoare a adreselor de memorie program indicată de numărătorul de
program (PC). Ele se execută prin modificarea conținutului registrului PC, care determină
efectuarea unui salt 8 în program la o altă instrucțiune (de la noua adresa din PC) decât
cea care ar fi urmat în mod implicit, prin incrementarea PC.

Există două tipuri de instrucțiuni de ramificare:

- Instrucțiuni de salt (Jump) - fără posibilitatea de întoarcere și reluare a execuției


din locul din care se face saltul - instrucțiuni care pur și simplu modifică conținutul
registrului PC, fără memorarea valorii anterioare, care indică instrucțiunea următoare în
ordine natural
- Instrucțiuni de apel (Call)/revenire (Return) - cu posibilitatea de întoarcere
ulterioară și de continuare a execuției cu instrucțiunea care urma în ordine naturală,
deoarece înainte de modificarea registrului PC de către instrucțiunea de apel, conținutul
acestuia este salvat în vârful stivei. Ulterior, o instrucțiune de revenire extrage adresa din
vârful stivei și prin încărcarea ei în registrul PC permite continuarea execuției cu
instrucțiunea care urma în program imediat după cea de apel, în ordinea crescătoare a
adreselor.

52. Instrucțiuni de control – tipuri de operații

Instrucțiuni de control specifice, folosite pentru modificarea unor locații interne


speciale care determină comportarea microprocesorului în diverse situații, cum ar fi
oprirea în așteptarea unor evenimente externe sau validarea/inhibarea cererilor de
întrerupere

53. Modul de adresare directă – unde și cum este localizat operandul, exemple

- operandul este specificat în instrucţiune printr-o adresă de 1 octet.

Numai RAM-ul intern şi zona SFR pot fi adresate direct.

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

- instrucţiunea precizează registrul care conţine adresa operandului.

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

-nu se specifică explicit registrul care conţine operandul.

- foloseşte registrele speciale, în acest caz A, B, DPTR, sau fanionul de transport, C.

Instrucţiunile care folosesc acest mod de adresare codifică registrul sau fanionul folosit
implicit în opcodul instrucţiunii

Ex: MUL AB ; înmulţeşte valoarea octetului din A cu ce a octetului din B;


rezultatul în BA

56. Modul de adresare imediată - unde și cum este localizat operandul, exemple

-operandul se află cuprins în instrucţiune, imediat după opcod.

În instrucţiunile cu adresare imediată operandul trebuie precedat de caracterul „#”.

Ex: MOV A,#30h ; în A se încarcă constanta 30h

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

- deplasamentul, de un octet cu semn (-128127), se adună la conţinutul registrului PC


pentru a calcula adresa la care va avea loc saltul.

Se utilizează în instrucţiunile de ramificare, deplasamentul fiind indicat simbolic prin rel.

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 pentru manipularea variabilelor booleene;

 instrucţiuni de ramificare.

60. Din ce este compus și cum funcționează un numărător de evenimente (counter)?

Timerele 0 şi 1 pot realiza două tipuri de funcţii:


 temporizator (timer)

 numărător (counter)

Funcţionarea ca numărător de evenimente 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. Pinii T0 şi T1 sunt testaţi în starea S5P2 a fiecărui ciclu maşină. Se consideră că
a apărut un front descrescător dacă un pin este găsit în “0” logic, după ce în ciclul maşină
anterior fusese găsit pe “1” logic. Incrementarea se produce în starea S3P1 a ciclului
maşină următor celui în care a fost detectată tranziţia activă. Semnalul pe pinul de intrare
trebuie să fie menţinut nemodificat pe durata a cel puţin un ciclu maşină (12 perioade ale
oscilatorului). 3 Rezultă - frecvenţa maximă a semnalului pe pinul de intrare (respectiv
intervalul minim dintre două evenimente), nu trebuie să depăşească 1 /24 din frecvenţa
oscilatorului (500 KHz la fOSC = 12 Mhz, respectiv 2 μs).

61. Din ce este compus și cum funcționează un temporizator (timer)?

Timerele 0 şi 1 pot realiza două tipuri de funcţii:

 temporizator (timer)

 numărător (counter)

Funcţionarea ca temporizator Un numărător de 8 sau 16 biţi este incrementat în mod


automat la fiecare ciclu maşină, deci cu o frecvenţă egală cu 1 /12 din frecvenţa
oscilatorului.

62. Surse posibile pentru impulsurile de incrementare a numărătoarelor  la T0 și T1

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.

63. Cum poate fi pornită/oprită prin program numărarea la timerele 0 și 1?


 numai prin program, cu ajutorul bitului TR0/TR1 (Timer Run) din TCON, dacă bitul
GATE corespunzător din TMOD este poziţionat pe “0”;

64. Cum poate fi pornită/oprită prin semnal extern numărarea la timerele 0 și 1?

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

65. Cum poate fi detectată depășirea numărătoarelor la T0 și T1?

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.

66. Cum se incrementează numărătoarele la T0 și T1 în modurile 0 și 1?

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.

Deci, în modul 0, numărătorul are în total 13 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.

67. Cum se incrementează numărătoarele la T0 și T1 în modul 2?

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

68.Cum se selectează modul de lucru pentru T0 și T1?

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.

68. Cum funcționează T0 în modul 3?

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.

69. Ce se întâmplă cu T1 în modul 3?


Cel de-al doilea canal(al timerului 0) , 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).

70. Cum funcționează T2 în modul captură?

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 10 pe intrarea
T2EX determină “captarea” conţinutului registrelor TL2 şi TH2 în registrele RCAP2L şi
respectiv RCAP2H.

71. Cum funcționează T2 în modul reîncărcare?

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 10 pe T2EX, va fi
realizată reîncărcarea pe 16 biţi şi EXF2 va fi setat

72. Ce sunt întreruperile?

Intreruperile sunt evenimente generate asincron față de codul nostru care trebuie să capteze


atenția procesorului pentru a fi rezolvate imediat. Altfel spus, în timpul execuției unui program,
dacă este generată o întrerupere, procesorul va întrerupe firul normal de execuție după
terminarea instrucțiunii curente și va trata întreruperea.

73. Cum funcționează mecanismul de întreruperi?

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.

Solicitările generate de flagurile de întrerupere trebuie să rămână în aşteptare până când


ajung să fie deservite. Dacă un flag de întrerupere este resetat prin program înainte ca
întreruperea în aşteptare asociată să ajungă să fie acceptată de unitatea centrală, atunci cererea de
întrerupere se pierde, fără a mai fi tratată.

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

În alte cazuri, rămâne în sarcina rutinei de tratare a întreruperii să reseteze flagul:

 RI+TI, precum şi IE0, IE1 - dacă sunt active pe nivel.

La acceptarea întreruperii, efectul instrucţiunii de apel (LCALL) salvează în stivă adresa


următoarei instrucţiuni din programul întrerupt, apoi încarcă registrul PC cu adresa de tratare
corespunzătoare întreruperii.

Secvenţa de instrucţiuni care începe la această adresă (denumită şi rutină de tratare a

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

Instrucţiunea RETI are două funcţii:

- informează sistemul de întreruperi despre terminarea rutinei de tratare şi permite astfel


şi tratarea cererilor de pe acelaşi nivel sau de pe nivelurile inferioare (EOI);

- reface de pe stivă (la fel ca şi o instrucţiune RET) conţinutul registrului PC salvat la


intrarea în rutina de întrerupere, permiţând astfel continuarea programului întrerupt.

74. De ce sunt utilizate întreruperile, care sunt avantajele lor?

Microcontrolerele din familia MCS 51 şi compatibile dispun de un controler de întreruperi


pentru tratarea cererilor multiple. Numărul de linii de întrerupere şi d

75. Care sunt sursele de întrerupere la 8051 (cele 5 surse standard)?

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.

Cele 5 surse de întrerupere se regăsesc la toate microcontrolerele compatibile MCS 51.

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

79. Care este rolul flagului de validare globală a întreruperilor?

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.

80. Când și cum sunt detectate cererile de întrerupere?

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.

81. Care sunt condițiile în care este acceptată o cerere de întrerupere?

Solicitările generate de flagurile de întrerupere trebuie să rămână în aşteptare până când


ajung să fie deservite. Dacă un flag de întrerupere este resetat prin program înainte ca
întreruperea în aşteptare asociată să ajungă să fie acceptată de unitatea centrală, atunci
cererea de întrerupere se pierde, fără a mai fi tratată.
În unele cazuri, flagul de întrerupere este resetat automat, prin hardware, în momentul în
care întreruperea asociată este acceptată

82. Ce se întâmplă la acceptarea unei cereri de întrerupere?

La acceptarea întreruperii, efectul instrucţiunii de apel (LCALL) salvează în stivă adresa


următoarei instrucţiuni din programul întrerupt, apoi încarcă registrul PC cu adresa de tratare
corespunzătoare întreruperii.
Secvenţa de instrucţiuni care începe la această adresă (denumită şi rutină de tratare a
î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.
Instrucţiunea RETI are două funcţii:
- informează sistemul de întreruperi despre terminarea rutinei de tratare şi permite
astfel şi tratarea cererilor de pe acelaşi nivel sau de pe nivelurile inferioare (EOI);
- reface de pe stivă (la fel ca şi o instrucţiune RET) conţinutul registrului PC salvat la
intrarea în rutina de întrerupere, permiţând astfel continuarea programului întrerupt.

83. Care sunt adresele la care trebuie să se afle amplasate rutinele de tratare a întreruperilor?

La acceptarea întreruperii, efectul instrucţiunii de apel (LCALL) salvează în stivă adresa


următoarei instrucţiuni din programul întrerupt, apoi încarcă registrul PC cu adresa de tratare
corespunzătoare întreruperii.
Secvenţa de instrucţiuni care începe la această adresă (denumită şi rutină de tratare a
î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.
RI+TI, precum şi IE0, IE1

84. Ce se întâmplă dacă apar cereri de întrerupere, acestea sunt


validate, dar nu a fost prevăzută o secvență de tratare pentru
acea întrerupere la adresa corespunzătoare?
85. Odată acceptată cererea, ce se întâmplă cu flagul de
întrerupere (se șterge automat/trebuie șters prin program/poate
să nu fie șters?

Se resetează automat.

86. Cum se ajunge la secvență de tratare a întreruperii (rutina de întrerupere)?


87. Cum se revine la instrucțiunea următoare din programul principal, la terminarea tratării
întreruperii?
88. Într-o rutină de tratare a întreruperii putem modifica valorile registrelor? Ce se întâmplă dacă
le modificăm?
89. Ce se întâmplă dacă există mai multe cereri de întrerupere active la un moment dat? Care
dintre cereri e servită mai întâi?

Î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):

 prioritatea nivelului de întrerupere;

 prioritatea individuală, în interiorul aceluiaşi nivel

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?

Sursa de intrerupere se poate afla pe 2 niveluri de prioritate.

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?

Toate microcontrolerele MCS-51 şi compatibile conţin o interfaţă serială standard (Serial


Port), având structura şi funcţionarea descrise în cele ce urmează.

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.

Viteza de comunicatie programabila sau variabila.

95. Structura transmițătorului portului serial.

transmiţătorul are doar un singur registru tampon, care îndeplineşte ambele functii ale registrului
serie/parallel si registrului de interfata.

96. Structura receptorului portului serial.

Este prevăzut cu două registre tampon: un registru serie/paralel şi un registru de interfaţă cu


unitatea central.

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.

Modul 3: asincron, identic cu modul 2, dar viteza de comunicaţie este variabilă

100. Sursa semnalului de tact pentru portul serial în modul 2.

în modurile 1, 2 şi 3 (asincrone) - de către bitul de START recepţionat, dacă REN=1


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.

101. Sursa semnalului de tact pentru portul serial în modurile 1 și 3.

Timerul 1 este utilizat de regulă ca generator de tact pentru Portul serial

în modurile 1, 2 şi 3 (asincrone) - de către bitul de START recepţionat, dacă REN=1

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.

102. Cum se declanșează transmisia unui caracter?

Iniţierea transmisiei se realizează la fiecare operaţie de scriere în SBUF

terminarea transmisiei unui caracter (TI=1)

103. Cum se declanșează recepția unui caracter?

 în modul 0 (sincron) - de către condiţiile: RI=0 şi REN=1

 în modurile 1, 2 şi 3 (asincrone) - de către bitul de START recepţionat, dacă REN=1.

 recepţia unui nou caracter (RI=1)


 se va genera o întrerupere de recepţie numai dacă bitul de STOP recepţionat şi
încărcat în RB8 are valoarea “1”. Aceasta indică recepţia unui caracter terminat
corect, cu un bit de STOP=1.

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.

Acest flag generează o întrerupere de transmisie, care poate fi utilizată de unitatea


centrală pentru a înscrie în SBUF următorul caracter al unui mesaj.

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.

S-ar putea să vă placă și