Sunteți pe pagina 1din 32

Curs MICROCONTROLERE

Prof. Dr.Ing. Vasile Lzrescu


.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 1 of 32


Capitolul 2 Familia MCS-51. Microcontrolerul 8051

2.1. Caracteristici generale
Familia MCS-51 aparine firmei Intel i reprezint o dezvoltare a familiei anterioare de
microcontrolere MCS-48. Familia cuprinde microcontrolere pe 8 bii (8051, 8751, 8031),
realizate n tehnologie HMOS (n-channel High performance Metal Oxid Semiconductor), cu o
capsul DIL (Dual In Line) cu 40 de pini, avnd urmtoarele caracteristici tehnice:
arhitectura orientat pe acumulator;
4 koctei memorie de program (ROM) on-chip (nu i pentru 8031);
128 koctei memorie de date (RAM) on-chip;
memoria ROM i RAM cu mecanisme de adresare diferite;
adresabilitate de pn la 64kB att pentru RAM, ct i pentru memoria de program,
prin extensii de memorie n afara cipului;
4 bancuri de regitri n memoria RAM (regitri RAM);
flaguri definite prin software de ctre utilizator;
32 linii de I/O organizate ca 4 porturi de 8 bii (la 8031 - 6 linii I/O);
port serial multi-mod de mare vitez;
timer/numrtor de 16 bii cu dou moduri de funcionare;
logica de tratare a ntreruperilor cu dou nivele de prioriti;
stiva intern pentru stocarea datelor i pentru apelurile de subrutin;
multiplicator i divizor hardware ce execut operaiile n 4 microsecunde;
detecie a depirilor la bitul de semn i calcul de paritate;
set extins de instruciuni (comparativ cu setul MCS-48);
adresabilitate direct pe octet i bit;
aritmetica zecimal i binar;
operaii logice la nivel de bit (Boolean Operations);
compatibilitate cu familia MCS-48;
un ciclu de instruciune de o microsecund la o frecven a ceasului de 12 MHz;
alimentare la Vcc = +5V.

Diferenele ntre reprezentanii familiei MCS-51 constau n tipurile de memorie de
program (ROM/EPROM) cu care sunt prevzute:
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 2 of 32

- 8751 are 4koctei UV-EPROM (programabil cu ultraviolete);
- 8051 are 4koctei mask-programmed ROM (programabil prin mascare);
- 8031 nu are memorie de program on-chip, dar permite adresarea unei memorii
externe ROM de pn la 64koctei.

2.2. Arhitectura microcontrolerului Intel 8051
n figura 1 sunt prezentate elementele constitutive ale microcontrolerului i anume:
Unitatea Central de Prelucrare (UCP);
Memoria intern (RAM + ROM);
Porturi de I/O;
Registrele de configurare (cu sufixul CON), de mod (cu sufixul MOD) i stare;
Logica de comand i control.
Toate unitile funcionale sunt conectate la o magistral intern pe 8 bii (INTERNAL
BUS). Aceast magistral este conectat cu exteriorul prin porturi de I/O, atunci cnd se dorete
extinderea capacitii de memorie sau I/O n exterior. Conectarea memoriei ROM la busul intern
se face cu amplificatoare de sens unic (SENSE AMPS). IR (Instruction Register) reprezint
registrul n care se ncarc instruciunea din memoria program, iar PLA (Programmable Logic
Array) este decodorul pentru instruciune (notate cu RI i, respectiv, DI, n Figura 1).

Unitatea Central de Prelucrare (UCP)
Elementele de baz ale UCP sunt: UAL pe 8 bii cu regitri de 8 bii, acumulatorul (A),
registrul de date suplimentar (B), registrul indicatorilor condiionali (PSW) i regitrii cu funcii
speciale: SP Stack Pointer (Indicator de stiv), PC Program Counter (Numrtor de program)
i DC - Data Counter (Numrtor de date).
Funciile de calcul ale UAL sunt:
- execuia operaiilor aritmetice (adunri, scderi, nmuliri, mpriri pe 8 bii) i logice
(AND, OR, XOR, rotaii, complementri, etc.);
- ia decizii pe baza strii flagurilor (indicatorilor) la operaiile de salt condiionat;
- calculeaz adresa operanzilor;
- permite combinarea automat a operaiilor simple pentru a obine instruciuni complexe,
cum ar fi incrementarea sau compararea unor date pe 16 bii.
O caracteristic deosebit de important este capacitatea UAL de a opera cu date pe 1 bit
(aa numitul procesor boolean) care reprezint un avantaj major n cazul operaiilor n care
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 3 of 32

intervin variabile cu dou stri ca n cazul manipulrii comenzilor numerice care pot avea doar
dou niveluri: 0 sau 1.
n concluzie UAL poate opera cu date pe 1, 8 i 16 bii.

Figura 1 Schema bloc a microcontrolerului 8051

Acumulatorul i PSW
Arhitectura lui 8051 este orientat pe acumulator. Acumulatorul (A) conine unul din
operanzi, iar dup execuia operaiei conine rezultatul. El este folosit la unele operaii de transfer
INTERNAL BUS
R
A
R
128 x 8
RAM
RAM BUFFER
INTERNAL BUS
SENSE AMPS
4k x 8
ROM
A
TMP1 TMP2 B
IR
PLA
ALU
SP
P
S
W
IE
IP
INTERRUPT
CONTROL
SCON
TMOD
TL0
TH0
TL1
TH1
TIMER CONTROL
SBUF
SBUF
TCON
SERIAL PORT
CONTROL
P0 LATCH
PORT 0
P3 LATCH
PORT 3
P0 LATCH
PCH DPH
PCL DPL
P
O
R
T

2
P
2

L
A
T
C
H
P
O
R
T

1
P
1

L
A
T
C
H

Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 4 of 32

de date fiind utilizat obligatoriu la operaii de transfer cu memoria RAM extern, la rotaii, calcul
al paritii, test cu zero, etc.
Dei arhitectura este bazat pe acumulator exist instruciuni de transfer la care sursa
poate fi orice locaie din memoria intern, iar destinaia poate fi orice registru sau locaie de
memorie, regitrii pot fi ncrcai cu o constant, .a.m.d..
Registrul PSW (Program Status Word) conine civa bii de stare (indicatori
condiionali) care reflect starea curent a UCP. Indicatorii condiionali sunt afectai de execuia
unor instruciuni. Registrul PSW trebuie salvat prin program nainte de servirea rutinelor de
cerere de ntrerupere alturi de PC i DP:

MSB LSB
P - OV RS0 RS1 F0 A C
7 6 5 4 3 2 1 0
C- flag (indicator) de transport setat hard/soft de anumite instruciuni logice i
aritmetice.
A- flag (indicator) de transport auxiliar indic transport sau mprumut la/de la nibbel-
ul superior.
F0- flag (indicator) definit de utilizator.
R0, R1- bii de selecie a celor 4 bancuri de registre din RAM; setai sau resetai
software.
OV- flag (indicator) de depire a capacitii de reprezentare.
P- flag (indicator) de paritate.

Regitrii de uz general
Microcontrolerul folosete patru bacuri de regitri situai n memoria RAM, fiecare banc
coninnd 8 regitri, notai R0 R7. La un moment dat procesorul lucreaz doar cu registrele din
bancul de memorie curent. Instruciunile care adreseaz registrele folosesc 3 bii pentru
specificarea registrului.

Regitrii speciali
n memoria intern, n zona de adrese 80HFFH, este definit o arie de regitri cu funcii
speciale (SFR Special Function Registers). O parte din adrese sunt rezervate pentru dezvoltri
ulterioare. Unele dintre registre permit accesarea pe bit, iar altele doar pe octet. Cteva dintre
aceste registre sunt:
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 5 of 32

Registrul B este un registru de 8 bii care este utilizat mpreun cu acumulatorul
n operaii de mprire i nmulire. El conine al doilea operand, iar dup execuia instruciunii,
cei 8 bii mai semnificativi ai rezultatului nmulirii, respectiv restul pentru mprire (ctul se
gsete n acumulator).
PSW este registrul de stare al procesorului.
SP (Indicatorul de stiv) este un registru pe 8 bii care indic prima locaie
ocupat din vrful stivei. Stiva care poate avea maxim 128 octei. La iniializare SP se ncarc cu
adresa 7 astfel c stiva crete de la locaia 8 din RAM. Prin modificarea coninutului SP, dup
iniializare, stiva poate fi localizat n orice zon a memoriei RAM.
Registrul DP (Data Pointer) de 16 bii servete ca registru de adresare pentru
adresa de baz la executarea salturilor indirecte, la instruciunile de adresare a tablourilor, la
instruciunile de transfer cu memoria extern. El poate fi folosit att pe 8 bii (se folosesc cele 2
jumti: Low i High), ct i ca registru de 16 bii existnd instruciuni speciale care ncarc i
incrementeaz toi cei 16 bii odat, astfel nct tablourile pot fi localizate oriunde n memorie.
Registrul PC (16 bii) este contorul de instruciuni. Poate fi folosit i pe 8 bii. El
adreseaz instruciunile din memoria ROM, fiind salvat automat n stiv la execuia
instruciunilor de apel a subrutinelor i la rspunsul la cererile de ntreruperi, fiind incrementat
pentru a apela instruciunea urmtoare sau ncrcat cu adresa de salt, la instruciuni de salt n
program.
P0, P1, P2 i P3 sunt patru registre buffer pentru porturile I/O corespunztoare.
SBUF (Serial Data Buffer Registru de date al portului serial) este format din doi
regitri buffer, folosii mpreun cu portul I/O seria, unul pentru transmisie i unul pentru
recepie.
TH0 (octet superior timer 0), TL0 (octet inferior timer 0), respectiv TH1 (octet
superior timer 1), TL1 (octet inferior timer 1) sunt registre folosite de modulele timer 0 i timer
1.

