Sunteți pe pagina 1din 21

Colocviu SMP

1. Limbaj mașină – limbaj de asamblare

Limbajul masina este acel limbaj ce executa instructiunile(compuse din cuvinte


binare)amplasate in memorie in sensul crescator al adreselor in mod direct de
catre microprocessor.

Limbajul de asamblare= 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;un program in lumbajul de asamblare se scrie intr-un fisier text cu ajutorul
unui editor si se stocheaza pe un support de memorie de masa

2. Unelte de dezvoltare programe – asamblor (assembler),


compilator (compiler), editor de legături (linker), simulator,
programator, depanator (debugger).

Asamblor: cunoașterea instrucțiunilor microprocesorului: numele lor,


operanzii pe care îi utilizează, efectul produs în urma execuției lor, contextul în care
se pot folosi, precum și o serie de reguli pentru organizarea fișierului sursă:
formatul unei linii de text, modul de indicare a adreselor instrucțiunilor, modul de
definire al secvențelor de instrucțiuni (codul programului), al constantelor și
variabilelor (datele programului), modul de amplasare al codului și datelor în
spațiul de memorie, definirea adreselor de memorie, accesul la dispozitivele de I/E,
etc. Toate aceste reguli, împreună cu setul de instrucțiuni al microprocesorului sunt
stabilite de el

Compilator:este un limbaj de translatare care impreuna cu un limbaj de nivel


mai inalt(ex:C)ajuta la executia programelor cu o complexitate ridicata,prin
simplificarea programelor sursa dar afectand viteza de executie si dimensiunea
codului masina generat.
Editor de linkuri: pune modulele generate de asamblor/compilator într-un
singur fișier binar executabil;mai intai,codul sursa se imparte de obicei in mai multe
fisiere care se asambleaza separat.

Simulator+Programator+Depanator:

Pentru a fi executat de către microprocesor, fișierul executabil trebuie încărcat


în memoria sistemului cu microprocesor. Încărcarea programului executabil în
memorie se poate face prin programarea memoriei înafara sistemului (într-un
dispozitiv numit programator de memorii) sau în sistem (ISP – In System
Programming), prin aducerea memoriei ROM/FLASH în regim de programare. Altă
variantă este încărcarea programului executabil ca un bloc de date într-o zonă de
memorie RAM, de unde apoi microprocesorul îl poate extrage și executa
instrucțiune cu instrucțiune (memorie comună sau von Neumann).

Pentru aceasta se folosesc programe utilitare de încărcare care comunică cu


sistemul țintă, adică cu sistemul cu microprocesor pentru care a fost scris
programul. 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.

Simulator:utilizaat pentru testare/depanare a codului si a anumitor functii in


absenta unui sistem fizic cu microprocessor.

3. Instrucțiuni de transfer – descriere operație, surse și


destinații posibile, localizarea operanzilor, efecte asupra
indicatorilor de condiții
Utilizate pentru copierea continutului unei locatii sursa intr-o locatie
destinatie.Conditie:Dimensiunea celor doua locatii sa fie aceeasi.

Putem avea instructiuni de transfer intre oricare doua locatii de tip


registre,memorii si porturi I/E;Cazuri particulare: 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.); salvarea și refacerea
din vârful stivei a conținutului registrelor de uz general

Instructiunile de transfer nu afecteaza indicatorii de conditii,daca in transfer


nu este implicat ALU.

4. Instrucțiuni aritmetice – tipuri de operații, localizarea


operanzilor, efecte asupra indicatorilor de condiții

Utilizare:efectuarea unor operatii aritmetice de


adunare/scadere/inmultire/impartire intre operanza de tip intreg cu sau fara 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 detransport/împrumut (Carry). Instrucțiunile
aritmetice afectează indicatorii de condiții și pot aduce prin valorile lor informații
suplimentare referitoare la rezultatul obținut.
5. Instrucțiuni logice - tipuri de operații, localizarea operanzilor,
efecte asupra indicatorilor de condiții

Utilizare:efectuarea unor operatii boolene de tip Si/Sau/Sau Exclusiv intre


operanzi de tip intreg fara semn

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

6. Instrucțiuni de ramificare – tipuri de ramificare, moduri de


realizare, utilizarea stivei

Utilizare:modificarea secventei liniare de instructiuni in ordinea crescatoare a


adreselor de memorie program indicate de numaratorul de program.

Se executa prin modificarea continutului registrului PC,care determina efectuarea


