intel-8051

Download Intel-8051

If you can't read please download the document

Upload: vuscan-ovidiu

Post on 10-Nov-2015

216 views

Category:

Documents


2 download

DESCRIPTION

Intel-8051

TRANSCRIPT

3.1 Microcontrolerul 80C51 3.1.1 Caracteristici

80C51 este un microcontroler foarte rspndit, fiind cel ce a pus bazele familiei de microcontrolere 80C51. Este realizat n tehnologie CMOS i se prezint ntr-o capsul DIL40 sau LCC44 sau QFP44.Principalele caracteristici ale acestui microcontroler sunt:- include 4 Ko memorie ROM i 128 octei memorie RAM, - include o unitate aritmetic i logic,- are 4 porturi de intrare/ ieire care pot fi utilizate ca porturi de uz general dar au i funciuni specifice,- poate adresa 64 Ko memorie extern de program i 64 Ko memorie extern de date, - are 2 contoare/ temporizatoare, independente, pe 16 bii,- include un port serial UART full duplex,- poate gestiona 5 surse de ntreruperi, cu 2 nivele de prioriti,- consum mic: 16 mA n modul normal, 3,7 mA n modul Idle i 50 mA n modul Power Down.

3.1.2 Configuraia terminalelor

Fig. 3.1 prezint configuraia terminalelor la microcontrolerul 80C51, grupate din punct de vedere funcional.

