Sunteți pe pagina 1din 40

Universitatea Pitești

Facultatea de Electronică, Comunicații și Calculatoare


Programul de studii: Electronică Aplicată

Microsisteme cu microcontroelere
Proiect

Profesor îndrumător :
Prof. Univ. Dr. Ing. Șerban Gheorghe

Student:
Georgescu Radu Antonio EA 411

1
Cuprins:
TEMA DE PROIECTARE....................................................................................................................................................................... 3
CAPITOLUL 1 ..................................................................................................................................................................................... 4
Proiectarea Hardware: .................................................................................................................................................................. 4
1.1 Alegere celulă LED 7 segmente ........................................................................................................................................... 4
1.2 Proiectare circuite de amplificare ....................................................................................................................................... 4
1.2.1 Calcul circuite de amplificare ...................................................................................................................................... 7
1.3 Proiectare hardware afișaj multiplexat ........................................................................................................................... 11
1.4 Proiectare hardware tastatură multiplexată ..................................................................................................................... 13
1.5 Circuitul pentru reset microcontroller si oscilatorul cu cuarț ........................................................................................... 15
1.6 Proiectarea memoriilor .................................................................................................................................................... 16
1.6.1 Proiectarea memoriei ROM ...................................................................................................................................... 16
1.6.2 Proiectarea memoriei RAM ...................................................................................................................................... 20
1.7Manual de utilizare ............................................................................................................................................................ 23
1.8 SCHEMA HARDWARE FINALA ........................................................................................................................................... 24
Capitolul 2 ....................................................................................................................................................................................... 25
Proiectarea Software: ................................................................................................................................................................. 25
2.1 Organigrame generale....................................................................................................................................................... 25
2.1.1. Organigrame detaliate Program Principal .................................................................................................................. 26
2.1.1.a Programarea circuitelor de intrare/ieșire: .......................................................................................................... 26
2.1.1.b Programarea lucrului cu întreruperi.................................................................................................................... 27
2.1.1.c Organigrama detaliată gestionare activități Program Principal ......................................................................... 28
2.1.2 Organigrame detaliate TIMER0 .................................................................................................................................. 31
2.2 Tabelul de variabile definitive ............................................................................................................................................ 35
2.3 Cod ASM 8051 .................................................................................................................................................................. 36

2
TEMA DE PROIECTARE:
Să se proiecteze un microsistem electronic prin care se permite comanda și controlul unei
tabele cu afișare numerică, de tip text curgător la stînga, folosind celule LED cu șapte segmente.
Microsistemul se va proiecta folosind un MCU de tip 8051, configurat cu pinul EA = 0,
frecvența semnalului de ceas aplicat fiind 10.24 MHz.
Microsistemul va conține 10 kocteți memorie ROM, de tip 2716/2Kx8(organizarea 2Kx8),
respectiv 16 kocteți memorie RAM de tip 6216/2Kx8(cu organizarea 2Kx8).
Microsistemul va conține circuit(e) port paralel de tip 8255.
Microsistemul va gestiona o tastatură cu 18 taste și un afișaj matriceal cu 12/3x4
(cu organizarea 3x4) celule LED cu 7 segmente, având terminalul comun Anod și culoarea Yellow.
Atât tastatura cât și afișajul vor fi comandate în tehnica multiplexată. Celulele LED cu 7 segmente vor
fi așezate din punct de vedere mecanic pe o singură linie.
Tabela va dispune de un software realizat în limbaj de asamblare prin care se va permite
programarea informației numerice care se va afisa curgător (deplasare la stangă), cu orice valori
numerice, inclusiv spații goale.
Tabela va avea două moduri de lucru: programarea și funcționarea propriu-zisă.
În modul programare, va putea fi accesată orice celulă LED din tabelă care va putea fi programată cu
orice valoare numerică sau spațiu liber. Celula LED cu șapte segmente care urmează să fie programată
va fi iluminată intermitent (ON-OFF) cu o perioada de 1.1 sec și factor de umplere 1/2.
In modul funcționare propriu-zisă, informatia numerica va fi afisata pe celulele LED, deplasarea
textului la stănga facându-se cu viteza de 4.2 caractere/secundă.

Se cer:
- Proiectul în format scris care va conține 2 mari capitole: proiectarea hardware și proiectarea
software;
- Proiectarea hardware va conține demersul de proiectare pentru conectarea memoriilor, circuitelor
I/O, precum și o schemă hardware generala, cu toate circuitele utilizate și conexiunile dintre ele; va
fi prezentat modul de programare a tabelei prin folosirea tastelor (manualul de utilizare);
- Proiectarea software va conține organigrame generale, organigrame detaliate, software-ul în limbaj
de asamblare precum și lista (tabelul) variabilelor folosite pe parcursul proiectului, intr-un format
indicat (nr.crt., denumire variabilă, descriere variabilă, mod reprezentare, valoare de inițializare,
adresa de plasare în memoria RAM)

3
CAPITOLUL 1

Proiectarea Hardware:

1.1 Alegere celulă LED 7 segmente

Conform specificațiilor de proiectare, celulă LED 7 segmente cu terminal comun ANOD și culoare
YELLOW, am ales următoarea celulă LED http://www.farnell.com/datasheets/2244651.pdf
de la Vishay, cu următorele specificații:

Fig 1: specificații datasheet LED Yellow


Conform specificațiilor din datasheet 𝑈𝐿𝐸𝐷 = 2𝑉 și 𝐼𝐹 = 60𝑚𝐴 (curent repetitive care poate
susține valoarea de 40𝑚𝐴 pe fiecare segment al fiecărei celule LED – așa cum reiese din calculele
următoare)

1.2 Proiectare circuite de amplificare

Conform structurii afișajului multiplexat, 12 celule LED cu organizarea 3x4 , pentru fiecare
Segment al unui LED avem nevoie de un curent de 10𝑚𝐴, de unde rezultă că, pentru fiecare linie de
digiți avem nevoie de 4𝑥10𝑚𝐴 = 40𝑚𝐴 curent pe care trebuie să-l furnizăm prin fiecare circuit de
amplificare 𝐶𝐴1

4
ANOD 1 ANOD 2 ANOD 3 ANOD 4 D2
LED-YELLOW

Circuit de amplificare segmenti x21


RL1
7xCA1 DIGIT 1 DIGIT 2 DIGIT 3 DIGIT 4
R4(1) Q3
R4
BC546
21xCA1 7xCA1 DIGIT 5 DIGIT 6 DIGIT 7 DIGIT 8

7xCA1 DIGIT 9 DIGIT 10 DIGIT 11 DIGIT 12

Fig 2: Structura afisaj și circuite de amplificare Fig 3: Circuit de amplificare 𝐶𝐴1 pentru fiecare segment

Pentru a furniza curentul necesar fiecărui segment (40𝑚𝐴) am ales un transistor de mică
putere NPN în comutație și circuitul din figura 3.
https://www.tme.eu/Document/5df5e5de3563f28ea4fe4d6a436504e0/bc546.pdf
NPN BC 546 de la Diotec cu următoarele specificații :

Fig 4: Specificații datasheet BC 546

5
Pentru circuitul de amplificare și comanda pe anozi 𝐶𝐴2 avem nevoie de un curent de 840𝑚𝐴
din calculul următor :
- pe fiecare segment avem un curent de 40𝑚𝐴, fiecare LED are 7 segmente și,dacă toate ar fi
aprinse simultan curentul ar fi 7𝑥40𝑚𝐴 = 280𝑚𝐴. Pe fiecare coloana comandată de câte un anod
avem 3 celule LED => curentul necesar pe fiecare coloană 3𝑥280𝑚𝐴 = 840𝑚𝐴
Pentru circuitul de amplificare am ales
un transistor de mica putere NPN in
comutație BC 546 (acelasi de mai sus)
iar pentru a comanda anozii am ales
un transistor PNP de medie putere
în comutație BD 136 de la ON Semiconductor Fig 5: Circuit de amplificare 𝐶𝐴2

http://www.farnell.com/datasheets/2299809.pdf cu următoarele specificații :

Fig 6: Specificații datasheet BD 136

6
1.2.1 Calcul circuite de amplificare

+5V +5V
Circuit de amplificare anozi x4

R2

R3 Q2
BD136

R1(1) Q1
R1
BC546

D2
LED-YELLOW

Circuit de amplificare segmenti x21


RL1

R4(1) Q3
R4
BC546

Fig 7: Circuitul pentru afișajul multiplexat

Calcul rezistente conform parametrilor tranzistorilor:


Kirchhoff II pe ochiul care contine Q2 si Q3 pentru calculul rezistentei RL:
5𝑉−|−0.5𝑉|−2𝑉−0.2𝑉 2.3𝑉
5𝑉 − 𝑈𝐿𝐸𝐷 − 𝑉𝐸𝐶𝑠𝑎𝑡𝑄2 − 𝑅𝐿 · 𝐼𝐿𝐸𝐷 − 𝑉𝐶𝐸𝑠𝑎𝑡𝑄3 => 𝑅𝐿 = => 𝑅𝐿 = 40𝑚𝐴 => 𝑅𝐿 =57.5Ω
40𝑚𝐴