unui salt in program la o alta instructiune decat cea care ar fi urmat in mor
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.

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

Utilizare:modificarea unor locatii interne speciale care determina comportarea


microprocesorului in diverse situatii,cum ar fi oprirea in asteptarea unor
evenimente externe sau validarea/inhibarea cererilor de intrerupere

8. 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 ;in A se incarca octetul din memoria interna de date la adresa 30h

9. Modul de adresare indirectă – unde și cum este localizat


operandul , ce registre se folosesc, exemple

In care 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 din RAM-ul intern (de 8 biţi), se utilizează registrele R0 sau R1
ale bancului de registre curent sau registrul indicator al vârfului stivei, SP. Pentru o
pagină de 256 octeţi din memoria RAM externă se utilizează tot unul din registrele
R0 sau R1 şi portul P2. În cazul adresării întregului spaţiu RAM extern de 64 Ko se
utilizează numai registrul DPTR. În sintaxa instrucţiunilor, 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
MOVX A, @R1 ; transferă în A conţinutul locaţiei din RAM extern adresată cu R1
MOVX A, @DPTR ; transferă în A conţinutul locaţiei din RAM extern adresată cu
DPTR

10. Modul de adresare implicită - unde și cum este localizat


operandul, exemple

In care nu se specifică explicit registrul care conţine operandul. Ca şi la


microprocesoarele de uz general adresarea implicită 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

11. Modul de adresare imediată - unde și cum este localizat


operandul, exemple

In care operandul se află cuprins în instrucţiune, imediat după opcod. În sintaxa


instrucţiunilor cu adresare imediată operandul trebuie precedat de caracterul “# ”.

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


12. Modul de adresare indexată - unde și cum este localizat
operandul , ce registre se folosesc, exemple

In care 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. Acest
mod de adresare se foloseşte doar la adresarea operanzilor stocaţi în memoria
program, facilitând procedura de consultare a tabelelor organizate în această
memorie (“lookup tables”), precum şi la o instrucţiune de salt indirect.

MOVC A, @A+DPTR ; în A se încarcă octetul din memoria program de la adresa


dată de A+DPTR

13. Modul de adresare relativă – cum se calculează adresa


efectivă (cea la care se face saltul), registrul folosit, exemple

In care 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. Acest mod de
adresare se utilizează în instrucţiunile de ramificare, deplasamentul fiind indicat
simbolic prin rel.

JNZ rel ; salt relativ la adresa instrucţiunii curente, dacă valoarea din A e diferită de
0

14. 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)
Trebuie vazuta in tabele instructiunea si interpretat de acolo

Note extra:

Scrierea programelor sursă în limbaj de asamblare necesită cunoaşterea:


- setului de instrucţiuni;
- directivelor de asamblare;
- regulilor sintactice de scriere a codului sursă

Din punct de vedere logic, un program poate avea acces la mai multe tipuri de
segmente de memorie:
 de cod (CODE);
 de date externe (DATA);
 de date externe (XDATA);
 de date interne (IDATA);
 de biţi în memoria RAM internă (BIT).

Un astfel de segment poate fi absolut:


 definit cu una din directivele CSEG, DSEG, XSEG, ISEG, BSEG;
 având adresa de încărcare stabilită de programator la scrierea programului sursă;

sau poate fi relocabil:


 definit cu directiva RSEG;
 caz în care adresa de încărcare va fi fixată ulterior, de către editorul de legături

Câmpul operand poate specifica:


 un nume de registru;
 o adresă de SFR;
 o constantă numerică sau simbolică de 1 sau 2 octeţi;
 o etichetă dintr-un segment de cod sau de date;
 o expresie aritmetică;

Dacă sunt doi operanzi:


- primul operand specifică destinaţia operaţiei;
- al doilea specifică sursa;
- cei doi operanzi se separă prin virgulă.

Operanzii de tip constantă pot fi exprimaţi în următoarele moduri:


