MEDIUL DE DEZVOLTA RE EdSim51 DESCRIERE ȘI APLICAȚII [622122]

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

1

Capitolul 1

INSTRUCȚIUNI DE TRANSFER DE DATE

1.1.Scopul lucrării

La sfârșitul acestui capitol studenții vor fi familiarizați cu mediul de
dezvoltare EdSim51 și cu caracteristicile microcontrolerului 8051. Vor
avea cunoștințe despre instrucțiunile de transfer de date ale
microcontrolerului 8051. În domeniul aplicațiilor se vor executa operații
simple care solicită zona de memorie de registre cu funcții speciale.

1.2. Cunoștințe necesare pentru realizarea laboratorului

Studenții trebuie să cunoască d e la cursul de microcontrolere:
– Arhitectura și caracteristicile microcontrolerelor;
– Moduri de adresare a registrelor și memoriei;
– Dispozitivele de intrare și ieșire (Porturile paralele);
– Modul de funcționare a LED -urilor.

1.3. Prezentare generală
1.3.1. I nstalarea simulatorului EdSim51
EdSim51 este un program utilitar care simulează structura
microcontrolerului 8051 cât și câteva dispozitive periferice externe
conectate la acesta. Programul poate fi salvat, gratuit, de pe internet, de
la adresa http://www.edsim51.com . El a fost dezvoltat de James
Rogers în Java (de la Sun Microsystems, Inc – http://java.sun.com ).
Pentru executarea lui EdSim51 trebuie instalat ă platforma J2RE (Java 2
Runtime Environment). J2RE de la adresa http://www.java.com/en .
Simulatorul este realizat dup ă o schemă electrică prezentată în Anexa I.

1.3.2. Prezentarea simulatorului EdSim51
EdSim51 a fo st realizat pentru simularea aplicațiilor specifice
microcontrolerului 8051. După lansarea programului EdSim51.jar, pe
ecranul calculatorului apare meniul principal al asamblorului (Figura 1.1)
iar în acest meniu sunt afișate:
– Fereastra pentru editarea programului în asamblor;

Mihaela Hnatiuc

2 – Fereastra cu registrele microcontrolerului;
– Pinii porturilor de ieșire și conexiunile lor;
– Mărimea memoriei disponibile;
– O minitastatură de 4×3 taste;
– Afișor LCD sau patru afișoare digitale cu 7 segmente multiplexate ;
– Opt LED -uri;
– Motor pas cu pas;
– Convertor digital analogic cu afișare pe osciloscop;
– Convertor analog digital;
– Un comparator;
– Un set de opt întrerupătoare;
– Fereastră pe care sunt afișate datele care se recepționează sau se
trimit pe po rtul serial.

Figura 1.1. Prezentarea interfeței simulatorului EDSim51

Setul d e registre cu funcții speciale
Memoria de date Pinii porturilor paralel
CAN Afișor LCD și
cu LED -uri
Transmisia serială Motor pas cu pas Tastatură, LED -uri
și întrerupatoare DAC Zona de
editare
program

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

3
Simulatorul compilează programe scrise în limbajul de asamblare,
specific microcontrolerului 8051.
Butoanele care se află deasupra ed itorului au următoarele funcții:
Run – execuția programului scris în limbaj de asamblare;
Save – salvarea programului pe disc sau altă memorie. Extensia
numelui fișierului salvat va fi .asm;
Load – încărcarea în editor programe cu extensia .asm;
ASM – comp ilarea programului;
Step – execuția pas cu pas a programului (buton care apare după
apăsarea butonului Asm);
Pause – oprirea temporară a execuției programului lansat în execuție cu
Run;
Reset – revenirea din modul execuție în modul editare;
Exit – părăsire a programului EdSim51.

Notații utile:
A. Notarea modului de adresare în tabelele cu instrucțiuni:
1 – adresare directă
2 – adresare indirectă
3 – adresare la registru
4 – adresare imediată
B. Notații utilizate în descrierea formală a instrucțiunii
s – registru sursă
d – registru destinație
() – se referă la conținutul unui registru
(( )) – se referă la conținutul locației de memorie al cărei adresă se
află memorată într -un registru
data8 – constantă reprezentată pe 8 biți
data16 – constantă reprezentată p e 16 biți
← – asignare
↑ – concatenarea.

1.4. Caracteristicile microcontrolerului 8051

Microcontrolerul 8051 are o arhitectură simplă dar foarte
răspândită. Familiile de microcontrolere actuale au la bază arhitectura
microcontrolerului 8051.
Caracterist ici tehnice:
– tensiunea de alimentare este de 5V ±10%
– consum în curent de: 16 mA în modul normal, 3,7 mA în modul
Idle si 50 mA în modul Power Down.

Mihaela Hnatiuc

4 – magistralele sunt pe 8 biti;
– capacitatea memoriei ROM este de 4 Ko și a memoriei RAM de
128 octeti;
– include p rocesor boolean;
– are o unitate aritmetica si logica (ALU)
– are 4 porturi paralele (8 pini fiecare) de intrare/ ieșire care pot fi
utilizate ca porturi de uz general dar au și functiuni specifice;
– poate comunica cu o memorie externă de date sau program de
capacitate 64 Ko;
– are 2 numărătoare/ temporizatoare, independente;
– include un port serial UART full duplex;
– set de instrucțiuni orientat pe aplicații în timp real, instrucțiuni
simple și rapide;
– poate gestiona 5 surse de întreruperi, cu 2 nivele de priorităț i;
– are un oscilator intern, frecvența de oscilație este dată de
quarțul extern (frecvența de oscilație uzuală este de 11,059 MHz).

Figura 1.2. Schema bloc a arhitecturii microcontrolerului 8051

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

5 Limbajul de programare al instrucțiunilor este asambloru l. Acesta
este convertit în binar pentru a putea fi implementat pe microcontroler.
Transformarea fișierului editat din cod asamblor în cod binar se
realizează după compilare cu ajutorul unui translator. Inscripționarea
programului pe microcontroler se real izează cu programatorul (Figura
1.3.).

Figura 1.3. Pașii de editare, execuție și implementare a unui program

1.5. Instrucțiuni de transfer de date

Instrucțiunile de transfer se împart în două categorii : de transfer pe bit
și pe octet. Cele de transf er pe octet pot fi pentru transfer în: memoria
internă de date, externă de date și memoria de program.

1.5.1. Instrucțiuni de transfer în memoria internă
Aceste instrucțiuni sunt prezentate în Tabelul 1.1 împreună cu
descrierea formală a semanticii, cu mo durile de adresare suportate,
flagurile afectate, spațiul ocupat și numărul de cicli mașină consumați de
fiecare instrucțiune. Frecvența de oscilație la care lucrează
microcontrolerul este f=12MHz.

Tabelul 1.1. Instrucțiuni de transfer de date în memoria internă
Instrucțiuni Descrierea
formală a
instrucțiunii 1 2 3 4 Flaguri
afectate Nr cicli Nr octeți
MOV A,s

Transfer de date
între registre și
acumulator (A) ←(s) x x x x – 1 1

Mihaela Hnatiuc

6 MOV d, A

Transfer de date
între registre și
acumulator (d) ←(A) x x x – – 1 1
MOV d,s

Transfer de date
între registre (d) ←(s) x x x x – 2 2
MOV
DPTR,#data16

Încărcare constantă
în registre (DPTR) ←data16 – – – x – 3 3
MOV d,#data8

Transfer constantă
în registru (d) ←data8 – – – x – 1 1
MOV adr, #data8

Transfer constantă
în memorie (adr) ←data8 – – – x – 1 1
MOV @d,s

Transfer indirect a
conținutului
registrului s în
memorie la adresa
indicată în registrul
d ((d)) ←s – x – – – 1 1
PUSH s

Salvare conținut
registru în stivă (SP)←(SP)+1,
((SP))←(s) x – – – – 2 2
PUSH PC

Salvare în stivă
conținut PC (SP)←(SP)+2,
(((SP)+1)↑(SP))←(
PC) – – – – – 1 1
POP d

Salvare în registru
din stivă (d)←((SP)),
(SP) ←(SP) -1 x – – – – 2 2
POP PC

Salvare în registru
PC a conținutului
stivei (PC)←((SP)+1)↑(SP))
(SP)←(SP) -2 – – – – – 1 1

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

7 XCH A,s

Interschimbare
conținut registre (A) ↔(s) x x x – – 1 1
XCHD A, @Ri

Interschimbare
conținut acumulator
cu memoria (A) ↔(R i) – x – – – 1 1

Primele două instrucțiuni din tabel realizează schimbul de
informații între acumulator și orice altă surs ă internă: memorie internă,
registre, porturi. Instrucțiunea MOV d,s permite transferul de date între
două locații de memorie internă RAM sau zona de registre cu funcții
speciale (SFR) fără a se mai utiliza acumulatorul. Instrucțiunile
prezentate în tabelu l de mai sus sunt flexibile și permit combinații de
surse și moduri de adresare.

1.5.2. Instrucțiuni dedicate comunicării cu memoria externă
Registrele utilizate pentru comunicarea cu memoria externă sunt
DPTR și PC. Acestea sunt reprezentate pe 2 octeți.

A. Instrucțiuni de transfer cu memoria de date externă
Capacitatea de memorare a datelor se poate mări prin conectarea
microcontrolerului la o memorie RAM externă. Instrucțiunile de transfer
de date între cele două dispozitive folosesc adrese pe 1 sau 2 octeți.

Tabelul 1.2. Instrucțiuni de transfer cu memoria externă de date
Instrucțiuni Descrierea
formală a
Instrucțiunii 1 2 3 4 Flaguri
afectate Nr cicli Nr octeți
MOVX A,@R i

Transfer conținut
memorie în
acumulator. Adresa
este înregistrată în
regist rul R i (A)←((R i)) sau
(A)←((R i)) – x – – – 2 1
MOVX @R i,A

Transfer conținut
acumulator în ((R i))←(A)
– x – – – 2 2

Mihaela Hnatiuc

8 memorie. Adresa este
înregistrată în
registrul Ri
MOVX @DPTR,A

Transfer conținut
acumulator în
memorie. Adresa este
înregistrată în
registrul DPTR ((DPTR))←(A)
– x – – – 2 2
MOVX A,@DPTR

Transfer conținut
memorie în
acumulator. Adresa
este înregistrată în
registrul DPTR (A)←((DPTR)) – x – – – 2 1

În cazul unei memorii RAM cu capacitate de 256 octeți este
indicat să se utilizeze pri mele două instrucțiuni. Pentru o astfel de
comunicare se folosește doar portul P0, astfel portul P2 poate fi utilizat
și pentru alte aplicații.
Observație :
În cazul transferului în sau din memoria externă, acumulatorul
este ori sursă ori destinație pentru înregistrarea datelor extrase sau
trimise la memorie. La execuția acestor instrucțiuni sunt generate
automat la exterior semnalele ∕RD și ∕WR.

Exemplu :
Fie microcontrolerul 8051 conectat la o memorie externă de 64Ko.
Să se transfere valoarea 88h în memor ie la adresa 30h. Adresa este
înregistrată în registrul DPTR.

MOV DPTR,#0030h
MOV A, #88h
MOVX @DPTR, A

B. Instrucțiuni de transfer cu memoria program externă
Aceste instrucțiuni sunt utilizate doar pentru citirea codului și
datelor din memoria progr am. Pentru comunicarea cu memoria program
externă (Figura 1.4) se folosește semnalul de citire ∕PSEN. În timpul
comunicării cu memoria externă, pe liniile portului P2 vor fi transferate
jumătatea superioară a magistralei de adrese, iar liniile portului P0 vor fi
transferate la magistrala multiplexată de adrese/date.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

9

Figura 1.4. Exemplu de conectare a memoriei de program externă de
64KB la microcontroler

Instrucțiunile dedicate folosesc modul de adresare indexat.
Adresa de bază este conținută în regist rele DPTR sau PC reprezentate
pe 2 octeți. Conținutul registrului PC care conține adresa instrucțiunii în
curs de execuție este incrementat automat pentru a pointa pe
următoarea adresă a instrucțiunii ce urmează a fi executată. Dacă
instrucțiunea executată cere un salt la altă adresă atunci se adună la
conținutul registrului PC valoarea relativă care indică noua adresă.
Conținutul registrului DPTR nu este afectat automat. Acest mod
de operare permite căutarea în tabele.

Tabelul 1.3. Instrucțiuni de transf er de date din memoria program
externă
Instrucțiuni Descrierea
formală a
instrucțiunii Adresare
indexată Flaguri
afectate Nr cicli Nr octeți
MOVC A,@A+DPTR

Citește conținutul memorie
program cu registrul DPTR
în registrul acumulator (A)←((A)+(DPTR)) x 3 1

Mihaela Hnatiuc

10 MOVC A,@A+PC

Citește conținutul memorie
program cu registrul PC în
registrul acumulator (A)←((A)+(PC)) x 3 1

1.6. Desfășurarea lucrării

Studenții vor parcurge laboratorul și se vor familiariza cu arhitectura
microcontrolerului 8051 și cu simulator ul EdSim51. Vor studia schema
electrică aferentă simulatorului și vor parcurge setul de instrucțiuni de
transfer de date. În finalul laboratorului vor răspunde la întrebări și vor
simula subrutinele din partea aplicativă a acestui capitol.

Probleme rezolv ate
1. Să se execute subrutina de mai jos și să se observe modificările care
apar în registrele din fereastra stângă a simulatorului .

MOV R0, #20h
MOV R4, #50h
MOV R6, R0
SETB RS0
SETB RS1
MOV R7, #54h
MOV A, R7
Să se urmărească valoarea registrului PC (i ndicator de adrese ale
memoriei program).
2. Să se transmită valori de 1 și 0 la ieșirile pinilor porturilor P1 și P2. Să
se observe modificările în registre, fereastra din stânga a simulatorului
și pe pinii de ieșire aferenți porturilor, afișate în fere astra din drepta.

MOV P1,#29h
NOP
NOP
NOP
MOV P1, 01011110b
NOP
NOP
NOP
MOV P2,#55h
NOP
NOP

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

11 NOP
MOV P2, 00110011

Întrebări și probleme
3. Explicați de ce registrele PC și DPTR sunt reprezentate pe 2 octeți.
4. Identificați registrele aferente porturilor paralele ale microcontrolerului
8051 din zona de registre speciale.
5. Care sunt instrucțiunile de transfer al datelor în registrele porturilor?
6. Consultați schema electrică și identificați portul la care sunt conectate
LED-urile. Pe ce nivel trebuie să fi e ieșirile portului pentru a se aprinde
LED-urile.
7. Realizați o subrutină pentru aprindera LED -urilor de pe pozițiile
0,3,5,7 utilizând instrucțiunile de transfer pe octet și pe bit. Executați
programul pas cu pas și observați modificările care se produc la pinii
port și la afișorul pe 7 digiți.
8. Încărcati în registrul acumulator (Acc) valoarea 20h. Apoi transferați
aceasta valoare în registrul R0 din bancul 2.
9. Folosind adresarea indirectă încărcați la adresele 30h si 31h valorile
40h si 41h.
10. S alvați în registrul R7 din bancul 4 valoarea 22h. Se va utiliza modul
de adresare pe registru.
11. Scrieți un program pentru înregistrarea în memoria de date externă
a valorii 73h la adresa 0858h. Se va utiliza adresarea indexată.

Mihaela Hnatiuc

12

Capitolul 2

Instru cțiuni aritmetice

2.1. Scopul lucrării

La sfârșitul acestui laborator studenții vor avea cunoaștințe despre
instrucțiunile aritmetice și logice pe octet și pe bit.

2.2. Cunoștințe necesare pentru realizarea laboratorului