unde 𝐼𝐿𝐸𝐷=40𝑚𝐴 , 𝑈𝐿𝐸𝐷= 2𝑉 , 𝑉𝐸𝐶𝑠𝑎𝑡𝑄2 = −0.5𝑉, 𝑉𝐶𝐸𝑠𝑎𝑡𝑄3 = 0.2𝑉

Putererea disipata de RL: 𝑃𝐷𝑅𝐿 = 𝑅𝐿 · (𝐼𝐿𝐸𝐷 )2 = 57.5𝛺 · (40𝑚𝐴)2 => 𝑃𝐷𝑅𝐿 = 92𝑚𝑊

Calcul rezistenta 𝑅4 :
ℎ𝑓𝑒 𝑄3 = 120 => pentru un curent de colector de 40mA in baza trebuie sa avem :
𝐼𝐶𝑄3 40𝑚𝐴 5𝑉−𝑉𝐵𝐸𝑄3 4.3𝑉
𝐼𝐵𝑄3 = = => 𝐼𝐵𝑄3 = 333,3𝑢𝐴 => 𝑅4 = = 333.3𝑢𝐴 => 𝑅4 = 12.9𝐾𝛺
𝛽 120 333.3𝑢𝐴

2
Putererea disipata de 𝑅4 𝑃𝐷𝑅4 = 𝑅4 · (𝐼𝐵𝑄3 ) = 12.9𝐾𝛺 · (333.3𝑢𝐴)2 => 𝑃𝐷𝑅4 = 1.43𝑚𝑊

Puterea disipata de 𝑄3 𝑃𝐷𝑄3 =𝐼𝐶𝑄3 · 𝑉𝐶𝐸𝑄3 = 40𝑚𝐴 · 0.2𝑉 = 8𝑚𝑊 𝑃𝐷𝑄3 = 8𝑚𝑊
7
Rezultatul simularii imi arata un curent de colector
D1
LED-YELLOW
(curentul prin LED) de 43.3mA din cauza ca am
considerat 𝛽𝑄3 = 120 si, din simulare, a iesit 132.

D1(K)
I=0.0433619
RL
57.5

R4(1) R4(2) Q3
R4 I=0.000327788
BC546
12.9k

Fig 8: Simulare curent 𝐼𝐿𝐸𝐷 Fig 9: Simulare circuit 𝐶𝐴1

Calcul rezistente circuit amplificare anozi:


Din calculul curentului necesar in circuitul de amplificare anozi avem un necesar de 840mA.
Acoperitor, calculez pentru un curent de colector in Q2 de 1A
1𝐴
𝛽𝑄2 = 25 => 𝐼𝐵𝑄2 = = 40𝑚𝐴
25
Kirchhoff II pe ochiul care contine 𝑉𝐸𝐵𝑄2 , 𝑅3 , 𝑉𝐶𝐸𝑄1 =>
5𝑉−0.7𝑉−0,2𝑉 4.1𝑉
5V-|−0.7| − 𝑅3 · 𝐼𝐵𝑄2 − 𝑉𝐶𝐸𝑄1 = 0 => 𝑅3 = = = 102.5𝛺 𝑅3 = 102.5𝛺
40𝑚𝐴 40𝑚𝐴
2
Putererea disipata de 𝑅3 𝑃𝐷𝑅3 = 𝑅3 · (𝐼𝐵𝑄2 ) = 102.5𝛺 · (40𝑚𝐴)2 => 𝑃𝐷𝑅4 = 164𝑚𝑊
In nodul dintre 𝑅2 , 𝑅3 si 𝑄1 aleg valoarea curentului care trece prin 𝑅2 si intra in nod, sa fie la fel
cu valoarea curentului care trece prin 𝑅3 si intra in nod 𝐼𝑅2 = 𝐼𝑅3 = 40𝑚𝐴 => 𝐼𝐶𝑄1 = 𝐼𝑅2 + 𝐼𝑅3 = 80𝑚𝐴
5𝑉−0.2𝑉
𝑅2 = = 120𝛺 𝑅2 = 120𝛺
40𝑚𝐴
Putererea disipata de 𝑅2 𝑃𝐷𝑅2 = 𝑅2 · (𝐼𝑅2 )2 = 102𝛺 · (40𝑚𝐴)2 => 𝑃𝐷𝑅2 = 163𝑚𝑊
𝐼𝐵𝑄1 80𝑚𝐴
𝐼𝐶𝑄1 = 80𝑚𝐴 => 𝐼𝐵𝑄1 = = = 666.6𝑢𝐴
𝛽𝑄1 120
5𝑉−0.7𝑉
5V-𝑅1 · 𝐼𝐵𝑄1 − 𝑉𝐶𝐸𝑄1 = 0 => 𝑅1 = = 6.45𝑘𝛺 𝑅1 = 6.45𝑘
666.6𝑢𝐴
Putererea disipata de 𝑅1 𝑃𝐷𝑅1 = 𝑅1 · (𝐼𝑅1 )2 = 6.45𝑘𝛺 · (666.6𝑢𝐴)2 => 𝑃𝐷𝑅1 = 2.9𝑚𝑊

Puterea disipata de 𝑄1 𝑃𝐷𝑄3 =𝐼𝐶𝑄1 · 𝑉𝐶𝐸𝑄1 = 80𝑚𝐴 · 0.2𝑉 = 8𝑚𝑊 𝑃𝐷𝑄3 = 16𝑚𝑊

8
Puterea disipata de 𝑄2 𝑃2 =𝐼𝐶𝑄2 · 𝑉𝐶𝐸𝑄2 = 1𝐴 · 0.5𝑉 = 0.5𝑊 𝑃𝐷𝑄2 = 500𝑚𝑊

+5V

+5V

R2
120

I=0.0841278
+5V
R2(2)
I=0.0403221
R3 Q2
BD136
102.5 I=0.0407521
Q2(B)

R3(1)
I=0.0810742

I=0.0433757
Q2(C)
R1(1) R1(1) R1(2) Q1
V=5
R1 I=0.000648712
BC546
6.45k D1
LED-YELLOW

D1(K)
I=0.0433757
Fig 10: Simulare circuit 𝐶𝐴2

În schema electrică a circuitului,


circuitele de amplificare sunt grupate
intr-un bloc ierarhic

Fig 11: Bloc ierarhic circuite de amplificare

9
Fig 12 : Blocul circuitelor de amplificare

Circuitele de amplificare de pe fiecare anod, prin comanda primita, asigura aprinderea sau
stingerea coloanei de LED-uri aferente astfel:
- La comanda “1” logic se satureaza tranzistorul Q1, 𝑉𝐶𝐸𝑄1 = 0.2𝑉 => tensiunea in baza
tranzistorului Q2 <<tensiunea in emitorul tranzistorului PNP Q2 => Q2 in saturatie => aprinde coloana
de LED-uri aferente
- La comanda “0” logic, tranzistorul Q1 blocat, tensiunea in baza transitorului Q2≈ cu tensiunea
in emitorul lui Q2 => Q2 blocat

10
1.3 Proiectare hardware afișaj multiplexat

Frecventa pentru aprinderea ledurilor trebuie aleasă astfel încât ochiul uman să nu sesizeze
momentul când unele dintre leduri sunt stinse. Frecvența critică la care ochiul incă sesizează
pâlpâirea este 47𝐻𝑧. Pentru aprinderea multiplexată a LED-urilor alegem frecventa de 50𝐻𝑧.
1
Perioada aferentă frecvenței de 50𝐻𝑧 𝑇 = = 0.02𝑠 = 20𝑚𝑠
50𝐻𝑧

Structura afișajului conform datelor de proiectare este


DIGIT 1 DIGIT 2 DIGIT 3 DIGIT 4
de 12 celule LED cu organizarea 3x4. Pentru ca ilumintul
DIGIT 5 DIGIT 6 DIGIT 7 DIGIT 8
trebuie sa fie uniform, perioada de comanda de aprindere
DIGIT 9 DIGIT 10 DIGIT 11 DIGIT 12
a LED-urilor de pe anod trebuie să fie egală.
Fig 12 Structura afisaj LED

Pentru ca fiecare coloană să se aprindă cu aceeași intensitate, perioada de aprindere a întregului


afișaj trebuie împărțită la numărul de coloane.
𝑇 20𝑚𝑠
𝑇𝑎𝑝𝑟𝑖𝑛𝑑𝑒𝑟𝑒 𝑐𝑜𝑙𝑜𝑎𝑛ă = = = 5𝑚𝑠
4(𝑛𝑟 𝑑𝑒 𝑐𝑜𝑙𝑜𝑎𝑛𝑒) 4
ANOD 1
coloana
1

t
ANOD 2
coloana
2

t
ANOD 3
coloana
3

t
ANOD 4
coloana
4

5ms t

20ms

Fig 13: Perioada de multiplexare (baleiere) a afișajului LED


11
a0
b0
c0
d0
e0
f0
g0
ca1

ca2

ca3

ca4

ca1

ca2

ca3

ca4

ca1

ca2

ca3

ca4
a2
a1 b2
b1 c2
c1 d2
d1 e2
e1 f2
f1 g2
g1

Fig 14: Display-ul

Comanda circuitelor de amplificare pentru anozi este pe portul P1 al microcontrolerului 8051,