2.3. Organizarea memoriei
Memoria de program (ROM) este separat de memoria de date avnd mecanisme de
adresare i semnale de control diferite. Spaiul de adrese este de 64 koctei att pentru memoria
de program, ct i pentru cea de date. Astfel memoria ROM are o magistral de adrese de 16 bii,
ea fiind adresat cu ajutorul PC (numrtorului de program).
Memoria RAM este adresat printr-o magistral de adrese diferit de cea a memoriei
ROM, avnd 8 bii, adresa fiind nscris n registrul de adresare RAM (RAR), care este tot un
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 6 of 32

registru de 8 bii. Memoria RAM intern pentru date are capacitatea de 128 sau de 256 octei.
Att memoria RAM, ct i memoria ROM pot fi extinse n exterior pn la 64 Koctei (memorie
intern + memorie extern), situaie n care exist o singur magistral de adrese de 16 bii, o
singur magistral de date de 8 bii, dar semnale de control diferite pentru cele dou memorii.
Memoria extern pentru programe (ROM/RAM) este selectat cu semnalul PSEN(Program
Store Enable - activ low), iar memoria pentru date (RAM) este citit activnd semnalul RD

i
scris activnd semnalul WR. Pentru accesarea memoriei de program se folosesc adrese de 16
bii, iar pentru accesarea memoriei de date adresele au 8 sau 16 bii.
n unele aplicaii execuia programelor din acelai spaiu de memorie n care se afl i
datele. Pentru accesarea spaiului de memorie comun este sintetizat un semnal de comand
comun trecnd semnalele PSEN i RD printr-o poart I ca n figura 2.
Cel de al treilea spaiu de adrese include regitrii cu funcii speciale: B, SP, PSW, DP,
regitrii de configurare a porturilor de I/O, timerelor i a altor dispozitive periferice. Pentru
uniformitate acumulatorul (A) se include i el n acest spaiu de adrese.
8051 WR MEM WR
RD
MEM RD
PSEN

Figura 2 Generarea semnalelor de citire/scriere pentru memoria extern

Dei adresa de referire a locaiilor din memoria RAM intern este de 8 bii, de fapt se pot
adresa 384 octei prin utilizarea unei adresri fizice diferite n cazul modurilor de adresare
direct i indirect. Astfel, pentru adresele logice mai mari de 7FH, n cazul adresrii directe
vom avea un bloc de memorie de 128 octei diferit de cel cu aceeai adres, dar cu un mod de
adresare indirect. Regitrii SFR constituie zona de memorie, cu adrese logice mai mari de 7FH,
care este adresat direct. Pentru un mod de adresare indirect i o adres mai mare de 7FH vor fi
adresate locaii din RAM-ul intern.
Datorit faptului c memoria este mprit n zone on i off-chip, programatorul vede
un singur spaiu logic de memorie, fiindu-i invizibil mprirea memoriei n arii interne i
externe.

Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 7 of 32

2.4. Sistemul de interfee de I/O
Structura sistemului de interfee de intrare/ieire (I/O) i de dispozitive periferice
ncorporate deosebete microcontrolerele de celelalte tipuri de microprocesoare. Ea este specific
aplicaiilor de tip industrial (achiziie de date, operaii de control i reglare, msur). Structura
porturilor este foarte versatil. n cadrul aceleai familii de microcontrolere exist versiuni cu
structuri diferite ale sistemului de I/O.

2.4.1 Porturile de I/O
Microcontrolerul 8051 conine 4 porturi de I/O bidirecionale, de 8 bii fiecare (P0, P1, P2,
P3), care pot fi configurate prin program. Ele sunt folosite pentru extensia memoriei i pentru
conectarea dispozitivelor periferice. Transferul datelor prin porturi se face sub controlul
programului.
Semnificaia acestor linii de I/O este variabil n funcie de destinaia porturilor. De
exemplu, pentru adresarea extensiilor de memorie portul P0 multiplexeaz magistrala de date i
cea de adrese. La nceputul ciclului de magistral extern 8 bii ai adresei de date referite sunt
plasai la ieirea portului P0, dup care urmeaz transferul datei pe aceiai magistral de 8 linii.
n cazul referirii unei date din memorie care necesit o adres de 16 bii, cei 8 bii mai
semnificativi ai adresei sunt plasai la ieirea portului P2, iar adresa de 16 bii pentru memoria
extern fiind obinut prin concatenarea ieirilor porturilor P0 i P2.
Cei 8 pini ai portului P3 sunt folosii ca intrri/ieiri de comand cu semnificaiile din
urmtoarea figur:
MSB LSB
RD WR T1 T0 INT1 INT0 TxD RxD
7 6 5 4 3 2 1 0
unde:
RD, WR ieiri pentru semnalele de comand citire/scriere
T1/T0 intrri pentru Timer/Numrtor 1, respectiv 0, sau pini de test
INT1/INT0 intrri pentru ntreruperi active pe front sau palier negativ
TxD linie de transmisie serial pentru P3 configurat n modul UART
RxD linie de recepie serial pentru P3 configurat n modul UART
Fiecare linie a porturilor este prevzut cu circuite bistabile de tip D (circuite latch)
conectate ntre pinul extern i magistrala intern a procesorului. La comanda intern de citire
din circuitul bistabil de tip D a procesorului, coninutul este depus pe magistrala intern, iar la
comanda de citire a strii pinului pe magistral este depus starea pinului. Unele instruciuni
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 8 of 32

care execut citiri de la un port activeaz semnalul citire din circuitul bistabil de tip D, iar
altele activeaz semnalul citire pin.
Exemple de instruciuni care execut citirea datelor din circuitul bistabil de tip D:
ANL (I logic ntre acumulator i datele de la un port, exemplu: ANL P1,A)
ORL (SAU logic ntre acumulator i datele de la un port)
XRL (SAU EXCLUSIV logic ntre acumulator i datele de la un port)
JBC (salt, dac pe o linie a unui port este un bit 1, exemplu: JBC P1.3, LABEL)
CPL (complementeaz bitul din circuitul bistabil de tip D asociat portului,
exemplu: CPL P3.1)
INC (incrementeaz coninutul circuitul bistabil de tip D asociat portului,
exemplu: INC P3)
DEC (decrementeaz coninutul circuitul bistabil de tip D asociat portului)
DJNZ (decrementeaz coninutul circuitul bistabil de tip D i execut salt dac nu
este zero, exemplu: DJNZ P2,LABEL)
MOV PX,Y,C (mut bitul de transport C pe poziia bitului Y al portului X)
CLR PX,Y (reseteaz bitul Y al portului X)
SETB PX,Y (seteaz bitul Y al portului X)

2.4.2. Timerele
Microcontrolerele din familia MCS-51 au dou circuite de temporizare/numrare
(Timer/Counter), programabile, multi-mod, de 16 bii fiecare, denumite generic Timer 0 i
Timer 1. Registrul TMOD (control mod timer 0 i 1) selecteaz modul de lucru al circuitului, iar
registrul TCON (control timere 0 i 1) controleaz funcionarea timer-ului.
Registrul de 8 bii TMOD conine 4 bii de configurare pentru fiecare timer/numrtor:
bit GATE =1 Timer/Numrtor este activat, atunci cnd INTx i TxR sunt setate;
=0 Timer/Numrtor este activat, atunci cnd TxR este setat.
bit C/T - face selecia modului de lucru: timer sau numrtor.
biii M0/M1 - configureaz modul de numrare al circuitului (cu sau fr rencrcare
automat la depire, timer pe 8 sau 16 bii, timer oprit)
Registrul de 8 bii TCON conine cte 4 bii de control pentru fiecare timer/numrtor:
bit TF - timer flag (indicator) este setat hard ori de cte ori se nregistreaz o
depire la numrare; el este resetat cnd se execut rutina de tratare a
ntreruperii de depire.
bit TR - timer run - setat/resetat prin program pentru a opri sau porni circuitul.
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 9 of 32

bit IE - setat la detecia unei cereri de ntrerupere extern. Activ pe front sau
palier negativ. Resetat la execuia rutinei de tratare a ntreruperii.
bit IT - specific dac semnalul de cerere de ntrerupere extern este activ pe
front sau palier negativ.
Circuitul, configurat ca timer, poate msura (prin numrare) intervale de timp, poate
determina lrgimea unor impulsuri, poate furniza semnale de comand, cu o rezoluie de o
microsecund. Configurat ca numrtor el poate acumula ntr-o structur FIFO evenimente
externe cu o precizie de reprezentare de 16 bii i cu o frecven de pn la 500kHz. Evenimentul
este memorat prin momentul su de producere, echivalent cu o valoare a numrtorului pe 16
bii.