Studenții trebuie să cunoască , de la cursul de microcontrolere și de la
alte materii predate în facultate, următoarele:
– Organizarea memoriei de date și program;
– Registrele și bancurile de lucru cu acestea;
– Zona de registre cu funcții speciale (SFR);
– Operații booleene;
– Circuite de por ți logice SAU, ȘI, SAU exclusiv
– Circuite de decodare;
– Circuite de afișare .

2.3. Organizarea memorie de date și program

Memoria de date și program a microcontrolerului 8051 poate fi
internă, externă sau combinată. Programul poate să fie poziționat în
orice zonă a memoriei program dar adresa de start este 0000h.
Memoria de program este împărțită, începând cu adresa 0003h, în mai
multe segmente de întrerupere fiecare având alocate 8 locații de octeți.
Aceste segmente sunt alocate subrutinelor de întrerupere . Lansarea în
execuție a unei subrutine de întrerupere se realizează prin scrierea în
PC a adresei specifice fiecărei surse de întrerupere. Acest lucru se va
prezenta în capitolul 3.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

13

a) b)
Figura 2.1. Organizarea memoriei de date /și program internă și externă

Structura memoriei de programe este internă sau externă. Dacă
/EA=0 toată memoria de program, în limita a 64Ko este externă.
Validarea memoriei de program externă se real izează prin semnalul
transmis pe /PSEN. Dacă /EA=1 se lucrează cu memoria de program
internă care este de maxim 4Ko.
Harta memoriei de date este prezentată în Figura 2.1 b). Adresele
pentru accesarea memoriei de date sunt conținute în registrul DPTR.
Zona de adresare 0000h -00FFh se poate accesa cu registrele R0 sau
R1 din zona de registre cu funcții speciale (vezi Anexa II). Validarea
memoriei de date externă se realizează cu semnalele /WR (scriere) și
/RD (citire) generate de microcontroler.
Memoria de da te internă este împărțită într -o zonă de 4 bancuri
de registre, fiecare conținând 8 registre de la R0 la R7, o zonă de
memorie adresabilă pe bit și o zonă de registre cu funcții speciale.
Comunicarea în interiorul microcontrolerului se realizează prin 8
linii de magistrale de: date, adrese și control.

2.3. Setul de instrucțiuni aritmetice

Instrucțiunile aritmetice care se pot realiza în interiorul
microcontrolerului sunt cele de adunare, scădere, înmulțire și împărțire.
Rezultatele operațiilor de adunare și scădere sunt salvate automat în
registrul acumulator. Rezultatele înmulțirilor și împărțirilor sunt salvate în
registrul acumulator A și acumulator secundar B. Câtul împărțirii este
salvat în A, iar restul în B.
În urma operațiilor aritmetice sunt afec tați biții din registrul PSW,
prezentat mai jos.

Mihaela Hnatiuc

14 CY AC F0 RS1 RS0 OV – P
Figura 2.2. Structura registrului de stare PSW

Tabelul 2.1. Detalierea biților care compun registrul PSW
SIMBOL BIT FUNCȚIE
CY Flag de transport de la bitul 7 la bitu l 8
AC Flag de transport auxiliar de la bitul 3 la 4
F0 Flag 0, disponibil utilizatorului pentru aplicații
generale
RS1 Bit 1 de control pentru selecția bancului (vezi
nota)
RS0 Bit 0 de control pentru selecția bancului
Setat/șters software pentr u a preciza bancul de
registre
OV Flag pentru a semnaliza depășirea
– Flag ce poate fi definit de utilizator
P Flag de paritate
Setat/șters prin hardware la fiecare ciclu de
instrucțiune prin care se calculează automat
paritatea biților din regist rul acumulator

Valorile din RS0 și RS1 selectează bancul de regiștri
corespunzător tabelului de mai jos.

Tabel 2.2. Selectarea bancurilor de registre din memoria de date
RS1 RSO Banc
registru Adresa
0 0 0 0H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH

Tabelul 2.3. Instrucțiuni aritmetice pe octet
Instrucțiuni Descrierea
formală a
instrucțiunii 1 2 3 4 Flaguri
afectate Nr. octeți Nr. cicli
ADD A, s

Adunarea dintre (ACC)
(ACC) +
(s) x x x x Cy,A
C,OV 1 1

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

15 conținutul unui registru
și conținutul acumulator
ADD A,R i

Adunarea dintre
conținutul unui registru
din bancul de registre
cu conținutul
acumulator (ACC)
(ACC) +
(Ri) x – x – Cy,A
C,OV
1 1
ADD A,#data8

Adunarea unei
constante la conținutul
acumulatorului (ACC)
(ACC) +
data8 x – x – Cy,A
C,OV
1 1
ADD A,@Ri

Adunarea conținutului
unei locații de memorie
la acumulator (ACC)
(ACC) +
((Ri)) – x – – Cy,A
C,OV
1 1
ADDC A, s
Adunarea conținutului
unui registru cu
acumulatorul și cu bitul
de transport Cy (ACC)
(AC
C)+(s)+ (CY ) x x x x Cy,A
C,OV 1 1
SUBB A, s

Scăderea conținutului
unui registru din
registrul accumulator (ACC)
(ACC) –
(s) – (CY) x x x x Cy,A
C,OV,
S, Z 1 1
INC A

Incrementarea cu 1 a
conținutului acumulator (ACC)
(ACC) + 1
– – x – – 1 1
INC s

Incrementar ea cu 1 a
conținutului unui
registru (s)
(s) + 1 x x x – – 1 1
INC DPTR

Incrementarea cu 1 a
conținutului
registrului DPTR (DPTR)
(DPTR) +
1
– – x – – 1 3
DEC A

Decrementare cu 1 a (ACC)
(ACC) – 1
– – – – – 1 1

Mihaela Hnatiuc

16 conținutului
acumulatorului
DEC s

Decrementare cu 1 a
conținutului unui
registru (s)
(s) – 1 x x x – – 1 1
MUL AB

Înmulțirea dintre
conținuturile registrelor
A și B (B) ↑
(A)
(B) * (A)
x x – x Cy,
OV, S 1 5
DIV AB

Împărțirea conținutului
registrului B la
conținutul registrului A (A)
(A) div
(B),
(B)
(A)
mod (B)
x x – x Cy,
OV, S 1 5
DA A

Ajustarea zecimală a
conținutului registrului A x x – – Cy,
OV 1 1

2.4. Instrucțiuni ale variabilelor Booleene

Aceste instrucțiuni formează setul de instrucțiuni al procesului
boolean. Se utilizează doar adresarea directă a biților manipulați de
microcontroler, situați între adresele 20h și 2Fh din RAM -ul intern (din
zona de memorie adresabilă pe bit) și biții registrelor cu apelare la nivel
de bit din SFR.

Tabelul 2.4. Instrucțiun i pentru manipularea variabilelor booleene
Instrucțiuni Descrierea formală
a instrucțiunii 1 2 3 4 Flaguri
afectate Nr cicli Nr octeți
ANL A,Rn (A) ←(A) Λ(Rn) x x x x x 1 1
ANL A,direct (A) ←(A) Λdirect x x x x x 1 2
ANL A,@Ri (A) ←(A) Λ((Ri)) x x x x x 1 1
ANL direct,A direct ←direct Λ(A) x x x x x 1 2
ANL A,#data (A) ←(A) Λ#data x x x x x 1 2
ORL A,Rn (A) ←(A) V(Rn) x x x x x 1 1
ORL A,direct (A) ←(A) V direct x x x x x 1 2

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

17 ORL A,@Ri (A) ←(A) Λ((Ri)) x x x x x 1 1
ORL direct,A direct ←direct V (A ) x x x x x 1 2
ORL A,#data (A) ←(A) V #data x x x x x 1 2
XRL A,Rn (A) ←(A) mod(Rn) x x x x x 1 1
XRL A,direct (A) ←(A) mod direct x x x x x 1 2
XRL A,@Ri (A) ←(A) mod((Ri)) x x x x x 1 1
XRL direct,A direct ←direct mod
(A) x x x x x 1 2
XRL A,#data (A) ←(A) mod#data x x x x x 1 2
XRL A,Rn (A) ←(A) mod(Rn) x x x x x 1 1
CLR A (A) ←0 x x x x x 1 1
CPL A (A) ←/A x x x x x 1 1
RL A (An+1) ←(A n)n=0-6,
(A0) ←(A 7) x x x x x 1 1
RLC A (An+1) ←(A n)n=0-6,
(A0) ←(C)
(C) ←(A 7)
x x x x Cy 1 1
RR A (An) ←(An+1)n=0-6,
(A7) ←(A 0) x x x x x 1 1
RRC A (An) ←(A n+1)n=0-6,
(A7) ←(C)
(C) ←(A 0)
x x x x Cy 1 1
SWAP A (A3-0)↔(A 7-4) x x x x x 1 1
INSTRUC ȚIU
NI PE BIT
ANL C,bit

ȘI logic între
Cy și un bit (C) ←(C)&bit x x x x Cy 1 1
ANL C,/bit

ȘI între Cy și
un bit negat (C) ←(C)&/bit x x x – Cy 1 1
ORL C,bit

SAU între Cy
și un bit (C) ←(C)Λbit x x x x Cy 2 2
ORL C,/bit
(C) ←(C) Λ/bit – – – x Cy 3 3

Mihaela Hnatiuc

18 SAU între Cy
și un bit
negat
MOV,bit,C

Transfer
valoare bit în
Cy (C) ←bit x – – – Cy 2 2
Mov C,/bit

Transferul
valorii unui bit
negat în Cy (C) ←/bit x – – – Cy 2 2
CLR C

Ștergere Cy (C) ←0 x x x – Cy 1 1
CLR bit

Ștergere bit bit ←0 x – – – 1 1
SETB C

Setare Cy (C) ←1 – – – – Cy – –
SETB bit

Setare bit bit ←1 – – – – – – –
CPL C

Complement
Cy (C)←NOT(C) – – – – Cy – –
CPL bit

Complement
pe bit bit←NOT bit – – – – – – –

Se observă că pentru toți biții există un meniu complet de
instrucțiuni logice și de instrucțiuni de salt condiționat prin care se pot
lua decizii la nivel de bit.

2.5. Des fășurarea lucrării
Studenții vor parcurge laboratorul și se vor familiariza cu organizarea
memoriei de date și program a microcontrolerului 8051. Vor parcurge

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

19 setul de instrucțiuni, studiind descrierea formală a acestora. În final vor
răspunde la întrebări le din ultima secțiune a acestui capitol și vor
executa subrutine urmărind modificările care se realizează în
microcontroler simulate pe ecranul emulatorului EdSim51.

Exemple
Comanda afișorului cu 7 segmente
Să se identifice modul de conectare al afișorul ui la porturile
microcontrolerului.
Să se explice modul de funcționare al unui afișor pe 7 segmente
cu LED -uri.
Să se explice modul de funcționare al unui decodor.
Să se scrie o subrutină de comandă a decodorului pentru a
selecta ieșirea Q0.
Să se scr ie cifra 4 pe afișorul conectat la ieșirea Q0.

Exemplu de program pentru afișarea numărului 12

SETB P0.7; selecție decodor
CLR P3.3
CLR P3.4; selecție ieșire 0 a decodorului
MOV P1, #0FFh; stinge LED -uri afișor
CLR P1.1
CLR P1.2; afișare cifra 1
CLR P3.4
SETB P3.3; selecție ieșire 1 a decodorului
SETB P1.2
CLR P1.0
CLR P1.6
CLR P1.3
CLR P1.4; afișarea cifrei 2

În figura de mai jos se poate observa afișarea cifrei 2 în timpul execuției
programului pe EdSim51. Între afișarea cifrelor 1 și 2 există o întârz iere.
Explicați de ce și calculați timpul de întârziere.

Mihaela Hnatiuc

20

Figura 2.2. Afișarea numărului 12. Se observă afișarea cifrei 2 din
număr

Să se modifice programul de mai jos astfel încât să se afișeze
numărul 2009.

Probleme propuse
Pentru primele trei proble me propuse se vor urmări registrele în
care se salvează rezultatele și fanioanele care sunt afectate în urma
execuției operației.

1. Să se realizeze adunarea dintre valorile 54h și 09h salvate inițial în
registrele R5 din bancul 2 și R7 din bancul 4. Rezult atul se va memora
în R0 din bancul 0. Să se calculeze spațiul de memorie ocupat și timpul
de execuție a subrutinei.
2. Să se realizeze înmulțirea valorilor de la punctul 1. Rezultatul se va
salva în registrele R1 și R2 din bancul 3.
3. Să se realizeze apoi opera ția de împărțire cu valorile de la punctul 1.
4. Se va calcula spațiul de memorie ocupat de subrutinele de la
punctele 2 și 3 și timpul de execuție, se va realiza o comparație între
acestea.
5. Două numere reprezentate pe câte 2 octeți fiecare sunt plasate în
memoria RAM locală a unui microcontroler 8051 la adresele 40h și 50h
începând cu octetul cel mai puțin semnificativ. Se cere realizarea

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

21 produsului celor două numere și plasarea rezultatului în memoria RAM
locală începând cu adresa 60h (LSB).
6. La pinii P1.0, P1.1 și P1.2 ai microcontrolerului se recepționează trei
semnale digitale. Realizați un program prin intermediul căruia pe linia
P1.7 se obține un semnal ce respectă permanent următoarea ecuație
logică:

311101 71 . . . . FFF F 

