Sunteți pe pagina 1din 10

Frecventa de overflow este frecventa cand timer-ul face o depasire si se trece la urmatoarea adresa din

tabela de cautare. Avem 0x31-0x20(hexa) = 49 – 32 = 17 locatii de memorie in tabela de cautare.

Calculam timpul necesar sa se treaca de la o adresa la alta, T=1/F = 1/6.666 = 0.15ms.

Pentru a genera semnalul parcurgem toate locatiile de memorie, deci avem o durata a semnalului egala
cu numarul locatiilor de memorie parcurse inmultit cu timpul de trecere de la o adresa la alta.

durata = 0.15 * 17 = 2.55ms

Calculam de cate trepte avem nevoie pentru a genera semnalul: NR_trepte = T/ T_treapta = 10

Pentru a genera semnalul triunghiular, acesta pleaca de la un minim, ajunge la un maxim apoi se
intoarce la minim. Noi, prin secventele de cod din problema setam limitele inferioare, superioare si
pasul. Pentru a parcurge semnalul de la minim la maxim avem nevoie de jumatate din numarul total de
trepte:

Deci noi, in cazul asta, folosim 10/2 = 5 trepte intre min si max.
Ne ramane sa cautam care din variante are 5 trepte intre min si max.

Pentru ultima varianta, (0x50-0x00)/0x10 = 5, deci, aceasta e varianta corecta.

Diferenta a doua numere, pe aceasta arhitectura, se face mereu cu carry

In A avem 0x73 si noi, prin SUBB A, #0x80 facem diferenta intre numarul 0x73 si 0x80 CU CARRY!!

0x73-0x80-0x01 = 0xF2

Putem folosi calculatorul si sa ne gandim la faptul ca acumulatorul este pe 8 biti, deci o sa luam numai
ultimele 2 numere din rezultat.
Pentru a RESETA bitii, folosim ANL, deoarece AND intre un bit si 0 ne da 0, AND intre un bit si 1 ne da
acel bit.

Pentru a SETA bitii, folosim ORL, deoarece OR intre un bit si 1, ne da mereu 1 si OR intre un bit si 0 ne da
acel bit.

b7 b6 b5 b4 b3 b2 b1 b0

Vrem sa setam bitii 4 si 3, deci va trebui sa facem ORL intre numarul in binar de mai sus si un numar ce
are pe pozitiile 4 si 3 1, in rest 0

deci

b7 b6 b5 b4 b3 b2 b1 b0

0 0 0 1 1 0 0 0

------------------------------------

b7 b6 b5 1 1 b2 b1 b0

Convertim numarul 00011000 in hexa, avem 0x18. Deci raspunsul corect este ORL 0x50, #0x18

!!!ATENTIE PENTRU URMATORUL TEST, A SE VEDEA CE FAC NOT SI XOR!!!


in DPTR avem adresa primei valori din tabela de cautare, adica adresa lui 0x80.

Prin comanda movc A, @A+DPTR, copiem in A valoarea de la adresa A+DPTR.

0x1E = 30

Deci mutam in acumulator valoarea cu numarul 30 din tabela, 0x4f

!!!ATENTIE, INCEPEM NUMARATOAREA DE LA 0!!!

0x80 – valoarea cu numarul 0,

0x98 – valoarea cu numarul 1

0xb0 – valoarea cu numarul 2, etc


Un DAC converteste valori in tensiuni. Tensiunea de referinta este tensiunea maxima pe care un DAC o
poate avea la iesire, pentru o valoare maxima a numarului de la intrare.

Pe 8 biti, valoarea maxima este 2^8-1 = 255.

0xF4 = 244

Regula de 3 simpla

255 ........ 3V

244 ........ xV

x= 3*244/255 = 2.87V

In laboratorul 2, foloseam 9 stari posibile(0 leduri pornite, 1 led pornit, 2 leduri pornite... 8 leduri
pornite), adica, pentru anumite valori ale tensiunii de intrare aprindeam un anumit numar de leduri.

Numarul maxim pe care il poate da ADC-ul la iesire este 255(ADC-ul are iesirea pe 8 biti), corespunzator
pentru 8 led-uri pornite.

Valoarea din registrul B este numarul cu care impartim rezultatul de la iesirea ADC-ului pentru a vedea
starea in care ne aflam. Pentru exemplul din laborator, avem 0x1C=28, deoarece 255/28 =
9(aproximativ) adica avem 9 stari.