2.4.2. Interfaa de comunicaie serial
Este o interfa de comunicaie serial ce permite transmisia i recepia serial, full-
duplex, cu sau fr bit de paritate, cu rate de la 110 baud 31 kbaud. Circuitul este programabil
n 4 variante de funcionare:
- registru de deplasare pentru extensia dispozitivelor de I/O.
- UART de 8 bii.
- UART de 9 bii (8 bii date + 1 bit de paritate).
- legtura de comunicaie interprocesor n sisteme distribuite la viteza de 187 kbaud.
Registrul SCON conine biii de selecie a celor 4 moduri de lucru, bitul de ntrerupere la
transmisie, setat hard cnd se transmite un octet i bitul de ntrerupere la recepie, setat hard la
primirea unui octet.
Registrul SBUF reprezint de fapt dou buffere utilizate pentru nscrierea datei ce
urmeaz a fi transmis serial, respectiv pentru citirea datei recepionat serial.

2.4.3. Logica de tratare a ntreruperilor
Sursele care pot cere ntreruperi sunt n numr de 5 din care: una de la interfaa de
comunicaie serial care cere ntrerupere la transmisie i recepie, dou de la timere cnd se
depete capacitatea de numrare i dou de la intrrile INT0/1 unde se primesc cereri de
ntrerupere externe. Toate ntreruperile sunt mascabile. Exist dou nivele de prioriti la tratarea
ntreruperilor. Registrul IE (Interrupt Enable = Control activare ntreruperi) conine biii de
mascare, iar registrul IP (Interrupt Priority = Control prioriti ntreruperi) stabilete prioritile
pentru fiecare surs de ntreruperi. ntreruperile sunt vectorizate, pentru fiecare surs de
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 10 of 32

ntrerupere existnd o rutin de tratare a ntreruperii care ncepe de la o adres coninut n
vectorul de ntrerupere predefinit.

2.5. Exemple de conectare a microcontrolerului la extensiile de memorie i
dispozitive de I/O
Conectarea cu memoria ROM extern se realizeaz astfel: semnalul de selecie a
memoriei ROM extern este PSEN care este activat doar n cazul conectrii microcontrolerului
la memoria extern. Pe durata aducerii instruciunilor din memoria program extern, porturile P0
i P2 sunt dedicate realizrii magistralelor de adrese i de date. Portul P0 implementeaz o
magistral de date i adrese multiplexat. P0 transmite partea mai puin semnificativ a
numrtorului de program PC (PC
L
), furniznd octetul mai puin semnificativ al adresei
instruciunii din memoria program extern. Dup transferul adresei, P0 este configurat ca
magistral de date. n momentul n care PC
L
este valid la ieirea portului P0, semnalul ALE
(Address Low Enable) transmite comanda de ncrcare a PC
L
n circuitul bistabil de tip D
(basculant bistabil) care face demultiplexarea magistralei de la portul P0. Simultan se genereaz
la ieirea portului P2 PC
H
astfel nct la ieirea circuitului basculant bistabil i portului P0 se
gsete adresa instruciunii care urmeaz a fi extras din memoria program extern. Apoi se
genereaz semnalul de strobe (selectare) pentru memoria extern PSEN care comand citirea
instruciunii, transferat pe liniile portului P0.
Conectarea cu memoria RAM extern presupune folosirea portului P0 ca magistrala de
date i adrese multiplexat i dou variante de generare a adresei. Prima variant implic o adres
format dintr-un octet generat la ieirea portului P0 i ncrcat sub comanda semnalului ALE n
circuitul basculant bistabil de demultiplexare, la care se adaug 3 bii de selecie a paginii de
memorie extern generai prin portul P2. n acest fel se pot adresa 8 pagini de dimensiune 256
octei. A doua variant presupune generarea unei adrese pe 16 bii cu partea mai puin
semnificativ pe liniile portului P0 (la ieirea circuitului basculant bistabil de demultiplexare) i
partea mai semnificativ pe liniile portului P2. n ambele cazuri semnalele de comand
citire/scriere sunt semnalele RD WR / de la microcontroler, iar transferul datei se face, dup
stabilirea adresei, pe liniile portului P0 care devine port de transfer de date.
Extensia circuitelor de I/O care pot fi controlate de 8051 se face conectnd
microcontrolerul la un circuit dedicat extensiei dispozitivelor de I/O (circuitul I8243). Spre
deosebire de Intel 8048, microcontrolerul Intel 8051 nu dispune de instruciuni speciale de
interfaare cu Intel 8243, protocolul de comunicaie putnd fi implementat software.
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 11 of 32

P1
P3
8051
P0
EA
P2
ALE
PSEN
EPROM
INSTR.
ADDR
OE
P1
P3
8051
cu ROM intern
EPROM
P1
P3
ALE
EA
P0
P2
LATCH
LATCH
Vcc
}
}
I/O
}
ADDR
Bi ti de
selectie
pagi na
}
RD
WR
OE WE
fig. 4 Exemple de expandare a resurselor microcontrolerului
8051
8051
8234
} Intrari
P2.7
P2.6
P2.5
P2.3
P2.2
P2.1
P2.0
P2.4
PROG
CS
P23
P22
P21
P20
P4
P5
P6
P7
4
4
4
4

Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 12 of 32

2.6 Funcionarea cu consum redus de energie
Microcontrolerul 8051 are dou moduri de operare cu consum redus: modul inactiv
(IDLE) i modul cu tensiune sczut (POWER DOWN). n modul IDLE oscilatorul rmne n
funciune, dar procesorul nu execut nici o instruciune. Timerele i portul serial funcioneaz i
orice ntrerupere de la ele produc revenirea la funcionarea normal. Starea intern (numrtorul
de program, indicatorul de stiv, coninutul registrelor, etc.) este pstrat.
n modul POWER DOWN oscilatorul intern este oprit i toate funciile sunt oprite. Sunt
pstrate doar datele din RAM i din registrele interne. Ieirea din aceast stare este realizat prin
activarea intrrii RESET. Modurile de lucru cu consum redus pot fi activate prin setarea unor bii
de control din registrul SFR PCON:
PD - bit pentru modul de lucru POWER DOWN;
IDL - bit pentru modul IDLE.

2.7. Setul de instruciuni i modurile de adresare a datelor
2.7.1. Setul de instruciuni
Setul de instruciuni al 8051 este destul de regulat, n sensul c majoritatea instruciunilor
pot opera cu variabile din spaii de adrese fizice sau logice diferite. El a fost proiectat astfel nct
s fie eficient ca dimensiune a codului i ca vitez de execuie. Instruciunile sunt codate cu 13
octei. Practic toate instruciunile se execut n unul sau doi cicli main (1 sau 2 sec la un tact
de 12MHz); doar dou instruciuni (MUL, DIV ) sunt executate n patru cicli.
Setul de instruciuni cuprinde 111 instruciuni: 49 de un octet, 45 de doi octei i 17 de
trei octei. Instruciunile pot fi grupate n 4 categorii:
Instruciuni pentru transferul datelor
MOV - transfer bit sau octet de la o locaie surs la o locaie destinaie
PUSH - incrementeaz SP i transfer octet de la surs n stiv la adresa dat de SP
POP - transfer un octet de la adresa dat de SP la o destinaie i decrementeaz SP
XCH - schimb coninutul acumulatorului cu coninutul variabilei indicate care
poate fi adresat direct sau indirect cu registru
XCHD - schimb semicuvntul inferior din acumulator (biii 30) cu cel al unei locaii
de memorie RAM intern adresat indirect cu un registru specificat
MOVC- ncarc acumulatorul cu un octet de cod sau cu o constant din memoria
de program
MOVX- transfer un octet ntre acumulator i memoria extern de date
MOV DPTR, #data - ncarc data imediat de 16 bii n registrul dublu DPTR.
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 13 of 32

Instruciuni pentru operaii aritmetice
INC - incrementeaz operandul cu 1
DEC - decrementeaz un operand cu 1
ADD - adun la acumulator operandul surs
ADDC - adun la acumulator opeandul surs mpreun cu transportul din CY
DAA - corecia zecimal a rezultatului adunrii operanzilor zecimali reprezentai n
cod BCD
SUBB - scdere a unui operand din acumulator mpreun cu mprumutul
MUL - execut nmulirea fr semn a operandului din acumulator cu operandul din
registrul B. Rezultatul pe 16 bii este n B (high byte) i A (low byte)
DIV - execut mprirea fr semn a coninutului acumulatorului la coninutul
registrului B. Rezultatul este n regitrii A (ctul) i B (restul)
Instruciuni pentru operaii logice
CLR - reseteaz toi biii din A sau orice bit adresabil direct
SETB - seteaz orice bit adresabil direct
CPL - complementeaz coninutul lui A, fr a modifica PSW
RL - rotaie stnga a acumulatorului cu un rang
RLC - rotaie stnga a acumulatorului prin CY
RR - rotaie dreapta a acumulatorului
RRC - rotaie dreapta a acumulatorului prin CY
SWAP - inverseaz semiocteii n A
ANL - SI-logic pe octet
ORL - SAU-logic pe octet
XRL - SAU EXCLUSIV-logic pe octet
Instruciuni de control
- Apeluri i salturi necondiionate:
ACALL - instruciune de apel a unei subrutine atunci cnd adresa de salt este cuprins n
2K ai paginii curente. Cmpul de adres de 11 bii ai instruciunii este
concatenat cu cei mai semnificativi 5 bii din PC
LCALL - instruciune de apelare care poate specifica oricare adres din spaiul
memoriei de 64K
RET - transfer controlul la adres de revenire salvat n prealabil n stiv i
decrementeaz apoi SP cu 2
AJMP - salt necondiionat la o adres din spaiul 2K, analog cu ACALL
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 14 of 32