1. O constantă zecimală precedată de caracterul ‘#’.
2. O constantă hexazecimală, care de asemenea trebuie să înceapă cu ‘#’ şi cu o cifră
(0-:-9) şi să se termine cu litera 'h’ (sau ‘H’).
3. O constantă octală care trebuie să înceapă cu ‘#’ şi să se termine cu litera ‘q’ (‘Q’).
4. O constantă binară, care trebuie să înceapă cu ‘#’ şi să se termine cu litera ‘b’ (‘B’).
5. Valoarea curentă a contorului de program (PC) sau adresa instrucţiunii curente, care
se specifică prin caracterul ‘$’.
6. O constantă ASCII inclusă între ghilimele simple.
7. Numele unei constante simbolice căreia asamblorul i-a atribuit o valoare numerică
8. Numele unei adrese simbolice (etichete), definite în segmentul de cod sau de date.
9. Numele unui registru SFR, adresa unei locaţii de memorie de RAM interne
adresate direct sau o adresă de bit.
10 . Expresii aritmetice şi logice - folosesc toate tipurile de date descrise mai sus şi
care constituie operanzii expresiei.

15. Din ce este compus și cum funcționează un numărător


de evenimente (counter)?

Numaratorul de evenimente este o functie a timerelor 0 si 1.Fiecare timer


conţine câte două registre de 8 biţi (TH0 şi TL0, respectiv TH1 şi TL1), folosite ca
numărător cu incrementare.

16. Din ce este compus și cum funcționează un


temporizator (timer)?

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.
17. Surse posibile pentru impulsurile de incrementare a
numărătoarelor  la T0 și T1

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 active

Nota: timerele 0 si 1 taskuri tipice de timp: realizarea de întârzieri programabile


(2.26), generarea unor semnale periodice la pinii porturilor I/E (2.27, 2.28),
măsurarea duratei unui impuls (2.29), numărător de evenimente externe

18. Cum poate fi pornită/oprită prin program numărarea la


timerele 0 și 1?

19. Cum poate fi pornită/oprită prin semnal extern


numărarea la timerele 0 și 1?

Funcţionarea celor două timere poate fi controlată prin intermediul a două


registre cu funcţii speciale: TCON şi TMOD.De la pinul T0/T1 (numărător de
evenimente), în funcţie de valoarea bitului C/din TMOD. T

20. Cum poate fi detectată depășirea numărătoarelor la T0


și T1?

Depăşirea unui contor divizor prin 16, fapt ce asigură sincronizarea transferului
biţilor.

În modul “reîncărcare”, ilustrat în fig.1.22, există de asemenea două opţiuni,


selectabile tot prin EXEN2 din T2CON. 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.

21. Cum se incrementează numărătoarele la T0 și T1 în


modurile 0 și 1?

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.

22. Cum se incrementează numărătoarele la T0 și T1 în


modul 2?

configurează registrele TLx ca numărătoare cu reîncărcare automată, cu


valoarea preprogramată în THx

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

Funcţiile de temporizator şi numărător pot fi îndeplinite în 4 configuraţii


hardware distincte, numite moduri de lucru. Ele se pot selecta, în mod
independent pentru fiecare din timerele 0 şi 1, prin perechea de biţi M1M0 din
TMOD.

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

Registrele TL0 şi TH0 formează două numărătoare/temporizatoare


independente de 8 biţi. Canalul realizat cu TL0 foloseşte biţii de control de la
Timerul 0: C/, GATE, TR0, şi TF0.

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

Timerul 1 este oprit. Canalul realizat cu TH0 poate lucra doar ca temporizator
(numărător de cicluri maşină) şi foloseşte semnalele TR1 şi TF1 de la Timerul 1. La
depăşire, ambele canale pot lansa cereri de întrerupere: TL0 prin TF0, iar TH0
controlează întreruperea Timerului 1.

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

În modul “captură” există două opţiuni care pot fi selectate prin bitul EXEN2 din
T2CON. Dacă EXEN2=0, atunci Timerul 2 lucrează ca un 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, Timerul 2 va avea o facilitate suplimentară: o tranziţie
1->0 pe intrarea T2EX determină “captarea” conţinutului registrelor TL2 şi TH2 în
registrele RCAP2L şi respectiv RCAP2H. Odată cu captarea informaţiei Timerului 2,
se setează şi fanionul EXF2 din T2CON şi se poate lansa o cerere de întrerupere
spre CPU.

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

În modul “reîncărcare”, există de asemenea două opţiuni, selectabile tot prin


EXEN2 din T2CON. 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.

Modul generator de semnal de tact pentru Portul serial este selectat prin
RCLK=1 şi/sau TCLK=1. Mai multe informaţii asupra acestui mod de funcţionare vor
fi prezentate în paragraful următor.

28. Ce sunt întreruperile?

Întreruperile sunt vectorizate şi vectorilor respectivi le sunt rezervate locaţii fixe