(11)P3.0 / RXD (13 P3.1 / TXD (14) P3.2 / INT0 (15) P3.4 / INT1 (16) P3.5 / T0 (17) P3.6 / T1 (18) P3.7 / /WR (19) P3.8 / /RD

(21)XTAL1 (20)XTAL2 (44) VCC (22) VSS 10 11 12 13 14 15 16 17

1918

8 0 C 5 1

39-32

1-8

24-31

30

29

40 20

31 9

P0.0-7 / AD0-7

P1.0-7

P2.0-7 / A8-15

ALE /PSEN /EA RST (43-36)

(2-9)

(24-31)

(33) (32) (35) (10)

Fig. 3.1 Configuraia terminalelor la microcontrolerul 80C51

Semnificaiile lor sunt:

P0.0-7/ AD0-7: port bidirecional de intrare/ ieire, pe 8 bii, cu dren n gol; o ieire suport 8 sarcini TTL LS; rangurile care au nscrise 1 pot funciona ca intrri de mare impedan; n ciclurile n care se face acces la memorie este o magistral multiplexat

ntre jumtatea mai puin semnificativ din magistrala de adrese i magistrala de date; n acest ultim caz emite 1 pe linie utiliznd rezistene interne la Vcc.P1.0-7: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la Vcc; pentru a funciona ca intrri, trebuie ncrcat 1 n rangurile respective; o intrare comandat cu 0 va absorbi curent datorit rezistenei interne la Vcc.P2.0-7/ A8-15: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la Vcc; n timpul acceselor la memoria extern genereaz jumtatea superioar din magistrala de adrese atunci cnd accesul memoriei externe se face cu adrese pe 16 bii.P3.0-7/ XXX: port bidirecional de intrare/ ieire, pe 8 bii, cu rezistene interne la Vcc; terminalele sale au i funciuni specifice:P3.0: RxD: intrare serial, P3.1: TxD: ieire serial,P3.2: /INT0: intrare pentru ntreruperea extern 0, P3.3: /INT1: intrare pentru ntreruperea extern 1, P3.4: T0: intrare extern pentru contorul 0,P3.5: T1: intrare extern pentru contorul 1,

P3.6: /WR: semnal de comand pentru scriere n memoria de date extern, P3.7: /RD: semnal de comand pentru citire din memoria de date extern. RST (Reset): intrare pentru iniializare.ALE ("Address Latch Enable"): ieire folosit la demultiplexarea magistralei de adrese/ date; frecvena semnalului este egal cu 1/ 6 din frecvena tactului chiar dac nu se fac accese la memoria extern; ns n timpul unui acces la memoria extern de date se pierde o activare./PSEN ("Program Store Enable"): este semnalul de comand pentru citirea din memoria extern de program; n ciclurile de citire din memoria extern se activeaz de 2 ori/ ciclu; nu se activeaz atunci cnd se execut program din memoria intern de program i nici n ciclurile n care se transfer date cu memoria extern de date./EA ("External Address"): este o intrare care selecteaz memoria de program; dac este 0 atunci se va executa din memoria extern de program iar dac este 1 atunci se va executa din memoria intern de program, pn la valoarea 0FFFH din PC, dup care se va executa din memoria extern de program indiferent de nivelul logic care comand terminalul. XTAL1, XTAL2: terminale la care se conecteaz un cuar pentru a obine tactul intern; frecvena acestuia trebuie s fie de 0,5 - 12 MHz; se poate comanda terminalul XTAL1 cu semnal de tact extern, cu factor de umplere 1/2, iar terminalul XTAL2 rmne neconectat. Vcc: tensiune de alimentare, +5 V tensiune continu.Vss: mas electric.

3.1.3 Structura intern

Fig. 3.2 prezint schema bloc a microcontrolerului 80C51. Resursele acestuia sunt: - memoria intern de program, de 4 Ko,- memoria intern RAM, de 128 octei,

- registrele cu funciuni speciale, SFR ("Special Function Registers"), - 2 contoare/ temporizatoare, independente,- o interfa serial UART full duplex, - sistem de ntreruperi.

ntreruperi externe

Sistem de

ntreruperi 4 ko1280

ROMRAM Registre cu funciuni speciale

CPU

Generator de tact

Logic de control a magistralei

Porturi de I/E

Port serial

Contor 0

Contor 1

P0 P1 P2 P3TxD RxDT0T1 3.1.3.1 Memoria intern

Memoria intern a microcontrolerului este de dou tipuri: fix i RAM.

Memoria intern fix a fost implementat cu memorie ROM, are 4 Ko i ocup zona 0000 - 0FFFH din spaiul de adresare pentru memoria de program. Ea este adresat dac intrarea /EA = 1. Tot n aceast zon poate fi suprapus i memorie fix extern care va fi adresat dac /EA = 0. Pentru adrese superioare lui 0FFFH, va fi adresat memoria fix extern, indiferent de nivelul logic de la intrarea /EA. Memoria fix este folosit ca memorie de program.Memoria RAM intern are capacitatea de 128 octei i ocup zona 0000 - 00FFH din spaiul de adresare pentru memoria de date. Organizarea memoriei este dat n fig. 3.3.Fig. 3.2 Schema bloc a microcontrolerului 80C51

Fig. 3.3 Organizarea memoriei RAM interne la microcontrolerul 80C51

Zona 00 - 1FH este divizat n 4 blocuri de cte 8 octei, notate cu Blocul 0 - 3. Exist un grup de registre, R0-7 care se suprapune, la un moment dat, peste un singur bloc din cele 4. Blocul care se suprapune peste registrele R0-7 este selectat de programator prin intermediul rangurilor RS1 i RS0 din registrul de stare al programului, PSW ("Program Status Word"). Dup iniializare, unitatea central, CPU, ncepe execuia de la adresa 0000 iar registrele R0-7 se suprapun peste Blocul 0. Stiva va fi iniializat la adresa 07H, adic n indicatorul de stiv, SP, se va ncrca valoarea 07H. La depunerea n stiv, SP va fi incrementat, spre deosebire de microprocesoare unde la depunerea n stiv SP este decrementat. Se recomand ncrcarea n SP a unei valori care s corespund unei locaii din zona Data RAM.Zona 00 - 1FH poate fi accesat direct, prin intermediul unei adrese pe 8 bii sau prin adresare de registru. De exemplu instruciunea DEC R5 va avea urmtorul efect: prin intermediul rangurilor RS1 i RS0 se alege un bloc din 4, iar octetul din blocul astfel selectat care se suprapune peste registrul R5 va fi decrementat. Registrele R0 i R1 pot fi folosite pentru adresare indirect a memoriei de date. De exemplu instruciunea INC @R0 va avea urmtorul efect: prin intermediul rangurilor RS1 i RS0 se alege un bloc iar octetul din blocul astfel selectat care se suprapune peste R0 va fi interpretat ca adresa unei locaii din memoria RAM intern. Coninutul locaiei respective va fi incrementat. Avantajul adresrii memoriei prin intermediul registrelor R0-7 este acela c rezult instruciuni scurte. Astfel pentru adresare de registru sunt necesare doar 3 ranguri care se gsesc, mpreun cu codul instruciunii, n primul octet al acesteia. La adresarea indirect, prin intermediul registrelor R0 sau R1 este nevoie de un singur rang, aflat, de asemenea, n primul octet al instruciunii.Zona 20H - 2FH din RAM-ul intern este denumit Bit RAM, ntruct fiecare din cei 128

FF

30 2F

20 1F 18 17 10 0F 08 07 00

Data RAM

Bit_RAM

Bloc 3

Bloc 2

Bloc 1

Bloc 0

bii poate fi adresat individual. Exist 2 modaliti de a adresa biii din aceast zon. Una folosete adresa lor: 00 - 7FH, cu 00 pentru bitul 0 de la locaia 20H i 7FH pentru bitul 7 de la locaia 2FH. Cealalt se refer la octeii 20H - 2FH. Astfel biii 00 - 07 pot fi adresai ca 20.0 - 20.7, biii 08 - 0FH ca 21.0 - 21.7 etc. De exemplu instruciunea CLR 20.0 va avea n al doilea octet al ei un cmp de 5 ranguri care specific octetul 20H i un cmp de 3 ranguri care specific bitul selectat. Fiecare octet din aceast zon poate fi adresat i ca octet distinct.Zona 30H - 7FH este denumit Data RAM i este o zon de memorie RAM de uz general. Se recomand plasarea stivei n aceast zon.

3.1.3.2 Registrele cu funciuni speciale, SFR

Microcontrolerul 80C51 conine un grup de registre interne, cu funciuni speciale. Ele sunt adresabile n mod direct iar registrele ale cror adrese se termin n 0 sau 8 pot fi adresate i la nivel de bit. Registrele i adresele lor sunt prezentate n tab. 3.3.n continuare vor fi prezentate, pe scurt, registrele.

ACC: este registrul acumulator. Denumirea folosit n cadrul instruciunilor este A.

B: este un registru cu rol predeterminat n instruciunile de nmulire i mprire. Pentru celelalte instruciuni, poate fi utilizat ca registru general.SP ("Stack Pointer"): este indicatorul de stiv. Este incrementat naintea unei depuneri n stiv prin intermediul instruciunilor CALL sau PUSH. Dup iniializare este ncrcat cu valoarea 07H deci stiva ncepe de la adresa 08H. Poate fi ncrcat, prin program, cu orice valoare.

Registru

Adres de bitb7b6b5b4b3b2b1b0

Adres de registru

B ACC PSW IP P3 IE P2SBUF SCON P1 TH1 TH0 TL1 TL0 TMOD TCON PCON DPH DPL

F7 E7 D7 BF B7 AF A7

9F 97

8F

F6 E6 D6 BE B6 AE A6

9E 96

8E

F5 E5 D5 BD B5 AD A5

9D 95

8D

F4 E4 D4 BC B4 AC A4

9C 94

8C

F3 E3 D3 BB B3 AB A3

9B 93

8B

F2 E2 D2 BA B2 AA A2

9A 92

8A

F1 E1 D1 B9 B1 A9 A1

99 91

89

F0 E0 D0 B8 B0 A8 A0

98 90

88

F0H E0H D0H B8H B0H A8H A0H 99H 98H 90H 8DH 8CH 8BH 8AH 89H 88H 87H 83H 82H

SP P0

87

86

85

84

83

82

81

80

81H 80H

Tab. 3.3 Registrele cu funciuni speciale ale microcontrolerului 80C51

PSW ("Program Status Word"): este registrul de stare al programului. Conine indicatorii de condiii. Rangurile sale au urmtoarele semnificaii:PSW.0: P ("Parity"): indicator de paritate; va fi 1 dac numrul de 1 din acumulator este impar.PSW.1: rezervat.

PSW.2: OV ("Overflow"): indicator de depire; se folosete atunci cnd se lucreaz cu operanzi cu semn i indic apariia unui transport/ mprumut n/ din rangul de semn ceea ce nseamn depirea domeniului de valori care poate fi ncrcat ntr-un registru pe 8 bii. PSW.3-4: RS1, RS0: selecteaz blocul din memoria RAM intern care se suprapune peste grupul de registre R0-7, conform tab. 3.4.

RS1RS0

R0-7 se suprapune peste

00 01 10 11

Blocul 0 (00H - 07H) Blocul 1 (08H - 0FH) Blocul 2 (10H - 17H) Blocul 3 (18H - 1FH)

Tab. 3.4 Selecia blocului de memorie care se suprapune peste registrele RS1, RS0 la microcontrolerul 80C51PSW.5: F0: indicator la dispoziia utilizatorului.

PSW.6: AC ("Auxiliary Carry"): indicatorul de transport sau mprumut auxiliar; indic un transport sau un mprumut ntre cei doi digii ai rezultatului unei operaii de adunare sau scdere ntre 2 operanzi n cod BCD.PSW.7: CY ("Carry"): indicatorul de transport sau mprumut; indic apariia unui transport/ mprumut din/ n rangul cel mai semnificativ al acumulatorului ca urmare a unei operaii de adunare/ scdere, ceea ce nseamn depirea capacitii registrului.DPH, DPL ("Data Pointer High, Low"): sunt dou registre pe cte 8 bii care alctuiesc mpreun DPTR ("Data Pointer Register"), DPH fiind jumtatea superioar din DPTR iar DPL fiind jumtatea inferioar din DPTR. DPTR este folosit la adresarea indirect a unei locaii din memoria extern i poate fi accesat ca registru pe 16 bii sau ca 2 registre pe 8 bii.TH0, TL0 ("Timer 0 Counter"): sunt dou numrtoare pe cte 8 bii care alctuiesc mpreun un numrtor pe 16 bii pentru contorul/ temporizatorul 0.TH1, TL1 ("Timer 1 Counter"): sunt dou numrtoare pe cte 8 bii care alctuiesc mpreun un numrtor pe 16 bii pentru contorul/ temporizatorul 1.SBUF ("Serial Data Buffer"): este un tampon folosit la transferul serie i este fizic alctuit din 2 registre: un tampon pentru transmisie i unul pentru recepie. Transmisia este iniiat prin scrierea unui octet n SBUF. La citire, se primete un octet de la tamponul pentru recepie.P0, P1, P2, P3: sunt registrele ce corespund porturilor P0, P1, P2 respectiv P3. Dac un port este ieire i se scrie 1 sau 0 n un rang din registrele P0 - P3, terminalul corespunztor al portului va avea nivelul logic 1 sau 0.IP, IE, TMOD, TCON, SCON, PCON: sunt registre de control care vor fi prezentate pe msur ce se descrie rolul lor.

Microcontrolerul 80C51 mai dispune de 2 registre, n CPU, care nu sunt cu funciuni speciale i nu pot fi adresate de programator. Acestea sunt:PC ("Program Counter"): este un numrtor pe 16 bii care este incrementat la fiecare citire de octet din memoria de program; el conine adresa locaiei de memorie n care se afl urmtorul octet din instruciune.IR ("Instruction Register"): este un registru pe 8 bii n care se depune octetul din instruciune adus n vederea decodificrii sale.

3.1.3.3 Contoarele/ temporizatoarele 0, 1

Microcontrolerul 80C51 dispune de 2 contoare/ temporizatoare implementate cu dou numrtoare independente, pe 16 bii, notate cu TIMER 0 i TIMER 1. TIMER 0 este alctuit din numrtoarele TH0 i TL0 iar TIMER 1 este alctuit din numrtoarele TH1 i TL1. Exist 2 surse de tact pentru fiecare din cele dou contoare/ temporizatoare. Dac funcia ndeplinit este cea de temporizator atunci sursa este tactul microcontrolerului, fOSC divizat la 12 deci numrtorul va fi incrementat n fiecare ciclu main. Dac funcia ndeplinit este cea de contor atunci sursa este un semnal extern, T0, respectiv T1. Ti este testat n fiecare S5P2 (paragraful 3.1.3.9) a unui ciclu main i un front cztor al acestui semnal va incrementa numrtorul. Frontul cztor este detectat dac ntr-un ciclu main se citete valoarea 1 la terminalul Ti i n ciclul urmtor se citete valoarea 0 la acelai terminal Ti. Numrtorul este decrementat n faza S3P1 a ciclului main urmtor celor dou n care s-a detectat frontul cztor la terminalul Ti. ntruct sunt necesare 2 cicluri main pentru o detectare, rezult c frecvena maxim de numrare este de 1/ 24 din frecvena tactului.Funcionarea contoarelor TIMER 0 i TIMER 1 este controlat de 2 registre: TMOD ("Timer Mode Register"), fig. 3.4 i TCON ("Timer Control Register"), fig. 3.5.

76543210GATE

C/ /T

M1

M0

GATE

C/ /T

M1

M0

TMOD.0-1: M0, M1: fixeaz modul de lucru pentru TIMER 0 conform tab. 3.5.

M1M0

Mod

00 01 10 11

0 1 2 3

Tab. 3.5 Modul de lucru la TIMER 0 sau 1 al microcontrolerului 80C51

TMOD.2: C/ /T: stabilete sursa tactului pentru numrare:0: sursa tactului este fOSC divizat la 12, 1: sursa tactului este T0. TMOD.3: GATE: controleaz pornirea i oprirea numrrii:0: pornirea/ oprirea este controlat de rangul TR0, 1: numrarea este pornit dac TR0 = /INT0 = 1 i este oprit dac TR0 = 0 sau /INT0 = 0.

TMOD.4-5: idem cu TMOD.0-1 dar pentru TIMER 1. TMOD.6: idem cu TMOD.2 dar pentru TIMER 1. TMOD.7: idem cu TMOD.3 dar pentru TIMER 1.Fig. 3.4 Structura registrului TMOD al microcontrolerului 80C51

76543210TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

TCON.0: IT0: stabilete dac ntreruperea extern care sosete pe intrarea /INTO va fi luat n considerare pe frontul cztor, 1 sau pe nivel, 0.TCON.1: IE0: indicator pentru ntreruperea extern 0; este setat dac s-a detectat ntreruperea extern /INT0; este anulat dac ntreruperea este deservit, atunci cnd aceasta este luat n considerare pe front, adic IT0 = 1.TCON.2-3: idem cu TCON.0-1 dar pentru TIMER 1.

TCON.4: TR0: rang de control pentru pornirea/ oprirea numrrii la TIMER 0: 1 pornete numrarea iar 0 o oprete.TCON.5: TF0: indicator de depire a numrtorului; este poziionat la depirea capacitii numrtorului provocat de o incrementare din starea FFFFH n starea 0000 i este o surs pentru cererea de ntrerupere de la TIMER 0; este anulat automat atunci cnd ntreruperea este deservit.TCON.6-7: idem cu TCON.4-5 dar pentru TIMER 1.

Fig. 3.5 Structura registrului TCON al microcontrolerului 80C51

Controlul numrarii este realizat de rangurile TMOD.3 i TMOD.7, GATE, pentru TIMER 0, respectiv TIMER 1. Dac GATE = 0 atunci rangurile TCON.4, TRO, respectiv TCON.6, TR1, vor controla numrarea. Dac TRi = 1, numrarea pornete iar dac TRi = 0, numrarea se oprete. Dac GATE = 1 atunci numrarea pornete dac TRi & /INTi = 1 i se oprete dac TRi = 0 sau /INTi = 0. n acest caz controlul numrrii poate fi realizat extern, prin /INTi. O aplicaie este aceea c se pot astfel msura durate de semnale externe.Selectarea tactului este realizat de TMOD.2, respectiv TMOD.6, C/ /T. Dac C/ /T = 0 atunci sursa tactului este fOSC/ 12 iar dac C/ /T = 1 atunci sursa tactului este un semnal extern aplicat la terminalele T0, respectiv T1.Schema care implementeaz controlul numrrii i selectarea tactului este prezentat n fig. 3.6. S5 este un semnal obinut n timpul fiecrui ciclu main i indic starea a 5-a din ciclu.

fOSC / 12

CLOCK T0 sau T1Detectorpentru

TIMER 0 sau TIMER1C / /T

CLOCK

CLOCK

TL0 5 bii

TH0 8 bii

TL1 5 bii

TH1 8 bii

TF0

TF1

Tact serial

Fig. 3.6 Controlul numrrii i selectarea tactului

la contoarele/ temporizatoarele microcontrolerului 80C51

Exist 4 moduri de lucru pentru TIMER 0 i 1, selectabile prin rangurile corespunztoare M1 i M0.

Modul 0

TIMER 0 i 1 sunt configurate ca numrtoare pe 13 bii. TL0 i TL1 sunt numrtoare alctuite din 5 ranguri, cele mai puin semnificative iar TH0 i TH1 sunt numrtoare pe 8 bii. Indicatorii de depire TF0 i TF1 sunt poziionai atunci cnd numrtorul corespunztor conine valoarea maxim i este incrementat, anulndu-se astfel coninutul su. Semnalul care apare la ieirea de depire a lui TIMER 1 este surs pentru tactul serial. Fig. 3.7 prezint pe TIMER 0 i 1 n modul 0.Fig. 3.7 TIMER 0 i 1 n modul 0 la microcontrolerul 80C51

Modul 1

Este identic cu modul 0, cu excepia faptului c numrtoarele sunt pe 16 bii. Fig. 3.8 prezint pe TIMER 0 i 1 n modul 1.Fig. 3.8 TIMER 0 i 1 n modul 1 la microcontrolerul 80C51

Modul 2

TIMER 0 i 1 sunt configurate ca numrtoare pe 8 bii cu auto-ncrcare. TL0 i TL1 sunt folosite ca numrtoare iar TH0 i TH1 sunt folosite ca registre pentru pstrarea constantei care se va ncrca. Semnalul de depire generat de TL0 sau TL1 va provoca prencrcarea acestora i numrarea va continua de la aceast valoare. TH0 i TH1 sunt ncrcate prin program. Indicatorii TF0 i TF1 sunt poziionai de semnalele de depire de la numrtoarele TL0, respectiv TL1. Semnalul de depire generat de numrtorul TL1 este surs pentru tactul serial. Fig. 3.9 prezint pe TIMER 0 i 1 n modul 2.

Modul 3

Acest mod poate fi cerut doar pentru TIMER 0. Dac i se cere lui TIMER 1, acesta nu va numra (se obine acelai efect ca i cnd TR1 = 0). TIMER 0 n modul 3 lucreaz ca dou numrtoare independente pe 8 bii. TL0 folosete rangurile de control ale lui TIMER 0, adic C/ /T, GATE, TR0 i /INT0 i comand pe TF0 iar TH0 folosete pe TR1

CLOCK

CLOCK

TL0 8 bii

TH0 8 bii

TL1 8 bii

TH1 8 bii

TF0

TF1

Tact serial

i comand pe TF1.

Acest mod este util n aplicaii n care se cere un numrtor suplimentar. TIMER 0 furnizeaz 2 contoare pe 8 bii iar TIMER 1 poate fi folosit n modurile 0, 1 sau 2 fr a putea, ns, s poziioneze pe TF1 deci nu va putea s genereze cerere de ntrerupere. Fig. 3.10 prezint pe TIMER 0 n modul 3.

Fig. 3.9 TIMER 0 i 1 n modul 2 la microcontrolerul 80C51 Fig. 3.10 TIMER 0 n modul 3 la microcontrolerul 80C51

CLOCKTL0TF0

TH0

CLOCKTL1TF1

TH1Tact serial

CLOCK

fOSC / 12 TR1

TL0

TH0

TF0

TF1

3.1.3.4 Interfaa serial

Microcontrolerul 80C51 posed o interfa serial UART ("Universal Asynchronous Receiver/ Transmitter"), full duplex, ceea ce nseamn c poate emite i recepiona simultan. Blocul de recepie posed un dublu tampon, alctuit dintr-un registru de deplasare i un registru tampon, ceea ce nseamn c se realizeaz recepia unui caracter simultan cu predarea caracterului recepionat anterior ctre CPU, rezultnd astfel ctig de timp. Totui, dac un caracter nu este preluat de unitatea central n timp ce se ncheie asamblarea caracterului urmtor, primul se va pierde.Interfaa serie poate lucra n modul I/ E (intrare/ ieire) extins sau n modul UART. n modul I/ E extins, transferul se face sincron cu tactul microcontrolerului. n modul UART se pot transfera caractere pe 10 sau 11 bii. Caracterul pe 11 bii este alctuit dintr-un bit de START, 8 bii de date, un al 9-lea bit programabil i bitul de STOP.Schema bloc a interfeei seriale este prezentat n fig. 3.11.

fTIMLogic

controlfOSC / 2transmisieMUXTxD

SBUF (T)SCONSMOD

ntrerupere

Magistral intern

SBUF (R)

Registru deplasare MUXRxD

Logic control recepie

Fig. 3.11 Interfaa serial la microcontrolerul 80C51

Aceasta cuprinde logica de control pentru transmisie i recepie, registrul de control SCON ("Serial Control Register"), registrele tampon SBUF ("Serial Buffer Register") i rangul SMOD.Registrul SCON, fig. 3.12, conine bii de control pentru a specifica modurile de operare, activarea/ dezactivarea recepiei de date, memorarea celui de-al 9-lea bit de date i starea interfeei seriale. Fiecare rang poate fi adresat individual.

76543210SM0

SM1

SM2

REN

TB8

RB8

TI

RI

SCON.0: RI: este un indicator activat de interfaa serial atunci cnd a terminat de asamblat un caracter i l poate oferi unitii centrale; mpreuna cu rangul TI constituie intrri pentru o poart SAU, a crei ieire poate fi folosit ca cerere de ntrerupere; tergerea indicatorului se face doar prin program.SCON.1: TI: indicator activat de interfaa serial atunci cnd a terminat de transmis un caracter i poate primi altul de la unitatea central; mpreun cu rangul RI constituie

intrri pentru o poart SAU a crei ieire poate fi folosit ca cerere de ntrerupere; tergerea indicatorului se face doar prin program.SCON.2: RB8: rang pentru memorarea celui de-al 9-lea bit recepionat dintr-un caracter pe 11 bii, folosit n modurile 2 i 3; n modul 1 va reine bitul STOP dac rangul SM2 = 0 iar n modul 0 nu este folosit.SCON.3: TB8: rang pentru memorarea celui de-al 9-lea bit de date ce se va transmite ntr-un caracter pe 11 bii, folosit n modurile 2 i 3; este poziionat prin program.SCON.4: REN: trebuie s fie setat pentru ca recepia s fie activat.

SCON.5: SM2: valideaz facilitatea de comunicare n sistem multiprocesor, n modurile 2 sau 3; dac SM2 = 1, n modurile 2 sau 3 (cu 11 bii/ caracter) i al 9-lea bit de date este 1 atunci data recepionat este acceptat i este ncrcat n SBUF i RB8 i indicatorul RI este activat; dac al 9-lea bit de date este 0, data este ignorat i SBUF, RB8 i RI rmn nemodificate; dac SM2 = 1 n modul 1 (cu 10 bii/ caracter), se va ncrca bitul de STOP n RB8, data este preluat i indicatorul RI este activat; dac SM2 = 0, data este acceptat indiferent de valoarea celui de=al 9-lea bit de date sau a bitului de STOP.SCON. 6-7: SM1, SM0: seteaz modul de lucru al interfeei seriale, conform tab. 3.6.

SM0 SM1

Mod

Descriere

Rata de transfer

00 01 10 11

0 1 2 3

I/ E extins UART cu 10 bii UART cu 11 bii UART cu 11 bii

fOSC/ 12 VariabilfOSC/ 32 sau fOSC/ 64 Variabil

Tab. 3.6 Modul de lucru al interfeei seriale a microcontrolerului 80C51 Fig. 3.12 Structura registrului SCON al microcontrolerului 80C51

Registrul SBUF este tamponul pentru date. Dei i corespunde o singur adres, este alctuit din 2 registre: unul pentru transmisie i unul pentru recepie. Corespunztor, SBUF poate fi specificat n instruciuni ca registru surs sau ca registru destinaie. Transmisia este anclanat prin nscrierea datei n SBUF iar la recepie, data este citit din SBUF.Rangul SMOD este rangul 7 din registrul PCON ("Power Control Register") i are rolul s divizeze cu 2 ( SMOD = 1) sau nu (SMOD = 0), rata de transfer.n continuare vor fi descrise modurile de lucru ale interfeei seriale.

Modul 0

Este modul numit i I/ E extins n care se transfer date pe 8 bii, sincronizate cu tactul microcontrolerului. Terminalul TxD este folosit doar pentru a genera tactul iar terminalul RxD este folosit pentru a transfera date n ambele sensuri.Transmisia este iniiat prin scrierea n registrul SBUF. Dup un ciclu main de la ncheierea scrierii n SBUF, apare cel mai puin semnificativ bit al datei la pinul RxD. Dup 2 stri de la apariia acestui bit, este activat, la 0, tactul pe linia TxD. O period complet a tactului corespunde unui ciclu main (ncepe i se termin n a 2-a faz a strii S3). Dup transferul bitului cel mai semnificativ al datei, logica de transmisie este activat i este setat indicatorul TI.Recepia este activat atunci cnd REN = 1 i RI = 0. Aceasta se va realiza prin program. Tactul de pe linia TxD se va activa, la 0, dup 9 stri dup ce REN = 1 i RI = 0. O perioad a tactului de pe linia TxD corespunde unui ciclu main. Data este citit de pe

linia RxD n registrul tampon de citire imediat naintea tranziiei 0 -> 1 a tactului. Dup ce preluarea caracterului s-a ncheiat, el este transferat n SBUF, logica de recepie este iniializat i se activeaz indicatorul RI.Rata de transfer n modul 0 este: R = fOSC/ 12.Fig. 3.13 prezint diagrama transferului n modul 0.Fig. 3.13 Transferul n modul 0 al interfeei seriale a microcontrolerului 80C51

Modul 1

Este un mod UART n care se transfer caractere pe 10 bii: 1 bit de START, 8 bii de

EPIE

S1S2S3S4S5S6S1S2S3S4S5 S6S1 CLK

TRANSMISIE RxD(DATE)

TxD (Tact)

REC RxD (DATE)

TxD (Tact)

date, primul fiind cel mai puin semnificativ i 1 bit de STOP. La recepie, bitul de STOP se ncarc n RB8. Fig. 3.14 prezint schema bloc a interfeei seriale n modul 1 iar fig. 3.15 prezint diagrama transferului n modul 1.TIMRata de transfer este determinat de frecvena semnalului de la ieirea de depire a lui TIMER 1, f. Dac TIMER 1 lucreaz n modul 0 sau 1 atunci rata de transfer este:2SMODR = ------------ * fTIM. 32Dac TIMER 1 lucreaz n modul 2 atunci rata de transfer este: 2SMODfOSCR = ------------- * --------------------------------; (TH1) este constanta de prencrcare. 3212 * (256 - (TH1))TIMER 1 poate lucra ca i contor sau ca temporizator i este necesar dezactivarea ntreruperii generat de TF1.Transmisia se realizeaz pe terminalul TxD i este anclanat de o scriere n tamponul SBUF. Tactul fOSC sau fTIM divizat la 2 sau nu de SMOD, este divizat la 16 de un numrtor. Transmisia ncepe prin plasarea bitului de START la nceputul ciclului main care urmeaz dup ce numrtorul a executat un ciclu complet, dup ncheierea scrierii n

/S DQ/R

SBUF (T)

Numrtor / 16

/2

Numrtor / 16

Ta7 8

7 8 9 Detectorbit

interfaa

ctRITransfer Logic control9recepie

StartDeplasare

serie

Registru deplasare recepie

Fig. 3.14 Schema bloc a interfeei seriale n modul 1 la microcontrolerul 80C51 Magistrala intern

TB8 fTIMScrie nSBUF

SMOD=TxD = 0

SMOD= = 1

StartDeplasare

Logic control transmisieDateTactTITransfer

ntrerupere de la

Detector tranziie 1 0

RxD

Citete SBUF

SBUF (R)

Magistrala intern

SBUF. n continuare, la fiecare ciclu complet al numrtorului se emite un bit de date. Dup ce se emite i bitul de STOP, se activeaz indicatorul TI.Recepia se realizeaz pe terminalul RxD i este anclanat de o tranziie 1 -> 0 pe acest terminal. Aceast tranziie corespunde bitului de START i numrtorul mod 16 ncepe s numere. Un ciclu complet al numrtorului corespunde unui bit serie recepionat. n consecin TIMER 1 trebuie s fie ncrcat cu o astfel de valoare nct perioada numrtorului mod 16 s fie egal cu rata de recepie.

TRANSMISIE

Tact

Scrie n SBUF

/Transfer

Date

Deplasa

re

TxDSTART D0D1D2D3D4D5D6D7 TB8 STOP

TI

RECEPIE

Tact

RxDSTART D0D1D2D3D4D5D6D7 RB8 STOP

7, 8, 9

Deplasare

RI

Fig. 3.15 Transferul n modul 1 al interfeei seriale a microcontrolerului 80C51

Dup ce numrtorul ncepe s numere, n strile 7, 8 i 9 ale acestuia, logica de recepie citete linia RxD i dac gsete cel puin 2 valori 0, consider bitul de START ca fiind valid, l preia i l introduce n registrul de deplasare din tamponul de recepie. n caz

contrar consider c a fost un impuls de START fals i revine n starea iniial n care ateapt o nou tranziie 1 -> 0 pe linia RxD.Dup preluarea bitului de START, sunt preluai n mod analog i biii de date ce sosesc de pe linia serial. Un bit este citit n strile 7, 8 i 9 ale numrtorului i valoarea preluat este cea care corespunde la cel puin 2 din 3 citiri. n acest fel s-a implementat un mecanism de rejecie a zgomotelor.n timpul bitului de STOP, n starea 10 a numrtorului, data din registrul de deplasare este ncrcat n SBUF, bitul de STOP este ncrcat n RB8, circuitele de recepie sunt iniializate i se activeaz indicatorul RI.ncrcarea datei n SBUF, a bitului de STOP n RB8 i activarea indicatorului RI se realizeaz doar dac n momentul respectiv sunt ndeplinite condiiile:- RI = 0 i

- SM2 = 0 sau SM2 = 1 i bitul STOP = 1.

Dac vreuna din aceste condiii nu este ndeplinit atunci data este ignorat i SBUF, RB8 i RI rmn nemodificate.

Modul 2Este un mod UART cu 11 bii/ caracter: 1 bit de START, 8 bii de date, 1 bit programabil i 1 bit de STOP. La transmisie, bitul al 9-lea este TB8 i poate fi programat iar la recepie, bitul al 9-lea este ncrcat n RB8. Rata de transfer este:2SMODR = -------------- * fOSC 64Transmisia i recepia se realizeaz ntocmai ca i n modul 1, utiliznd aceleai resurse hardware i acelai mecanism de rejecie a zgomotelor. Apare o singur diferen, legat de al 9-lea bit de date. Astfel la transmisie, dup bitul de START i cei 8 bii de date, emii n aceeai ordine ca i la modul 1, este emis al 9-lea bit, TB8, care poate fi bitul de paritate dac n prealabil acesta a fost ncrcat n TB8, apoi se emite bitul de STOP i se activeaz indicatorul TI.La recepie, dup preluarea bitului de START i a biilor de date, este preluat al 9-lea bit, care se ncarc n RB8, apoi este preluat bitul de STOP i se activeaz indicatorul RI. Preluarea datei, ncrcarea celui de-al 9-lea bit n RB8 i activarea indicatorului RI au loc dac sunt ndeplinite, la momentul respectiv, condiiile:- RI = 0 i- SM2 = 0 sau SM2 = 1 i bitul al 9-lea = 1.Dac vreuna din aceste condiii nu este ndeplinit atunci data este ignorat i SBUF, RB8 i RI rmn nemodificate.

Modul 3TIMEste un mod UART cu 11 bii/ caracter care difer de modul 2 doar prin rata de transfer care aici, depinde de f. Astfel:2SMODR = -------------- * fTIM, 32dac TIMER 1 lucreaz n modul 0 sau 1 i 2SMOD fOSCR = ------------- * ------------------------------, 3212 * (256 - (TH1))dac TIMER 1 lucreaz n modul 2.

TIMER 1 poate lucra ca i contor sau temporizator i este necesar dezactivarea ntreruperii generat de TF1.n tab. 3.7 se prezint ratele de transfer uzuale i cum pot fi ele obinute din TIMER 1.

Rata de transfer

fOSC [MHz]

SMOD

TIMER 1C//T Mod Const. de prencrcare

Mod O:max. 1,67 Mbii/s Mod 2:max. 625 Kbii/s Mod1,3:max.104,2 Kbii/s 19,2 Kbii/s9,6 Kbii/s 4,8 Kbii/s 2,4 Kbii/s 1,2 Kbii/s 110 bii/s 110 bii/s

20 20 2011,059 11,059 11,059 11,059 11,059 126

x 1 1 1 0 0 0 0 0 0

x x x x x x0 2 FFH 0 2 FDH 0 2 FDH 0 2 FAH 0 2 F4H 0 2 E8H 0 1 D4H 0 2 72H

Tab. 3.7 Ratele de transfer uzuale la microcontrolerul 80C51

n continuare se va descrie facilitatea de comunicare n sistem multiprocesor. Aceasta se bazeaz pe existena celui de-al 9-lea bit de date n modurile 2 sau 3. Dac rangul SM2 = 1 i bitul al 9-lea este 1 atunci data este preluat iar dac bitul al 9-lea este 0 atunci data este neglijat.Fie un sistem multiprocesor, fig. 3.16, cu un microcontroler master i mai multe microcontrolere slave. Datele vor fi transmise doar de la master la slave.

TxD80C51 MASTER

RxDRxD80C51 80C51 SLAVE SLAVE

. . .

. . .

RxD

80C51 SLAVE

Fig. 3.16 Sistem multumicroprocesor

n faza iniial, toate microcontrolerele slave au SM2 = 1 i ateapt s fie selectate. Microcontrolerul master emite adresa microcontrolerului slave selectat. Adresa difer de date prin aceea c are rangul al 9-lea, TB8, egal cu 1. Toate microcontrolerele slave vor prelua adresa, i vor genera ntreruperi i n rutinele de tratare vor verifica propria adres cu cea sosit de la microcontrolerul master. Microcontrolerul slave selectat va modifica SM2 deci doar la acesta va exista SM2 = 0 iar la toate celelalte microcontrolere slave va exista SM2 = 1. n continuare, microcontrolerul master emite datele, cu TB8 = 0. Doar acel microcontroler slave care va avea SM2 = 0 va prelua datele iar toate celelalte microcontrolere slave le vor ignora ntruct la acestea SM2 = 1. Dup ce microcontrolerul master a emis toate datele, el va emite un cod de final, predeterminat, care va avea ca

efect setarea lui SM2 de ctre microcontrolerul slave care a fost selectat. n acest fel s-a revenit n starea iniial n care toate microcontrolerele slave au SM2 = 1 i ateapt s fie selectate.

3.1.3.5 Sistemul de ntreruperi

Microcontrolerul 80C51 posed 5 surse pentru ntreruperi: 2 ntreruperi externe generate la intrrile /INT0 i /INT1 i 3 ntreruperi interne: 2 de la circuitele contoare/ temporizatoare i una de la ntreruperea serial.Cererile de ntrerupere seteaz indicatori care sunt ranguri din registrele TCON i SCON. Astfel ntreruperile externe seteaz indicatorii IE0 (TCON.1) i IE1 (TCON.3), ntreruperile de la contoare seteaz rangurile TF0 (TCON.5) i TF1 (TCON.7) iar ntreruperea serial seteaz fie rangul RI (SCON.0) fie rangul TI (SCON.1). RI i TI sunt intrri ntr-o poart SAU a crei ieire este cererea de ntrerupere de la interfaa serial. ntreruperile sunt controlate de 2 registre: IE ("Interrupt Register"), fig. 3.17 i IP ("Priority Register"), fig. 3.18.Rolul registrului IE este acela de a valida/ invalida ntreruperile. Pentru a valida o ntrerupere, bitul corespunztor trebuie s fie 1 iar pentru a o dezactiva, bitul corespunztor trebuie s fie 0.

76543210EA

-

-

ES

ET1

EX1

ET0

EX0

IE.0: EX0: bit de control pentru ntreruperea extern 0. IE.1: ET0: bit de control pentru contorul/ temporizatorul 0. IE.2: EX1: bit de control pentru ntreruperea extern 1. IE.3: ET1: bit de control pentru contorul/ temporizatorul 1. IE.4: ES: bit de control pentru ntreruperea serial.IE.7: EA: bit de control general: dac este 0 atunci o ntrerupere nu poate fi tratat; dac este 1 atunci o ntrerupere poate fi tratat dac bitul de control corespunztor este 1.Fig. 3.17 Structura registrului IE al microcontrolerului 80C51

Rolul registrului IP este acela de a aloca prioriti. Exist 2 nivele de prioritate: sczut i ridicat. Fiecrei surse i se poate aloca , n mod independent, oricare nivel de prioritate. Fiecrei ntreruperi i corespunde un rang: 1 n rangul respectiv nseamn prioritate ridicat iar 0 n rangul respectiv nseamn prioritate sczut. Dac apar simultan 2 cereri de ntrerupere, de prioriti diferite, va fi tratat cererea de prioritate mare. Dac apar simultan 2 sau mai multe cereri de aceeai prioritate, microcontrolerul le va lua n considerare ntr-o ordine prestabilit care este: IE0, TF0, IE1, TF1 i, ultima, RI + TI. Rutina de tratare a unei ntreruperi de prioritate sczut poate fi ntrerupt de o cerere de prioritate ridicat dar nu i invers. Rutina de tratare a unei ntreruperi nu poate fi ntrerupt de o cerere de aceeai prioritate.

76543210-

-

-

PS

PT1

PX1

PT0

PX0

IP.0: PX0: rang de prioritate pentru ntreruperea extern 0.

IP.1: PT0: rang de prioritate pentru ntreruperea de la contorul/ temporizatorul 0.

IP.2: PX1: rang de prioritate prntru ntreruperea extern 1.

IP.3: PT1: rang de prioritate pentru ntreruperea de la contorul/ temporizatorul 1. IP.4: PS: rang de prioritate pentru ntreruperea serial.Fig. 3.18 Structura registrului IP al microcontrolerului 80C51

ntreruperile sunt citite n timpul lui S5P2 al fiecrui ciclu main. Apoi are loc o testare a ceea ce s-a citit n timpul urmtorului ciclu main. Dac vreunul din indicatorii de ntrerupere a fost gsit activ i dac ntreruperea respectiv este validat atunci sistemul de ntreruperi va genera o instruciune LCALL ("Long CALL") ADR, unde ADR depinde de tipul ntreruperii, conform tab. 3.8.

Tip de ntrerupere

Adres

IE0 TF0 IE1 TF1RI + TI

0003H 000BH 0013H 001BH 0023H

Tab. 3.8 Adresele corespunztoare ntreruperilor la microcontrolerul 80C51

Instruciunea LCALL nu se va genera n una din urmtoarele situaii: 1. o ntrerupere de prioritate egal sau mai mare este deja n tratare;2. ciclul curent de testare nu este ultimul ciclu al instruciunii curente sau

3. instruciunea curent este RETI sau o instruciune ce scrie n registrele IE sau IP. Condiia 2. asigur luarea n considerare a unei cereri de ntrerupere doar la sfiritul unei instruciuni iar condiia 3. asigur luarea n considerare a unei cereri de ntrerupere doar dup ce se execut nc o instruciune dup RETI sau dup cea care scrie n registrele IE sau IP.Ciclul de testare este repetat n fiecare ciclu main iar valorile testate sunt cele citite n S5P2 a ciclului anterior. Dac o ntrerupere este activ dar nu a fost considerat datorit uneia din condiiile anterioare, ea nu este memorat. Ea va fi luat n considerare doar dac mai rmne activ dup ndeprtarea condiiei de blocare. Fig. 3.19 prezint timpul de rspuns la o cerere de ntrerupere.

C1

S5 P2

S6

C2C3C4C5

......................

ntreruperile sunt activate Citirea ntreruperilor ntrerupe-rile suntLCALL testate Rutina de tratare

Fig. 3.19 Tratarea ntreruperilor la microcontrolerul 80C51

n ciclul C1 se fac citirile, n ciclul C2 se fac testrile, n ciclurile C3 i C4 se genereaz instruciunea LCALL iar ciclul C5 corespunde primei instruciuni din rutina de tratare.

Dac o ntrerupere de prioritate mai mare dect cea tratat se activeaz nainte de S5P2 a ciclului main C3 atunci n C4 va fi testat iar n C5 i C6 se va genera instruciunea LCALL pentru ea, fr a mai ncepe execuia rutinei de tratare a ntreruperii de prioritate mai mic.Din fig. 3.19 rezult c timpul minim de rspuns din momentul activrii unei cereri de ntrerupere i pn la tratarea ei este de 3 cicluri main. Valoarea maxim a acestui timp depinde de condiiile care mpiedic generarea instruciunii LCALL. Dac este ndeplinit condiia 1. atunci timpul depinde de durata rutinei de tratare n timpul creia a aprut noua cerere. Dac este ndeplinit condiia 2. atunci timpul suplimentar nu poate fi mai mare dect 3 cicluri main deoarece cele mai lungi instruciuni (MUL i DIV) au 4 cicluri main. Dac este ndeplinit condiia 3 atunci timpul suplimentar nu poate fi mai mare dect 5 cicluri main (1 eventual ciclu pentru ncheierea instruciunii n curs i 4 cicluri n cazul cel mai defavorabil cnd instruciunea ce urmeaz este MULsau DIV). Deci dac exist o singur surs de ntrerupere atunci timpul de rspuns este ntre 3 i 8 cicluri main.Instruciunea LCALL va depune coninutul lui PC n stiv i va ncrca PC cu adresa de salt. De asemenea, n unele cazuri, are loc tergerea, prin hardware, a indicatorului ce corespunde ntreruperii tratate. Astfel sunt teri indicatorii TF0, TF1 i IE0, IE1 dar numai dac ntreruperea extern este activ pe front. Indicatorul ce corespunde ntreruperii seriale trebuie sa fie ters doar prin program.Execuia rutinei de tratare a cererii de ntrerupere se ncheie la ntlnirea instruciunii RETI. Aceasta ncarc n PC adresa de revenire i iniializeaz sistemul de ntreruperi. Rutina se poate ncheia i cu instruciunea RET dar aceasta nu va iniializa sistemul de ntreruperi.ntreruperile externe pot fi programate, prin rangurile IT0, respectiv IT1 din registrul TCON, s fie active pe nivel sau pe front. O tranziie 1 -> 0 pe una din intrrile /INT0 sau /INT1 va poziiona indicatorul IE0 sau IE1, dac ntreruperea este validat, dac cererea are o durat minim de 12 perioade de tact pe nivel 1 i 12 perioade de tact pe nivel 0. Aceast condiie rezult din faptul c terminalele /INT0 i /INT1 sunt citite doar o singur dat n fiecare ciclu main.Dac cererea extern este activ pe nivel, ea trebuie s rmn activ pn la nceperea execuiei rutinei de tratare, dup care trebuie dezactivat nainte de ncheierea rutinei pentru a evita o nou tratare a ei.

Ca o aplicaie a tratrii ntreruperilor se va prezenta modalitatea de execuie a unui program n mod pas cu pas. S-a artat c o cerere de ntrerupere nu va fi luat n considerare dac apare n timpul tratrii unei ntreruperi de aceeai prioritate i nici dac apare n timpul instruciunii RETI, caz n care este necesar execuia a nc unei instruciuni. Aceasta nseamn c dac s-a intrat n rutina de tratare a cererii de ntrerupere, o nou intrare n aceast rutin este posibil doar dac se execut o instruciune din programul principal. Pe aceast trstur se bazeaz tehnica de realizare a modului pas cu pas. Pentru aceasta se programeaz activarea unei ntreruperi externe, de exemplu /INT0, pin P3.2, pe nivel iar rutina de tratare va trebui s se ncheie cu secvena: JNB P3.2,$ - se ateapt pn cnd /INT0 devine 1;JB P3.2,$ - se ateapt pn cnd /INT0 devine 0;

RETI - ntoarcere n programul principal pentru execuia a nc unei instruciuni.

Dac /INT0 este n starea 0, CPU va intra n rutina de tratare a ntreruperii externe 0 i va rmne acolo pn ce apare un impuls pe linia /INT0 (o trecere la 1 urmat de o nou

trecere la 0). Apoi va executa RETI, se va ntoarce n programul principal unde va mai executa o instruciune i va reintra n rutina de tratare dup care totul se repet.

3.1.3.6 Iniializarea microcontrolerului

Microcontrolerul 80C51 este iniializat prin aplicarea unui nivel 1 la intrarea RST, n timp ce oscilatorul funcioneaz i meninerea acestui nivel cel puin 24 perioade de tact. Semnalul extern RST este asincron n raport cu tactul microcontrolerului. El este testat n faza S5P2 a fiecrui ciclu main. Dup ce microcontrolerul sesizeaz activarea lui RST, terminalele i menin activitile timp de 19 perioade de tact, adic ntre 19 i 31 perioade de tact dup ce s-a aplicat semnalul extern RST.Dup dezactivarea lui RST, starea registrelor interne este prezentat n tab. 3.9.

Registru

Coninut

PC, DPTRACC,B, PSW, TMOD, TCON, TH0, TL0, TH1, TL1, SCON SPP0 - P3 SBUF IPIE PCON

0000 00 07FFH(intrri) nedeterminat xxx00000B 0xx00000B 0xxx0000B

Tab. 3.9 Coninutul registrelor dup iniializarea microcontrolerului 80C51

Coninutul memoriei RAM interne nu este afectat de RST. La cuplarea tensiunii de alimentare, coninutul memoriei RAM este nedeterminat.

3.1.3.7 Modurile de lucru cu consum redus

Microcontrolerul 80C51 are 2 moduri de lucru cu consum redus: modul Idle i modul Power - Down. Instalarea lor se face prin program, acionnd asupra a cte unui rang din registrul PCON ("Power Control Register"), fig. 3.20.76543210SMOD

-

-

-

GF1

GF0

PD

IDL

PCON.0: IDL: 1 n acest rang instaleaz modul Idle.

PCON.1: PD: 1 n acest rang instaleaz modul Power - Down. PCON.2, 3: GF0, GF1: ranguri pentru uz general.PCON.7: SMOD: utilizat la interfaa serial.

Fig. 3.20 Structura registrului PCON al microcontrolerului 80C51 Modul IdleMicrocontrolerul intr n acest mod dup activarea, de ctre o instruciune, a rangului IDL. Oscilatorul, interfaa serial, contoarele/ temporizatoarele i sistemul de ntreruperi continu s funcioneze dar tactul nu mai ajunge la CPU. ntregul CPU i pstreaz

starea. Terminalele de la porturi pstreaz nivelul logic avut la instalarea modului Idle iar ALE i /PSEN vor avea nivel 1.Ieirea din modul Idle se poate face pe 2 ci. Una const ntr-o ntrerupere validat. Ea va fi luat n considerare i, dup instruciunea RETI, microcontrolerul va executa instruciunea ce urmeaz dup cea care a instalat modul Idle. Rangurile GF0 i GF1 pot fi folosite pentru a indica dac ntreruperea a aprut n modul normal sau n modul Idle.O alt cale const n activarea liniei RST cel puin 24 perioade de tact. Rangul IDL va fi ters i microcontrolerul va continua execuia de la instruciunea urmtoare celeia care a instalat modul Idle. ntruct algoritmul intern de iniializare dureaz aproximativ 3 cicluri main, se recomand inserarea de 3 instruciuni NOP dup cea care a instalat modul Idle.

Modul Power - Down

Este instalat de o instruciune ce activeaz rangul PD. Oscilatorul se oprete, ca urmare starea ntregului microcontroler rmne nemodificat (microcontrolerul "nghea"). Terminalele porturilor oglindesc starea rangurilor corespondente iar ALE i /PSEN vor avea nivel 0. Singura ieire din acest mod este prin activarea intrrii RST.n acest mod Vcc poate fi redus la 2 V. Trebuie ns avut grij ca reducerea s se fac dup ce microcontrolerul a intrat n modul Power - Down iar activarea lui RST care provoac ieirea din modul Power - Down s se fac dup ce Vcc a revenit la valoarea de lucru.

3.1.3.8 Porturile

Microcontrolerul 80C51 dispune de 4 porturi bidirectionale, pe 8 bii, notate cu P0, P1, P2 i P3. Fiecare port are un circuit de intrare, un registru intern notat tot cu P0, P1, P2 respectiv P3 i un etaj de ieire. Porturile sunt de uz general, fiecare rang poate fi programat independent ca intrare sau ieire i, n plus, porturile P0, P2 i P3 au i funciuni predeterminate.Astfel n ciclurile n care se face acces la memoria extern, liniile portului P0 constituie o magistral multiplexat de adrese/ date, AD0 - 7, ntre jumtatea mai puin semnificativ din magistrala de adrese i cea de date iar liniile portului P2 vor transfera jumtatea mai semnificativ a magistralei de adrese. Atunci cnd se aduce un cod de instruciune din memoria de program extern, liniile porturilor P0 i P2 vor fi comandate de PC iar atunci cnd se transfer o dat cu memoria de date extern liniile porturilor P0 i P2 vor fi comandate de registrul DPTR. Dac adresa datei externe este doar pe 8 bii, atunci adresa se obine pe liniile portului P0 care va fi comandat de registrul R0 sau R1.Rangurile portului P3 au funciuni specifice individuale conform tab. 3.10.

Fig. 3.21 prezint schema cte unui rang din fiecare port.DQC/Q

Fig. 3.21 Schema porturilor P0 - P3 ale microcontrolerului 80C51

Adrese / DateControl Citire

din registru VCC

pFET

Magistal intern

Scrie n registru

D Q P0.XC/Q

P0.X

nFETTerminal

CitireterminalVCC

CitireSA din registru

Magistal intern

Scrie n registru

D Q P1.XC/Q

P1.X

Terminal

Citire terminal

Citire din registru

Adrese Control VCC SA

Magistal intern

Scrie n registru

D Q P2.XC/Q

P2.X

Terminal

Citire terminal

Citire din registru

MagistalinternP3.X Scrien registru

FunciuneVCC specific SA de ieire

P3.X

Terminal

CitireterminalFunciune specific de intrare

Fiecare rang este alctuit dintr-un bistabil de tip D n care se nscrie informaia, la sosirea comenzii de scriere i al crei coninut poate fi citit prin intermediul unei pori cu 3 stri. Restul circuitelor sunt specifice fiecrui port.

Rang

Funcia specific

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

RxD: intrare serial TxD: ieire serial/INT0: ntrerupere extern 0 /INT1: ntrerupere extern 1T0: intrare de numrare pentru contorul 0 T1: intrare de numrare pentru contorul 1/WR: semnal de comand pentru scrierea n memoria de date extern /RD: semnal de comand pentru citirea din memoria de date extern

Tab. 3.10 Funciunile specifice ale rangurilor portului P3 al microcontrolerului 80C51

Portul 0

Etajul de ieire al portului 0 este alctuit din 2 tranzistoare FET. Tranzistorul pFET va lucra doar atunci cnd rangul respectiv emite 1 n timpul acceselor la memoria extern iar n toate celelalte situaii este blocat, ceea ce nseamn c atunci cnd portul P0 este folosit ca port de ieire, liniile sale sunt cu dren n gol.n timpul acceselor la memoria extern, n registrul P0 se nscrie configuraia FFH.

Pentru a folosi rangurile portului P0 ca intrri, este necesar nscrierea n prealabil n rangurile corespunztoare din registrul intern P0, a valorii 1. Aceasta va duce la blocarea tranzistorului nFET i, ntruct i tranzistorul pFET este blocat, terminalul respectiv va fi flotant i poate fi comandat din exterior ca o intrare de mare impedan.

Portul 1Spre deosebire de portul 0 care este bidirecional, portul 1 este un port cvasi-bidirecional. Termenul cvasi-bidirecional se refer la un port care prezint pe fiecare rang cte o rezisten la tensiunea de alimentare atunci cnd este comandat ca intrare. P1 este un port de uz general, fr funcii specifice.Sarcina activ, SA, din etajul de ieire asigur o funcionare performant a portului. Astfel valoarea sa se modific n funcie de coninutul rangului corespunztor. Fig. 3.22 prezint schema sarcinii active pentru microcontrolerul 80C51 (varianta CMOS) iar fig. 3.23 prezint o schem echivalent n care rezistena R1 corespunde tranzistorului pFET1, R2 corespunde lui pFET2 i R3 corespunde lui pFET3. Schema echivalent din fig. 3.23a corespunde rangului configurat ca ieire, cu valoarea 1. Schema echivalent din fig. 3.23b corespunde rangului configurat ca ieire, cu valoarea 0. Schema echivalent din fig. 3.23c corespunde tranziiei 0 -> 1 a ieirii n care se activeaz un circuit de accelerare. Acesta este tranzistorul pFET1 care se deschide timp de 2 perioade de tact dup tranziia 0 -> 1 de la ieirea rangului din registrul intern i va provoca generarea unui curent suplimentar care va determina creterea vitezei de comutare 0 -> 1 la ieirea corespunztoare.Pentru utilizarea portului ca intrare este necesar nscrierea n prealabil a valorilor logice 1 n rangurile corespunztoare. Dac la intrare se aduce nivel 0 atunci rezistena R2 se deconecteaz de la Vcc iar rezistena intern va fi dat doar de R3, cu valoare mare, de 100 kW, ceea ce va fixa un curent de intrare foarte mic. Dac la intrare se aduce nivel 1

VCCVCCVCC ntrziere2 perioade de tact

pFET1pFET2pFET3

PX.Y

Ieirea rangului Terminal

nFET

Citete terminalul

Fig. 3.22 Schema sarcinii active pentru microcontrolerul 80C51

Fig. 3.23 Schema echivalent a sarcinii active din porturile microcontrolerului 80C51

VCC R1=500W R2=10kW

R3=100kW VCC R1=500W R2=10kW

R3=100kW

IOH

IOL

a..b. VCC R1=500W

R2=10kW

R3=100kW

c.

atunci rezistena R2 se reconecteaz la Vcc iar rezistena intern va fi fixat de valoarea de 10 kW a acesteia.

Portul 2

Este de asemenea un port cvasi-bidirecional. Sarcina activ are aceeai schem ca la portul 1. n timpul acceselor la memoria extern, va transfera jumtatea mai semnificativ a magistralei de adrese. n acest timp, coninutul registrului intern P2 nu este afectat, ceea

ce nseamn c dac dup un acces la memoria extern nu se execut un alt acces la memoria extern, pe terminalele portului P2 va apare coninutul registrului intern P2. Dac accesul la memoria extern de date se face doar pe 8 bii, pe terminalele portului P2 va apare coninutul registrului intern P2. n acest fel se poate realiza paginarea memoriei de date externe.n afara acceselor la memoria extern, portul P2 poate fi folosit ca port de uz general.

Portul P3

Este de asemenea un port cvasi-bidirecional. Este port de uz general dar are i funciuni specifice. Atunci cnd funcioneaz ca port de uz general are aceleai caracteristici ca portul P1. Pentru a utiliza funciunile sale specifice, este necesar programarea n prealabil a valorii logice 1 n rangurile corespunztoare din registrul intern P3. n acest fel poarta I-NU, fig. 3.21, va fi comandat de cealalt intrare, corespunztoare funciunii specifice. n cazul unei funciuni de ieire (TxD, /RD, /WR), terminalul portului este comandat de linia "Funciune specific de ieire" iar n cazul unei funciuni de intrare (RxD, /INT0, /INT1, T0, T1), ieirea porii conectat la terminal, notat cu "Funciune specific de intrare", este conectat n interiorul microcontrolerului n conformitate cu funciunea specific realizat. n cazul rangurilor care sunt intrri este necesar blocarea tranzistorului nFET ceea ce se realizeaz nscriind n prealabil nivelul logic 1 n rangul corespunztor din registrul intern.

Scrierea ntr-un port se realizeaz n felul urmtor: noua valoare ajunge la registrul intern corespunztor n S6P2 a ciclului final al instruciunii care provoac scrierea. ntruct nscrierea n registru se face doar ntr-o faz P1, noile valori vor apare la ieirile portului doar n S1P1 a ciclului main urmtor.Ieirile portului P0 suport o ncrcare de 8 sarcini TTL LS iar ieirile porturilor P1, P2 i P3 suport o ncrcare de cte 4 sarcini TTL LS.La iniializare toate porturile sunt configurate ca intrri, cu valorile FFH nscrise n registrele interne.Dup cum se observ din fig. 3.21, la fiecare port exist facilitatea de a citi att terminalul ct i coninutul rangului corespunztor din registrul intern. Instruciunile care citesc coninutul rangului i nu terminalul sunt cele care citesc o valoare, eventual o modific i apoi o rescriu n registrul intern. Ele sunt denumite instruciuni cu "citire - modificare -scriere". n continuare sunt prezentate aceste instruciuni, operandul destinaie fiind un port sau un rang dintr-un port:ANL : I logic, de exexmplu ANL P1, A, ORL : SAU logic,XRL : SAU - EXCLUSIV logic,

JBC : salt dac rangul specificat este 1 i apoi anulare rang, CPL : complementare bit, de exemplu CPL P3.3,INC : incrementare, DEC : decrementare,DJNZ : decrementare i salt dac rezultatul nu este nul, de exemplu DJNZ P1, ETICH, MOV PX.Y,C : mut bitul Carry n rangul Y din portul X,CLR PX.Y : terge rangul Y din portul X, SET PX.Y : seteaz rangul Y din portul X.Facilitatea de a citi coninutul rangului din registrul intern n locul terminalului permite evitarea obinerii de valori false datorate unei conectri greite a terminalului. De

exemplu, dac s-ar putea citi doar terminalul atunci s-ar obine o valoare fals n urmtoarea situaie: terminalul se conecteaz n baza unui tranzistor npn, cu emitorul legat la mas i comand funcionarea acestuia; nscrierea unei valori 1 n rangul din registrul intern va provoca saturarea tranzistorului ceea ce nseamn c nivelul de tensiune de pe terminal va fi fixat de tensiunea baz - emitor a tranzistorului care, ns, corespunde unui nivel logic 0.

3.1.3.9 Ciclurile main

Execuia unei instruciuni se desfoar n cadrul unor cicluri main. Un ciclu main este divizat n 6 stri, notate cu S1 - S6, o stare fiind alctuit din 2 faze, notate cu P1 i P2. Deci un ciclu main ncepe n starea 1, faza 1, notat cu S1P1 i se ncheie n starea 6, faza 2, notat cu S6P2. Operaiile aritmetice i logice se desfoar n timpul fazei 1 iar transferurile ntre registre se desfoar n faza a 2-a.Considernd un tact cu frecvena de 12 MHz, rezult c durata unui ciclu main este de 1 ms. Tactul se obine fie prin conectarea extern a unui cuar, ntre terminalele XTAL1 i XTAL2, fig. 3.24a, fie prin comanda din exterior cu semnal dreptunghiular, fig. 3.24b i c. Fig. 3.24 Generarea tactului la microcontrolerul 80C51

Execuia unei instruciuni depinde de tipul acesteia. Astfel exist mai multe cazuri:

22-35 pFXTAL2XTAL2XTAL2

22-35 pFXTAL1 SemnalXTAL1 extern SemnalXTAL1 extern

a.b.c.

1. instruciune pe 1 octet i 1 ciclu:

Execuia instruciunii ncepe n S1 cnd se aduce codul i se memoreaz n registrul IR. Numrtorul de program, PC, este incrementat iar n S4 se mai execut o aducere de cod care, ns, este ignorat iar PC nu mai este incrementat.2. instruciune pe 2 octei si 1 ciclu:

n S1 se aduce codul instruciunii, PC este incrementat iar n S4 se mai citete un octet i PC este din nou incrementat.3. instruciune pe 1 octet i 2 cicluri care nu face referire la RAM-ul extern:

n S1 al primului ciclu se aduce codul instruciunii, PC este incrementat iar n S4 al aceluiai ciclu, S1 i S4 ale ciclului urmtor se citesc octei care nu sunt luai n considerare de CPU iar PC nu se modific.4. instruciune pe 1 octet i 2 cicluri care se refer la RAM-ul extern:

n S1 al primului ciclu se aduce codul instruciunii, PC este incrementat, n S4 se aduce un nou cod dar care nu este considerat de CPU, PC nu este incrementat iar n ciclul urmtor nu se mai execut aduceri de cod ci accesul la RAM-ul extern.

Cele mai multe instruciuni se execut n 1 sau 2 cicluri main. Doar instruciunile MUL i DIV necesit 4 cicluri main.

Semnalele microcontrolerului implicate n transferurile din cadrul ciclurilor main sunt urmtoarele:ALE: ieire a microcontrolerului care se folosete la demultiplexarea magistralei de adrese/ date; semnalul va ncrca adresa ntr-un registru extern (este garantat stabilitatea adresei pe frontul su posterior deci ncrcarea trebuie s se fac de ctre acest front); se activeaz de 2 ori ntr-un ciclu, cu excepia unui ciclu de acces la RAM-ul extern cnd lipsete prima activare; deci dac nu se execut accese la RAM-ul extern atunci ALE poate fi folosit ca semnal cu frecvena egal cu 1/ 6 din frecvena semnalului de tact. /PSEN: este semnalul de comand pentru citirile de cod din memoria de program extern; se activeaz de 2 ori ntr-un ciclu, cu excepia cazului cnd ciclul se refer la RAM-ul extern cnd nu se activeaz; de asemenea nu se activeaz atunci cnd microcontrolerul execut programe din memoria de program intern./EA: intrare prin care i se comunic microcontrolerului unde se gsete programul; dac este 1 atunci microcontrolerul va executa din memoria de program intern (pn cnd PC ajunge la valoarea 0FFFH, n continuare execuia realizndu-se din memoria de program extern); dac este 0 atunci execuia va avea loc din memoria de program extern./RD, /WR: sunt ieiri de comand pentru citire, respectiv scriere din/ n memoria de date extern.

Fig. 3.25 prezint ciclurile main ale microcontrolerului 80C51. Se observ c ntr-un ciclu de aducere cod de instruciune pe liniile porturilor P0 i P2 apare coninutul numrtorului de program, PC. ntr-un ciclu n care se face acces la memoria de date extern pe liniile portului P0 apare coninutul registrului DPL sau Ri, i = 0, 1, iar pe liniile portului P2 apare coninutul registrului DPH dac adresa este pe 16 bii sau coninutul registrului intern P2 dac adresa este pe 8 bii.

3.1.3.10 Comanda memoriei externe

Din ciclurile main prezentate n paragraful anterior se observ c microcontrolerul activeaz semnale diferite funcie de tipul memoriei externe implicate n transfer. Astfel dac se citete din memoria extern de program se activeaz semnalul de comand /PSEN iar dac este implicat memoria extern de date se activeaz semnalele /RD sau /WR. Pe aceasta se bazeaz caracteristica microcontrolerului de a putea comanda 64 Ko memorie de program i 64 Ko memorie de date dei dispune doar de 16 linii de adres: memoria de program va fi comandat cu semnalul /PSEN iar memoria de date va fi comandat cu semnalele /RD i /WR.n timpul transferurilor cu memoria extern, liniile portului P2 vor constitui jumtatea superioar a magistralei de adrese iar liniile portului P0 vor constitui o magistral multiplexat de adrese/ date. Pentru demultiplexarea ei este necesar memorarea

Fig. 3.25 Ciclurile main ale microcontrolerului 80C51

CLK

ALE /PSEN

P0 Sp1 1 p2S2S3S4

COD PCL COD IN OUT IN S5S6S1S2

PCL COD PCL OUT IN OUT

P2 PCHPCHPCHOUT OUT OUT

Ciclu de aducere cod de instrucie

S4S5S6S1S2S3S4S5S6

CLK

ALE /PSEN

/RD

P0

P2 CODDPL sau RI IN OUT

PCHOUT DATA PCL IN OUT

DPH sau P2 PCH OUT OUT

Ciclu de citire din memoria de date extern

S4S5S6S1S2S3S4S5S6

CLK

ALE /PSEN

/WR

P0

COD DPL sau RI DATA PCL IN OUT IN OUT

P2 PCHDPH sau P2PCHOUT OUT OUT

Ciclu de scriere n memoria de date extern

S4S5S6S1S2S3S4S5S6

CLK

erial

Citire P0, P2, P0, P2, intrri P1 P3 P1 P3

IeiriData vecheData nou

Tact s

(mod 0)CitireCitire RxD PxD

Ciclu de transfer de porturileCde

D0-7

A0-7Memoria deprogram extern (64 ko)

A8-15

/OE /CE

informaiei de adres ntr-un registru extern, la comanda frontului posterior al semnalului ALE.Fig. 3.26 prezint modalitile de conectarea a memoriei externe de program i de date, fiecare de cte 64 Ko.

P0.0-7

/EA

8 0

5ALE 1

P2.0-7

/PSEN

/RD /WR

R E G

STB

D0-7

A0-7Memoria

date externA8-15(64 ko)

/CS /WE /OE

Fig. 3.26 Conectarea memoriei externe de program i de date la microcontrolerul 80C51

Atunci cnd memoria extern implicat n transfer este cea de program, adresa ce apare pe liniile porturilor P0 i P2 este generat de numrtorul de program, PC.Accesul la memoria extern de date se face prin intermediul registrului DPTR, de ctre instruciunile MOVX @DPTR,A i MOVX A,@DPTR. Prima instruciune transfer coninutul acumulatorului n memorie la adresa indicat de DPTR iar a doua instruciune transfer coninutul locaiei cu adresa indicat de DPTR n A. n timpul transferurilor cu

memoria extern de date, adresa ce apare pe liniile porturilor P0 i P2 este generat de DPTR.

Accesul la memoria extern de date se poate face i prin intermediul registrelor R0 sau R1, cu instruciunea: MOVX @Ri,A sau MOVXA,@Ri. Coninutul registrelor R0 sau R1 va fi adresa ce apare pe liniile portului P0. Aceast adres este doar pe 8 bii i va permite accesul ntr-o pagin de 256 octei. Coninutul registrului P2 va apare pe liniile portului P2 i poate fi folosit pentru paginare, asigurnd plasarea paginii de 256 octei n spaiul de adresare de 64 Ko al microcontrolerului.n cazul aplicaiilor ce necesit mai puin memorie de program i de date dect 64 Ko, nu mai este necesar ca cele 2 blocuri de memorie s se suprapun n spaiul de adresare al microcontrolerului iar selecia lor se va face utiliznd i linii mai semnificative din magistrala de adrese.

Dac se dorete rularea de programe din memoria extern de date atunci este necesar suprapunerea unui spatiu de memorie extern de program cu un spaiu de memorie extern de date ceea ce se poate realiza cu o combinaie a semnalelor /PSEN i /RD, fig. 3.27. ntruct semnalul /PSEN se activeaz mai repede dect semnalul /RD este necesar ca memoria extern de date din care se execut programe, s fie suficient de rapid pentru a rspunde cerinelor semnalului /PSEN. Memoria extern de date din care se dorete execuia de programe trebuie s fie plasat n spaiul de adresare al microcontrolerului, ntr-o zon diferit de cea care corespunde att memoriei externe de program ct i memoriei externe de date.Dac ntregul program ce se execut se obine din memoria extern, atunci intrarea /EA trebuie s fie conectat la 0.

P0.0-7

8 0CALE 51

P2.0-7

/ PSEN /RD /WR

R E G

STB

D0-7

A0-7

Memoria extern

A8-15

/CS /OE /WE

Fig. 3.27 Conectarea memoriei de date externe

din care se poate executa program la microcontrolerul 80C51