LJMP - salt necondiionat la o adres din spatiul 64K, analog cu LCAL
SJMP - salt necondiionat scurt n cadrul a 256 octei
- Salturi condiionate:
JZ - salt dac toi biii din A sunt 0
JNZ - salt dac A cel puin un bit din A este 1
JC - salt dac CY este 1
JNC - salt dac CY este 0
JB - salt dac bitul specificat este 1
JNB - salt dac bitul specificat este 0
JBC - salt dac bitul adresat este 1 i apoi terge acest bit
CJNE - decrementeaz operandul surs i pune rezultatul la operandul destinaie; salt
dac rezultatul nu este zero
RETI - la fel ca RET, dar activeaz i ntreruperile

2.7.2 Modurile de adresare a datelor
Microcontrolerul accept operanzi de tip bit sau octet i folosete urmtoarele moduri de
adresare a datelor:
a) Adresare de tip registru
Utilizatorul are acces la 4 bancuri de cte 8 regitri (notai R0R7) de 8 bii, situai la
nceputul memoriei RAM (0-1FH), fiecare banc fiind selectat de biii RS1, RS0 din PSW. La un
moment dat UCP are acces la un singur banc de regitri, selecia registrului vizat facndu-se cu
cei mai puini semnificativi 3 bii din codul instruciunii. Se pot forma astfel instruciuni de un
octet. De exemplu, realizarea operaiei de adunare a registrelor R0 i R1 i ncrcarea rezultatului
n acumulator poate fi realizat cu secvena:
MOV A,R0
ADD A,R1

n limbajul de asamblare 8051, acest mod de adresare este specificat prin utilizarea
simbolurilor de forma Rn (cu n = 0 7) sau prin nume simbolice definite anterior ca registre cu
directive de tip EQU sau SET.
b) Adresare direct (tip octet)
Permite adresarea direct a oricror locaii de memorie, porturi I/O sau registre hardware.
n formatul instruciunii, octetul care urmeaz dup octetul de cod al operaiei specific adresa
locaiei de memorie sau registrul vizat. Un octet suplimentar adugat codului instruciunii
specific locaia folosit. Funcie de valoarea celui mai semnificativ bit al acestui octet este
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 15 of 32

selectat unul din dou spaii fizice de memorie. Dac adresa direct este ntre 0 i 127 (00-7FH)
este utilizat RAM-ul intern. Dac varianta de microcontroler compatibil 8051 are mai mult de
128 de octei de RAM local (aa cum se ntmpl la 8052 i la majoritatea derivatelor recente),
doar primii 128 octei pot fi adresai direct, restul adreselor de memorie RAM pot fi adresate
doar indirect cu R0 sau R1 ca pointer sau prin intermediul indicatorului de stiv (SP).
De exemplu, secvena:
MOV A,30h
ADD A,40h
MOV 40h,A
adun coninutul locaiilor de adres 30H i 40h din RAM i transfer rezultatul n RAM la
adresa 40h.
Toate porturile I/O i registrele speciale au asignate adrese n intervalul 128-255 (80H-
0FFH). Cnd adresa direct utilizat este n aceste limite se acceseaz registrele corespunztoare
din SFR. Adresarea direct permite ca toate registrele cu funcii speciale s fie citite, scrise sau
utilizate ca operanzi. n general aceasta este singura metod folosit pentru accesarea porturilor
I/O i a regitrilor speciali. Dac adresarea direct este folosit cu alte adrese dect cele
predefinite n lista de registre speciale ale microcontrolerului rezultatul instruciunii este
nedefinit.
c) Adresare de tip registru indirect
Acest mod este destinat n esen manipulrii variabilelor a cror adres fizic (locaie
RAM) este determinat, calculat sau modificat dinamic. Situaia apare atunci cnd se
manipuleaz adrese de memorie n secven, intrri indexate din tabele aflate n RAM, la operaii
cu precizie extins (format de reprezentare pe mai mult de un octet) sau la operaii cu iruri.
Pentru adresarea memoriei externe pentru date 8051 utilizeaz dou feluri de adresare indirect.
Primul mod folosete registrele R0 i R1 din bancul curent pentru generarea unei adrese de 8 bii
care este transferat pe portul P0, adres suficient pentru adresarea porturilor I/O sau pentru arii
mici de memorie RAM. Al doilea mod folosete o adres indirect de 16 bii furnizat de
registrul DPTR cu care procesorul poate accesa o memorie de date de pn la 64 koctei. n
limbajul de asamblare 8051 adresarea indirect este identificat prin simbolul (prefixul) "@"
urmat de R0 sau R1 sau un simbol asignat anterior acestora.
n limbajul de asamblare al procesorului I-8051 adresarea indirect este reprezentat cu
@, ca n exemplul urmtor:
MOV A,@R0
ADD A,@R1

Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 16 of 32

d) Adresare imediat
Atunci cnd operandul surs este o constant i nu o variabil (instruciunea folosete o
valoare cunoscut n momentul asamblrii), constanta respectiv poate fi ncorporat
instruciunii prin utilizarea unui octet suplimentar. Valoarea respectiv nu mai poate fi
modificat pe parcursul executrii programului. Identificarea adresrii directe a operandului se
face cu ajutorul prefixului "#" (diez). Operandul poate fi un ir numeric, o valoare simbolic sau
o expresie aritmetic folosind constante (evaluat n momentul asamblrii).
Data pe 8 bii urmeaz octetului de cod al operaiei. n limbajul de asamblare datele sunt
precedate de semnul #. De exemplu:
MOV A,#15
ADD A,#18
Modul de adresare este specificat n codul instruciunii. O instruciune poate folosi mai
multe moduri de adresare pentru operanzii surs sau/i destinaie.

2.7.3 Programarea sistemelor cu microcontrolerul I-8051
Structura general a unei linii de program scris n limbaj de asamblare este urmtoarea:
[eticheta:] mnemonic 8051 [operand1], [operand2] [;comentariu]
Eticheta este adresa simbolic a unei linii de program. Operanzii sunt de urmtoarele tipuri:
- simboluri speciale de asamblare (nume de registre, fanioane)
- simboluri ale programului (segment, extern, local, public)
- adrese indirecte
- adrese interne ale microcontrolerului
- adrese ale unor bii semnificativi
- adrese de salt, etc.

Exemplu:
START: JMP MAIN ;instruciune de salt
LOOP: DJNZ R7,LOOP ;execuie bucl
Folosirea etichetelor este obligatorie atunci cnd la adresele respective se fac referiri n
program.
Dezvoltarea aplicaiilor cu microcontrolere presupune proiectarea prii hardware i a
prii software. Pentru realizarea programelor proiectantul are la dispoziie un ansamblu de
instrumente software:
- asamblorul este programul care convertete fiierul surs, care este un fiier text
(ASCII), care conine instruciunile microcontrolerului sub form de mnemonice, n fiier obiect,
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 17 of 32

respectiv ntr-un fiier care conine codurile main corespunztoare instruciunilor din cadrul
fiierului surs;
- compilatorul este programul care convertete fiierul surs scris ntr-un limbaj
evoluat, n fiier obiect;
- link-editorul realizeaz cuplarea mai multor module de program memorate n fiiere
obiect distincte i aloc zone de memorie necesare programelor i variabilelor folosite de ctre
acesta. Link-editorul faciliteaz dezvoltarea structurat a programelor, precum i realizarea unor
module de program ca aplicaii distincte;
- convertorul OBJ-IntelHEX realizeaz conversia din format obiect (OBJ) ntr-un
format care conine: adresa de localizare, numrul de octei ai liniei respective, tipul datelor (cod
sau date), irul de coduri, suma de control corespunztoare tuturor informaiilor liniei respective,
precum i terminatorul de linie format din caracterele CR, LF;
- depanatorul (debugger) permite execuia pas cu pas, sau secven cu secven, a unui
program aflat n faza de testare cu scopul de a verifica corectitudinea funcionrii. n general,
acest program funcioneaz cu un sistem de dezvoltare care dispune de un program monitor
(acesta este un program care acceseaz componentele de baz ale sistemului, respectiv memoria,
regitrii, fanioanele);
- emulatorul este programul care permite simularea funciilor i a instruciunilor
microcontrolerului pe un alt sistem de calcul gazd. El poate prezenta unele restricii n special
legate de posibilitatea de simulare a ntreruperilor. Acest program poate s funcioneze att pe un
calculator de uz general, gen PC, sau chiar pe microcontrolerul respectiv. n acest caz, sistemul
cu microcontroler trebuie s fie conectat la o consol care poate fi chiar un calculator PC putnd
astfel verifica i executarea subrutinelor de ntrerupere.
- mediul de simulare este folosit pentru aplicaii complexe, situaie n care practic
sistemul care implementeaz aplicaia este dezvoltat cu funcii de depanare. El include att
faciliti software ct i faciliti hardware.