pinii P1.0,P1.1,P1.2,P1.3 iar circuitele de amplificare pentru afișaj sunt conectate la al 2-lea 8255
PA,PB,PC
anod comun hexa
* g f e d c b a tabel
0 1 1 0 0 0 0 0 0 C0h
1 1 1 1 1 1 0 0 1 F9h
2 1 0 1 0 0 1 0 0 A4h
3 1 0 1 1 0 0 0 0 B0h
4 1 0 0 1 1 0 1 1 9Bh
5 1 0 0 1 0 0 1 0 92h
6 1 0 0 0 0 0 1 0 82h
7 1 1 1 1 1 0 0 0 F8h
8 1 0 0 0 0 0 0 0 80h
9 1 0 0 1 0 0 0 0 90h
spatiu "_" 1 1 1 1 0 1 1 1 F7h
Fig 15: Tabel de adevăr pentru anod comun

12
1.4 Proiectare hardware tastatură multiplexată

+5V +5V +5V +5V +5V +5V


U15
D0 34 4
D0 PA0 linia1
D1 33 3
D1 PA1 linia2
D2 32 2 R230 R231 R232 R233 R234 R235
D2 PA2 linia3 10k 10k 10k 10k 10k 10k
D3 31 1
D3 PA3
D4 30 40
D4 PA4
D5 29 39
D5 PA5
D6 28 38 SUS
D6 PA6
D7 27 37
D7 PA7
5 18 linia1
RD PB0 col1
36 19 STANGA M DREAPTA
WR PB1 col2
9 20
A0 PB2 col3
8 21
A1 PB3 col4
35 22 linia2
RESET PB4 col5
23 JOS
PB5 col6
6 24
CS PB6
25
PB7 linia3

8255-2 14
PC0
15
PC1
16

col1

col2

col3

col4

col5

col6
PC2
17
PC3 a0 a0
13
PC4
PC5
12
11
Fig 16: Arhitectura hardware a tastaturii și porturile folosite
PC6
PC7
10 pentru identificare tastei apăsate
8255A

Comanda multiplexată a tastaturii, prin baleierea acesteia presupune emiterea unui “0” logic
pe fiecare din liniile matricei tastaturii. La fiecare emitere a unui “0” logic pe una dintre linii
presupune testarea fiecarei din cele 6 coloane => la fiecare baleiere se testează toate cele 18 taste.
Pentru ca ambele structuri hardware (afisarea multiplexată si tratarea tastaturii multiplexate)
se desfașoară in cadrul intreruperii TIMER care-mi oferă intreruperi la fiecare 5 ms și , la tratarea
afișării multiplexate avem aceeași perioadă de baleiere a coloanelor afișajului LED) iau si pentru
tratarea fiecarei taste din tastatură aceeasi perioada de 5ms => Timpul necesar pt baleierea unei
linii a tastaturii 5msx6=30ms
Timpul necesar pentru baleierea intregii tastaturi 5msx18=90ms (sau 30msx3linii)
Frecvența corespunzătoare pt baleierea intregii tastaturi la o perioadă de 90ms :
1 1000 11𝑡𝑎𝑠𝑡𝑒
𝑓= = ≈ 11 => putem administra o viteza de
90𝑚𝑠 90 𝑠
Pentru ca numărul de linii de iesire (3) + numărul de linii de intrare (6) =9, depăsesc numărul
de pini ai unui port, trebuie sa folosesc 2 porturi de la primul circuit 8255: PA cu pinii PA0,PA1,PA2
pentru baleierea liniilor tastaturii și, PB cu pinii PB0÷PB5 pentru citirea informației pe coloane
Pentru identificarea tastei apăsate am nevoie de testarea liniei și apoi a coloanei respective în
cazul în care o tastă e apăsată.

13
linie 1 5ms

col1 col2 col3 col4 col5 col6


30ms 90ms t
linie 2

col1 col2 col3 col4 col5 col6


t
linie 3

col1 col2 col3 col4 col5 col6


t

Fig 17: Baleierea tastaturii

Tastele folosite :
- M pentru programarea celulelor
- Stânga, Dreapta pentru a naviga stânga/dreapta spre celula pe vrem s-o programăm
- Sus,Jos pentru a incrementa/decrementa valoarea digitului curent

Pentru baleierea liniilor tastaturii restul biților portului PA, nefolosiți , îi trec in “1” logic,
urmând ca, la baleierea codului liniilor tastaturii, pentru a nu baleiea toti cei 8 biți ai portului, să
introduce o interogare suplimentară când codul depășește valoarea codului de baleiere pentru
ultima linie.

Cod de baleiere pentru linie => 0FEh linia 1 PA0 0 1 1 1


Și interogarea se face pentru cod 0F7h
linia 2 PA1 1 0 1 1

PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 linia 3 PA2 1 1 0 1
x x col6 col5 col4 col3 col2 col1 x PA3 1 1 1 0
0 0 1 1 1 1 1 1 x PA4 1 1 1 1
masca testare coloana 0011.1111=3Fh
x PA5 1 1 1 1
Fig 18: Cod mascare coloană x PA6 1 1 1 1
x PA7 1 1 1 1
FEh FDh FBh F7h

Fig 19: Cod baleiaj

14
Pentru testarea tastei apăsate trebuie să testez și codul de linie și codul de coloană pentru a
vedea care dintre taste e apăsată
LINIE
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 Cod linie
M 1 1 1 1 1 1 0 1 FDh
SUS 1 1 1 1 1 1 1 0 FEh
JOS 1 1 1 1 1 0 1 1 FBh
STANGA 1 1 1 1 1 1 0 1 FDh
DREAPTA 1 1 1 1 1 1 0 1 FDh

COLOANĂ
PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 Cod coloană Cod linie Cod coloană
M 0 0 1 1 1 1 0 1 3Dh M FDh 3Dh
SUS 0 0 1 1 1 1 0 1 3Dh SUS FEh 3Dh
JOS 0 0 1 1 1 1 0 1 3Dh JOS FBh 3Dh
STANGA 0 0 1 1 1 1 1 0 3Eh STANGA FDh 3Eh
DREAPTA 0 0 1 1 1 0 1 1 3Bh DREAPTA FDh 3Bh
Fig 20: Codurile pentru tastele folosite

În cadrul circuitului electric, rezistențele 𝑅230 ÷ 𝑅235 = 10𝐾𝛺 cu rol de limitare curent

1.5 Circuitul pentru reset microcontroller si oscilatorul cu cuarț


+5V

C1
XTAL1
RESET

C3 10pF
10uF

R1
100
X1 C2
RST
2

R2 XTAL2
8.2k
CRYSTAL
FREQ=10.24MHz 10pF

Fig 21 : Circuitul RESET Fig 21: Oscilatorul cu cuarț

15
1.6 Proiectarea memoriilor

Conform cerințelor, microsistemul are o memorie ROM cu dimensiunea 10 kocteți, cu


circuite de tip 2716/2Kx8 (organizarea 2Kx8), respectiv o memorie RAM cu dimensiunea 16 kocteți
de tip 6216/2Kx8 (cu organizarea 2Kx8).

1.6.1 Proiectarea memoriei ROM

U8
8 9
A0 D0
7 10
A1 D1
6 11
A2 D2
5 13
A3 D3
4 14
A4 D4
3 15
A5 D5
2 16
A6 D6
1 17
A7 D7
23
A8
22
A9
19
A10 Fig 23 : Structura blocului de memorie 2716
18
CE
20
OE
21
VPP
2716
Fig 22 : Circuitul 2716 Proteus

Pentru circuitul 2716/2kx8 avem 21 · 210 = 11 linii de adrese


Pentru memoria de 10 Kocteti necesară avem nevoie de
10𝑘·8
= 5𝑥1 circuite de memorie 2716 organizate pe 5 linii si 1 coloana
2𝑘·8

Conectarea liniilor 𝐴0 ÷ 𝐴10 se face la magistrala de adrese a microcontrolerului 8051 iar liniile
𝐷0 ÷ 𝐷7 la magistrala de date a microcontrolerului 8051
Chiar dacă pentru adresarea blocului de memorie avem nevoie de doar 11 linii de adrese, adresarea
va fi completă, folosind toate cele 16 linii de adrese ale magistralei de adrese
16
Întocmirea tabelului de adresare pentru circuitele de memorie folosite. Cu ajutorul tabelului
putem vedea adresa individuală a fiecărui circuit de memorie ROM

Fig 24: Tabelul de adresare memorii ROM

Zona I - A15÷A14 - cuprinde linii ale tabelului care rămân nemodificate pe toată gama de adrese
folosite pentru memorii
Zona II - A13÷A11 cuprinde linii de adrese care permit selecția individuală a circuitelor de memorie
Zona III - A10÷A0 cuprinde liniile de adrese care se aplica tuturor circuitelor de memorie (numărul
acestora este identic cu numărul intrarilor de adrese ale circuitelor respective)
Deoarece avem 3 linii de selecție a circuitelor de memorie, circuitul de decodificare si selecție
trebuie sa asigure un număr de minim 3 intrări de selecție si un număr de minim 5 ieșiri (câte
circuite de memorie avem de selectat)
Aleg un DMUX care, la 3 intrări de selecție => 23 = 8 iesiri => DMUX 1:8 circuitul 74138