7. Să se implementeze prin prog ram funcția logică:
YYX WVUF  ) ()] ([

Exemplu de subrutina de calcul al funcției F:
;Redenumirea pinilor
V equ P1.0
U equ P1.1
W equ P1.2
X equ P1.3
Y equ P1.4
F equ P1.5
;**************************
;subrutina de calcul
;**************************
MOV C,V
ORL C,W
ANL C,U
MOV F0,C
MOV C,X
ANL C,/Y
ORL C,F0; ține cont de valoarea memorată
ORL C,/Z; include ultima variabilă
MOV F,C; evidențiază rezultatul
END

Realizați o altă subrutină pentru determinarea funcției F.

Mihaela Hnatiuc

22

Capitolul 3

Instrucțiuni de salt

3.1. Scopul lucrării

La sfârșitui acestui laborator studenții vor avea cunoaștințe despre
instrucțiunile de salt condiționat și necondiționat pe bit și pe octet. De
asemenea vor ști să programeze timerele/numărătoarele în modul de
lucru pooling și întreruperi.

3.2. Cunoștințe necesare pentru realizarea laboratorului

Studenții trebuie să cunoască, de la cursul de microcontrolere și de la
alte materii predate în facultate, următoarele:
– Noțiuni de salt condiționat și necondiționat;
– Funcționarea oscilatorului;
– Funcționarea Timerelor/Numărătoarelor și moduri de lucru;
– Lucrul în întreruperi;
– Funcționarea motorului pas cu pas;
– Funcționarea unei minitastaturi;
– Operații booleene.

3.3. Setul de instrucțiuni de salt necondiționat

Instruc țiunile de salt necondiționat sunt:
– de apel al unei subrutine cu revenire în programul principal la
adresa instrucțiunii imediat următoare de unde a avut loc saltul. Înainte
de a se face saltul, conținutul registrelor este salvat în stivă și apoi
recuper at la revenirea în program.
– de salt fără revenire în care la adresa conținută de PC se adună o
valoare relativă. Saltul se poate face înainte sau înapoi în program,
referința fiind instrucțiunea în curs.

Tabelul 3.1. Instrucțiuni de salt necondiționat

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

23 Instrucțiuni Descrierea formală a
instrucțiunii 1 2 3 4 Flaguri
afectate Nr. octeți Nr. cicli
ACALL
adr11 (SP)←(SP)-2,
((SP)+1)↑((SP)) ←(PC)
(PC)←(PC) ȘI
1111100000000000 SAU
00000↑adr11 x – – – –
2 3
LCALL
adr16 (SP)←(SP)+2,
((SP)+1)↑(SP)) ←(PC)
(PC)←adr 16 x – – – –
3 4
RET (PC) ← ((SP)+1) ↑((SP))
(SP) ← (SP)+2 x – – – – 1 4
RETI (PC) ← ((SP)+1) ↑((SP))
(SP) ← (SP)+2 x – – – – 1 4
AJMP adr11 (PC)←(PC) ȘI
1111100000000000
SAU00000↑ adr11
x – – – –
2 3
LJMP adr16 (PC) ← adr16 x – – – – 3 4
SJMP rel (PC) ←(PC )+rel
– x – – – 2 3
JMP
@A+DPTR (PC) ← ((A)+(DPTR)) x x – – – 1 3

Detalierea instrucțiunilor de salt necondiționat

ACALL – este o instrucțiune pe doi octeți de apelare a unei subrutine
utilizată când saltul se realizează pe maxim 2Ko în memoria program.
Câmpul de adresă de 11 biți este concatenat cu cei mai semnificativi 5
biți din PC.
LCALL – este o instrucțiune pe doi octeți de apelare a unei subrutine
care adresează toți cei 64Ko ai memoriei.
RET – este o instrucține de revenire în program dup ă execuția unei
subrutine apelată cu CALL. La execuția ei se trans feră controlul la
adresa de întoarcere care a fost în prealabil salvată în stivă.
AJMP – este un salt necondiționat la adresa specificată analog cu
ACALL.
LJMP – este un salt necondiționat l a adresa specificată analog cu
LCALL.
SJMP – este un salt necondiționat scurt în cadrul a 256 de octeți.

Mihaela Hnatiuc

24 Deosebirea dintre instrucțiunea CALL și intrucțiunea JMP este că
prima face un apel de subrutină, iar după execuție se revine în program
de la adresa imediat următoare instrucțiunii executate, iar după execuția
celei de a doua instrucțiuni nu se mai revine în program la adresa de
unde s -a facut saltul. Pentru execuția instrucțiunii CALL se folosește
stiva în care se va salva adresa efectivă, de segment sau pagina
(aceasta depinde de tipul de CALL utilizat), iar revenirea se va realiza
cu instrucțiunea RET la execuția căreia se vor reinițializa registrele cu
valorile salvate în stivă în timpul instrucțiunii CALL.

3.4. Instrucțiuni de salt condiționat

Tabelul 3.2. Instrucțiuni de salt condiționat
Instrucțiuni Descrierea formală a
instrucțiunii 1 2 3 4

Flaguri
afectate Nr octeți Nr cicli
JC rel Dacă Cy=1
(PC) ← (PC)+rel x – – – – 2 3
JNC rel Dacă Cy=0
(PC) ← (PC)+rel x – – – – 2 3
JB bit,rel Dacă bit=1
(PC) ← (PC)+rel x – – – – 3 4
JBC bit,rel Dacă bit=0
(PC) ← (PC)+rel x – – – – 3 4
JZ rel Dacă (ACC) = 0
(PC) ← (PC)+rel – – – – – 2 3
JNZ rel Dacă (ACC) ≠ 0 (PC) ←
(PC)+rel – – – – – 2 3
CJNE A,Rx,rel Dacă (ACC)≠
(Rx)
(PC) ←
(PC)+rel – – – – – 3 4
CJNE A,#X,rel Dacă (A)≠((PC)+1)
(PC) ←
(PC)+rel – – – – – 3 4
DJNZ Rn,rel Dacă (Rn)←
0
(Rn)←
(Rn)–1;
(PC)← (PC)+rel x – x – –
2 3
NOP Așteaptă – – – – – 1 1

Detalierea instrucțiunilor de salt condiționat

JZ – se execută saltul dacă acumula torul este 0.
JNZ – se execută saltul dacă acumulatorul nu este 0.
JC – se execută saltul dacă bitul de CY (Carry) este 1.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

25 JNC – se execută saltul dacă bitul de CY este 0.
JB – se execută saltul dacă bitul adresat este 1.
JNB – se execută saltul dacă bitul adresat este 0.
JBC – se execută saltul dacă bitul adresat este 1, la sfârșit bitul adresat
se șterge.
CJNE – compara primul operand cu al doilea operand și face salt dacă
nu există egalitate.
DJNZ – decrementează operandul sursă și salvează rezultatul în
operandul destinație. Dacă rezultatul nu este 0 se execută salt.
RETI – se face revenirea de la o subrutină apelată printr -o întrerupere.

3.5. Sistemul de întreruperi

Microcontrolerele 80C51 asigură 5 surse de întrerupere. Acestea
sunt prezentate în Fi gura 3.1.
Întreruperile sunt de două tipuri: interne și externe. Cele interne
sunt generate de dispozitivele de numărare, transmisie serială a datelor,
iar cele externe sunt generate de impulsurile ajunse pe pinii INTn ai
microcontrolerului.

Figura 3. 1. Schema bloc a sistemului de întreruperi

Cu ajutorul registrului IE se activează întreruperile care se produc
în interiorul microcontrolerului .

EA – – ES ET1 EX1 ET0 EX0

Mihaela Hnatiuc

26 Figura3.2. Cofigurația registrului IE

Tabelul 3.3. Detalierea funcțiilor biți lor conținuți de registrul IE pentru
selectarea generatorului de întreruperi
BIT SIMBOL FUNCȚIE
IE.7 EA Dezactivează toate întreruperile. Dacă EA = 0 nu
va fi confirmată nici o întrerupere. Dacă EA = 1,
fiecare sursă de întrerupere este activată în m od
individual prin setarea sau ștergerea bitului său
de activare.
IE.6 – Rezervat
IE.5 – Rezervat
IE.4 ES Activează sau dezactivează întreruperea pentru
portul serial. Dacă ES = 0, î ntreruperea pentru
portul serial este dezactivată.
IE.3 ET1 Activează sau dezactivează întreruperea la
depășirea timerului 1. Dacă ET1 = 0 întreruperea
pentru timerul 1 este dezactivată.
IE.2 EX1 Activează sau dezactivează întreruperea externă
1. Dacă EX1 = 0, întreruperea externă 1 este
dezactivată.
IE.1 ET0 Activează sau dezactivează întreruperea la
depășirea timerului 0. Dacă ET0 = 0 întreruperea
pentru timerul 0 este dezactivată
IE.0 EX0 Activează sau dezactivează întreruperea externă
0. Dacă EX0 = 0, întreruperea externă 0 este
dezactivată.

3.5.1. Structura nivelului de prioritate
Fiecare sursă de întrerupere poate fi de asemenea programată în
mod individual la unul din două nivele de prioritate prin setarea sau
ștergerea unui bit în registrul funcției speciale IP (Figura 3.2). O
întrerupere de nivel inferior poate fi ea însăși întreruptă de o întrerupere
de nivel superior, dar nu și de o altă întrerupere de nivel inferior. O
întrerupere de nivel superior nu poate fi întreruptă de nici o altă sursă de
întrerupere.

MSB LSB
X X X PS PT1 PX1 PT0 PX0

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

27 Figura 3.3. Structura registrului de priorități IP. Registrul IP conține un
număr de biți care nu sunt implementați.

Tabelul 3.4. Detalierea funcțiilor biților conținuți de registrul IP
BIT SIMBOL FUNCȚIE
IP.7 – Rezervat
IP.6 – Rezervat
IP.5 – Rezervat
IP.4 PS Stabilește nivelul de prioritate pentru
întreruperea de port serial. PS = 1. Îl
programează la cel mai înalt nivel de prioritate.
IP.3 PT1 Stabilește nivelul de prioritate pentru
întreruperea de la Timer 1, PT1 = 1. Îl
programează la cel mai înalt nivel de prioritate.
IP.2 PX1 Stabilește nivelul de prioritate pentru
întreruperea externă 1, PX1 = 1. Îl programează
la cel mai înalt nivel de prioritate.
IP.1 PT0 Activează sau dezactivează nivelul de priorita te
al întreruperii pentru Timerul 0, PT0 = 1. Îl
programează la cel mai înalt nivel de prioritate.
IP.0 PX0 Stabilește nivelul de prioritate pentru
întreruperea externă 0, PX0 = 1. Îl programează
la cel mai înalt nivel de prioritate.

Dacă două cerer i pe diferite nivele de prioritate sunt recepționate
simultan, cererea de prioritate mai înaltă este servită. Dacă se
recepționează simultan cereri de întrerupere de același nivel, o
secvență internă de polling (testare) determină care cerere va fi servită .
Astfel, în interiorul fiecărui nivel de prioritate există o a doua structură de
prioritate determinată prin secvența polling, după cum urmează:

Tabelul 3.5. Tabelul de priorități
Sursă Prioritate în înteriorul nivelului
IE0 cea mai înaltă
TF0
IE1
TF1
RI + TI cea mai scăzută

Mihaela Hnatiuc

28
Prioritatea în interiorul nivelului este folosită numai dacă există
cereri simultane pe același nivel de prioritate.

Tabelul 3.6. Tabelul vectorilor de întrerupere
Sursă Adresă vector
IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI + TI 0023H

În tabelul de mai sus este dată adresa vectorilor de întrerupere,
adresă ce se încarcă în PC (Program Counter) în momentul unei cereri
de întrerupere. Din acest motiv, realizatorul de programe trebuie să fie
atent de la ce adresă plasează programul în memoria program (ex.
ORG 0000H – dacă nu lucrez în întreruperi, dacă DA, sar peste adresa
vectorului de întrerupere corespunzător întreruperii solicitate).
Sursele externe de întrerupere pot fi programate pentru a fi
activate pe nivel sau pe front, prin setarea sau ștergerea biților IT1 sau
IT0 în registrul TCON. Dacă ITx = 0, întreruperea externă x este
declanșată prin detectarea unui nivel LOW la pinul INTx. Dacă ITx = 1,
întreruperea x este declanșată pe front. În a cest mod, dacă
eșantioanele succesive ale pinului ITx arată un nivel HIGH într -un ciclu
și LOW în ciclul următor, este setat flagul de cerere a întreruperii IEx din
TCON. După aceasta, bitul IEx solicită o întrerupere.
Pinul întreruperii externe este eșan tionat o dată la fiecare ciclu
mașină astfel o intrare HIGH sau LOW trebuie să se mențină pentru cel
puțin 12 perioade de ceas pentru a asigura eșantionarea.
Dacă întreruperea externă este activată pe tranziție, sursa
externă trebuie să păstreze la pinul de cerere nivelul HIGH pentru cel
puțin un ciclu, iar apoi să fie menținut LOW pentru cel puțin un ciclu.
Acest lucru se face pentru a asigura faptul că s -a setat flagul de cerere
de întrerupere IE. IE va fi șters în mod automat de către CPU când se
face a pelul rutinei de servire.
Dacă întreruperile externe sunt activate pe nivel, sursa externă
trebuie să mențină cererea activată până când întreruperea solicitată
este generată în realitate. Cererea se dezactivează înainte ca rutina de
servire a întreruperi i să fie completată, altfel va fi generată o nouă
întrerupere.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

29 3.6. Timere/Numărătoare

Microcontrolerele 80C51 au două Timere/Numărătoare 0 și 1.
Ambele pot configurate pentru a lucra ca temporizatoare sau
numărătoare de evenimente în funcție de sursa ge neratoare de
impulsuri. În modul de funcționare ca temporizator registrul este
incrementat la fiecare ciclu cu un impuls la 1/12 din frecvența
oscilatorului. Când se lucrează ca numărător, registrul este incrementat
la fiecare tranziție din 1 în 0 la pinul extern corespunzător T0, T1 și T2.
Rata maximă de numărare este 1/24 din frecvența oscilatorului (Figura
3.4).

Figura 3.4. Schema timerului/numărător

Programarea funcționării ca temporizator sau numărător se face
cu registrul TMOD din SFR (Figura 3.5. ), cu următoarea structură pentru
numărătorul 1: GATE1, C/ -T1 – M11, M01 și pentru numărătorul 2:
GATE2, C/ -T2 – M12, M02, unde: GATE – gestionează controlul.
Când GATE=1, timer -ul este activat doar cât timp pinul nINT
corespunzător este în HIGH și bitul TR din registrul TCON este 1
(Figura 3.6.).
C/-T – selectează operarea ca timer când este pe 0 sau numărător când
este 1. M1 și M0 selectează modul de lucru, vezi mai jos.

MSB LSB
GATE T / C M1 M0 GATE T / C M1 M0
← TIMER 1 → ← TIMER 0 →
Figura 3.5. Re gistrul TMOD

Mihaela Hnatiuc

30 Tabel 3.7. Programarea modului de operare cu biții M0 și M1
M1 M0 Modul de lucru
0 0 Timer pe 13 biți (Mod 0)
0 1 Timer/numărător pe 16 biți (Mod 1)
1 0 TL0 este timer/numărător pe 8 biți și TH0 este timer pe
8 biți (Mod 2)
1 1 Timer/nu mărător este 1 – oprit (Mod 3)

Registrul TCON este utilizat pentru selectarea pornirii
dispozitivelor de numărare, atenționarea în caz de depășire a registrelor
de înregistrare a numărării și setarea pentru lucrul în întreruperi.

MSB LSB
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Figura 3.6. Registrul TCON

Tabel 3.8. Detalierea funcțiilor biților conținuți de registrul TCON
BIT SIMBOL FUNCȚIE
TCON.7 TF1 Flag depășire Timer 1. Setat hardware.
Șters hardware sau software
TCON.6 TR1 Bit de START dispozitiv de numărare 1.
Setarea sau Ștergere soft.
TCON.5 TF0 Flag depășire Timer 0. Setat hardware și
șters hardware sau software
TCON.4 TR0 Bit de START dispozitiv de numărare 0.
Setarea sau Ștergere doar soft.
TCON.3 IE1 Flag front întrerupe re a dispozitivului 1 de
numărare 1. Setat hardware când se
detectează frontul unei întreruperi externe,
este șters când s -a realizat întreruperea.
TCON.2 IT1 Bit de control al întreruperii de tip 1. Setat /
șters software pentru a preciza nivelul LOW
pentru declanșarea întreruperilor externe.
TCON.1 IE0 Flag front întrerupere a dispozitivului 1 de
numărare 0. Setat hardware când se
detectează frontul unei întreruperi externe.
Șters când s -a procesat întreruperea.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

31 TCON.0 IT0 Bit control întrerup ere tip 0. Setat / șters
software pentru a preciza front căzător / nivel
LOW pentru delanșarea întreruperilor
externe.

Întreruperile Timer 0 și Timer 1 sunt generate de TF0 și TF1, ce
sunt setați la depășire în registrele de memorare ale circuitelor
timer/numărător. Când se generează o întrerupere de timer, flagul care
o generează este șters de hardware -ul on -chip atunci când rutina de
servire este vectorizată (deservită). De asemenea, dispozitivele de
numărare pot fi testate software prin pooling, se testează biții TFn (n
poate fi 0 sau 1)

3.6.1. Modurile de funcționare

Mod 0
Acest mod de funcționare este comun ambelor numărătoare. În
acest mod, secțiunea de numărare este formată din TL1 (5 biți) și TH1
(8 biți). Numărătorul de 13 biți astfel format numără înainte. În acest
mod, registrul Timerului este configurat ca un registru de 13 biți. Cei trei
biți superiori din TL1 sunt nedeterminați și trebuie ignorați. Setarea
flagului de funcționare (TR1) nu șterge registrul. Când numărătorul
comută, din st area "1" în starea "0", se setează flagul de întrerupere
timer TF1. Pornirea Timerului este activată când TR1 = 1 și GATE = 0
sau INT1 = 1 (setând GATE = 1 se permite timerului să fie controlat de
către intrarea externă INT1 pentru a facilita măsurarea lăț imii
impulsurilor).

Modul 1
Este asemănător cu modul 0, cu excepția faptului că registrul
Timerului va lucra cu toți cei 16 biți.

Modul 2
Acest mod configurează registrul timer ca un numărător de 8 biți
(TL1) cu reîncărcare automată. Depășirea din TL 1 setează TF1 și
reîncarcă TL1 cu conținutul TH1, care este introdus prin soft.

Modul 3
Timerul 0 în mod 3 stabilește TL0 și TH0 ca două numărătoare
separate . TL0 folosește biții de control ai Temporizatorului 0: C/T,
GATE, R0, INT0 și TF0. TH0 este bloc at într -o funcție de temporizator
(ce numără cicluri mașină) și preia pentru folosire TR1 și TF1 de la

Mihaela Hnatiuc

32 timerul 1. Astfel TH0 controlează întreruperea provenită de la
temporizatorul 1.

3.7. Desfășurarea lucrării
Studenții vor parcurge laboratorul și se vo r familiariza cu instrucțiunile
de salt, sistemul de întreruperi și timerele/numărătoarele specifice
microcontrolerului 8051. Vor parcurge setul de instrucțiuni, studind
descrierea formală a acestora. În final vor răspunde la întrebările din
ultima parte a acestui capitol și vor executa subrutinele din exemple
urmărind modificările obținute pe ecranul simulatorului.

Întrebări
1. Care sunt instrucțiunile de inițializare a timerelor/numărătoarelor?
2. Care sunt registrele utilizate pentru inițializarea număr ătoarelor și
pentru lucrul în întreruperi?
3. Care sunt deosebirile dintre lucrul în mod pooling și în întreruperi?
4. Care sunt deosebirile dintre instrucțiunea JMP și Call?
5. Care sunt asemănările și deosebirile dintre un salt realizat cu
instrucțiunea Call și un salt la o subrutină realizat de o întrerupere?
6. Consultați schema electrică și identificați porturile la care este
conectat motorul pas cu pas și minitastatura la microcontroler. Descrieți
modul de comandă a acestora.

Exemple
7. Să se reali zeze o subrutină pentru comanda motorului pas cu pas
conectat la microcontrolerul 8051 din EdSim51. Direcția de rotație este
în sensul acelor de ceasornic, numărul de rotații va fi afișat pe Display 0
(7 segmente); afișorul indică 9 rotații și apoi se rese tează. Motorul este
conectat la pinul P3.5 care în acest caz este sursa de ceas externă
pentru Timer 1. Astfel numărătorul se incrementeaza odată la fiecare
rotație. Octetul mai putin semnificativ (low) al Timer -ulului 1 (mod 1)
este salvat în acumulator și acesta împreună cu registrul DPTR sunt
utilizați pentru afișare. Motorul își schimbă direcția de rotație prin
apasarea pe switch -ul SW7 (P2.7). Direcția de rotație va fi înregistrată
în F0 (1 – în sensul acelor de ceasornic, 0 –în sens invers). Această
valoarea este transmisă la punctul zecimal (P1.7) al afișorului. Valoarea
lui F0 este comparată cu SW0, iar dacă au aceleași valori, motorul nu
trebuie să -și schimbe direcția.
Modificați programul astfel încât punctul afișorului să fie aprins
când motorul se rotește în sensul acelor de ceasornic, iar numărul
maxim de rotații afișate să fie 7.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

33 ;*******************************************************************************
; Inițializare Timer 1 și inițializare afișor 7 segmente
;************************* *******************************************************
MOV TMOD, #50H ; setare Timer1 în modul 1 de numărător
SETB TR1 ; start timer 1
MOV DPL, #LOW(LEDcodes) ; se pun octeții low ai adresei de
început ai tabelului afișorului în DPL
MOV DPH, #HIGH (LEDcodes); se pune partea high în DPH
CLR P3.4
CLR P3.3 ; validare afișor 0
;*******************************************************************************
;Programare motor pas cu pas
;*************************************************************** *****************
again:
CALL setDirection ; setare direcție de rotație
MOV A, TL1 ;salvarea TL1 în A
CJNE A, #10, skip ;dacă numărul de rotații este mai mic ca 10
;salt la instrucțiunea următoare
CALL clearTimer; resetare Timer 1 dacă numărul de rota ții este 10
skip:
MOVC A, @A+DPTR;se salvează în A numărul de rotații
MOV C, F0; F0 este salvat in CY
MOV ACC.7, C; se transmite valoarea pentru aprindere/stingere punct
MOV P1, A; se transmite la P1 numărul de rotații și direcția
JMP again ; se ramâ ne în buclă infinită

;*********************************************************************************
;setarea direcției de rotație a motorului
;*********************************************************************************
setDirection:
PUSH ACC ; se salveaza in stivă valoarea A
PUSH 20H ;salvarea valorii locației 20H (prima locație RAM
;adresabilă pe bit
CLR A ; ștergere acumulator
MOV 20H, #0 ; șterge locație 20H
MOV C, P2.7 ; SW7 în CY
MOV ACC.0, C ; salvează CY în ACC.0
MOV C, F0 ;F0 în Cy
MOV 0, C ;salvează CY în locația 20.0
CJNE A, 20H, changeDir ; compară SW0 (LSB a A) cu F0 (LSB a
;20H) dacă nu sunt la fel se schimbă direcția
JMP finish ; dacă sunt la fel se sare în programul principal

Mihaela Hnatiuc

34 changeDir:
CLR P3.0
CLR P3.1; opr ire motor
CALL clearTimer ; reset timer 1 dacă se schimbă direcția
MOV C, P2.7 ; pune valoarea lui SW7 în Cy și apoi în F0
MOV F0, C ; pentru a schimba direcția de rotație
MOV P3.0, C
CPL C
MOV P3.1, C
finish:
POP 20H
POP ACC
RET
clearTimer:
CLR A ;resetare numărător rotații
CLR TR1 ;oprire timer 1
MOV TL1, #0
SETB TR1 ;start timer 1
RET
LEDcodes: DB 11000000B, 11111001B, 10100100B, 10110000B,
10011001B, 10010010B, 10000010B, 11111000B, 10000000B,
10010000B
;eticheta pentru adresa de început a tabelului afișor 7 segmente
; salvat în memoria program folosind directiva define byte (DB)

Figura 3.7. Copie ecran realizată în timpul execuției programului de
comandă a motorului pas cu pas

8. Modul de conectare a l tastaturii la pinii microcontrolerului este realizat
ca în schema electrică din Anexa I. Liniile sunt conectate la pinii P0.0
până la P0.3 iar coloanele la P0.4 până la P0.7. Să se execute și să se
explice programul de mai jos.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

35 Pentru identificarea tast ei apăsate se resetează liniile pe rând și
se testează fiecare pin conectat la coloanele tastaturii, dacă pinul este
în 0 logic, la intersecția liniei și coloanei care sunt pe 0 logic se identifică
tasta apăsată.

+–-+–-+–-+
| 11 | 10 | 9 | row3
+–-+–-+–-+
| 8 | 7 | 6 | row2
+–-+–-|–-+
| 5 | 4 | 3 | row1
+–-+–-+–-+
| 2 | 1 | 0 | row0
+–-+–-+–-+
col2 col1 col0

Figura 3.8. Liniile și coloanele minitastaturii

Linie1 equ P0.3
Linie2 equ P0.2
Linie3 equ P0.1
Linie4 equ P0.0
Col1 equ P0.4
Col2 equ P0.5
Col3 equ P0.6

JMP start

start:

MOV R0, #0 ; scanare linie 0
SETB Linie1
CLR Linie4
CALL coloanăScan
JB F0, finish ; scanare linie 1
SETB Linie4
CLR Linie3
CALL colScan
JB F0, finish ; identificare linie 2
SETB Linie3
CLR Linie2 ; ștergere linie 2

Mihaela Hnatiuc

36 CALL colScan
JB F0, finish ; scanare linie 3
SETB Linie2
CLR Linie1
CALL colScan
JB F0, finish
JMP start
finish:
JMP $

coloanăScan:
JNB Col1, IdentificareTasta
INC R0
JNB Col2, IdentificareTasta
INC R0
JNB Col3, IdentificareTasta
INC R0
RET
IdentificareTasta:
SETB F0
RET

Figura 3.9. Copie ecran realizată în timpul execuției subrutinei
pentru identificarea tastei apăsate

Refa ceți programul de mai sus introducând temporizări de 10ms
după testarea pinului corespunzator tastei apăsate. Temporizarea se va

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

37 realiza utilizând temporizatorul 0 în modul 2 cu reâncărcare. Afișați
codul ASCII al tastei apăsate.

Probleme propuse
a) În me moria de programe a unui microcontroler 8051 se află
înregistrat un șir succesiv de date, de 1 octet fiecare, pe o lungime de 3
octeți, începând cu adresa 1000h. Se cere transferul acestor date în
memoria RAM locală a microcontrolerului în locații succesi ve începând
cu adresa 90h, în sens descrescător. Este posibilă salvarea registrului
DPTR în stivă, pentru cele două situații de adresare a memoriei (de
date și de programe)? Justificați.
b) În memoria program a microcontrolerului 8051 se află plasat un șir de
5 date succesive, diferite, începând cu adresa 1000h. Aflați maximul în
apoi salvați -l în memorie la adresa 50h.
c) Să se genereze un semnal dreptunghiular de perioada 10 ms pe pinul
P3.4. Se va utiliza Timerul 0 în modul de lucru 2 știind că frecvența de
oscilație este de 12MHz. Calculați numărul de impulsuri de la oscilator
care trebuie numărate de către temporizatorul 0.
d) Prezentați o metodă prin care se poate realiza o temporizare
software în limbajul de asamblare a controlerului 8051.