2.7.4 Exemple de folosire a instruciunilor
a. Utilizarea instruciunilor aritmetice ADD, ADDC, SUBB i DA
Instruciunea ADD adun o variabil de un octet cu acumulatorul, rezultatul fiind plasat
tot n acumulator. Flagul C(arry) este setat dac apare depire (transport) de la bitul 7 i resetat
n caz contrar. ADDC mai adun i valoarea lui C la rezultatul anterior, n rest este identic cu
ADD. Instruciunea SUBB scade coninutul variabilei pe un octet i pe cel al lui C din
acumulator, plasnd rezultatul n acumulator. Flagul C este utilizat ca semnalizare a unei cereri
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 18 of 32

de mprumut (borrow") la operaia de scdere, fiind setat corespunztor. Flagul AC (auxilliary
carry) este setat dac apare transport de la bitul 3 (la nivel de semioctet inferior) pentru a fi
folosit de instruciunea DA.
Anomaliile legate de nerespectarea formatului de reprezentare n aritmetica complement
fa de 2 sunt semnalizate prin intermediul flagului OV (overflow = depire). La nivel hard,
OV este setat atunci cnd apare transport de la rangul bitului 6 i nu 7 (ca la C). Setarea sa, la
adunarea a doi ntregi cu semn, indic apariia unui rezultat negativ ca sum a doi ntregi pozitivi
sau o sum pozitiv a doi ntregi negativi. La utilizarea SUBB se indic un rezultat negativ la
scderea unui numr negativ din unul pozitiv sau un rezultat pozitiv la scderea unui numr
pozitiv din unul negativ.
Utilizarea flagurilor C sau OV permite implementarea aritmeticii cu precizie extins (pe
mai mult de un octet), n varianta fr semn (folosind C) sau cu semn n complement fa de 2
(folosind OV).

Exemplu. S se execute scderea unui ir numeric adresat cu registrul R1, din irul
adresat cu R0, irurile avnd lungimea dat de registrul R2 i s se fac verificara pentru
depire. Numerele sunt reprezentate n complement fa de 2.
CLR C ; terge borrow (cerere de
mprumut)
SUBSTR: MOV A,@R0
SUBS1: SUBB A, @R1 ; se scad poziiile curente
MOV @R0, A
INC R0 ; actualizeaz pointeri
INC R1
DJNZ R2, SUBS1 ; buclare pn termin toate poziiile
JNB OV, OV_OK ; verific dac a aprut depire
; aici rutina de tratare a depirii
OV_OK: ; ieire corect
RET

Adunarea zecimal (n cod BCD) este posibil cu utilizarea instruciunii DA (Decimal
Adjust) mpreun cu ADD i/sau ADDC. Valoarea binar din acumulator rezultat prin adunarea
a dou variabile (fiecare cu dou cifre n format BCD mpachetat cu 2 cifre BCD per octet) este
ajustat astfel nct s formeze dou cifre BCD, fiecare de cte 4 bii. Dac biii 30 din
coninutul acumulatorului codific o valoare mai mare ca 9 sau dac flagul AC este setat, se
adun 6 la acumulator producnd astfel valoarea codificat corect pe cei mai puini
semnificativi 4 bii (nibble inferior). Dac flagul C este setat sau dac valoarea codificat pe cei
mai semnificativi 4 bii (nibble superior) depete 9, se adun 6 la aceasta. Flagul C rmne
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 19 of 32

setat dac a fost iniial setat sau este setat dac apare depire (dac suma este mai mare de 100).

Exemplu. Adunare n zecimal pe doi octei; S se adune constanta 1234H (1234
10

reprezentat BCD) cu coninutul regitrilor R3 i R2 care conin o dat codat BCD pe 4 cifre.
BCDADD: MOV A, R2
ADD A, #34H
DA A ;execut corecia rezultatului
MOV R2, A
MOV A, R3
ADDC A, #12H
DA A
MOV R3, A ;ncarc rezultatul n R3 i R2
RET

b. Instruciunile de nmulire i mprire MUL i DIV
Instruciunea MUL AB realizeaz nmulirea unor ntregi fr semn pe 8 bii coninui
n acumulator i n registrul B. Octetul inferior al rezultatului pe 16 bii este n acumulator, iar
cel superior n B. Dac octetul superior este nul, flagul OV este setat, n caz contrar este ters.
Instuciunea DIV AB realizeaz mprirea ntregului fr semn din acumulator la
ntregul fr semn din registrul B. Partea ntreag a ctului se plasez n A, iar restul n B. Dac
B a coninut iniial 00H, flagul OV este setat indicnd o eroare de mprire, altfel este ters.

Exemplu. S se converteasc numrul n binar din acumulator (reprezentat n cod binar cu
8 bii) n format BCD mpachetat pe 3 cifre; sutele vor fi memorate aliniat la dreapta n locaia
SUTE, iar zecile i unitile vor fi memorate la adresa ZECUN.
SUTE EQU 21H ;variable pentru reprezentare rezultat
ZECUN EQU 22H ;idem
MOV B, #100 ;mpart cu 10010 pt. a determina
DIV AB ;nr. de sute (dat de partea ntreag)
MOV SUTE, A
MOV A, #10 ;mpart restul la 1010 pt. a determina
XCH A, B ;nr. de zeci rmase
DIV AB ;zecile n A, restul sunt unitile
SWAP A ;schimb ntre ei cei doi nibble ai acumulatorului
ADD A, B ;mpachetez cifrele BCD n acumulator
MOV ZECUN, A
RET

c. Operaii logice pe octet cu instruciunile ANL, ORL, XRL
Instruciunile menionate realizeaz funciile logice AND, OR i XOR ntre dou
variabile pe un octet, rezultatul fiind plasat n variabila destinaie. Flagurile nu sunt modificate.
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 20 of 32

Aceste instruciuni pot utiliza aceleai moduri de adresare ca i cele aritmetice, dar nu sunt
limitate numai la operarea prin intermediul acumulatorului. Octeii adresai direct pot fi utilizai
ca destinaie avnd ca surs fie acumulatorul, fie o constant.
Instruciunile sunt utile pentru tergerea (ANL), setarea (ORL) sau complementarea
(XRL) a unuia sau a mai multor bii din RAM, porturi sau regitri speciali.

Exemplu. Pe cei mai puin semnificativi 5 bii (4-0) ai portului 1 s se plaseze un cod
(prezent n A) fr a afecta starea biilor 75 care au o alt utilizare.
OUT_PX: ANL P1,#11100000B ;terge biii P1.0P1.4
ORL P1,A ;seteaz biii lui P1 corespunztori lui A
RET

d. Instruciuni de control a fluxului programului
Exist trei variante de instruciuni de salt necondiionat, ele diferind prin dimensiunea
codului instruciunii i prin restriciile impuse adresei de destinaie (adresa salt):
LJMP (Long Jump) - codific adresa de salt pe 16 bii n octeii 2 i 3 ai instruciunii; n
consecin destinaia saltului poate fi oriunde n spaiul total de 64K al memoriei de program.
AJMP (Absolute Jump) - adresa de salt este codificat cu 3 bii (11-8) n octetul care
conine i codul instruciune, plus 8 bii (7-0) ntr-un octet suplimentar, biii cei mai semnificativi
ai adresei (15-12) se iau din valoarea (incrementat) contorului program (PC); poate fi utilizat
doar dac destinaia este n interiorul aceluiai bloc de memorie program, de dimensiune maxim
2K.
SJMP (Short Jump) - destinaia este specificat ca o adres relativ (offset) fa de
valoarea curent a PC-ului, codificat n al doilea octet al instruciunii; offsetul este o valoare cu
semn pe 8 bii, astfel nct plaja n care poate avea loc saltul este +127 sau -128 fa de valoarea
curent (incrementat) a PC.
Majoritatea asambloarelor 8051 recunosc o mnemonic generic JMP"
(pseudoinstruciune salt necondiionat) care este translatat automat n instruciuni main LJMP,
AJMP sau SJMP n funcie de adresa de destinaie. Toate instruciunile de salt condiionat
utilizeaz o adresare relativ, analog lui SJMP.
JZ (Jump on Zero) i JNZ (Jump on Not Zero) testeaz valoarea acumulatorului ca
nul sau nenul (dei n PSW nu exist un flag Zero!), iar JC (Jump on Carry) i JNC (Jump
on Not Carry) starea flagului C, fiind toate instruciuni pe doi octei.
JB (Jump on Bit), JNB (Jump on Not Bit) i JBC (Jump on Bit and Clear) pot testa
starea oricrui bit adresabil sau pin (de port), fiind instruciuni pe trei octei (octetul 2 specific
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 21 of 32

bitul testat, iar octetul 3 offsetul), ultima (JBC) realiznd i tergerea necondiionat a bitului
testat.
Exist dou instruciuni de apel subrutin: ACALL (Absolute Call) i LCALL (Long
Call). Ambele incrementeaz PC pn la adresa urmtoarei instruciuni, salveaz n stiv aceast
valoare (octetul inferior primului) care va reprezenta adresa de ntoarcere. Adresa de start a
subrutinei este codificat analog instruciunilor de salt AJMP i LJMP, de unde rezult i
aceleai domenii pentru adresa de start (nceput) a subrutinei fa de punctul de apelare.
Majoritatea asambloarelor 8051 recunosc o mnemonic generic CALL" (o
pseudoinstruciune) care este translatat automat n instruciuni main LCALL sau ACALL n
funcie de adresa de start a subrutinei.