Fig 25: Circuitul DMUX și conectarea acestuia la magistrala de adresa cu liniile de selecție 𝐴11 ÷ 𝐴13
17
̅̅̅̅𝑅𝑂𝑀0 ÷ 𝐶𝐸
Ieșirile DMUX-ului 𝐶𝐸 ̅̅̅̅𝑅𝑂𝑀4 selectează care dintre circuitele de memorie ROM e
̅̅̅̅̅̅̅̅ de la
selectat în vederea adresării iar validarea circuitelor memoriei ROM se face cu semnalul 𝑃𝑆𝐸𝑁
microcontrolerul 8051
În circuitul electric al microsistemului , memoriile ROM ca și memoriile RAM, se găsesc in
blocuri ierarhice.

A[0..15]
ROM
U4

D[0..7]
D0 2 19 A0 A0 D0
D0 Q0 A0 D0
D1 3 18 A1 A1 D1
D1 Q1 A1 D1
D2 4 17 A2 A2 D2
D2 Q2 A2 D2
D3 5 16 A3 A3 D3
U1 D3 Q3 A3 D3
D4 6 15 A4 A4 D4
D4 Q4 A4 D4
19 39 D0 D5 7 14 A5 A5 D5
XTAL1 XTAL1 P0.0/AD0 D5 Q5 A5 D5
38 D1 D6 8 13 A6 A6 D6
P0.1/AD1 D6 Q6 A6 D6
37 D2 D7 9 12 A7 A7 D7
P0.2/AD2 D7 Q7 A7 D7
18 36 D3 A8
XTAL2 XTAL2 P0.3/AD3 ALE A8
35 D4 11 A9
P0.4/AD4 LE A9
34 D5 1 A10
P0.5/AD5 OE A10
33 D6 A11
P0.6/AD6 A11
9 32 D7 74HCT573 A12
RST RST P0.7/AD7
A13
A12 ROM 10K
A13
P2.0/A8
21 A8 A14
A14
2716 5X(2KX8)
22 A9 A15
P2.1/A9 A15
23 A10
P2.2/A10
29 24 A11
PSEN PSEN P2.3/A11
30 25 A12
ALE ALE P2.4/A12 PSEN
31 26 A13
EA P2.5/A13 PSEN
27 A14
P2.6/A14
28 A15
P2.7/A15
1 10
com.a1 P1.0 P3.0/RXD
2 11 CCT003
com.a2 P1.1 P3.1/TXD
3 12
com.a3 P1.2 P3.2/INT0
4 13 A0
com.a4 P1.3 P3.3/INT1
5 14 A1
P1.4 P3.4/T0
6 15
P1.5 P3.5/T1
7 16
P1.6 P3.6/WR WR
8 17
P1.7 P3.7/RD RD RAM
80C51
A0 D0
A0 D0
A1 D1
A1 D1
A2 D2
A2 D2
A3 D3
A3 D3
A4 D4
A4 D4
A5 D5
A5 D5
A6 D6
A6 D6
A7 D7
A7 D7
A8
A8
A9
A9
A10
A10
A5

A11
A12
A11 RAM 16K
A12
A13
A13
6216 8X(2KX8)
A14
A14
A15
A15

WR WR CS 8255A
RD RD CS 8255B

CCT004

Fig 26: Blocurile ierarhice ale memoriilor ROM și RAM și conectarea lor la magistralele de adrese si date

18
BA0÷BA15

D0
D1
D2
D3
D4
D5
D6
D7
BD0÷BD7 PSEN

D0
D1
D2
D3
D4
D5
D6
D7
A[0..15] U9 D[0..7]
A0 8 9 D0
A0 D0
A1 7 10 D1
𝐶𝐸 𝑅 0 𝑃𝑆𝐸𝑁 A0
A2 6
A1
A2
D1
D2
11 D2
A3 5 13 D3
+5V A3 D3
A4 4 14 D4
A1 A4 D4
A5 3 15 D5
A5 D5
A6 2 16 D6
A2 A6 D6
R236 A7 D7
𝐶𝐸 𝐸 A8
1
23
A7 D7
17
A3 1k A8
A9 22

A0÷ 10
A9
A10 19
BA0÷BA10 11 ROM0 A4
21
A10
U3 A11
2716 2Kx8 A5
A11 1 15 18
A Y0 CE
A12 2 14 20
A6 B Y1 OE/VPP
A13 3 13
D0÷D7 C Y2
12 2732
A7 Y3
11
Y4 U2
8 A8
6
E1 Y5
10
A14 4 9 A0 8 9 D0
𝐶𝐸 𝑅 1 A9
A15 5
E2
E3
Y6
Y7
7 A1 7
A0
A1
D0
D1
10 D1
A2 6 11 D2
A2 D2
74HCT138 A3 5 13 D3
A10 A3 D3
A4 4 14 D4
A4 D4
A5 3 15 D5
A11 A5 D5
A6 2 16 D6
𝐶𝐸 𝐸 A7 1
A6 D6
17 D7
A12 A7 D7
A8 23
A8
A0÷ 10

A9 22
A13 A9
BA0÷BA10 11 ROM1 A10 19
A10
21
2716 2Kx8 A14 A11
18
A15 CE
20
OE/VPP
D0÷D7
2732
8 U5
𝐶𝐸 𝑅 2 A0 8
A0 D0
9 D0
A1 7 10 D1
A1 D1
A2 6 11 D2
A2 D2
A3 5 13 D3
A3 D3
A4 4 14 D4
A4 D4
A5 3 15 D5
A5 D5
𝐶𝐸 𝐸 A6 2
A6 D6
16 D6
A7 1 17 D7
A7 D7
A8
A0÷ 10

23
A8
BA0÷BA10 11 ROM2 A9
A10
22
A9
19
A10
2716 2Kx8 21
A11
18
CE
D0÷D7 20
OE/VPP
2732
8
𝐶𝐸 𝑅 3 U6
A0 8 9 D0
A0 D0
A1 7 10 D1
A1 D1
A2 6 11 D2
A2 D2
A3 5 13 D3
A3 D3
A4 4 14 D4
A4 D4
𝐶𝐸 𝐸 A5 3
A5 D5
15 D5
A6 2 16 D6
A6 D6
A7 1 17 D7
A0÷ 10

A7 D7
A8 23
BA0÷BA10 11 ROM3 A9 22
A8
A9
2716 2Kx8 A10 19
A10
21
A11
18
D0÷D7 20
CE
OE/VPP
8 2732

𝐶𝐸 𝑅 4 U7
A0 8 9 D0
A0 D0
A1 7 10 D1
A1 D1
A2 6 11 D2
A2 D2
A3 5 13 D3
A3 D3
A4 4 14 D4
𝐶𝐸 𝐸 A5 3
A4 D4
15 D5
A5 D5
A6 2 16 D6
A6 D6
A0÷ 10

A7 1 17 D7
BA0÷BA10 11 ROM4 A8 23
A7
A8
D7
A9 22
2716 2Kx8 A10 19
A9
A10
21
A11
D0÷D7 18
CE
20
OE/VPP
8
2732

Fig 27: Schema bloc a conectării memoriilor ROM


U8
Pentru simulare, deoarece circuitul 2716 nu are 8
A0 D0
9
7 10
A1 D1
6 11
A2 D2
model de simulare in Proteus, am folosit o memorie 5
4
A3 D3
13
14
A4 D4
3 15
A5 D5
2 16
ROM 2732 cu linia A12 conectată la masă pentru a avea 1
23
A6
A7
D6
D7
17
A8
22
A9
același număr de adrese ca si circuitul 2716 19
21
A10
A11
18
CE
20
OE/VPP
2732

Fig 28: Circuitul 27


19
1.6.2 Proiectarea memoriei RAM

Pentru memoria RAM cerința proiectului era o memorie 6216/2Kx8 dar, din cauza lipsei
circuitului respective în Proteus, am folosit o memorie similară 6116/2Kx8

U21
8 9
A0 D0
7 10
A1 D1
6 11
A2 D2 𝐶𝐸 𝐸 𝑊𝐸
5 13
A3 D3
4 14

A0÷ 10
A4 D4 11 RAM
3 15
A5 D5 6116 2Kx8
2 16
A6 D6
1 17
A7 D7 D0÷D7
23
A8
22
A9
19 8
A10
18 Fig 30 : Structura blocului de memorie 2716
CE
20
OE
21
WE
6116
Fig 29 : Circuitul 6116 Proteus RAM0
RAM1
RAM2
RAM3
Pentru circuitul 6116/2kx8 avem 21 · 210 = 11 linii de adrese RAM4
RAM5
Pentru memoria de 16Kocteti avem nevoie de
RAM6
16𝑘·8 RAM7
= 8𝑥1 circuite de memorie 6116 organizate pe 8 linii si 1 coloana
2𝑘·8

Conectarea liniilor 𝐴0 ÷ 𝐴10 se face la magistrala de adrese a microcontrolerului 8051 iar liniile
𝐷0 ÷ 𝐷7 la magistrala de date a microcontrolerului 8051
Chiar dacă pentru adresarea blocului de memorie avem nevoie de doar 11 linii de adrese, adresarea
va fi completă, folosind toate cele 16 linii de adrese ale magistralei de adrese.