de tratare aflate la intervale de 8 octeţi, începând cu adresa 0003h. Întreruperilor
externe INT0 şi INT1 li se poate programa modul de prezentare a cererii (activare p
nivel sau pe front), prin intermediul biţilor IT0 şi respectiv IT1 din TCON
29. Cum funcționează mecanismul de întreruperi?

Mecanism: Generarea întreruperilor+ Validarea întreruperilor+ Prioritatea


întreruperilor+ Tratarea întreruperilor

30. De ce sunt utilizate întreruperile, care sunt avantajele


lor?

Sistemul de întreruperi este prevăzut şi cu posibilitatea programării individuale


a fiecărei surse de întreruperi pe unul din cele două niveluri de prioritate
permise. Acest lucru este posibil prin intermediul registrului IP (Interrupt
Priority),

31. Care sunt sursele de întrerupere la 8051 (cele 5 surse


standard)?

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!
INT1! şi ai microcontrolerului

32. Care sunt evenimentele care determină setarea


flagurilor de întrerupere?

Flagurile TF0 şi TF1 se poziţionează pe “1” la depăşirea capacităţii numărătorului,


şi pot genera întreruperi.

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.

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

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

35. Care este rolul flagului de validare globală a


întreruperilor?

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

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

Prin intermediul registrului IE (Interrupt Enable), adresabil la nivel de bit pot fi


validate/inhibate individual sau global toate cele 5 (6) surse de întreruperi.
Trebuie menţionat faptul că biţii neutilizaţi IE.6 şi IE.5 (ultimul numai la seria
8051) nu pot fi înscrişi cu “1” logic la programarea registrului IE.

37. Care sunt condițiile în care este acceptată o cerere de


întrerupere?

Conditii propriu-zise:

- nu există o întrerupere de prioritate mai mare sau egală în curs de tratare

- este ultimul ciclu maşină al unei instrucţiuni


- instrucţiunea curentă nu este RETI şi nici una care să acceseze registrele cu funcţii
speciale IE sau IP.

Prima condiţie amână răspunsul la o solicitare de întrerupere de prioritate mai


mică sau egală cu cea în curs de tratare.

A doua condiţie asigură terminarea instrucţiunii în curs înainte de a răspunde la


o solicitare de întrerupere

Cea de-a treia condiţie indică faptul că, dacă instrucţiunea curentă este RETI sau
accesează IE sau IP, se va mai executa încă cel puţin o instrucţiune până când se
va răspunde la o solicitare de întrerupere.

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

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.

39. Care sunt adresele la care trebuie să se afle amplasate


rutinele de tratare a întreruperilor?