e. Instruciuni de tip operaie i salt condiionat" (Operate and branch)
CJNE (Compare and Jump if Not Equal) realizeaz compararea valorilor ntregi ale
sursei i destinaiei (de un octet) i execut un salt n caz de inegalitate. Instruciunea are trei
operanzi: destinaie, surs i adres de salt. Flagul C este modificat dup regula de la scdere
(setat dac valoarea ntreag a sursei este mai mic dect cea a destinaiei, ters n caz contrar),
iar cei doi operanzi nu sunt modificai

Exemplu. S se implementeze o funcie analoag celei realizate de o instruciune de tip
Case" (n Pascal) sau Switch" (n C) cu ajutorul instruciunii CJNE; se vor filtra (selecta)
caracterele tipribile (codurile ASCII), ele fiind destinate afirii pe un dispozitiv periferic
oarecare (prin intermediul rutinei PRINTC); caracterele care nu au un corespondent alfanumeric
sunt tratate cu rutine dedicate; caracterul care trebuie testat este disponibil n registrul general
R7.
CHAR EQU R7
INTERP: CJNE CHAR,#7FH,INTP_1
; ..... rutina de tratare cod DEL (tergere)
INTP_1: CJNE CHAR,#07H,INTP_2
; ..... rutina de tratare cod BELL (sonerie)
INTP_2: CJNE CHAR,#0AH,INTP_3
; ..... rutina de tratare cod LFEED(schimb linia)
INTP_3: CJNE CHAR,#0DH,INTP_4
; ..... rutina de tratare cod CR (ntoarce carul)
INTP_4: CJNE CHAR,#1BH,INTP_5
; ..... rutina de tratare cod ESC (revenire)
INTP_5: CJNE CHAR,#20H,INTP_6
; ..... rutina de tratare cod SPACE (spaiu)
INTP_6: JC PRINTC ; salt dac cod>20H
MOV CHAR,#0 ; insereaz cod NULL
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 22 of 32

PRINTC: ..... rutina de tratare tiprire standard
RET


Instruciunea DJNZ (Decrement and Jump on Not Zero) realizeaz decrementarea
operandului i execuia saltului cnd rezultul decrementrii este nenul.

Exemplu. S se genereze o ntrziere software (bazat pe cunoaterea apriori a timpului
de execuie al unor instruciuni) cu DJNZ; se genereaz un impuls de durat controlabil (de
valoare 1") pe pinul de port corespondent lui PULS (definit anterior).
SETB PULS ;seteaz PULS=1
MOV R2, #50 ;ncarc R2 cu contorul de durat a pulsului
DJNZ R2, $ ;execut repetat instruciunea curent (semnul $)
CLR PULS ;reseteaz PULS=0

f. Operaii cu stiva cu instruciunile PUSH i POP
Instruciunea PUSH incrementeaz valoarea indicatorului de stiv (SP), apoi transfer
coninutul variabilei octet n locaia de RAM intern adresat de SP. Reciproc, instruciunea
POP copiaz coninutul locaiei RAM adresat de SP n variabila octet i apoi decrementeaz
SP.
Adresarea stivei se face cu aceleai reguli ca la modul registru indirect, prin intermediul
ei putnd fi accesate deci i locaii RAM cu adrese mai mari de 128 (80H). O utilizare tipic a
acestor instruciuni este la salvarea contextului (PSW - cuvntul de stare al procesorului,
valoarea curent a unor registre, etc.) n cazul tratrii unor ntreruperi sau la apelarea unei
subrutine, context care poate fi afectat de rutinele de tratare a ntreruperii sau de subrutinele
apelate. n general, n cazul tratrii unei ntreruperi se salveaz automat n stiv doar coninutul
PC. Celelalte informaii trebuie salvate prin program.

Exemplu. Folosirea stivei pentru salvarea contextului la o ntrerupere
LOCTMP EQU $ ;aici asamblorul memoreaz valoarea PC
ORG 0003H ;adresa de nceput a rutinei de ntrerupere
LJMP SERVINT ;salt la rutina de tratare a ntreruperii
; ......
ORG LOCTMP ;subrutina de tratare este relocalizabil
SERVINT: PUSH PSW
PUSH ACC
PUSH B
PUSH DPL
PUSH DPH
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 23 of 32

MOV PSW,#00001000B ;selecteaz bancul 1 de regitri
; ........ trateaz ntreruperea
; ........
POP DPH
POP DPL
POP B
POP ACC
POP PSW
RETI

g. Instruciuni de lucru cu pointerul de date (DPTR) i de cutare n tabele
(Table Look-up)
Pointerul de date DPTR poate fi ncrcat cu o valoare pe 16 bii cu instruciunea MOV
DPTR, #data16, data respectiv fiind memorat n octetul 2 i 3 al instruciunii. Pointerul poate
fi incrementat cu instruciunea INC DPTR care realizeaz o incrementare pe 16 bii. Nici unul
din flaguri nu este afectat de aceste instruciuni. Instruciunile de tip MOVC; MOVC A,
@A+DPTR i MOVC A, @A+PC sunt singurele care plaseaz n acumulator date (octei)
preluate din spaiul logic al memoriei de program. Ambele utilizeaz o form de adresare
indexat, prima adunnd valoarea ntreag, fr semn, a acumulatorului cu data de 16 bii din
DPTR, suma rezultant fiind folosit pentru adresarea locaiei de unde este preluat data n A.
Adunarea este pe 16 bii, dar coninutul lui DPTR nu este alterat. Cea de a doua utilizeaz
valoarea incrementat (adresa instruciunii urmtoare) a PC-ului ca baz n locul DPTR. Nici
aceste instruciuni nu afecteaz flagurile. Fiecare din aceste instruciuni poate reprezenta o parte
a unei secvene de trei pai n accesarea unei tabele de constante aflate n ROM (memoria de
program). La versiunea bazat pe DPTR, se ncarc mai nti pointerul de date cu adresa de
nceput a tabelei dup care se ncarc valoarea indexului corespunztor intrrii n tabel care
trebuie accesat; apoi este executat instruciunea MOVC .. +DPTR. Pentru tabele scurte
pointerul de date poate fi ncrcat cu o constant sau, pentru tabele cu mai mult de 256 intrri sau
structuri de date mai complicate, componentele pointerului DPL i DPH pot fi calculate cu
arimetica standard.
Varianta relativ la PC are avantajul c nu afectaz DPTR-ul, secvena fiind: a) se ncarc
indexul n acumulator, b) se compenseaz offsetul existent ntre instruciunea de cutare i
nceputul tabelei prin adunarea numrului repectiv de octei la acumulator, c) se execut apoi
MOVC ...+PC .

Exemplu. S se ncarce n acumulator o constant de 1 octet dintr-un tablou
bidimensional aflat n memoria de program; numrul de intrri n tabel este < 250; tabloul are
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 24 of 32

dimensiunile 11x21; relaia de calcul a adresei intrrii dorite este: (ADR. BAZA) + (21x
INDEX_I) +INDEX_J, valorile pentru INDEX_I i INDEX_J se completeaz nainte de apelare
(I reprezint indexul liniilor, iar J este indexul coloanelor).
INDEX_I EQU R6 ;coordonat coloane
INDEX_J EQU 23H ;coordonat linii
;
MATRX1: MOV A,INDEX_I
MOV B,#21
MUL AB
ADD A,INDEX_J
INC A ;introduce offset 1 octet
MOVC A,@A+PC
RET

Instruciunea JMP @A+DPTR realizeaz un salt indirect la o adres calculat n
momentul execuiei programului. Adresa de salt este calculat analog ca la instruciunea MOVC.
Exemplu. S se ncarce n acumulator o dat din unul din cele 4 tablouri aflate n
memorie. Selecia tabloului este realizat cu variabila MEMSEL. Adresa datei este de 8 sau 16
bii n funcie de dimensiunea tablorilor.
MEMSEL EQU R3 ;selector de tablou
;
JUMP_4 MOV A,MEMSEL
MOV DPTR,#JMPTBL ;JMPTBL=adresa nceput tablou
MOVC A,@A+DPTR ;se preia offsetul fa de nceputul
JMP @A+DPTR ;tabloului
JMPTBL: DB MEMSP0-JMPTBL ;JMPTBL=tablou cu adresele de salt
DB MEMSP1-JMPTBL
DB MEMSP2-JMPTBL
DB MEMSP3-JMPTBL
MEMSP0: MOV A,@R0 ;citete RAM intern
RET
MEMSP1: MOVX A,@R0 ;citete din pagina RAM extern date de
RET ;max. 256 octei
MEMSP2: MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR ;citete data din RAM extern de max. 64
RET ;koctei
MEMSP3: MOV A,R1 ;citete data dintr-un spaiu de 4 koctei