Mihaela Hnatiuc

38

Capitolul 4

Portul serial (UART). Aplicații

4.1. Scopul lucrării

La sfârșitul acestui laborator studenții vor avea cunoștințe despre
comunicarea dintre calculator și microcontroler prin portul serial.
Comunicarea se va realiza atât în modul p ooling cât și prin întreruperi.

4.2. Cunoștințe necesare pentru realizarea laboratorului

Studenții trebuie să cunoască noțiunile predate în laboratoarele
anterioare cât și:
– Funcționarea motorului pas cu pas;
– Funcționarea minitastaturii .

4.3. Portul se rial. Noțiuni teoretice

Microcontrolerul 8051 are port serial integrat pe chip. Acesta are
transmisie duplex adică poate primi și transmite date simultan. Pentru
transmiterea/recepționarea datelor este suficient să fie selectat prin
program portul serial și rata de comunicare între microcontroler și PC.
Datele primite/trimise sunt înregistrate în registrul SBUF.

Figura 4.1. Reprezentarea registrului SBUF utilizat pentru salvarea
octetului înainte/după transmisia/recepția datelor
Inițializarea portului serial se realizează prin soft utilizând biții
registrului SCON. La inițializare se stabilesc: modul de lucru, numărul
de biți utilizați în transmiterea datelor, paritatea.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

39

Figura 4.2. Reprezentarea registrului SCON utilizat la inițializarea
UART -ului

4.3.1. Detalierea funcțiilor îndeplinite de biții care compun registrul
SCON
A) Programarea modului serial cu biții SM0 și SM1

SM0 SM1 Mod
0 0 Mod 0
0 1 Mod 1
1 0 Mod 2
1 1 Mod 3

B) Stabilirea numărului de biți utilizați în compunerea pachetului de date
transmise:
SM2 – activarea modului de lucru multiprocesor în modurile 2 și 3, prin
transmisia bitului special 9;
REN – activare/ dezactivare recepție;
TB8 – transmisie bit paritate utilizat în modurile de lucru 2 și 3;
RB8 – recepție bit de paritate utilizat în modurile de lucru 2 și 3;
TI – indicator de întrerupere a transmisiei;
RI – indicator de întrerupere a recepției.

Tabelul 4.1. Reprezentarea modurilor de comunicare în funcți e de
numărul de biți și viteza de transmisie
SM0 SM1 Mod Descriere Baud Rate
0 0 0 Registru de deplasare pe 8 biți 1/12 fosc
0 1 1 Pachet de date pe 8 -biți Determinat de
Timer 1
1 0 2 Pachet de date pe 9 -biți 1/32 fosc
(1/64 fosc)
1 1 3 Pachet de dat e pe 9 -biți Determinat de
Timer 1

Mihaela Hnatiuc

40 Modul 0 – datele seriale sunt transferate în ambele sensuri prin pinii
RXD și TXD. Rata transferului este 1/12 din frecvența de oscilație.
Transmisia începe cu cel mai puțin semnificativ bit (LSB).

Mode 1 – transmisie a sincronă, se transmit date prin TXD, se
recepționează prin RXD în formatul 1 bit de start, 8 biți de date, 1 bit de
stop, cu rata de transfer variabilă (programabilă) cu un
Numărător/Temporizator 1.

Mode 2 – ca la modul 1, dar se transmite și un al 9 -lea bit de date care
poate fi bitul de paritate. Rata de transfer este egală cu frecvența
oscilatorului divizată cu 32 sau cu 64. Diagrama de comunicare este 1
bit Start, 8 biți date, 1 bit de paritate (RB8, TB8) și 1 bit de Stop.
Mode 3 este la fel ca modul 2, diferă rata de comunicare.
Rata de transmisie (Baud Rate ). Definiție . Reprezintă numărul de
transmisii/recepții pe secundă. În cazul în care este utilizat UART -ul,
rata de transmisie depinde de: modul de lucru selectat, frecvența
oscilatorului, starea registrului SMOD selectat din registrul SCON.
Formulele necesare sunt prezentate în tabelul 4.2.

Tabelul 4.2. Modul de selecție a ratei de comunicare
Modul de lucru Baud Rate BitSMO
D
Mod 0 Fosc. / 12
Mod 1 2^SMOD/32* Fosc/ 12* (256 -TH1) BitSMOD
Mod 2 Fosc. / 32, Fosc. / 64 1,0
Mod 3 2^SMOD/32* Fosc/ 12* (256 -TH1)

Timer 1 este utilizat ca generator de baud rate deoarece sunt modificate
ușor valorile ratei de transmisie. Procedura este si mpla:
 Timer 1 – se setează pe modul întreruperi;
 Timer 1 – va lucra în modul cu reîncărcare
 Valoarea de reîncărcare depinde de rata de transfer cerută și
de frecvența de oscilație, se pot folosi valorile standard din
Tabelul 4.3. Valoarea de reîncărcare se scrie în TH1.
Tabelul 4.3. Valoarea de încărcată în TH1 pentru rata de transfer dorită
Baud Fosc. (MHz) Bit

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

41 Rate 11.0592 12 14.7456 16 20 SM
OD 150 40 h 30 h 00 h 0
300 A0 h 98 h 80 h 75 h 52 h 0
600 D0 h CC h C0 h BB h A9 h 0
1200 E8 h E6 h E0 h DE h D5 h 0
2400 F4 h F3 h F0 h EF h EA h 0
4800 F3 h EF h EF h 1
4800 FA h F8 h F5 h 0
9600 FD h FC h 0
9600 F5 h 1
19200 FD h FC h 1
38400 FE h 1
76800 FF h 1

Portul serial poate lucra în modul pooling sau în întreruperi. În
primul mod se așteaptă în buclă transmiterea/receptio narea datelor, iar
în modul întreruperi se continuă programul principal până când s -a
terminat transferul. Pentru lucrul în întreruperi se selectează bitul EA, de
întreruperi generale, și bitul ES de întrerupere a portului serial (registrul
IE). În momentu l în care portul serial cere o întrerupere se sare la
adresa 23h. Întreruperea este validată când RI sau TI sunt setați pe 1
logic. Aceștia vor fi resetați, soft, în rutina de întrerupere.
Pentru selectarea nivelului de prioritate a întreruperii generate de
portul serial se selectează bitul PS din registrul IP.
Se vor utiliza notele de curs pentru programarea portului serial și
a temporizatorului.

4.3.2. Conectorul serial. Descriere pe scurt

Figura 4.3. Cupla serială cu 9 pini (conectorul DB9)