Pentru 5 stari, 255/ x = 5, x = 255/5 = 51 = 0x33H


!!!ATENTIE, intrebarea poate fi reformulata intr-un alt test: „Calculati numarul de stari stiind ca in
aplicatia din laboratorul 2, registrul B are valoarea x”

sau

„Daca in aplicatia din laboratorul 2 avem valoarea X in registrul B/avem X stari posibile, calculati in ce
stare suntem daca la iesirea ADC-ului avem valoarea Y”

!!!Pentru ultima problema, atentie, daca rezultatul este 4.001 suntem in starea 4, daca rezultatul e
4.999 suntem tot in starea 4.

O conversie analog digitala este efectuata cand se face trecerea pinului P3.6 de la 0 la 1.

Pinul este initial pe 0(din enunt)

Luam fiecare varianta:

a. clr P3.6

setb P3.6

clr P3.6

- corecta, se face trecerea din 0 in 1 la comanda a 2-a

b. setb P3.6

clr P3.6

-corecta, se face trecerea din 0 in 1 la prima comanda

c. clr P3.6

setb P3.6

-corecta, se face trecerea din 0 in 1 la a 2-a comanda


d. setb P3.6

clr P3.6

setb P3.6

-corecta, se face trecerea din 0 in 1 si la prima si la a 3a comanda, deci avem chiar doua

e. setb P3.6

-corecta, pinul este 0 initial, la set trece din 0 in 1 si incepe conversia

f. clr P3.6

- gresita, pinul ramane pe 0

Pentru a afla offset-ul, concatenam numarul din P1(MARE ATENTIE LA NUMARUL DE BITI PE CARE
POATE FI SCRIS P1 si P2) cu numarul din P2.

P1 are 16 valori posibile deci este pe 4 biti

P2 are 64 valori posibile deci este pe 6 biti

0x2 pe 4 biti este 0010

0x0A pe 6 biti este 001010(adaugam zerouri in stanga pana ajungem la numarul de biti necesar)

Concatenam aceste 2 valori si obtinem 0010001010 = 0x08A

Pentru a intelege mai bine ce inseamna offset-ul, vezi tabela de cautare, unde P1 este numarul de linii si
P2 numarul de coloane, avem 8 linii adica 8 valori posibile, corespunzator cu 3 biti, 4 coloane, 4 valori
posibile, corespunzator cu 2 biti pt coloane.

Calculam un offset, in cazul lab3, P1 = 0x4, P2 = 0x1, adica linia 4, coloana 1. (!!!ATENTIE, LINIILE SI
COLOANELE SE NUMEROTEAZA DE LA 0!!!)

0x4 pe 3 biti este 100, 0x1 pe 2 biti este 01

Concatenam si avem 10001, in decimal 17. Deci offset-ul este 17.


Vedem ca pe pozitia 17 avem valoarea 0x67, adica valoarea de la linia 4 coloana 1.

Offset-ul este valoarea stocata in A

Avem nevoie de urmatoarea figura:

Ne uitam sa vedem care variante sunt bune:

a. Gate = 1

INT0 = 1

TR0 = 0

daca ne uitam pe figura observam ca rezultatul daca Timer0 nu este activ, este dat de formula:
AND(TR0, OR(INT0,NOT(Gate)))

AND(0,OR(1,NOT(1))) = AND(0,OR(1,0)) = AND(0,1) = 0 deci T0 nu este activ, raspuns corect

b. Gate = 0

INT0 = 0

TR0 = 1

AND(1,OR(0,NOT(0))) = AND(1,OR(0,1))= AND(1,1) = 1, T0 este activ, raspuns gresit

c. Gate = 1

INT0 = 0

TR0 = 1

AND(1,OR(0,NOT(1))) = AND(1,OR(0,0)) = AND(1,0) = 0, T0 nu este activ, raspuns corect

d. Gate = 1

INT0 = 1

TR0 = 1

AND(1,OR(1,NOT(1))) = AND(1,OR(1,0)) = AND(1,1) = 1, T0 activ, raspuns gresit

e. Gate = 0

INT0 = 1

TR0 = 1

AND(1,OR(1,NOT(0))) = AND(1,OR(1,1)) = AND(1,1) = 1, T0 activ, raspuns gresit

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