Soluia din exemplu este adecvat atunci cnd dimensiunea tabelei de salturi plus cea a
rutinelor alternative nu depeste 256 octei, tabela i rutinele putnd fi plasate oriunde n
memoria program relativ la paginile de 256 octei.

Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 25 of 32

Exemplu. S se scrie programul pentru a executa o ramificare cu N=128 destinaii (ci)
prin accesarea unui tablou cu instruciuni de salt, toate aflate n acelai bloc de 2 koctei de
memorie de program; destinaia este specificat de variabila OPTION.
OPTION: EQU R3
;
JMP128 MOV A,OPTION
RL A ;nmulire cu 2 (AJMP are 2 octei)
MOV DPTR,#INSTBL ;prima intrare n tabloul pentru salturi)
JMP @A+DPTR ;salt la prima adresa din tablou
;
INSTBL: AJMP PROC00 ;tabloul cu 128 de instruciuni AJMP
AJMP PROC01 ;avnd fiecare cte 2 octei
AJMP PROC02
; ....
AJMP PROC7E
AJMP PROC7F ;ultima din cele 128 adrese de salt

Dac sunt necesare mai mult de 128 de opiuni (ramificaii) se poate folosi urmtoarea
abordare.

Exemplu. S sa scrie o subrutin de ramificare cu 256 de ci (destinaii) fiecare
corespunznd uneia din cele 256 de rutine de prelucrare PROC00PROCFF folosind cutarea n
tabelul ADRTBL. Selectorul cii este variabila OPTION.

RTEMP EQU R7 ;variabila intermediar
; ......
JMP256: MOV DPTR,#ARDTBL ;prima intrare n tabel
MOV A,OPTION
CLR C
RLC A ;nmulire cu 2
JNC LOW128 ;dac C=1 este prima jumtate a tabloului
INC DPH ;salt la a doua jumtate a tabelului
LOW128: MOV RTEMP,A ;salvez indexul tabelului
MOVC A,@A+DPTR ;ncarc din tabel octet superior adres
XCH A,RTEMP ;salvez octet superior adres n RTEMP
INC A
MOVC A,@A+DPTR ;ncarc din tabel octet inferior adres
PUSH ACC ;salvez n stiv adresa cii
MOV A,RTEMP
PUSH ACC ;cele dou operaii PUSH au ncrcat stiva
;cu adresa de 16 bii care reprezint adresa
;de start a noii ci i care va fi ncrcat n
;PC la execuia instruciunii RET de
;ncheiere a subrutinei
RET
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 26 of 32

ADRTBL: DW PROC00 ;tabloul conine maxim 256 de adrese
DW PROC01 ;de 2 octei care reprezint nceputul
........... ;subrutinelor de tratare
DW PROCFF

h. Instruciuni pentru operaii booleene
Exist un numr de instruciuni care opereaz cu variabile booleene (de 1 bit) folosind
adresarea direct pe bit, similar adresrii directe pe octet. Un octet suplimentar ataat codului
instruciune specific variabila boolean, pinul de port sau bitul de control adresat. Starea
oricrui din aceti bii poate fi testat ca adevrat sau fals cu instruciunile de salt
condiionat JB, JNB sau JBC. Analog adresrii directe la nivel de octet, bitul 7 din adresa
asociat codului instruciunii realizeaz separarea ntre dou spaii fizice de adres. Dac bitul 7
este 0, biii adresai sunt n zona 20H-2FH a RAM-ului intern, iar pentru valoarea 1 biii
sunt n spaiul de adres al regitrilor speciali (dac n spaiul respectiv este adresat un registru
inexistent fizic, rezultatul instruciunii este nedefinit). Biii astfel adresai pot fi setai, teri sau
complementai cu instruciuni (pe doi octei) ca: SETB, CLR sau CPL. Biii pot fi copiai n/din
flagul C cu instruciuni de tip MOV. Operaiile logice ANL i ORL pot fi realizate ntre flagul C
i bitul adresat sau complementul lui. Una din aplicaiile tipice ale operaiilor pe bit este
rezolvarea unor funcii logice complexe (combinaionale) care, uzual, este abordat hard (cu
pori logice).
n exemplele care urmeaz sunt prezentate trei modaliti de abordare a implementrii
funciei logice: F = (U ( V+W ) ) + (X /Y) + /Z, pentru punerea n eviden a avantajelor care
rezult (cod compact, vitez, claritate) din utilizarea facilitilor de calcul boolean.

Exemplu. S se implementeze funcia logic F de 6 variabile folosind operaii booleene;
U i V sunt variabile de intrare reprezentnd intrrile a dou porturi I/O (P1.1 i P2.2), W i X au
semnificaia unor bii de stare ai unor periferice (furnizai de registrul de control al timerelor
TCON.5 i TCON.6), iar Y i Z sunt fanioane software. Valoarea funciei F este furnizat pe
pinul de ieire al portului 3 (P3.3).
OUTBF EQU 22H ;aici se memoreaz starea ieirii
;
TESTV: MOV A,P2 ;ncarc V
ANL A,#00000100B
JNZ TESTU
MOV A,TCON ;ncarc W
ANL A,#00100000B
JZ TESTX
TESTU: MOV A,P1 ;ncarc U
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 27 of 32

ANL A,#00000010B
JNZ SETF
TESTX: MOV A,TCON ;ncarc X
ANL A,00001000B
JZ TESTZ
MOV A,20H ;ncarc Y
ANL A,#00000001B
JZ SETF
TESTZ: MOV A,21H ;ncarc Z
ANL A,#00000001B
JZ SETF
CLRF: MOV A,OUTBF
ANL A,#11110111B
JMP OUTF
SETF: MOV A,OUTBF
ORL A,#00001000B
OUTF: MOV OUTBF,A
MOV A,P3

Exemplu. S se implementeze funcia logic F folosind doar instruciuni care opereaz cu
variabile booleene.
U BIT P1.1 ;declararea variabilelor de tip bit
V BIT P2.2
W BIT TF)
X BIT IE!
Y BIT 20H.0 ;bitul 0 de la adresa 20H
Z BIT 21H.1
F BIT P3.3
;
MOV C,V ;citete V
ORL C,W ;SAU logic ntre V i W
ANL C,U ;SI logic ntre rezultatul anterior i U
MOV F0,C ;salvare valoare intermediar
MOV C,X
ANL C,Y
ORL C,F0
ORL C,Z
MOV F,C ; salveaz valoare funcie F

2.8 Sistem minimal realizat cu microcontrolerul 8051

Sistemul minimal prezentat n figura 5 urmtoare conine: unitatea central (8051),
memoria extern pentru program (EPROM) i extensia de memorie RAM pentru date de 32 K.
Magistralele externe pentru adrese i date sunt realizate prin demultiplexarea magistralei comune
de adrese/date realizat cu porturile P0 i P2. Magistrala pentru adrese este creat cu ajutorul
circuitului basculant bistabil i a semnalului ALE (Address Latch Enable) generat de
microcontroler.
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 28 of 32



Figura 5 Sistem minimal cu microcontrolerul 8051

2.9 Exemplu de aplicaie utiliznd microcontrolerul 8051
Tastaturile alfanumerice constau dintr-o matrice de 8x8 linii, respectiv 8 linii de scanare
i 8 linii de recepie ca n figura 6 urmtoare. Fiecare set de linii se conecteaz la unul din
porturile microcontrolerului. Prin program se nscrie 0 logic pe liniile de scanare i 1 logic
pe liniile de recepie. Apsnd o tast, se conecteaz o linie de scanare la o linie de recepie,
rezultnd un 0 logic pe linia respectiv de recepie. Cele 8 linii de recepie sunt trecute printr-o
poart SI-logic astfel nct trecerea n 0 logic a oricreia din liniile de recepie va genera o
ntrerupere. Se consider c starea celor dou seturi de linii, la apariia ntreruperii, este cea
descris anterior.
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 29 of 32

Figura 6 Schema circuitului de scanare a tastaturii

Rutina de deservire a ntreruperii trebuie s identifice care din taste a fost apsat, dac se
presupune c dou taste nu pot fi apsate simultan. Starea curent a liniilor de recepie este
memorat ntr-un registru intern. Dac o singur tast este apsat, toate liniile de recepie mai
puin una (cea la care aparine tasta apasat) vor fi citite ca 1 logic. Dup aceea procesul se
inverseaz, adic este nscris 0 logic pe liniile de recepie i 1 logic pe liniile de scanare, iar
liniile citite sunt cele de scanare. Dac o singur tast este apsat, numai una dintre aceste linii
de scanare va fi citit ca 0 logic. Localiznd unicul nivel logic 0 din fiecare set de linii, se
identific tasta apsat. Dac mai mult de dou taste ale matricii sunt apsate simultan, atunci
unul sau ambele seturi de linii vor conine mai muli de 0. O subrutin are sarcina de a
determina care din cei 8 bii din fiecare set este 0. Dac se apas mai multe taste simultan, nu se
va executa nici o aciune. Pentru tastele ce trebuie apsate simultan cu alte taste (ex.: Shift, Alt,
Control), nu se face conectarea la liniile matricei. Aceste taste speciale vor fi conectate direct la
cte un pin al portului microcontrolerului, n acest mod existnd posibilitatea generrii unei
comenzi dac pe lng tasta special se mai apas o tast; mai mult se previne generarea unei
INT0
P1 P2
I 8051
LINII DE
RECEPTIE
LINII DE SCANARE
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 30 of 32