adresa vectorului de întrerupere (LCALL)

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

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
41. Odată acceptată cererea, ce se întâmplă cu flagul de
întrerupere (se șterge automat/trebuie șters prin
program/poate să nu fie șters?

Se sterge automat

42. Cum se ajunge la secvență de tratare a întreruperii


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

43. Cum se revine la instrucțiunea următoare din


programul principal, la terminarea tratării întreruperii?

la revenirea dintr-o rutină de tratare, prin RETI, nu se acceptă nici o altă cerere
decât după execuţia următoarei instrucţiuni din program.

44. Într-o rutină de tratare a întreruperii putem modifica


valorile registrelor? Ce se întâmplă dacă le modificăm?

45. 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 :
- prioritatea nivelului de întrerupere;
-prioritatea individuală, în interiorul aceluiaşi nivel .

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

Atunci când apar simultan cereri de pe acelaşi nivel de prioritate, se


declanşează o secvenţă internă de interogare (“polling sequence”) care
determină cererea ce va fi servită. Acest procedeu asigură în interiorul
fiecărui nivel de prioritate rezolvarea ordinii de servire

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

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.


48. Cum află microcontrolerul că s-a terminat tratarea unei
cereri de întrerupere și de ce are nevoie să știe acest lucru?

49. Ce este un port serial, cum se face transferul


informației, prin comparație cu transferul paralel?

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


interfaţă cu unitatea centrală, iar transmiţătorul are doar un singur registru, care
îndeplineşte ambele funcţii. Transfer serial sincron vs. asincron – comparație.
50. Structura transmițătorului portului serial.

transmiţătorul are doar un singur registru, care îndeplineşte ambele funcţii.

posedă registre distincte pentru date: SBUF–T, respectiv SBUF–R, dar care sunt
“văzute” de către utilizator ca un singur registru – SBUF (Serial BUFfer register).

51. Structura receptorului portului serial.

Receptorul este dublu bufferizat, ceea ce permite începerea recepţionării unui


octet înainte ca precedentul să fi fost citit din registrul de recepţie.

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

asigură o funcţionare de tip registru de deplasare, având intrarea şi ieşirea


datelor pe linia RxD/P3.0, iar tactul de deplasare primit/generat pe linia
TxD/P3.1. Rata de comunicaţie în acest mod este fixă şi are valoarea fOSC /12,
fiind de 1Mbps la fOSC=12 MHz.

Transmisia este iniţiată de orice instrucţiune care foloseşte ca registru destinaţie


SBUF. De asemenea, blocul de control al transmisiei forţează în “1” logic cea de-a
9-a poziţie a registrului de deplasare. Transmisia începe cu bitul cel mai puţin
semnificativ al octetului de date şi se face în ritmul de 1 bit/ciclu. Odată cu
deplasarea biţilor la ieşire, în ritmul fixat prin TxD, registrul se completează cu
zerouri. Când şi cel mai semnificativ bit al cuvântului a fost transmis, cel de-al 9-
lea bit, care a fost setat pe “1”, ajunge în poziţia cea mai puţin semnificativă a
registrului de deplasare şi blocul de control dezactivează transmisia. Totodată se
realizează o ultimă deplasare şi se setează fanionul de întrerupere la transmisie
- TI din SCON, în al 10-lea ciclu maşină.

Recepţia este iniţiată printr-o comandă cu REN=1 în SCON, precedată de


resetarea bitului RI. Blocul de control al recepţiei înscrie biţii 11111110b în
registrul de deplasare .Iniţierea recepţiei are loc la detectarea bitului de start al
unui caracter. La fiecare bit recepţionat pe linia RxD, în acest registru are loc o
deplasare la stânga cu o poziţie, tot în ritmul de 1 bit/ciclu stabilit prin TxD.
Atunci când bitul “0” ajunge în poziţia din extrema stângă a registrului de
deplasare, blocul de control comandă încă o deplasare şi încărcarea registrului
SBUF cu valoarea recepţionată. În cel de-al 10-lea ciclu maşină de la înscrierea
comenzii în SCON recepţia este oprită şi se setează fanionul de întrerupere RI.

53. Transferul serial asincron – formatul unui caracter în


modul 1 (10 biti/caracter) – rolul bitului de START și al bitului
de STOP

permite o funcţionare de tip asincron (UART) cu un bit de START (“0” logic), 8 biţi
de date şi un bit de STOP (“1” logic). Viteza de comunicaţie este variabilă (110 Baud
÷ 62,5 KBaud) şi este controlată de Timerul 1 la 8051 sau de Timerul 2 (numai la
8052). De obicei, Timerul 1 se foloseşte în modul 2, cu auto-încărcare

Dacă valoarea acceptată la eşantionarea primului bit pe linia RxD nu este “0” (bitul
de START), logica de recepţie se resetează şi se aşteaptă o nouă tranziţie 10.
Procedura menţionată asigură rejecţia unor biţi de start falşi. Dacă bitul de start
este corect, acesta încărcarea registrului SBUF cu octetul recepţionat, setarea
fanionului RI şi încărcarea bitului de STOP în RB8. este transmis la intrarea
registrului de deplasare şi apoi sunt transmişi şi restul biţilor (data şi bitul de STOP).

Când bitul de START ajunge în poziţia extremă-stânga a registrului cu deplasare,


blocul de control al recepţiei determină încă o deplasare la stânga,

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

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.

un al 9-lea bit de date programabil

La transmisie, cel de-al 9-lea bit de date (TB8) poate fi forţat fie pe “0”, fie pe “1”. La
recepţie, cel de-al 9-lea bit de date ajunge în RB8 din SCON

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

Frecventa oscilatorului intern

56. Sursa semnalului de tact pentru portul serial în


modurile 1 și 3.

Viteza de comunicaţie este variabilă (110 Baud ÷ 62,5 KBaud) şi este controlată
de Timerul 1-folosit ca divisor de frecventa-la 8051 sau de Timerul 2 (numai la
8052)

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

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

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

Iniţierea recepţiei are loc:


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

60. Ce indică flag-ul RI și ce trebuie să facă programul când


acesta este setat?

În acelaşi scop, 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.

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