20
Întocmirea tabelului de adresare pentru circuitele de memorie folosite. Cu ajutorul tabelului
putem vedea adresa 21ndividual a fiecărui circuit de memorie RAM și a circuitelor 8255
BA1 BA0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Hexa Circuit
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h
RAM0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FFh
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0800h
RAM1
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0FFFh
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1000h
RAM2
0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 17FFh
0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1800h
RAM3
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFFh
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h
RAM4
0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 27FFh
0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2800h
RAM5
0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 2FFFh
0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 3000h
RAM6
0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 37FFH
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 3800h
RAM7
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3FFFh
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4000h 8255(1) PA
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 4001h 8255(1) PB
0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 4002h 8255(1) PC
0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 4003h 8255(1) RCC
0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 4800h 8255(2) PA
0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 4801h 8255(2) PB
0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 4802h 8255(2) PC
0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 4803h 8255(2) RCC
zona II zona III
zona I

Fig 31 : Tabelul de adresare memorii RAM și a circuitelor 8255

Zona I - A15 - cuprinde linii ale tabelului care raman nemodificate pe toata gama de adrese
folosite pentru memorii
Zona II - A14÷A11 cuprinde linii de adrese care permit selectia individuala a circuitelor de memorie
Zona III – A10÷A0 cuprinde liniile de adrese care se aplica tuturor circuitelor de memorie (numarul
acestora este identic cu numarul intrarilor de adrese ale circuitelor respective)
Deoarece avem 4 linii de selectie a circuitelor de memorie circuitul de decodificare si selectie
trebuie sa asigure un numar de minim 4 intrari de selectie si un numar de minim 9 iesiri (cate
circuite de memorie avem de selectat)
Aleg un DMUX care, la 4 intrari de selectie => 24 = 16 iesiri => DMUX 1:16 circuitul 74154

21
U9 U18
23 1 23 1 CE RAM0
A 0 A11 A 0
22 2 22 2 CE RAM1
B 1 A12 B 1
21 3 21 3 CE RAM2
C 2 A13 C 2
20 4 20 4 CE RAM3
D 3 A14 D 3
5 5 CE RAM4
4 4
18 6 18 6 CE RAM5
E1 5 E1 5
19 7 19 7 CE RAM6
E2 6 A15 E2 6
8 8 CE RAM7
7 7
9 9 CS 8255A
8 8
10 10 CS 8255B
9 9
11 11
10 10
13 13
11 11
14 14
12 12
15 15
13 13
16 16
14 14
17 17
15 15
74HCT154 74HCT154

Fig 32: Circuitul DMUX 1:16 și conectarea acestuia la magistrala de adresa cu liniile de selecție 𝐴11 ÷ 𝐴14

Ieșirile DMUX-ului ̅̅̅̅


𝐶𝐸𝑅𝐴𝑀0 ÷ ̅̅̅̅
𝐶𝐸𝑅𝐴𝑀7 selectează care dintre cele 7 circuitele de memorie RAM
e selectat în vederea adresării, iar validarea circuitelor memoriei RaM se face cu semnalele 𝑅𝐷 ̅̅̅̅ și 𝑊𝑅
̅̅̅̅̅
̅̅̅̅8255𝐴 ș𝑖 ̅̅̅̅
de la microcontrolerul 8051 iar ieșirile 𝐶𝑆 𝐶𝑆8255𝐵 selectează care dintre cele 2 circuite 8255
e selectat. Saltul de adrese de la sfârșitul liniilor de adrese al primului 8255 până la cel de-al 2-lea
circuit 8255 a fost făcut pentru a avea pini de selecție separații pentru vele 2 circuite 8255
A[0..15]

U12 U11
D0 9 8 A0 A0 8 9 D0
D0 D0 A0 A0 D0
D1 10 7 A1 A1 7 10 D1
D1 D1 A1 A1 D1
D2 11 6 A2 A2 6 11 D2
D2 D2 A2 A2 D2
D3 13 5 A3 A3 5 13 D3
D3 D3 A3 A3 D3
D4 14 4 A4 A4 4 14 D4
D4 D4 A4 A4 D4
D5 15 3 A5 A5 3 15 D5
D5 D5 A5 A5 D5
D6 16 2 A6 A6 2 16 D6
D6 D6 A6 A6 D6
D7 17 1 A7 A7 1 17 D7
D7 D7 A7 A7 D7
RAM1 23 A8 A8 23
A8 A8
A0 22 A9 A9 22 RAM0
A0 U20 A9 A9
19 A10 A10 19
A10 A10
A1 A11 23 1
A1 A 0 CE RAM0
A12 22 2 18 18
B 1 CE RAM1 CE CE RAM1 CE RAM0 CE
A2 A13 21 3 20 20
A2 C 2 CE RAM2 OE RD RD OE
A14 20 4 21 21
D 3 CE RAM3 WE WR WR WE
A3 5
A3 4 CE RAM4
18 6 6116 6116
E1 5 CE RAM5
A4 A15 19 7
A4 E2 6 CE RAM6
8
7 CE RAM7 U14 U13
A5 9
A5 8 CS 8255A
10 D0 9 8 A0 A0 8 9 D0
9 CS 8255B D0 A0 A0 D0
A6 11 D1 10 7 A1 A1 7 10 D1
A6 10 D1 A1 A1 D1
13 D2 11 6 A2 A2 6 11 D2
11 D2 A2 A2 D2
A7 14 D3 13 5 A3 A3 5 13 D3
A7 12 D3 A3 A3 D3
15 D4 14 4 A4 A4 4 14 D4
13 D4 A4 A4 D4
A8 16 D5 15 3 A5 A5 3 15 D5
A8 14 D5 A5 A5 D5
17 D6 16 2 A6 A6 2 16 D6
15 D6 A6 A6 D6
A9 D7 17 1 A7 A7 1 17 D7
A9 D7 A7 A7 D7
74HC154 23 A8 A8 23
A8 A8
A10 22 A9 A9 22
A10 A9 A9
19 A10 A10 19
A10 A10
A11
A11
18 18
CE CE RAM3 CE RAM2 CE
A12 20 20
A12 OE RD RD OE
21 21
WE WR WR WE
A13
A13
6116 6116
A14
A14
A15 U17 U16
A15
D0 9 8 A0 A0 8 9 D0
D0 A0 A0 D0
D1 10 7 A1 A1 7 10 D1
D1 A1 A1 D1
D2 11 6 A2 A2 6 11 D2
D2 A2 A2 D2
D3 13 5 A3 A3 5 13 D3
RD D3 A3 A3 D3
D4 14 4 A4 A4 4 14 D4
D4 A4 A4 D4
D5 15 3 A5 A5 3 15 D5
WR D5 A5 A5 D5
D6 16 2 A6 A6 2 16 D6
D6 A6 A6 D6
D7 17 1 A7 A7 1 17 D7
D7 A7 A7 D7
23 A8 A8 23
A8 A8
22 A9 A9 22
CS 8255A A9 A9
19 A10 A10 19
A10 A10
CS 8255B
18 18
CE CE RAM5 CE RAM4 CE
20 20
OE RD RD OE
21 21
WE WR WR WE
6116 6116

U19 U18
D0 9 8 A0 A0 8 9 D0
D0 A0 A0 D0
D1 10 7 A1 A1 7 10 D1
D1 A1 A1 D1
D2 11 6 A2 A2 6 11 D2
D2 A2 A2 D2
D3 13 5 A3 A3 5 13 D3
D3 A3 A3 D3
D4 14 4 A4 A4 4 14 D4
D4 A4 A4 D4
D5 15 3 A5 A5 3 15 D5
D5 A5 A5 D5
D6 16 2 A6 A6 2 16 D6
D6 A6 A6 D6
D7 17 1 A7 A7 1 17 D7
D7 A7 A7 D7
23 A8 A8 23
A8 A8
22 A9 A9 22
A9 A9
19 A10 A10 19
A10 A10
18 18
CE CE RAM7 CE RAM6 CE
20 20
OE RD RD OE
21 21
WE WR WR WE
6116 6116

D[0..7]

Fig 33: Schema bloc a conectării memoriilor RAM

22
1.7 Manual de utilizare