În tabelul de mai jos este indicat numele și semnificația celor mai
importante semnale definite de standardul RS232 pe un conector cu 9
pini. Direcția este indicată între calculator (DTE) și modem (DCE).
Tabelul 4.4. Semnificația pinilor conectorului RS232

Mihaela Hnatiuc

42 Num e
semnal Semnificația/Funcția Direcție
DTE-DCE Poziția pe
con. DB9
RXD Received Data – Linia de date de la DCE
(modem) la DTE (PC).  2
TXD Transmit Data – Linia pe care se transmit
datele. DTE (PC) poate transmite date
numai când cele patru linii de con trol
RTS, CTS, DSR și DTR au valoarea 1
logic. Această linie este în 'marking
condition' ('1' logic) când nu sunt
transmise date, conform protocolului.  3
GND Masă digitală – 5
DTR Data Terminal Ready – PC-ul (DTE)
setează această linie cu '1' logic în
momentul în care este gata să comunice
cu modemul (DCE).  4
DSR Data Set Ready – Setând această linie
cu 1 logic, modemul (DCE) indică PC -ului
(DTE) că o conexiune a fost stabilită cu
cealaltă parte (apelul a avut succes) și
datele pot fi transmise la c elălalt modem.  6
RTS Request To Send – Dacă linia este pe 1
logic, PC -ul (DTE) testează modemul
(DCE) dacă este pregătit pentru primirea
datelor.  7
CTS Clear To Send –Dacă se setează
aceasta pe 1 logic după un RTS,
modemul (DCE) indică PC -ului când e ste
gata să primească date.  8
RI Ring – Modemul (DCE) transmite PC -ului
(DTE) că există un apel pe linia telefonică
la care este conectat modemul.  9
RLSD
sau CD Received Line Signal Detector sau
Carrrier Detect – Modemul (DCE) indică
PC-ul (DTE), pri n RLSD că a primit un  1

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

43 semnal de la celălalt capăt al liniei.

Când pe linia serială nu se transmit date magistrala este pe 1
logic. În cazul transmisiei seriale asincrone, se realizează sincronizarea
comunicării prin bitul de START. Citirea datelor s e face secvențial, la
jumatatea intervalelor de bit care urmează bitului de start. Sincronizarea
nu se pastrează în cazul în care lungimea datelor utile este mai lungă.
Pentru controlul fluxului de date transmise se poate utiliza un protocol
hardware sau u nul software.
Cazul I – se utilizează semnale explicite (grupul de semnale
DTR/DSR sau RTS/CTS), prin care dispozitivul de recepție poate să
oprească temporar fluxul de date transmis. În acest fel se poate
sincroniza viteza de emisie a datelor la viteza d e prelucrare a
dispozitivului de recepție.
Cazul II – nu se utilizează semnale de control; în schimb folosește
un set de coduri speciale prin care poate să oprească (codul XOFF) sau
să repornească (codul XON) transmisia datelor. Această metodă se
poate ut iliza numai la transmisia unor date codificate ASCII. La
transmisia binară codurile de control ar putea să fie prezente în datele
de transmis.
În continuare se prezintă configurații tipice de interconectare.
a. Transmisie unidirecțională, fără controlul fluxu lui de date

b.Transmisie bidirecțională folosind protocolul XON/XOFF

Mihaela Hnatiuc

44

c.Transmisie bidirecțională folosind protocolul DTR/DSR

În cazul transmisiei bidirecționale sunt folosite și semnalele de
semnalizare a stării pinului DTE și a celui de DCE. Pinu l DSR arată
posibilitatea de a primi date fiind conectat la linia DTR. Dacă se pune
DSR în 1 logic de către DCE se semnalează pentru DTE posibilitatea de
a trimite datele.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

45 d. Transmisie bidirecțională folosind interfața completă RS232
(protocol DTR/DSR ș i RTS/CTS)

Transmisia bidirecțională folosind interfața completă RS232
(protocol DTR/DSR și RTS/CTS) se face ca și la transmisiile
bidirecționale folosind protocolul XON/XOFF și DTR/DSR dar mai apare
și sincronizarea dintre DTE și DCE. Cererea de trans misie se face prin
RTS, iar confirmarea prin CTS.
Simulatorul EdSim51 are integrată în interfață o fereastră de
transmisie și una pentru recepția datelor (Figura 4.4).

Figura 4.4. Ferestrele pentru afișarea datelor transmise/recepționate
pe portul seri al

Prin intermediul acestor ferestre se citesc datele primite sau sunt
afișate datele ce urmează a fi transmise. Atât pentru realizarea recepției
cât și pentru cea a transmisiei se apasă butonul „RX Reset” respectiv
„TX Send”.

4.4. Desfășurarea lucrării

Studenții vor aprofunda noțiunile din laborator privind
comunicarea pe portul serial. Vor identifica în schema electrică (Figura

Mihaela Hnatiuc

46 4.5) pinii utilizați pentru transmisia serială și conexiunile dintre
microcontroler și calculator. De asemenea vor identifica în simulatorul
EdSim51, registrele utilizate pentru programarea portului serial și ale
temporizatorului.
În ferestrele de transmisie și de recepție se vor observa datele
care se transmit sau se recepționează pe perioada execuției
subrutinelor specifice po rtului serial.
Se vor citi cerințele de mai jos, se vor testa programele existente
și se vor realiza modificări conform cerințelor.

Exemple

1. Fie un microcontroler 8051 care comunică cu un calculator pe portul
serial, fără sincronizare. Să se realizeze o subrutină pentru
transmisia/recepția datelor.
Subrutina va începe cu inițializarea UART -ului și stabilirea vitezei
de comunicare dintre microcontroler și calculator. Odată ce este
terminată subrutina de inițializare se așteaptă recepționarea unui pachet
de date pe linia RXD, care reprezintă codul ASCII al caracterelor. De
asemenea se pot transmite pe linia TXD caractere, iar acestea se scriu
în fereastra de transmisie. Pentru transmisie se apasă pe butonul
TXSend. După ce a fost transmis octetul, caracte rul va dispare din
această fereastră.
Rata de trasmisie este de 19200 bauds și este generată cu
ajutorul Timerului 1, iar bitul SMOD este setat (vezi Tabelul 4.3).
Frecvența de ceas este de 12MHz. Programul este realizat în modul
pooling, prin testarea bit ul RI. Imediat ce RI este setat se transferă
caracterul recepționat în SBUF. Octetul recepționat este testat, iar dacă
este caracter de sfârșit de șir (0D hex), se sare la sfârșitul programului.
Data este înregistrată în memorie și se sare la subrutina de așteptare a
următorului caracter.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

47 Figura 4.5. Schema de conectare a portului serial la pinii
microcontrolerului
Explicați programul de mai jos. Redactați -l în Editorul
simulatorului EdSim51 și observați modificările realizate în registrele
microcontro lerului.

;**************************************************************************
;Inițializare port serial, rata de comunicare este de 19200 bauds
;**************************************************************************
CLR SM0 ;setare port ser ial pentru modul 2 de lucru
SETB SM1
SETB REN ; validare port serial pentru recepție date
OR PCON,#01 ; setare SMOD din PCON pentru a dubla rata de
;comunicare
MOV TMOD, #20H ; inițializare Timer 1 în modul de lucru cu
;reîncărcare
MOV TH1, #0FDH ;se pune -3 în registrul TH1
MOV TL1, #0FDH
SETB TR1
MOV R7, #50H ; se încarcă valoarea adresei de start în R1
bucla:
JNB RI, $ ; se așteaptă recepția datei pe RxD
CLR RI ; se șterge RI
MOV A, SBUF ; se încarcă valoarea primită în acumulator
CJNE A, #0DH, salt ; se compară cu 0DH ; dacă nu este egală
;salt urmator:
JMP sfarsit ; dacă este egală se sare la sfârșit
salt:
MOV @R1, A ; se salvează valoarea în memorie la locația
;indicată de R1
INC R7 ; incrementarea conținutului lui R7
JMP bucla ; se sare înapoi pentru a se aștepta noul caracter

sfarsit:
JMP $ ; se repetă subrutina

Explicați de ce în timpul execuției programului de mai sus se
comandă și motorul.
Modificați programul de mai sus astfel încât să fie posibilă și
transmisia caracterului recepționat înapoi la calculator.

Mihaela Hnatiuc

48 2. Să se realizeze o subrutină pentru transmisia datelor serial, acestea
fiind înregistrate inițial în memoria de date internă. Rata de transmisie
este de 9600 bauds. Datele sunt transmise cu par itate pară, și de
aceea, pentru o recepție corectă se va inițializa UART -ul extern pe
paritate pară.

CLR SM0 ; portul serial este setat pe modul 2 de lucru
SETB SM1
MOV TMOD, #20H ;………………
MOV TH1, #0FDH ; ………………
MOV TL1, #0FDH ;……………….
SETB TR 1 ; Start numărare
MOV 40H, #'1';………………….
MOV 41H, #'2';………………….
MOV 42H, #'3';
MOV 43H, #0; cînd acumulatorul nu conține 0 nu se mai
;transmite
MOV R1, #40H; salvare adresă de start în R0
bucla:
MOV A, @R1;…………………..
JZ sfarsit;…………………………
MOV T B8, P; salvare bit de paritate în TB8
MOV ACC.7, TB8; salvare TB8 în MSB din A
MOV SBUF, A;…………………………
INC R0; …………………………………
JNB TI, $; testare bit TI perntru terminare transmisie
CLR TI;
JMP bucla ; transmite octet următor
sfarsit:
JMP $
Completaț ii spațiile punctuate din program cu comentarii.

Figura 4.6 Rezultat obținut după execuția programului de mai sus

La transmisia sau recepția unei date se pornește motorul. De ce?
Modificați programul pentru a se transmite date cu paritate impară.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

49 Refa ceți programul pentru a se realiza comunicarea serială în
întreruperi.

3. Să se transmită în mod repetat caracterul “a” pe portul serial. Rata
de comunicare este de 9600bauds iar UART -ul lucrează în modul 1.
Frcvența de lucru este de 11,0592MHz. Se va ut iliza Temporizatorul 1
pentru generarea semnalului de tact. Portul serial va lucra în întreruperi.

Org0
Jmp Start
Org 0023h
JMP serial
;******************************************************
;Inițializare transmisie
; *********************************** *******************
Start:
MOV TMOD,#20h
MOV TH1,#0FDh
SETB TR1
MOV SCON, #50h
SETB EA
SETB ES
;******************************************************
;transmisie caracter “a”
;******************************************************

MOV SBUF,#´a´
JMP $

;******************************************************
;Subrutina de întreruperi
;******************************************************
serial:
JNB TI,init
CLR TI
MOV SBUF,`a`
init:RETI

END

Să se execute și să se comenteze programul. Modificați programul
astfel încât să se recepționeze caractere în modul întreruperi.

Mihaela Hnatiuc

50 Probleme propuse
1. Să se transmită la PC prin portul serial, de patru ori, cuvântul “Hello”.
Rata de comunicare este de 9600 bauds, iar UART -ul lucrează în modul
1. Frecvența de lucr u este de 11,0592MHz. Se va utiliza Temporizatorul
1 pentru generarea semnalului de tact.
2. Să se transmită la PC, cifrele 1, 2, 3 cu o întârziere de 50ms. Cifrele
sunt memorate inițial în memoria RAM la adresele 30h, 31h, 32h. Portul
serial va lucra în modu l 1 în întreruperi. Frecvența de lucru este de
11,0592MHz. Se va utiliza Temporizatorul 1 pentru generarea
semnalului de tact.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

51

Capitolul 5

Directive de asamblare

5.1. Scopul lucrării

La sfârșitul acestui laborator stu denții vor cunoaște principalele directive
asamblor specifice microcontrolerului 8051.

5.2. Cunoștințe necesare pentru realizarea laboratorului
Studenții trebuie să cunoască atât noțiunile predate în laboratoarele
anterioare cât și:
 funcționarea convertor ului analog – digital cu aproximații succesive;
 funcționarea convertorului digital – analog;

5.3. Directive de asamblare
Directivele stabilesc modul în care asamblorul va prelucra
instrucțiunile scrise în programul curent. Ele ajută la rezervarea în
memo rie a spațiului unde se înregistrează variabilele, la definirea de
constante simbolice pentru programul ce rulează, sau la specificarea
tipului de memorie în care se va amplasa codul obiect generat.
Directivele nu se regăsesc în codul obiect, ele sunt ut ilizate doar
pentru a schimba starea internă a asamblorului și pentru a introduce în
fișierul relocabil informații care vor fi utilizate în etapa de generare a
codului obiect absolut. Principalele clase de directive de asamblare sunt
descrise în continuare .

5.3.1. Definirea de simboluri specifice aplicației

A. Directive de definire a constantelor simbolice

A.I. EQU – definește constanta asamblorului

Sintaxă:
<nume_constantă> equ <valoare>

Mihaela Hnatiuc

52
Descriere:
La nume_constantă se atribuie <valoare>.
Exemple
cinci equ 5
șase equ 6
masca equ 11110001

A.II. SET – este identică cu EQU, diferența dintre ele este că simbolurile
definite cu SET pot fi redefinite în cadrul fișierului sursă curent.

A.III. RESET – permite atribuirea valorii 0000h simbolurilor def inite cu
directiva SET.

Directivele SET și RESET sunt utilizate în program numai de directivele
de asamblare condiționată IF și ELSEIF care au înainte $.

B. Directive de asamblare condiționată
IF, ELSE, ELSEIF și ENDIF sunt directive utilizate în progra m
pentru delimitarea unor secvențe de program care pot fi incluse sau
excluse de la asamblare prin condiționarea unui simbol sau expresii
logice.

Sintaxă
$IF(simbol)
…………………………..
$ELSEIF(simbol=1)
…………………………..
$ELSE
…………………………..
$ENDIF

C. Organizarea segmentată a programelor

Un segment este un bloc de memorie de cod sau date. Segmentele
sunt absolute și relocabile.

C.I. Segmentele absolute sunt predefinite și permit accesul la o locație
fixă, sau datele sunt înregistrate la o adresă fixă de memorie. Conținutul
segmentelor nu mai poate fi mutat la alte adrese de către link -editor.
Tipuri de segmente absolute:
CSEG – segment de cod absolut, înregistrat în memoria program;

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

53 DSEG – segment de date absolut, înregistrat în memoria de date
internă și care se poate adresa direct;
ISEG – segment de date absolut, înregistrat în memoria de date
internă și care se poate adresa indirect;
BSEG – segment de date absolut, înregistrat în memoria de dat e
internă și care se poate adresa direct pe bit;
XSEG – segment absolut de date în memoria de date externă.

Exemple
CSEG AT 800h; se definește un segment de cod de la adresa 800h
DSEG AT 50h; selectează segmentul de date salvat în memoria
;RAM internă, la adresa 50h

C.II. La segmentele relocabile, spre deosebire de cele abolute, nu se
specifică în textul sursă adresa de amplasare a lor în memorie.
Se definesc folosind directiva SEGMENT. Un segment relocabil are un
tip și un nume. Tipul indică spațiul de memorie în care acesta va fi
amplasat.
Sintaxă:
<tip> SEGMENT <nume >

Exemple
PROGRAM SEGMENT CODE
DATE SEGMENT DATA

Code – Definește un simbol de tip adresă a unei locații de memorie de
program.
Similar pentru: DATA, IDATA, BIT, XDATA

D. Rezervar ea memoriei și inițializarea datelor
ORG – definește o adresă unde programul este înmagazinat în memoria
microcontrolerului.

Sintaxă:
<label> org <value>

Descriere
Aceasta este cea mai frecvent folosită directivă. Cu ajutorul acestei
directive definim unde o anumită parte a programului va fi memorată în
memorie.

Mihaela Hnatiuc