ntreruperi la apsarea singular a tastei speciale. n mod normal microcontrolerul va atepta
apsarea unei taste, dac nu exist alte activiti pe care trebuie s le rezolve.
Generarea unei ntreruperi, ca urmare a apsrii unei taste, scoate microcontrolerul din
starea de ateptare. Rutina de tratare a ntreruperii ateapt un interval de aproximativ 30ms
pentru ca tasta s fac un contact sigur, dup care identific sursa de ntrerupere (tasta care a fost
apsat). Pentru contactele mecanice ale tastelor exist un interval de maxim 30ms n care
contactul nu este stabil i deci trebuie s se atepte un interval de timp dup care s se fac citirea
corect a tastei apsate.
Subrutina care determin care din cei 8 bii din cele dou seturi de linii este 0 i dac
mai mult de 1 bit este 0, se numete SCAN. Pentru a utiliza subrutina se ncarc datele de pe
linii ntr-o locaie a RAM-ului adresabil pe bit numit LINE i se apeleaz subrutina SCAN.
Numrul de bii LINE care sunt 0 este returnat n ZERO_COUNTER. Dac numai 1 bit este
zero, numrul su de ordine (poziia: 1...8) este returnat n ZERO_BIT.
Rutina de tratare a ntreruperii generate la apsarea unei taste, este urmtoarea:
*****************************************************************************
RASPUNS_LA_APASARE_TASTA:
CALL ASTEPT_STABILIZ_TASTA ;se apeleaz o subrutin care este o
;bucl de ateptare (30ms) pentru
;stabilizarea contactului tastei (vezi
;explicaia din text)
MOV LINE, P1 ;se ncarc n variabila LINE valorile
;logice de pe liniile de recepie
;conectate la portul P1
CALL SCAN ;se apeleaz subrurtina SCAN care
ntoarce ;n variabila ZERO_COUNT numrul
de bii ;0 din LINE, adic de pe
liniile de ;recepie. Deci se identific
poziia pe ;orizontal a tastei apsate
DJNZ ZERO_COUNTER,REJECT ;decrementeaz ZERO_COUNTER i execut
;salt la REJECT dac ZERO_COUNTER 0
MOV ADDRESS, ZERO_BIT ;mut la adresa ADDRESS, pe ZERO_BIT care
;conine rangul bitului cu valoarea 0 din
;LINE liniile de recepie
MOV P2, #0FFH ;se ncarc la port P2, adic pe liniile
;de scanare, 1 logic pe fiecare linie
;(FFH)
MOV P1, #0 ;se ncarc la port P1, adic pe liniile
;de recepie 0, urmnd s fie citite
;liniile de scanare n LINE
MOV LINE, P2 ;se ncarc starea liniilor de scanare
;conectate la P2, n LINE
CALL SCAN ;se testeaz liniile de scanare. Dup
;execuia subrutinei, variabila ZERO_BIT
;va conine rangul bitului care este 0 de
;pe liniile de scanare i se identific
;poziia pe vertical a tastei apsate

DJNZ ZERO_COUNTER, REJECT
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 31 of 32

XCH A, ZERO_BIT ;se interschimb coninutul
;acumulatorului cu variabila ZERO_BIT
;astfel c nu se pierde coninutul
;acumulatorului
SWAP A ;permut nibbelul inferior cu cel
;superior al acumulatorului n care se
;afl ZERO_BIT
ORL ADDRESS, A ;se execut SAU-logic ntre ADDRESS i
;A, cu rezultatul n ADDRESS
XCH A, ZERO_BIT ;se reface coninutul acumulatorului
REJECT:
MOV P1, #0FFH
MOV P2, #0 ;se reface starea celor dou seturi de
;linii dinaintea generrii ntreruperii
;(momentul apsrii tastei), ncrcnd
;1 pe liniile de recepie (port P1) i
;0 pe liniile de scanare (port P2)
CLR EX0 ;se reseteaz flagul de ntrerupere EX0
RETI ;revenire din rutina de deservire a
;ntreruperii
;RUTINA DE SCANARE (TESTARE) A LINIILOR MATRICEI TASTATURII
SCAN: MOV ZERO_COUNTER,#0 ;ZERO_COUNTER numr zerourile n
;LINE.x= bitul x din LINE.
JB LINE.0, ONE ;salt la ONE dac bit 0 din LINE
;este 1.
INC ZERO_COUNTER ;incrementeaz ZERO_COUNTER.
MOV ZERO_BIT, #1 ;dac LINE.0=0, se incrementeaz
;ZERO_COUNTER pentru c s-a
;detectat o tast apsat i se
;nregistreaz n ZERO_BIT ca
linia activ
;este linia 1. Procedura continu i
;pentru ceilali bii ai lui LINE
ONE: JB LINE.1,TWO ;linia numr 2 este activ.
INC ZERO_COUNTER
MOV ZERO_BIT, #2
TWO: JB LINE.2, THREE ;linia numr 3 este activ.
INC ZERO_COUNTER
MOV ZERO_BIT, #3
THREE:JB LINE.3, FOUR ;linia numr 4 este activ.
INC ZERO_COUNTER
MOV ZERO_BIT, #4
FOUR: JB LINE.4, FIVE ;linia numr 5 este activ.
INC ZERO_COUNTER
MOV ZERO_BIT, #5
FIVE: JB LINE.5, SIX ;linia numr 6 este activ.
INC ZERO_COUNTER
MOV ZERO_BIT, #6
SIX: JB LINE.6, SEVEN ;linia numr 7 este activ.
INC ZERO_COUNTER
MOV ZERO_BIT, #7
SEVEN:JB LINE.7, EIGHT ;linia numr 8 este activ.
INC ZERO_COUNTER
MOV ZERO_BIT, #8
EIGHT:RET ;revenire din subrutin
*****************************************************************************
Observaii:
1) Instruciunea DJNZ ZERO_COUNTER, REJECT execut urmtoarea aciune:
decrementeaz valoarea lui ZERO_COUNTER. Dac valoarea lui ZERO_COUNTER este iniial
Curs MICROCONTROLERE
Prof. Dr.Ing. Vasile Lzrescu
.L.Dr.Ing. Rodica Constantinescu INTEL 8051

Page 32 of 32

mai mare dect 1, ceea ce semnific apsarea mai multor taste simultan, atunci prin
decrementare ZERO_COUNTER nu devine zero i atunci se sare la eticheta REJECT care
reseteaz flagul de ntrerupere extern (in rest nu se mai execut nimic). Dac
ZERO_COUNTER este 1, adic s-a apsat o singur tast, atunci prin decrementare el devine 0
i nu se mai execut saltul.
2) Instruciunea MOV ADDRESS,ZERO_BIT ncarc la locaia ADDRESS rangul liniei
de recepie pe care se gsete tasta apsat. Apoi se testeaz i liniile de scanare i n ZERO_BIT
se obine rangul liniei de scanare pe care se gsete tasta apsat. Dup execuia secvenei de
instruciuni:
XCH A, ZERO_BIT
SWAP A
ORL ADDRESS, A
pe semioctetul superior al variabilei ADDRESS se regsete rangul liniei scanate pe care se afl
tasta apsat (vezi ultimele dou instruciuni ale secvenei), iar pe semioctetul inferior al
variabilei ADDRESS se gsete rangul liniei de recepie corespunztoare tastei apsate (vezi
instruciunea MOV ADDRESS, ZERO_BIT). Rangul liniei, care poate avea 8 valori, se
reprezint pe un semioctet.
3) ntreruperea generat de apsarea unei taste trebuie s fie activ pe front. Dac ar fi
activ pe palier atunci att timp ct tasta se menine apsat rutina s-ar executa de mai multe ori.
4) nainte de prsirea subrutinei de tratare a ntreruperilor se execut resetarea flagului
de ntrerupere extern (Ex0) asociat intrrii de cerere de ntrerupere INT0. Cererea de ntrerupere
seteaz flagul Ex0, aceast setare genernd n fapt cererea de ntrerupere la unitatea central a
microcontrolerului. Flagul Ex0 este resetat hard n momentul n care se accept cererea de
ntrerupere. n perioada de ateptare pentru ridicarea tastei exist posibilitatea ca datorit jocului
contactului tastei, s se genereze mai multe fronturi pe INT0, care seteaz Ex0. De aceea, Ex0
trebuie resetat soft nainte de ieirea din rutin, n caz contrar rutina executndu-se de mai multe
ori.
5) n rutina ASTEPT_STABILIZ _TASTA va trebui s ncrcm un timer cu valoarea
corespunztoare ntrzierii. Relaia ntre valoarea ncrcat i ntrzierea n msecunde este:
12
(ms) ntrziere kHz) ( f
= ncarcat valoare
osc


De exemplu, dac frecvena oscilatorului este 3,58 Mhz pentru o ntrziere de 30 ms se
obine 8950 reprezentat ca DD0Ah.

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