Microsistemul proiectat afișează un text programabil, doar din cifrele zecimale, care se
deplasează de la dreapta la stânga cu o viteza de 4.2 caractere pe secundă și prezintă 2 moduri de
programare accesibile prin tratarea tastei “M”:
 Modul de programare (M=1): presupune supravegherea tastelor active din tastură (“M”,
“stânga”,”dreapta”,”sus”,”jos”. La intrarea în modul programare, primul digitul reacționează prin
aprinderea și stingerea ON-OFF cu o perioadă de 1.1 secunde. Programarea se poate asupra celulei
care flash-ează
Acțiunile posibile pentru utilizator în modul de programare al celulelor LED:
- Tastele Stânga,Dreapta permit deplasarea stânga/dreapta printre celulele afișajului LED
pentru a putea programa digitul dorit.
- Tastele Sus,Jos permit acționarea la nivelul unui LED asupra căruia s-a decis programarea prin
incrementarea sau decrementarea valorii zecimale afișate de celula LED respective
 Modul de operare normal (M=0): presupune defilarea textului către stânga cu viteza
specificată și supravegherea tastei “M” (în modul de operare normal celelalte taste sunt inactive)

23
1.8 SCHEMA HARDWARE FINALA

a0
b0
c0
d0 +5V +5V +5V +5V +5V +5V
e0
f0
g0

R230 R231 R232 R233 R234 R235


10k 10k 10k 10k 10k 10k
ca1

ca2

ca3

ca4

ca1

ca2

ca3

ca4

ca1

ca2

ca3

ca4
a2
a1 b2 SUS
b1 c2
c1 d2
d1 e2
e1 f2 linia1
f1 g2
g1 STANGA M DREAPTA

linia2

A[0..15] JOS
ROM
U4
D[0..7]

D0 2 19 A0 A0 D0
D0 Q0 A0 D0 linia3
D1 3 18 A1 A1 D1
D1 Q1 A1 D1
D2 4 17 A2 A2 D2
D2 Q2 A2 D2
D3 5 16 A3 A3 D3
U1 D3 Q3 A3 D3
D4 6 15 A4 A4 D4
D4 Q4 A4 D4
19 39 D0 D5 7 14 A5 A5 D5

col1

col2

col3

col4

col5

col6
XTAL1 XTAL1 P0.0/AD0 D5 Q5 A5 D5
38 D1 D6 8 13 A6 A6 D6
P0.1/AD1 D6 Q6 A6 D6
37 D2 D7 9 12 A7 A7 D7
P0.2/AD2 D7 Q7 A7 D7
18 36 D3 A8
XTAL2 XTAL2 P0.3/AD3 ALE A8
35 D4 11 A9
P0.4/AD4 LE A9
34 D5 1 A10
P0.5/AD5 OE A10
33 D6 A11
P0.6/AD6 A11
9 32 D7 74HCT573 A12
RST RST P0.7/AD7
A13
A12 ROM 10K
21 A8 A14
A13
2716 5X(2KX8) U10 CIRCUITE AMPLIFICARE
P2.0/A8 A14
22 A9 A15 D0 34 4
P2.1/A9 A15 D0 PA0 pa0 a0 a0
23 A10 D1 33 3
P2.2/A10 D1 PA1 pa1 b0 b0
29 24 A11 D2 32 2
PSEN PSEN P2.3/A11 D2 PA2 pa2 c0 c0
30 25 A12 D3 31 1
ALE ALE P2.4/A12 PSEN D3 PA3 pa3 d0 d0
31 26 A13 D4 30 40
EA P2.5/A13 PSEN D4 PA4 pa4 e0 e0
27 A14 D5 29 39
P2.6/A14 D5 PA5 pa5 f0 f0
28 A15 D6 28 38
P2.7/A15 D6 PA6 pa6 g0 g0
D7 27 37
D7 PA7
1 10
com.a1 P1.0 P3.0/RXD
2 11 CCT003 5 18
com.a2 P1.1 P3.1/TXD RD RD PB0 pb0 a1 a1
3 12 36 19
com.a3 P1.2 P3.2/INT0 WR WR PB1 pb1 b1 b1
4 13 A0 9 20
com.a4 P1.3 P3.3/INT1 A0 PB2 pb2 c1 c1
5 14 A1 8 21
P1.4 P3.4/T0 A1 PB3 pb3 d1 d1
6 15 35 22
P1.5 P3.5/T1 RST RESET PB4 pb4 e1 e1
7 16 23
P1.6 P3.6/WR WR PB5 pb5 f1 f1
8 17 6 24
P1.7 P3.7/RD RD RAM CS PB6
25
pb6 g1 g1
PB7
80C51
A0 D0 8255-1 14
A0 D0 PC0 pc0 a2 a2
A1 D1 15
A1 D1 PC1 pc1 b2 b2
A2 D2 16
A2 D2 PC2 pc2 c2 c2
A3 D3 17
A3 D3 PC3 pc3 d2 d2
A4 D4 13
A4 D4 PC4 pc4 e2 e2
A5 D5 12
A5 D5 PC5 pc5 f2 f2
A6 D6 11
A6 D6 PC6 pc6 g2 g2
A7 D7 10
A7 D7 PC7
A8
A8
A9
A9 com.a1 com.a1 ca1 ca1
A10 8255A
A10 com.a2 com.a2 ca2 ca2
A5

A11
A12
A11 RAM 16K com.a3 com.a3 ca3 ca3
A12 com.a4 com.a4 ca4 ca4
A13
A13
6216 8X(2KX8)
A14 CCT001
A14 U15
A15
A15
D0 34 4
+5V D0 PA0 linia1
D1 33 3
D1 PA1 linia2
D2 32 2
WR WR CS 8255A D2 PA2 linia3
D3 31 1
RD RD CS 8255B D3 PA3
D4 30 40
D4 PA4
D5 29 39
D5 PA5
RESET

D6 28 38
D6 PA6
D7 27 37
D7 PA7
CCT004
R1 C3 RD
5
RD PB0
18
col1
100 10uF 36 19
WR WR PB1 col2
9 20
C1 A0 PB2 col3
8 21
A1 PB3 col4
35 22
RST XTAL1 RST RESET PB4 col5
23
1

PB5 col6
10pF 6 24
CS PB6
R2 PB7
25
8.2k X1 C2 8255-2 14
PC0
2

15
XTAL2 PC1
CRYSTAL 16
PC2
FREQ=10.24MHz 10pF 17
PC3
13
PC4
12
PC5
11
PC6
10
PC7

8255A

24
Capitolul 2

Proiectarea Software:

2.1 Organigrame generale

Partea software a proiectului conține 2 blocuri principale: Programul principal unde se


inițializeză variabilele, se programează circuitele I/O și se tratează activitățile asupra tastelor și,
subrutina TIMER 0 unde se tratează toate

Fig 34: Organigrama generală Program Principal Fig 35: Organigrama generală Program TIMER 0

25
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0800h
RAM1
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0FFFh
0 0 Organigrame
2.1.1. 0 1 0 detaliate
0 0 Program
0 0 0 Principal
0 0 0 0 0 0 1000h
RAM2
0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 17FFh
0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1800h
RAM3
2.1.1.a
0 Programarea
0 0 1 circuitelor
1 de intrare/ieșire:
1 1 1 1 1 1 1 1 1 1 1 1FFFh
În microsistemul
0 0 1 0 prezentat
0 0 avem
0 0 2 0circuite
0 0 8255,0 01 și0 2. Circuitul
0 8255-1 operează
0 2000h
RAM4
ca port
0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 27FFh
paralel, din porturile PA, PB, PB se oferă informația de afișat către liniile displayului LED(grupul A și
0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2800h
grupul B 0programate
0 1
ca
0
ieșiri),
1
circuitul 8255-2 furnizează
1 1 1 1 1 1 1 1 1 1
codul de baleiaj pentru
1 2FFFh
RAM5tastatura
multiplexată
0 pe
0 pinii
1 PA0,
1 PA1
0 și
0 PA2
0 (programate
0 0 0 0 ca 0 ieșiri
0 0în grupul
0 0 A 3000h
al portului) și primește
RAM6
informația0 de0citit1de pe
1 coloanele
0 1 1tastaturii
1 1 multiplexate
1 1 1 1 pe 1 𝑃𝐵
1 pinii ÷ 𝑃𝐵5 (grupul B al portului
1 0 37FFH
0 0
8255-2 programat 1ca intrări).
1 1 0 0 0 0 0 0 0 0 0 0 0 3800h
RAM7
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3FFFh
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4000h 8255(1) PA
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 4001h 8255(1) PB
0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 4002h 8255(1) PC
0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 4003h 8255(1) RCC
0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 4800h 8255(2) PA
0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 4801h 8255(2) PB
0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 4802h 8255(2) PC
0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 4803h 8255(2) RCC
zona II zona III
Fig 36: Adresele pentru comanda circuitelor 8255
zona I

Pentru ambele circuite 8255 lucrez în


modul 0 (port paralel).
Cuvântul de comandă pentru 8255-1
1000.0000=80h pe adresa 4003h(RCC1)
Cuvântul de comandă pentru 8255-2
1000.0010=82h pe adresa 4803h
Fig 37: Formatul cuvântului de comandă 8255

Programarea TIMER0:
Programarea întreruperilor pentru 5ms
Frecvența oscilatorului din cerințe, 10.24MHz. 𝐶/𝑇̅ =0 regim timer, frecvența oscilatorului local
10.24𝑀𝐻𝑧
este divizată cu 12 => 𝑓0 = = 853.333, (3)𝐻𝑧
12
1
Perioada aferentă frecvenței 𝑇0 = = 1.171𝑢𝑠
853.333,(3)𝐻𝑧
5000
Pentru numărarea secvenței de 5ms avem nevoie de ≈ 4270 impulsuri
1.171

26
Pentru canalul TIMER0 aleg modul 1 de operare, număra pe 16 biți, înainte, cu blocare la sfârșitul
numărării.
Constanta de încarcare in TH0,TL0 =>EF52h
(216 )65536 − 4270 = 61266 =>61266(10) = 𝐸𝐹52(ℎ)
Programare TMOD
Folosesc TIMER0 în modul 1
Biții TIMER1=0
Fig 38: Registrul TMOD

GATE=0 , numărătoarea se declanșează automat


𝐶/𝑇̅ =0, regim timer
M1=0 M0=1 modul 1 de operare
TMOD=0000.0001=01h
Programare TCON
TF(Timer Flag-biți de tip read only)
𝑇𝑅1 = 0, numărătoarea blocată pe canalul 1 Fig 39: Registrul TMOD

𝑇𝑅0 = 1 , validează numărătoarea la canal TIMER0


TCON=0001.0000=10h

2.1.1.b Programarea lucrului cu întreruperi


Programarea IE
EA=1 enable all interrupts
ET0=1 TIMER0 overflow
IE=1000.0010=82h
Subrutina tratare înrerupere TIMER0….000Bh
Fig 40: Registrul IE

27
2.1.1.c Organigrama detaliată gestionare activități Program Principal

Detalierea blocurilor organigramei:

Deplasare text stânga

28
Supraveghere tastă “M”

Tratare Flash

29
Supraveghere apăsare taste și actiuni (pentru testarea tastelor trebuie testat și codul linie și codul
coloană)

Tratare taste
30
2.1.2 Organigrame detaliate TIMER0

Organigrama detaliată TIMER0

31
Tratare afișaj multiplexat

32
Tratare tastatură multiplexată

Tratare timp
deplasare text

33
Tratare FLASH

34
2.2 Tabelul de variabile definitive

Valoarea de Mod de Adresa de stocare


Nume variabilă Semnificație
inițializare reprezentare în memoria RAM

contor_col reține coloana curentă acționată 01h octet 30h


afis_7sg1 Imagine 7sg celula LED 1 00h octet 31h
afis_7sg2 Imagine 7sg celula LED 2 00h octet 32h
afis_7sg3 Imagine 7sg celula LED 3 00h octet 33h
afis_7sg4 Imagine 7sg celula LED 4 00h octet 34h
afis_7sg5 Imagine 7sg celula LED 5 00h octet 35h
afis_7sg6 Imagine 7sg celula LED 6 00h octet 36h
afis_7sg7 Imagine 7sg celula LED 7 00h octet 37h
afis_7sg8 Imagine 7sg celula LED 8 00h octet 38h
afis_7sg9 Imagine 7sg celula LED 9 00h octet 39h
afis_7sg10 Imagine 7sg celula LED 10 00h octet 3Ah
afis_7sg11 Imagine 7sg celula LED 11 00h octet 3Bh
afis_7sg12 Imagine 7sg celula LED 12 00h octet 3Ch
afis_bin1 Imagine binara celula LED 1 00h octet 3Dh
afis_bin2 Imagine binara celula LED 2 00h octet 3Eh
afis_bin3 Imagine binara celula LED 3 00h octet 3Fh
afis_bin4 Imagine binara celula LED 4 00h octet 40h
afis_bin5 Imagine binara celula LED 5 00h octet 41h
afis_bin6 Imagine binara celula LED 6 00h octet 42h
afis_bin7 Imagine binara celula LED 7 00h octet 43h
afis_bin8 Imagine binara celula LED 8 00h octet 44h
afis_bin9 Imagine binara celula LED 9 00h octet 45h
afis_bin10 Imagine binara celula LED 10 00h octet 46h
afis_bin11 Imagine binara celula LED 11 00h octet 47h
afis_bin12 Imagine binara celula LED 12 00h octet 48h
xa1 comanda pe anod 1 00h bit 01h
xa2 comanda pe anod 2 00h bit 02h
xa3 comanda pe anod 3 00h bit 03h
xa4 comanda pe anod 4 00h bit 04h
contor contor masurare 90ms 30h octet 49h
cod_baleiaj Cod baleiere tastatura FEh octet 4Ah
contor 15ms contor masurare 15ms debouncing x octet 4Bh
apas indica inceputul apasarii unei taste 0 bit 05h
sem_tasta semnalizeaza tasta apasata corect catre PP 0 bit 06h
tasta_apas semnalizeaza tasta apasata corect 0 bit 07h
cod_linie_tasta retine codul liniei la o tasta apasata x octet 4Ch
cod_col_tasta retine codul coloanei tastei apasate x octet 4Dh
relax indica inceputul relaxarii unei taste 0 bit 08h
mod specifica mod de operare 0 bit 09h
time_depl indica moment deplasare text in MON 0 bit 0Ah
contor_t_depl contor folosit pentru cronometrare timp depl 30h octet 4Eh
mem_cel memorare temporara celula de afisare x octet 4Fh
first_flash indica intrarea in FLASH pt prima data(MP) 0 bit 0Bh
flash_on indica starea aprins la flash x bit 0Ch
flash_contor contorizare timp flash ON/OFF 00h octet 50h
sem_flash indica final timp FLASH 0 bit 0Dh
poz indica celula 7 sg care flash-eaza 0 octet 51h
35
2.3 Cod ASM 8051
contor_col DATA 40h CONV7SG:
afis_7sg1 DATA 41h DB 0C0h ;cifra 0
afis_7sg2 DATA 42h DB 0F9h ;cifra 1
afis_7sg3 DATA 43h DB 0A4h ;cifra 2
afis_7sg4 DATA 44h DB 0B0h ;cifra 3
afis_7sg5 DATA 45h DB 9Bh ;cifra 4
afis_7sg6 DATA 46h DB 92h ;cifra 5
afis_7sg7 DATA 47h DB 82h ;cifra 6
afis_7sg8 DATA 48h DB 0F8h ;cifra 7
afis_7sg9 DATA 49h DB 80h ;cifra 8
afis_7sg10 DATA 4Ah DB 90h ;cifra 9
afis_7sg11 DATA 4Bh DB 0F7h ;spatiu
afis_7sg12 DATA 4Ch
afis_bin1 DATA 4Dh ORG 000Bh
afis_bin2 DATA 4Eh MOV TH0,#0EFh
afis_bin3 DATA 4Fh MOV TL0,#52h
afis_bin4 DATA 50h LJMP SUBRUTINATIMER0
afis_bin5 DATA 51h
afis_bin6 DATA 52h ORG 0100h
afis_bin7 DATA 53h STARTPP:
afis_bin8 DATA 54h MOV IE,#82h
afis_bin9 DATA 55h MOV TMOD,#01h
afis_bin10 DATA 56h MOV TCON,#10h
afis_bin11 DATA 57h MOV TH0,#0EFh
afis_bin12 DATA 58h MOV TL0,#52h
contor DATA 59h
cod_baleiaj DATA 5Ah MOV DPTR,#4003h
contor_15ms DATA 5Bh MOV A,#80h
cod_linie_tasta DATA 5Ch MOVX @DPTR,A
cod_col_tasta DATA 5Dh
contor_t_depl DATA 5Eh MOV DPTR,#4803h
mem_cel DATA 5Fh MOV A,#82h
flash_contor DATA 60h MOVX @DPTR,A
poz DATA 61h
xa1 BIT 01h MOV afis_7sg1,#0FFh
xa2 BIT 02h MOV afis_7sg2,#0FFh
xa3 BIT 03h MOV afis_7sg3,#0FFh
xa4 BIT 04h MOV afis_7sg4,#0FFh
apas BIT 05h MOV afis_7sg5,#0FFh
sem_tasta BIT 06h MOV afis_7sg6,#0FFh
tasta_apas BIT 07h MOV afis_7sg7,#0FFh
relax BIT 08h MOV afis_7sg8,#0FFh
modM BIT 09h MOV afis_7sg9,#0FFh
time_depl BIT 0Ah MOV afis_7sg11,#0FFh
first_flash BIT 0Bh MOV afis_7sg11,#0FFh
flash_on BIT 0Ch MOV afis_7sg12,#0FFh
sem_flash BIT 0Dh
MOV afis_bin1,#0FFh
MOV afis_bin2,#0FFh
MOV afis_bin3,#0FFh
MOV afis_bin4,#0FFh
ORG 0000h MOV afis_bin5,#0FFh
LJMP STARTPP MOV afis_bin6,#0FFh
ORG 0030H MOV afis_bin7,#0FFh
MOV afis_bin8,#0FFh
MOV afis_bin9,#0FFh
36
MOV afis_bin10,#0FFh CPL modM
MOV afis_bin11,#0FFh SJMP ETT2
MOV afis_bin12,#0FFh ETT21:
MOV cod_baleiaj,#0FEh ;cod baleiaj linii tastatuta LJMP ETT2
MOV contor,#12h ;contor masurare timp baleere tastatura SUPRAVEGHERE_APAS_TASTA1:
MOV contor_col,#01h ;contorizare coloane tastura LJMP SUPRAVEGHERE_APAS_TASTA
MOV contor_t_depl,#30h ;contor cronometru deplasare TRATARE_FLASH:
digiti stanga JB first_flash,ETT3
MOV flash_contor,#00h ;contoriare timp flash MOV poz,#00h
MOV poz,#00h SETB first_flash
CLR xa1 CLR flash_on
CLR xa2 MOV R0, #afis_7sg1
CLR xa3 MOV mem_cel,@R0
CLR xa4 MOV @R0,#11h
CLR apas MOV flash_contor,#0E6h
CLR sem_tasta MOV poz,#00h
CLR tasta_apas
CLR first_flash ETT3: JNB sem_flash, SUPRAVEGHERE_APAS_TASTA
CLR sem_flash CLR sem_flash
CLR modM JB flash_on,ETT4
CLR time_depl SETB flash_on
CLR relax MOV A,#afis_7sg1
ADD A,poz
MOV R0,A
ETT2: JB modM,TRATARE_FLASH MOV @R0,mem_cel
JNB time_depl,SUPRAVEGHERE_APAS_TASTA1 MOV flash_contor,#6Eh
CLR time_depl ETT4: CLR flash_on
MOV mem_cel,afis_bin12 MOV A,#afis_7sg1
MOV afis_bin12,afis_bin1 ADD A,poz
MOV afis_bin1,afis_bin2 MOV R0,A
MOV afis_bin2,afis_bin3 MOV mem_cel,@R0
MOV afis_bin3,afis_bin4 MOV @R0,#11h
MOV afis_bin4,afis_bin5 MOV flash_contor,#6Eh
MOV afis_bin5,afis_bin6
MOV afis_bin6,afis_bin7 SUPRAVEGHERE_APAS_TASTA:
MOV afis_bin7,afis_bin8 JNB sem_tasta, ETT21
MOV afis_bin8,afis_bin9 CLR sem_tasta
MOV afis_bin9,afis_bin10 MOV R0,#cod_linie_tasta
MOV afis_bin10,afis_bin11 CJNE @R0,#0FDh,ETTSUS
MOV afis_bin11,mem_cel MOV R0,#cod_col_tasta
MOV R0,#afis_bin1 CJNE @R0,#3Dh,ETTSUS
MOV R1,#afis_7sg1 CPL modM
MOV R2,#00h CLR first_flash
MOV DPTR, #CONV7SG MOV A,#afis_7sg1
ETT1: MOV A,@R0 ADD A,poz
INC R0 MOV R0,A
MOVC A,@A+DPTR MOV @R0,mem_cel
MOV @R1,A LJMP ETT21
INC R1
INC R2 ETTSUS: MOV R0,#cod_linie_tasta
CJNE R2,#0Ch,ETT1 CJNE @R0,#0FEh,ETTJOS
JNB sem_tasta,ETT2 MOV R0,#cod_col_tasta
CLR sem_tasta CJNE @R0,#3Dh,ETTJOS
MOV R0,#cod_linie_tasta MOV A,#afis_bin1
CJNE @R0,#0FDh,ETT2 ADD A,poz
MOV R0,#cod_col_tasta MOV R0,A
CJNE @R0,#3Dh,ETT2 INC @R0

37
CJNE @R0,#09h,ETTX
MOV @R0,#00h ETTDREAPTA:
ETTX: MOV R0,#afis_bin1 MOV R0,#cod_linie_tasta
MOV R1,#afis_7sg1 CJNE @R0,#0FDh,ETT212
MOV R2,#00h MOV R0,#cod_col_tasta
MOV DPTR, #CONV7SG CJNE @R0,#3Eh,ETT212
ETTX2: MOV A,@R0 MOV A,#afis_7sg1
INC R0 ADD a,poz
MOVC A,@A+DPTR MOV R0,A
MOV @R1,A MOV @R0,mem_cel
INC R1 INC poz
INC R2 MOV A,poz
CJNE R2,#0Ch,ETTX2 CJNE A,#0FFh,ETTb
ETT212: MOV poz,#00h
LJMP ETT21 ETTb: CLR flash_on
ETTJOS: MOV R0,#cod_linie_tasta MOV A,#afis_7sg1
CJNE @R0,#0FBh,ETTSTANGA ADD a,poz
MOV R0,#cod_col_tasta MOV R0,A
CJNE @R0,#3Dh,ETTSTANGA MOV mem_cel,@R0
MOV A,#afis_bin1 MOV @R0,#11h
ADD A,poz MOV flash_contor,#6Eh
MOV R0,A
INC @R0 SUBRUTINATIMER0:
CJNE @R0,#09h,ETTX1 MOV TH0,#0EFh
MOV @R0,#00h MOV TL0,#52h
ETTX1: MOV R0,#afis_bin1 AFISAJMUX:
MOV R1,#afis_7sg1 MOV P1,#00h
MOV R2,#00h MOV A,contor_col
MOV DPTR, #CONV7SG CJNE A,#01H,ETTCOL2
ETTX21: MOV A,@R0 MOV A,afis_7sg1
INC R0 MOV DPTR,#4800H
MOVC A,@A+DPTR MOVX @DPTR,A
MOV @R1,A MOV A,afis_7sg5
INC R1 INC DPTR
INC R2 MOVX @DPTR,A
CJNE R2,#0Ch,ETTX21 MOV A,afis_7sg9
INC DPTR
ETTSTANGA: MOVX @DPTR,A
MOV R0,#cod_linie_tasta MOV P1,#01h
CJNE @R0,#0FDh,ETTDREAPTA JMP ETT_INC_CONTOR
MOV R0,#cod_col_tasta
CJNE @R0,#3Eh,ETTDREAPTA ETTCOL2:
MOV A,#afis_7sg1 MOV A,contor_col
ADD a,poz CJNE A,#02H,ETTCOL3
MOV R0,A MOV A,afis_7sg2
MOV @R0,mem_cel MOV DPTR,#4800H
DEC poz MOVX @DPTR,A
MOV A,poz MOV A,afis_7sg6
CJNE A,#0FFh,ETTa INC DPTR
MOV poz,#11h MOVX @DPTR,A
ETTa: CLR flash_on MOV A,afis_7sg10
MOV A,#afis_7sg1 INC DPTR
ADD a,poz MOVX @DPTR,A
MOV R0,A MOV P1,#02h
MOV mem_cel,@R0 JMP ETT_INC_CONTOR
MOV @R0,#11h
MOV flash_contor,#6Eh

38
ETTCOL3: ETTCONTOR15ms:
MOV A,contor_col MOV A,contor_15ms
CJNE A,#03H,ETTCOL4 CJNE A,#00h,ETT_TRAT_TIMP_DEPL
MOV A,afis_7sg3 MOVX A,@DPTR
MOV DPTR,#4800H ANL A,#3Fh
MOVX @DPTR,A CJNE A,cod_col_tasta,ETT7
MOV A,afis_7sg7 SETB sem_tasta
INC DPTR SETB tasta_apas
MOVX @DPTR,A MOV cod_col_tasta,A
MOV A,afis_7sg11 MOV cod_linie_tasta,cod_baleiaj
INC DPTR SJMP ETT_TRAT_TIMP_DEPL
MOVX @DPTR,A ETT7:
MOV P1,#04h CLR apas
JMP ETT_INC_CONTOR SJMP ETT_TRAT_TIMP_DEPL

ETTCOL4: ETTRELAX:
MOV A,afis_7sg3 JB relax,ETT9
MOV DPTR,#4800H MOVX A,@DPTR
MOVX @DPTR,A ANL A,#3Fh
MOV A,afis_7sg7 CJNE A,#3Fh,ETT_TRAT_TIMP_DEPL
INC DPTR SETB Relax
MOVX @DPTR,A MOV contor_15ms, #03h
MOV A,afis_7sg11
INC DPTR ETT9:
MOVX @DPTR,A MOV A,contor_15ms
MOV P1,#04h CJNE A,#00h,ETT_TRAT_TIMP_DEPL
JMP ETT_INC_CONTOR MOVX A,@DPTR
ANL A,#3Fh
ETT_INC_CONTOR: CJNE A,#3Fh,ETT10
INC contor_col CLR relax
MOV A,contor_col CLR apas
CJNE A,#05,TASTMUX CLR tasta_apas
MOV contor_col,#01h SJMP ETT_TRAT_TIMP_DEPL
DEC contor ETT10:
MOV A,contor CLR relax
CJNE A,#00h,ETT_TRAT_TIMP_DEPL SJMP ETT_TRAT_TIMP_DEPL

TASTMUX: ETT_TRAT_TIMP_DEPL:
JB tasta_apas,ETTRELAX DEC contor_t_depl
JB apas,ETTCONTOR15ms MOV A, contor_t_depl
MOV A,cod_baleiaj CJNE A,#00h, ETT_TRATARE_FLASH
MOV DPTR,#4801H SETB time_depl
MOVX @DPTR,A MOV contor_t_depl, #30h
MOV DPTR,#4801h
MOVX A,@DPTR ETT_TRATARE_FLASH:
ANL A,#3Fh MOV A, flash_contor
CJNE A,#3Fh,ETT6 CJNE A,#00h,ETT11
MOV A,cod_baleiaj SJMP FINAL
RL A ETT11:
CJNE A,#0F7h,ETT_TRAT_TIMP_DEPL DEC flash_contor
MOV cod_baleiaj,#0FEh MOV A, flash_contor
SJMP ETT_TRAT_TIMP_DEPL CJNE A,#00h,FINAL
ETT6: SETB sem_flash
MOV cod_col_tasta,A
MOV contor_15ms, #03h FINAL:
SETB Apas RETI
SJMP ETT_TRAT_TIMP_DEPL END

39
40

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