54 Exemple:
Start org 08000h
MOV A,#34h
MOV R0,A
Prima instrucțiune ce urmează după prima directivă 'org' se memorează
la adresa 8000h.

END – sfârșit de program

Sintaxă:
END

Descriere:
La sfârșitul programului este necesar să se scrie directiva 'END' pentru
ca translatorul de asamblare să știe că nu mai sunt instrucțiuni.

DB – se definesc date de un octet

Sintaxă:
[<term>] DB <term> [, <term>,…..,<term>]

Descriere:
Directiva rezervă u n octet în memoria de program. Când se definește un
tablou cu această directivă, termenii sunt scriși unul după altul.

Exemple
Tab DB 't', 0f0h, 'e', 's', 012h

DW – se definesc date de un cuvânt (2 octeți). Este similar cu DB.

5.3.2. Macroinstrucțiuni

Reprezintă un nume simbolic atribuit unor linii de cod. La definirea
macroinstrucțiunii se indică blocul de text sursă asociat cu numele
acesteia. Includerea acelui bloc în program se realizează prin
specificarea numelui macroinstrucțiunii. La asamblare se înlocuiește
numele cu liniile de cod asociate, proces denumit expandare.

Sintaxă
<nume> macro <parametru l>
……………………………………….
ENDM

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

55 Exemple
Receive Macro P1, P2, P3
….corp macroinstrucțiune
ENDM

Program principal
Corp prog ram principal
.
.
.
Receive A, B, C; invocarea macroinstrucțiunii cu toți parametrii
efectivi

5.4. Desfășurarea lucrării

Studenții vor parcurge laboratorul și vor testa pe EdSim51 exemplele.
În final vor programa în asamblor subrutinele conform cerințelor di n
probleme.

Probleme

1. Fie microcontrolerul 8051 conectat la un DAC conform schemei
electrice. Să se genereze o pantă la ieșirea DAC -ului care se afișează
pe Scope.

ORG000h
JMP Start
Start:
CLR P0.7 ; se validează scrierea DAC -ului
bucla:
MOV P1, A; s e tranferă data din acumulator la intrarea DAC -ului
ADD A, #6; se incrementează A cu 6
JMP bucla
END

Ce se întâmplă dacă conținutul acumulatorului este incrementat cu
0Fh? Dar cu FFh?

2. Fie un senzor al cărui semnal de ieșire este analogic în intervalul (0-
5)V, eșantioanele fiind citite la intrarea analogică a convertorului la un
interval de timp de 10us. Perioada de eșantionare este stabilită cu

Mihaela Hnatiuc

56 ajutorul Timerului 0 care lucrează în întreruperi. Când se termină o
conversie, pinul de intrare analogică est e pus pe 0 logic.

ORG 0h
JMP START ; salt la programul principal

ORG 3
JMP IntCAN; salt la întrerupere convertor analog digital

ORG 0BH
JMP IntTimer0;salt la î ntreruperea Timerului 0

ORG 30H
START:
SETB IT0 ; activare întrerupere pe front cre scator 0
SETB EX0 ; validare întrerupere externă
CLR P0.7 ;validare DAC
MOV TMOD, #2 ; inițializare timer 0 pe 8 -bit cu autoîncarcare (mod 2)
MOV TH0, # -20h ; constanta de reîncărcare
MOV TL0, # -20h ; se încarcă TL0 cu 20h pentru siguranța reîncărcării
SETB EA ; validare întreruperi generale
SETB ET0 ; setare întrerupere Timer0
SETB TR0 ; start numărare timer 0
JMP $
;*********************************
;întrerupere timer, introdusă pentru realizarea transferului datelor la
;DAC
;************************** *******
IntTimer0:
CLR P3.6 ; se șterge linia WR pentru CONVERTOR ANALOG
NUMERIC
SETB P3.6 ; se realizează front pozitiv
RETI
;**********************************
; Subrutină întreruperi CONVERTOR ANALOG NUMERIC
;**********************************
IntCAN :
CLR P3.7 ; ștergere linie convertor analog numeric
MOV P1, P2 ; transmisie date către convertor numeric analogic
SETB P3.7 ; invalidare convertor analog numeric
RETI

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

57

Figura 5.1. Rezultatele conversiei sunt afișate pe Scope. Convertorul
primește un semnal analogic de 1,88V pe care -l convertește și îl trimite
la DAC a cărei ieșire este conectată la scope

3.Să se editeze următorul program și să se comenteze rezultatele.

;*********************************
Transmite MACRO litera
;************** *******************
IF NULL litera
EXITM
ENDIF
JNB TI, $
CLR TI
MOV A,litera
MOV SBUF,A
ENDM

Start:
Transmite ”A”
Mov P1,A
END

4.Să se scrie o macroinstrucțiune pentru înregistrarea unor constante în
registrele R0,R1 și R2.
5. Să se înregistreze î n memoria RAM de date numere de la 1 la 10
începând cu adresa 40h.
6. Să se defineasă un segment de memorie adresabilă indirect.
7. Care este diferența dintre segmente de memorie relocabile și
absolute.

Mihaela Hnatiuc

58

Capitolul 6

Aplicații cu microcontrolerul 8051. Comanda și controlul unui
sistem pneumatic

6.1. Scopul lucrării

La sfârșitul acestui laborator studenții vor cunoaște modurile de lucru de
consum redus ale microcontrolerului 8051. De asemenea vor concepe
și testa o aplicație de comandă, control ș i achiziție a unui sistem
pneumatic în care vor utiliza noțiunile învățate.

6.2. Cunoștințe necesare pentru realizarea laboratorului

Studenții trebuie să cunoască noțiunile predate în laboratoarele
anterioare cât și:
– funcționarea multiplexoarelor;
– funcți onarea Latch -urilor;
– funcționarea senzorilor de presiune;
– funcționarea electrovanelor;
– funcționarea compresorului de aer.

6.3. Regimuri de consum redus. Modul de lucru Power Down și
IDLE

Puterea consumată de la sursele de alimentare este dată de
puterea consumată în regim static și dinamic. Pentru reducerea
consumului se reduce în acest caz frecvența de lucru. În modurile de
lucru Power down și IDLE se blochează accesul frevenței de ceas spre
diverse blocuri. Trecerea în regimuri de consum redus, la
microcontrolerul 8051, se realizează prin setarea bitului IDL sau PD din
registrul PCON din zona de registre cu funcții speciale.

SMOD – – – GF1 GF0 PD IDL
Figura 6.1 Reprezentarea biților conținuți de registrul PCON

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

59 6.3.1. Modul de consum redus IDLE
În modul de lucrul IDLE, unitatea centrală de procesare își
încetează activitatea, ultima instrucțiune executată este de setare a
bitului IDL din PCON pentru a intra în acest mod. În IDLE rămân în lucru
perifericele, iar memoriile își păstrează informațiile. Există două
posibilități de ieșire din acest mod:
A. Activarea RESET -ului prin intermediul căreia se păstrează
conținutul memoriei interne dar se reinițializează zona SFR.
B. Activarea unei întreruperi prin intermediul căreia se șterge automat
bitul IDL. La revenirea în programul principal se continuă cu
instrucțiunea imediat următoare celei care a produs intrarea în modul
IDLE.

6.3.2. Modul Power – Down
Intrarea în modul Power -Down se realizează prin setarea bitului
PD din registrul PCON. Pe dura ta acestui mod, oscilatorul este blocat și
semnalele de comunicare cu memoria externă sunt blocate. Tensiunea
de alimentare poate coborâ până la 2V. Ieșirea din acest mod se poate
realiza doar prin RESET, durata resetării fiind de 10ms.
Aceste regimuri de funcționare sunt utile când alimentarea
microsistemului se face de la o baterie, unde consumul de energie al
componentelor este o constrângere severă.

6.3.3. Comanda și controlul unui sistem pneumatic. Aplicație
Aplicația face parte dintr -un proiect de ac hiziții, control și
comandă a unui sistem pneumatic. Sistemul pneumatic este o saltea
medicală realizată din compartimente de aer comandate individual.
Presiunile în compartimentele de aer sunt modificate prin intermediul
unor algoritmi implementați în mic rocontrolerul 8051.

6.3.3.1.Descrierea sistemului
Sistemul pneumatic este compus din două componente
principale: compartimente de aer comandate individual și dispozitivul de
comandă și control.
Elementele de comandă și control care contribuie la reglar ea
presiunilor în compartimentele de aer sunt :
1. Senzori de presiune care indică valoarea presiunii în
compartimente (alimentate printr -o rețea de tuburi de plastic);
2. Minicompresor prin intermediul căruia se introduce/scoate
aerul din compartimente;
3. Electro vane prin care se reglează aerul în compartimente.
Aerul este oprit sau nu să circule spre/dinspre compartimente.

Mihaela Hnatiuc

60 Sistemul de măsură și control este echipat cu o placă microsistem cu rol
de:
1. Măsurare a datelor primite de la senzorii de presiune ;
2. Prelucrar e a datelor;
3. Comandă pentru închiderea sau deschiderea electrovanelor;
4. Înregistrare a datelor ;
5. Transmitere a datelor către calculator prin interfața RS232.
Sunt 14 compartimente de aer care compun sistemul și care au inițial
aceeași presiune. Compartimen tele sunt conectate individual la
electrovane și senzori de presiune. Aceste din urmă sunt comandate cu
ajutorul plăcii microsistem. Două electrovane sunt comune pentru toate
compartimentele. Una dintre ele este conectată la minicompresorul de
aer pentru u mflarea sacilor, iar a doua este folosită pentru dezumflarea
lor (Figura 6.2.).

Figura 6.2 Schema de comandă a sistemului pneumatic

În Anexa III este prezentată schema electrică detaliată a sistemului.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

61 6.3.3.2. Scurtă descriere a dispozitivelor ele ctronice care compun
sistemul

I. Senzorii de presiune funcționează ca niște generatori activi și
realizează conversia unei mărimi fizice în una electrică. Numărul de
senzori utilizați în sistem este egal cu numărul compartimentelor de aer.
Capsulele mano metrice sunt realizate cu ajutorul a două plachete
de siliciu între care este vid. Placheta detectoare este conectată la patru
rezistențe de tip piezorezistiv care funcționeză în punte Wheatstone.
Presiunea exterioară va deforma membrana superioară dezechi librând
valoarea unei rezistențe din puntea Wh eatstone. Măsurarea presiunii
se realizează în raport cu vidul. Tensiunea recuperată este de valoare
foarte mică și are suprapus un semnal de zgomot. Senzorii au în
componența lor un amplificator și un filtru prin care se filtrează riplul
introdus de la tensiunea de alimentare.
Valorile analogice ale tensiunilor rezultate după amplificare și filtrare
sunt convertite în valori digitale cu ajutorul unui convertor analog digital
pe 12 biți. Valorile binare sunt c itite serial la pinul unui port al
microcontrolerului cu ajutorul circuitului de multiplexare 4067.

II. Electrovanele sunt dispozitive cu două stări comandate electric.
Intervalul de funcționare al electrovanelor utilizate în proiect este între 0
și 8 b ari. Se folosesc 16 astfel de electrovane pentru controlul presiunii
în 14 compartimente de aer, iar două dintre ele sunt utilizate pentru
acțiunea generală de introducere sau scoatere a aerului din saci.
Valoarea tensiunii de alimentare a electrovanelor e ste de 24Vc.c..
Timpul dintre comanda și acționarea electrovanei este de ordinul
nanosecundelor și nu prezintă importanță în acest caz.
În proiect, electrovanele sunt împărțite în două grupuri de câte 8,
comanda lor realizându -se cu circuite integrate latch de tip D 74HCT573
și circuite de memorare ULM2803A. Selectarea pinilor
microcontrolerului este realizată prin program (Anexa III).

III. Mini -compresorul de aer este utilizat pentru umflarea/dezumflarea
compartimentelor cu aer. Dispozitivul de umflar e a compartimentelor de
aer utilizat pentru acest sistem este alimentat la 12 V și are un consum
de 7 A. Tot principiul este de introducere /evacuare a aerului din cameră
în funcție de cursele pistonului. Dispozitivul, cu specific medical, este de
putere m ică și de debit de aer scăzut.
Valorile senzorilor sunt recuperate de către microcontroler de la
circuitul multiplexor și transmise în memoria RAM a plăcii
microcontroler, la o adresă prestabilită. Selectarea senzorului de la care

Mihaela Hnatiuc

62 se dorește citirea se re alizează cu pinii P1.0 -P1.3 ai microcontrolerului.
Pinii T0 și T1 ai microcontrolerului selectează unul din cele două grupuri
de electrovane, iar prin intermediul pinilor P1.0 -P1.7 se comandă
electrovana dorită (Anexa III).

6.4. Desfășurarea lucrării

Studenții vor parcurge laboratorul și vor studia schema electrică a
proiectului prezentată în Anexa III. Vor înțelege modul de comandă și
control al presiunilor în compartimentele de aer. De asemenea vor
explica funcționarea latch -urilor, multiplexoarelor și a convertorului
analog numeric.

Exemple
1. Programul de mai jos controlează presiunile în compartimentele de
aer. Programul are o etapă de inițializare în care se introduce același
volum de aer în compartimente, debitul de aer fiind citit cu ajutorul
senzorilor de presiune. În final se va introduce sau scoate un volum de
aer proporțional cu greutatea care apasă pe sac.
Acest exemplu este un program test pentru a observa la ce
perioada de timp trebuie controlată presiunea introdusă sau evacuată
din comp artimentele de aer. Verificarea valorilor de presiune se face la
fiecare 100ms.
Să se descifreze și să se comenteze programul de mai jos.

$mod51
$include (MON51DCL.inc)

n0 equ 0d5h ;număr compartimente de aer
;codul se inregistreaza la adresa 0000he xa
cseg at 0000h
LJMP A51MONITORINIT ; se utilizează programul monitor memorat
în ;EPROM pt vizualizarea registrelor și memoriilor interne și externe
testseg segment code
rseg testseg

;****************************
; program principal
;******************* ********
public main:
;********************************************************

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

63 ; R1 utilizat pentru valoarea presiunilor
; R2 utilizat pentru presiunea dorită
; R5 utilizat pentru valoarea presiunii citite
; R4 utilizat pentru diferența de presiune
;inițializare timer 1 și portul serial
;********************************************************
a0:
;MOV tmod,#020h
;MOV ie,#98h
;MOV tl1,#0FDh
;MOV th1,#0FDh
;SETB tr1
;MOV SCON,#050h

;*************************************************
; inițial izarea presiunilor in saci
;*************************************************
MOV R7,#01h ; r7 numărător saci
MOV 50h,#n0
ACALL rst
init:
MOV DPTR,#00h
MOV a,#0f0h

MOV R1,a
LCALL w1

INC DPTR
INC R1
LCALL w1

INC DPTR
INC R1
LCALL w1

INC DPTR
INC R1
;LCALL w1

INC DPTR
INC R1
LCALL w1

Mihaela Hnatiuc

64
INC DPTR
INC R1
;LCALL w1

INC DPTR
INC R1
LCALL w1

INC DPTR
INC R1
LCALL w1

INC DPTR
INC R1
LCALL w1

INC DPTR
INC R1
LCALL w1

INC DPTR
INC R1
LCALL w1

INC DPTR
INC R1
LCALL w1

INC DPTR
INC R1
LCALL w1

INC DPTR
INC R1
LCALL w1

DJNZ R7,init
RET

;*******************************************************************

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

65 ;calculul diferenței de presiune între presiunea măsurată cu greutate și
;fără greutate pe compartimentul de aer
;*************************************** ****************************

w1:
ACALL sel
MOV a,20h
MOVX @DPTR,a
MOV r5,a ; R5 valoarea presiunii prezente
CJNE a,50h,set1
JMP output
set1: LCALL seting
MOV A,R1
CLR t0
CLR t1
JNB Acc.3,selsac1 ; dacă valoarea senzorilor este de la 0 -7 se
;iniția lizeaza T1, dacă nu se inițializează T2
;pentru al doilea rând de la 8 -15
ACALL selsac0
selsac1:ACALL selsac
CLR c
MOV r0,#02h
;ACALL timp
SUBB a,50h
MOV 1h,c
ACALL compl
CLR c
;ACALL rst
CJNE a,#10h,test2
test2: jc test3
MOV c,1h
JMP w1
test3:ACALL rs t
output:RET

compl:JNC saveC
CPL a
CLR c
saveC:ret

seting:
CLR p1.7

Mihaela Hnatiuc

66 CLR p1.5
MOV p1,#00h
SETB T0
CLR t1
MOV P1.7,C ; daca CY este « 1 » se introduce aer
CPL C
MOV p1.5,C ;daca nu se evacuează aer
CLR T0
CLR c
;CLR p1.7
;CLR p1.5
RET
;**************** *********************************************************
;subrutina pentru selectarea electrovanelor comandate de la T0
;schimbarea presiunilor in saci
;*************************************************************************
selsac0:; select t0
MOV A, #0fh
ANL A,R1
CJNE A,#08h,xx1
SETB P1.0
xx1:CJNE A,#09h,xx2
SETB P1.1
xx2:CJNE A,#0ah,xx3
SETB P1.2
xx3:CJNE A,#0bh,xx4
SETB P1.3
xx4:CJNE A,#0ch,xx5
SETB P1.4
xx5:cjne a,#0dh,xx8
SETB P1.5
xx8:SETB T0
CALL timp
CLR T0
;***************************** *******************************************
;subrutina pentru selectarea electrovanelor comandate de la T0
;inițializarea presiunilor în compartimentele de aer
;************************************************************************
resetsac0:
MOV A, #0fh
ANL A,R1
CJNE A,#08h,yy1

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

67 SETB P1.0
yy1:CJNE A,#09h,yy2
CLR P1.1
yy2:CJNE A,#0ah,yy3
CLR P1.2
yy3:CJNE A,#0bh,yy4
CLR P1.3
yy4:CJNE A,#0ch,yy5
CLR P1.4
yy5:CJNE a,#0dh,y8
CLR P1.5
y8:RET
;************************************************************* **************
;subrutina pentru selectarea electrovanelor comandate de la T1
;schimbarea presiunilor in saci
;****************************************************************************
selsac:;select t1
MOV A, #0fh
ANL A,R1
MOV P1,#00h
CJNE A,#00 h,x1
SETB P1.0
x1:CJNE A,#01h,x2
SETB P1.1
x2:CJNE A,#02h,x3
SETB P1.2
x3:CJNE A,#03h,x4
SETB P1.3
x4:CJNE A,#04h,x5
SETB P1.4
x5:CJNE A,#05h,x6
SETB P1.5
x6:CJNE A,#06h,x7
SETB P1.6
x7:CJNE a,#07h,x8
SETB P1.7
x8:
SETB t1
CALL timp
CLR t1
CLR T0
;******** ***********************************************************************

Mihaela Hnatiuc

68 ;subrutina pentru selectarea electrovanelor comandate de la T1
;inițializarea presiunilor în saci
;********************************************************************************
resetsac:
MOV A, #0fh
ANL A,R1
MOV P1,#00h
CJNE A,#00h,y1
CLR P1.0
y1:CJNE A,#01h,y2
CLR P1.1
y2:CJNE A,#02h,y3
CLR P1.2
y3:CJNE A,#03h,y4
CLR P1.3
y4:CJNE A,#04h,y5
CLR P1.4
y5:CJNE A,#05h,y6
CLR P1.5
y6:CJNE A,#06h,y7
y7:cjne a,#07h,yy8
CLR P1.7
yy8:RE T
;funcția de reset de la început
rst: ; reset de la început
MOV P1,#00h
CLR p1.7
SETB T0
CALL timp
MOV p1,#00h
CALL timp
SETB T1
CALL timp
CLR T0
CLR T1
RET
;**********************************************
;întârzieri în program se realizează cu R0
;****** ****************************************
timp:
MOV TMOD,#01h
MOV tl0,#0ffh

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

69 MOV th0,#0dbh
SETB TR0
timp1:
jnb TF0,timp1
CLR TF0
CLR TR0
DJNZ R0,timp
RET
;***********************************
;salvarea valorii presiunii in P1
;******************************** ***
sel:
CLR t0
CLR t1
MOV p1,R1
;************************************
;conversia analog numerică
;************************************
can1:
CLR t0
CLR t1

CLR p1.4

CLR p1.5
SETB p1.5

CLR p1.5
SETB p1.5

CLR p1.5
SETB p1.5

CLR p1.5
MOV c,p3.2
MOV 7h, c
SETB p1.5

CLR p1.5
MOV c,p3.2
MOV 6h,c
SETB p1.5

Mihaela Hnatiuc

70
CLR p1.5
MOV c,p3.2
MOV 5h,c
SETB p1.5

CLR p1.5
MOV c,p3.2
MOV 4h,c
SETB p1.5

CLR p1.5
MOV c,p3.2
MOV 3h,c
SETB p1.5

CLR p1.5
MOV c,p3.2
MOV 2h,c
SETB p1.5

CLR p1.5
MOV c,p3.2
MOV 1h,c
SETB p1.5

CLR p1.5
MOV c,p3.2
MOV 0h,c
SETB p1.5

CLR p1.5
SETB p1.5
CLR p1.5
SETB p1.5
CLR p1.5
SETB p1.5
RET

END

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

71

Capitolul 7

Afișorul cu cristale lichide (LCD)

7.1. Scopul lucrării

La sfârșit acestui laborator studenții vor ști să programeze un dispozitiv
de afișare cu cristale lichide (LCD).

7.2. Cunoștințe necesare pentru realizarea laboratorului

Studenții trebuie să cunoască noțiunile prezentate în laboratoarele
precedente cât și:
– Modul de organizare al memoriilor RAM și ROM;
– Moduri de afișare ale car acterelor pe LCD.

7.3. Programarea modulului de afișare cu cristale lichide

Modulul de afișare pe matrice de cristale lichide, integrat în
simulatorul EdSim51 este o simulare a dispozitivului Hitachi HD44780,
conectat la microcontroler pe pinii portului P1 (Figura 7.1). Pe LCD sunt
afișate caractere alfanumerice și simboluri. Funcție de mărimea
caracterelor, se pot afișa 8 caractere pe o linie, în acest caz afișarea
realizându -se pe două linii. Memoria DDRAM, generatorul de caractere
și dispozitivul de c ristale lichide cerut pentru afișarea matricii de cristale
lichide sunt furnizate intern pe un chip. Un sistem minim poate interfața
cu acest controler/driver.
Tesiunea de alimentare a LCD -ului este de la 2.7V până la 5.5V.
Utilizând simulatorul EdSim51, programatorul poate alege
dispozitivul de afișare prin click direct pe el. Afișarea poate fi realizată
fie pe un afișor șapte segmente (vezi laboratorul 2), fie pe dispozitivul
LCD prezentat în acest capitol.

Mihaela Hnatiuc

72

Figura 7.1. Se prezintă modul de conectare al LCD -ului la
microcontroler
LCD-ul, simulare a dispozitivului Hitachi HD44780 (vezi schema
bloc din Anexa V) este interfațat cu microcon trolerul 8051 în modul de
lucru 4 biți. Pinii P1.7… P1.4 sunt conectați de la DB7 până la DB4,
pinul P1.3 este conectat la pinul de selecție a registrului, iar pinul P1.2
este conectat la pinul de validare.
Observație: Pinul de scriere -citire este conec tat la masă – modulul
poate fi doar scris.

7.3.1. Registrele utilizate de afișorul LCD
Dispozitivul de afișare HD44780U are două registre pe 8 biți: de
instrucțiuni (IR) și de date (DR).
1. Registrul de instrucțiuni (IR) conține coduri de instrucțiuni, de
exemplu ștergerea afișorului și deplasarea cursorului, și informații de
adresă pentru afișarea datei RAM (DDRAM) și generatorului de
caractere RAM (CGRAM). IR poate fi doar scris de la interfața unității de
procesare a memoriei (MPU).
2. Registrul de dat e (DR) stochează datele temporar pentru a fi scrise
în DDRAM, CGRAM sau citite din acestea. Data scrisă de MPU în DR

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

73 este scrisă automat în DDRAM sau CGRAM. Când adresa informației
este scrisă în IR, data este citită și apoi salvată în DR de la DDRAM sau
CGRAM. Transferul de date între MPU este apoi completat când MPU
citește DR. După citirea datei din DDRAM sau CGRAM următoarea
adresă este trimisă la DR pentru următoarea citire de la MPU.
Registrele sunt selectate prin semnalul selector de registre (RS).
3. Numărătorul de adrese (AC) – atribuie adrese la ambele memorii
RAM și este reprezentat pe 7 biți, de la bitul 0 la bitul 6. Când o adresă
a instrucțiunii este scrisă în IR, informația adresei este trimisă de la IF la
AC. Selectarea uneia dintre memorii s e realizează concurent prin
instrucțiuni. După scriere sau citire în DDRAM sau CGRAM, registrul
numărător este incrementat automat. Conținutul lui AC este apoi scos la
ieșire pe pinii DB0 până la DB6 când RS=0 și R/W=1.
4. Afișarea datei din RAM (DDRAM) – stochează data afișată care
este reprezentată în cod de caractere de 8 biți. Își poate extinde
capacitatea la 80×8 biți sau 80 caractere. Partea de memorie neutilizată
poate fi folosită pentru date generale. În figurile de mai jos sunt
prezentate corespond ențele dintre adresele DDRAM și pozițiile în
cristalele cu lichide. Dacă prin program este setat N=1 afișarea se face
pe o linie (Figura 7.2), iar dacă este 0 afișarea este pe două linii (Figura
7.3). Dacă sunt mai puțin de 80 de caractere, afișarea începe pe poziția
de sus.

Exemplu
Moduri de afișare a caracterelor pe ecran

00 01 02 03 04 ……… 4E 4F
Figura 7.2 Afișarea pe o linie, afișarea poziției, adresa DDRAM

00 01 02 03 04 05 06 07 Afișare poziție adresă
DDRAM
00 01 02 03 04 05 06 07 Pentru d eplasare stânga
4F 00 01 02 03 04 05 06 Pentru deplasare dreapta
Figura 7.3 Afișarea pe linie a 8 caractere

5. Generatorul de caractere ROM (CGROM) – generează caractere de
5×8 puncte sau 5×10 puncte de la codul de caractere pe 8 biți (Tabel
Anexă). Poa te genera 208 caractere de mărime 5x8puncte și 32
caractere de 5×10 puncte. Pot fi valabile, de asemenea, paternuri pentru
caractere nedefinite pentru programarea unei măști ROM.
6. Generator Caracter RAM (CGRAM) – În acest caz utilizatorul poate
citi șab lonul de caractere prin program. Pot fi scrise opt caractere de

Mihaela Hnatiuc

74 5×8 puncte sau patru de 5×10 puncte. Scrie în DDRAM codul
caracterului al cărei adresă este indicată în coloana din stânga a
tabelului Anexă.

Exemplu
Legătura dintre adresa CGRAM, codul car acterului DDRAM și paternul
caracterului (Data CGRAM).

Figura 7.4 Generare caracter [12]

7. Modul de afișare a caracterului prin clipire: Deoarece simulatorul
EdSim51 nu funcționează în timp real este dificil să vă dați seama dacă
caracterul clipește. Dacă utilizatorul setează modulul în modul clipire
caracterul va alterna între text albastru pe fond roșu și caracter roșu cu
fond albastru. Doar în acest fel se poate observa modul de lucru în
clipirea textului. Dacă se folosesc nuanțe de gri este mai dif icil de
observat schimbările.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

75 8. Funcțiile pinilor

În tabelul 7.I Pinii dispozitivului de afișare și funcțiile lor
Nr.crt. Tip pin Intrare/Ieșire Număr de linii Dispozitivul
interfațează Funcția
1. RS 1 I MPU Selecție registre:
0: Registru de instrucțiuni
(pentru scriere)
Flag ocupat: numărător de
adrese (pentru citire)
1: Registru de date (pentru
scriere și citire)
2. R//W 1 I MPU Selecție pentru citire sau
scriere
0: Scriere
1: Citire
3. E 1 I MPU Start citire/scriere date.
Când E este pe front
descendent, dispozitivul
citește datele de la liniile
DB7 – DB4
4. DB4-DB7 4 I/
O MPU Magistrală pentru transferul
datelor. Pinul DB7 poate fi
utilizat ca flag ocupat
5. DB0-DB3 4 I/
O MPU Magistrală pentru transferul
datelor, nu se utilizează
atunci când dispozitivul
lucrează în modul 4 biți
6. CL1 1 O Dispoz
itiv
extins Semnal de ceas transmis la
un latch D pentru
transmiterea datelor serial la
dispozitivul extins
7. CL2 1 O Dispoz
itiv
extins Impuls de ceas pentru
deplasarea datelor serial
8. M 1 O Dispoz
itiv
extins Semnal de întrerupere
pentru conversia analog –
digitală

Mihaela Hnatiuc

76 9. D 1 O Dispoz
itiv
extins Caractere model
corespunzând la fiecare
segment de semnal
10. COM1 –
COM16 16 O LCD Semnalele comune nu sunt
utilizate
11. SEG1 –
SEG40 40 O LCD Semnal ele segment
12. V1-V5 5 – Alimen
tare Tensiune de alimentare
VCC –V5 = 11 V (max)
13. Vcc, GND 2 – Alimen
tare VCC: 2.7V to 5.5V, GND: 0V
14. OSC1,
OSC2 2 – Oscilat
or Când oscilatorul cu cristal
este utilizat, un rezistor este
conectat în exterior. Când
pinul de intrare este folosit
ca un ceas extern, el trebuie
să fie intrare la OSC1.

9. Modul de lucru 4 -biți
În modul de lucru 4 biți, liniile DB3, DB2, DB1 și DB0 nu sunt utilizate.
Datele sau instrucțiuniile reprezentate pe 8 biți vor fi trimise pe 4 biți.
Mai întâi se trimit primii patru biți mai semnificativi și apoi cei mai puțini
semnificativi. Când pe pinul de validare se face trecerea de pe nivel sus
pe nivel jos, dispozitivul va citi pinii DB7 -DB4 și se va salva data citită în
IR (dacă este trim isă o instrucțiune RS=0) sau DR (dacă este trimisă o
data (RS=1). Inițial, modulul este pe modul 8 biți și trebuie setat de
programator pe modul 4 biți. Aceasta se realizează prin trimiterea
instrucțiunii Function Set .
10. De ce se trimite Function set de două ori?
La început, modulul este inițializat în modul 8 -biți, de aceea prima
instrucțiune trimisă este citirea instrucțiunii pe 8 biți (dacă DB3 – DB0
este în uz). Dacă instrucțiunea este trimisă corect, DL – pe DB4 – setat
pe zero, indicând 4 biți, dis pozitivul setează modul de lucru pe 4 biți și
citește date și instrucțiuni pe 4 biți. Deoarece citește prima dată primii
biți mai semnificativi, Function set va trebui trimisă și a doua oară pentru
a citi și biții mai puțini semnificativi.

2-linii, font de 5×8 puncte: Nibble cel mai puțin semnificativ trebuie
trimis cu N=1 (se setează numărul de linii pentru afișare) și F=0
(setează mărimea fonturilor 5×8).

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

77

Figura 7.5 Exemplu de transfer date pe 4 biți [12]

11. Setarea incorectă a funcției: Programator ul trebuie să seteze
modul 4 biți, pe 2 linii cu font de 5×8 puncte. Doar pentru aceste setări
lucrează modul 4. Dacă modul nu este setat corect apare un mesaj de
eroare ca în figura de mai jos. Programatorul trebuie să reseteze
simulatorul, să modifice pr ogramul și să încerce din nou.

Figura 7.6 Eroare în cazul unei setări eronate a modului de lucru pe 4
biți

Tabel 7.II. Tabel de inițiali zare LCD
Inițializare
LCD Codul
RS R/W DB7 DB6 DB5
DB4 DB3 DB2 DB1
DB0 Descriere
Timp
exec
uție
(max)
Ștergere
afișaj 0 0 0 0 0 0 0 0 0 1 Șterge afișajul și setează
adresa 0 a DDRAM -ului
în adresa numărătorului
Întoarcere
cursor la
poziția
inițială (d e
început) 0 0 0 0 0 0 0 0 1 — Setează adresa 0 a
DDRAM -lui in adresa
numărătorului.
Returnează cursorul în
poziția inițială, conținutul 1,52
ms

Mihaela Hnatiuc

78 DDRAM rămânând
neschimbat.
Setarea
modului de
intrare 0 0 0 0 0 0 0 1 I/D S Setează direcția de
deplasare a cu rsorului și
specifică saltul de
afișare. Aceste operații
sunt realizate pe timpul
citirii și scrierii datelor.
ID : setare direcție cursor
– ID – 0: incrementare;
– ID – 1: decrementare.
SH : setare deplasare
ecran
– S – 0: nu se
deplaseaza;
– S – 1: se d eplasează. 37μs
Afișarea
controlului
On/Off 0 0 0 0 0 0 1 D C B D : activare ecran
– D – 0: ecran inactivat;
– D – 1: ecran activat.
C : activare cursor – C –
0: cursor inactivat;
– C – 1: cursor activat.
B : activare clipire
(cursor)
– B – 0: clipire inac tivată;
– B – 1: clipire activată. 37μs
Cursorul
sau afișajul
deplasat 0 0 0 0 0 1 S/C R/L —
— Mută cursorul și
deplasează afișajul fără
schimbarea conținutului
DDRAM.
SC : setare tip deplasare
(la afișare)
– SC – 0: deplasare
cursor;
– SC – 1: deplasare
ecran.
RL : directie deplasare
– RL – 0: deplasare
stânga;
– RL – 1: deplasare
dreapta. 37μs
Setarea
funcțiilor 0 0 0 0 1 DL N F — — Setarea lungimii
interfeței de date (DL),
numărului liniilor de
afișare (N) și fontul
caracterului (F). 37μs

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

79 DL : setare tip i nterfață
(lungime cuvânt
transmis)
– DL – 0: cuvânt 4 biți;
– DL – 1: cuvânt 8 biți.
N : tip afisare (numar de
linii afișate)
– N – 0: 1 linie;
– N – 1: 2 linii.
F : activare LCD
– L – 0: inactivat;
– L – 1: activat.
Setarea
adresei
CGRAM 0 0 0 1 AC G ACG ACG
ACG ACG ACG Setările adreselor. Data
CGRAM sunt trimise
după setarea acestora. 37μs
Setarea
adresei
DDRAM 0 0 1 ADD ADD ADD
ADD ADD ADD ADD Setează adresa
DDRAM address.
Setează adresa
ecranului (digitul de la
care se va afișa). 37μs
Citirea
flagului și
adresei
bussy 0 1 BF AC AC AC AC
AC AC AC

NU ESTE
IMPLEMENTATĂ Citirea flagului busy
(BF) indicând dacă
magistrala de adrese
este ocupată sau liberă
pentru citirea conținutul
numărătorului de adrese.
AC6…AC0 : adresa
curentă a caracterulu i
afișat. 0 μs
Scrie data
la CG sau
DDRAM 1 0 scrie data Scrie data la CG sau
DDRAM 37
ms
tADD
= 4
ms*
Citește
data de la
CG sau
DDRAM 1 1 citește data

NU ESTE
IMPLEMENTATĂ Citește data de la CG
sau DDRAM 37
ms
tADD
= 4
ms*

Mihaela Hnatiuc

80 I/D = 1: Incrementează
I/D = 0: Decrementează
S = 1: Deplasarea
afișaj
S/C = 1: Deplasarea
afișaj
S/C = 0: Mutare cursor
R/L = 1: Deplasare la
dreapta
R/L = 0: Deplasare la
stânga
DL = 1: 8 biți, DL = 0: 4
biți
N = 1: 2 linii, N = 0: 1
linii
F = 1: 5 ´ 10 puncte, F
= 0: 5 ´ 8 puncte
BF = 1: operații interne
disponibile
BF = 0: Instrucțiuni
acceptate (ocupat) DDRAM: afișează data
RAM
CGRAM: generator de
caractere RAM
ACG: addresă CGRAM
ADD: addresă DDRAM
(corespunzând adresei
cursorului)
AC: adresa
numărătorului folosit
pentru adres ele DD și
CGRAM Timp
ul de
execu
ție se
schim

când
se
schim

frecv
ența.
Exem
plu:
Când
fcp
sau
fOSC
este
250
kHz,
37 μs
´ 27 0
= 40
μs

12. Protocolul de inițializare al dispozitivului LCD
Observație. Timpul de execuție este maxim pentru f cp sau f osc de 270
kHz.

Tabelul 7.III. Etape de inițializare LCD
Nr.etapă. Etape de inițializare
1. Alimentare circuit
2. Întârziere de 15ms după conectarea la alimentare
a circuitului
3. RS R//W DB7 DB6 DB5 DB4
0 0 0 0 1 1
4. Întârziere de mai mult de 4,1ms
5. RS R//W DB7 DB6 DB5 DB4
0 0 0 0 1 1
6. Întârziere de mai mult de 100 ms
7. RS R//W DB7 DB6 DB5 DB4

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

81 0 0 0 0 1 1
8. RS R//W DB7 DB6 DB5 DB4
0 0 0 0 1 0
9. RS R//W DB7 DB6 DB5 DB4
0 0 0 0 1 0
10. RS R//W DB7 DB6 DB5 DB4
0 0 N F * *
11. RS R//W DB7 DB6 DB5 DB4
0 0 0 0 0 0
12. RS R//W DB7 DB6 DB5 DB4
0 0 1 0 0 0
13. RS R//W DB7 DB6 DB5 DB4
0 0 0 0 0 0
14. RS R//W DB7 DB6 DB5 DB4
0 0 0 0 0 1
15. RS R//W DB7 DB6 DB5 DB4
0 0 0 0 0 0
16. RS R//W DB7 DB6 DB5 DB4
0 0 0 1 I/D S
17. Sfârșit inițializare LCD

Modulele memoriei ROM conțin setul de caractere ASCII. De exemplu,
codul ASCII pentru litera W este 87, înregistrată în locația 87, în modulul
RAM. Aceasta ușurează afișarea și scrier ea unui text.

Exemplu de program
MOV A, 'W'
CALL sendCharacter ; o subrutină prin care se trimite data din
acumulator la modulul DDRAM al LCD -ului

Când DDRAM -ul primește un character, paternul corespunzător din
ROM este afișat.
În setul ASCII, p rimele șapte locații sunt utilizate pentru controlul
caracterelor. Acestea nu sunt aplicabile în modulul LCD, de aceea
locațiile sunt rezervate mai întâi pentru CGRAM. Când o valoare între 0
și 7 este trimisă la DDRAM, mai întâi este afișat un caracter de la ROM
și caracterul corespunzător din CGRAM. Utilizatorul poate crea opt
caractere. Acestea sunt programate în CGRAM prin punctarea în
CGRAM (inițial în DDRAM) și apoi data trimisă aceluiași modul ca
atunci când se trimite data la DDRAM.

Mihaela Hnatiuc

82 Atenție: LCD -ul HD44780 este dezvoltat în Japonia și caracterele
ASCII nu au codurile cunoscute de noi. Dacă dorim să afișăm de
exemplu simbolul ` \` el trebuie creat în CGRAM.
De exemplu se începe prin setarea adresei CGRAM la 2, apoi trimite
paternul pentru prima lini e a caracterului la CGRAM (în cazul acesta
00H). AC este incrementat automat pe punctul de pe linia următoare.
Apoi se trimite paternul pentru linia următoare (în cazul acesta 10H) și
așa mai departe pentru toate 8 rândurile.
Se alege locația 2 pentru sim bolul \. Fiecare simbol trebuie să fie
reprezentat pe 8 rânduri. Trebuie scris modelul pentru fiecare linie a
CGRAM -lui, o linie la un timp (1s când punctul este vizibil și 0s când
este invizibil).
Cei șase biți de adrese sunt împărțiți în două părți. Pri mii biți de sus
determină care din cele opt caractere ale CGRAM sunt scrise iar cei trei
biți mai puțini semnificativi determină care din cele opt linii ale
caracterului sunt scrise (Tabelul II).

Tabelul 7.IV Scriere caracter
Adres
a
caract
erului
CGRA
M
(binar) Adresa
liniei
(binar) Scrie valoarea la
CGRAM
010
010
010
010
010
010
010
010
000
001
010
011
100
101
110
111
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
00000B = 00H
10000B = 10H
01000B = 08H
00100B = 04H
00010B = 02H
00001B = 01H
00000B = 00H
00000B = 00H

Odată completat, se poate afișa noul caracter prin setarea adresei
DDRAM la o valoare, apoi se trimite numărul 2 la DDRAM. Caracterul
de la locația doi va apare pe afișor.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

83

Figura 7.7 Procedura de realizare a unui caracter patern [1]

Exemplu
Exemplu de program pentru afișarea simbolului \
;*****************************************************
; data ce va fi trimisă la LCD se plasează în A
;******************************* **********************
CJNE A, #' \', skip ; dacă A nu conține simbolul \ , se sare la
;următoarea linie
MOV A, #2 ; înlocuiește \ cu locația lui din CGRAM
skip:
CALL sendCharacter ; cheamă subrutina și trimite conținutul din A la
;LCD

7.4. Desfășurarea lucrării
Studenții vor parcurge laboratorul și vor studia schema bloc a LCD -ului
și modul de conectare la microcontroler (din Anexe). Vor identifica
tipurile de memorie și modul de programare a LCD -ului. În final vor testa
programele de mai jos.

Mihaela Hnatiuc

84 1. Să se s crie DIAN pe LCD. Caracterul care indică sfârșitul textului este
0. Caracterele sunt memorate începând de la adresa 30h.

;***************************
;memorare caractere în RAM
;***************************
MOV 30H, #'D'
MOV 31H, #'I'
MOV 32H, #'A'
MOV 33H, #'N'
MOV 34H, #0 ; marchează sfârșitul textului

;******************************
; inițializare LCD
;******************************

CLR P1.3 ; șterge RS

; setare funție
CLR P1.7
CLR P1.6
SETB P1.5
CLR P1.4 ; setare nibble mai semnific ativ
SETB P1.2
CLR P1.2 ;front negative pe E

CALL intarziere ; se așteaptă ca BF să fie șters
; setare funcționare pe 4 biți
; a doua setare conform explicațiilor de mai sus
SETB P1.2
CLR P1.2
SETB P1.7 ; setare nibble mai puțin ;semnificati v
SETB P1.2
CLR P1.2
CALL intarziere
;*************************************
; Setare mod intrare incrementare cu deplasare
; ************************************
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

85
SETB P1.2
CLR P1.2
SETB P1.6
SETB P1.5

SETB P1.2
CLR P1.2
CALL intarziere ; așteptare BF=0
;*********************************
;afișare pe control on/off
; ********************************
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4

SETB P1.2
CLR P1.2

SETB P1 .7
SETB P1.6
SETB P1.5
SETB P1.4

SETB P1.2
CLR P1.2

CALL intarziere

;*****************************************
;trimite data
;*****************************************
SETB P1.3 ; șterge RS – data e trimisă
MOV R1, #30H
bucla:
MOV A, @R1 ; pointer memorie de
JZ final ; dacă A este 0, se oprește afișarea
CALL TrimiteC ; trimite data din A la LCD
INC R1 ; pointează pe următoarea data
JMP bucla

Mihaela Hnatiuc

86 final:
JMP $

TrimiteC:
MOV C, ACC.7
MOV P1.7, C
MOV C, ACC.6
MOV P1.6, C
MOV C, ACC.5
MOV P1.5, C
MOV C, ACC.4
MOV P1.4, C

SETB P1.2
CLR P1.2

MOV C, ACC.3
MOV P1.7, C
MOV C, ACC.2
MOV P1.6, C
MOV C, ACC.1
MOV P1.5, C
MOV C, ACC.0
MOV P1.4, C

SETB P1.2
CLR P1.2

CALL intar ziere

intarziere:
MOV R0, #50
DJNZ R0, $
RET

Rezultatul execuției programului este prezentat mai jos. Se poate
observa atât afișarea caracterelor pe ecran cât și memorarea acestora
în memoria de date internă.

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

87

Figura 7.7 Exemplu de reprezentare a caracterelor DIAN pe LCD
2. Să se modifice programul astfel încât să se afișeze numărul 1234h
care este inițial salvat în memoria de date începând cu adresa 50h.
3. Câte tipuri de memorie are LCD -ul studiat?
4. Să se modifice programul astfel încât afișare a să se realizeze prin
clipirea caracterului.

Mihaela Hnatiuc

88
Anexa I. Schema electrică a simulatorului EdSim51

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

89 Anexa II. Zona de registre cu funcții speciale (SFR). Date de catalog

Mihaela Hnatiuc

90
Anexa III

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

91

Anexa IV

Schema bloc a dispozitivului de afișare HD44780 [12]

Mihaela Hnatiuc

92

Tabel Anexă. Corespondența dintre codul caracterului și al
paternului (Codul din ROM). Date de catalog

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

93

Mihaela Hnatiuc

94

MEDIUL DE DEZVOLTA RE EdSim51 – DESCRIERE ȘI APLICAȚII

95

BIBLIOGRAFIE

1. Corneliu Burileanu, Note de curs
2. http://www.edsim51.com/
3. Huțanu, M. Postolache, Microcontrolere MCS 51 si compatibile, Ed.
Tehnica – Info, Chiș inau, 2001, 350 pagini
4. ***, 8051 Microcontroller Instruction Set ,
ATMEL, http://www.atmel.com/dyn/resources/prod_documents/doc
0509.pdf
5. ***, Atmel 8051 Microcontrollers Hardware
Manual ,http://www.atmel.com/dyn/resources/prod_documents/doc
4316.pdf
6. Hnatiuc Mihaela, Contribuții la utilizarea sistemelor bazate pe
microsisteme specializate în aplicații medicale , Teză de doctorat,
2007
7. David Goldberg, Computer Arithm etic, Xerox Palo Alto Research
Center, Elsevier Science, 2003
8. I. Susnea, M. Mitescum Microcontrollers in Practice, Springer Berlin
Heidelberg New York, ISBN -10 3-540-25301 -7, 2005, 256 pagini
9. Sorin Nicola, Microcontrolere compatibile 8051 – Curs, laborator si
documentatie pentru proiect,
http://robotics.ucv.ro/en/carti/MC/#Microcontrolere%20compatibile
%208051
10. Liviu Breniuc, Microprocesoare și microsisteme de măsură, volumul
I, Tipografia Universitatea tehnică „Gh. Asachi”, Iași, 2000
11. Sencer Yeralan, Helen Emery, Programming and Interfacing the
8051 Microcontroller in C and Assembly , Rigel Press, a Division of
Rigel Corporation, ISBN 0 -9633257 -1-X, 2000

Mihaela Hnatiuc

96 12. ***; HD44780U (L CD-II), (Dot Matrix Liquid Crystal Display
Controller/Driver ), ADE -207-272(Z), '99.9, Rev. 0.0

Tiparul executat în
TIPOGRAFIA
UNIVERSITĂȚII MARITIME
din
Constanța

13 X11 2 3 8 16 18 20 R1 c1 c2 c7 c12 c13 c19 c20

Similar Posts