mikrokontroler at89c51/52

51
PROJEKTOVANJE DIGITALNIH SISTEMA Mikrokontroler AT89C51/52

Upload: -

Post on 03-Jan-2016

113 views

Category:

Documents


2 download

DESCRIPTION

Opis arhitekture mikrokontrolera zasnovanog na 8051/52

TRANSCRIPT

Page 1: Mikrokontroler AT89C51/52

PROJEKTOVANJE DIGITALNIH

SISTEMA

Mikrokontroler AT89C51/52

Page 2: Mikrokontroler AT89C51/52

1

Mikrokontroler AT89C51/52

U digitalnim sistemima upravljanja sreću se pojmovi mikroprocesor i mikrokontroler, pa je stoga neophodno objasniti sličnosti i razlike između ovih komponenti. Pod mikroprocesorom se podrazumeva samo centralna procesorska jedinica (CPU), koju poseduje svaki digitalni računar. Dakle to je deo računara bez memorije, ulazno/izlaznih jedinica i drugih periferija, potrebnih računaru koji treba da komunicira sa korisnikom i da obavlja zadate funkcije. Mikrokontroler se dobija integracijom mikroprocesora sa spoljnom memorijom, ulazno/izlaznim jedinicama, kao i drugim periferijama u jedan čip.

1. Arhitektura mikrokontrolera AT89C51/52

AT89C52 predstavlja Atmelov 8-bitni CMOS mikrokontroler male potrošnje i opšte arhitekture. Zasnovan je na flash tehnologiji što znači da u samom mikrokontroleru postoji električno izbrisiva memorija u koju se može upisati program. Osnovne karakteristike mikrokontrolera AT89C52 su:

kompatibilan sa MCS-51 proizvodima,

8 kB interne fleš memorije za smiještanje programskog koda sa mogućnošću proširenja do 64 kB spoljašnje memorije,

mogućnost do 1000 puta upisa/brisanja programskog koda u interni fleš,

64 kB adresnog prostora memorije podataka,

raspon frekvencije oscilatora u granicama od 0Hz do 24 MHz,

tro-nivovsko zaključavanje programske memorije,

256 x 8 bit internog RAM-a,

32 programibilne I/O linije (četiri porta),

tri 16 – bitna tajmera/brojača,

šest mogućih vektora prekida sa dva nivoa prioriteta,

programibilni serijski prenos (puni dupleks),

integrisan oscilator,

dva načina rada mikrokontrolera ( low-power i power-down mod).

Ovako sintetizovan mikrokontroler znatno olakšava posao projektanta hardvera smanjujući ukupno hardversko okruženje i na taj način povećava pouzdanost sistema.

Razlika između mikorokontrolera AT89C51 i AT89C52 je u tome što AT89C51 ima manje interne memorije za program i podatke, kao i jedan tajmer manje, tj.:

4 kB interne fleš memorije za smiještanje programskog koda,

dva 16 – bitna tajmera/brojača i

128 x 8 bit internog RAM-a.

Page 3: Mikrokontroler AT89C51/52

2

Na slici 1.1 prikazana je arhitektura mikrokontrolera AT89C52. Sa ove slike možemo uočiti sljedeće komponente:

aritmetičko logička jedinica (ALU) sa parom registara (TMP1, TMP2) za privremeno upisivanje podataka,

akumulator (ACC) sa pomoćnim registrom B,

statusni registar (PSW),

registar naredbi sa dekoderom,

programski brojač i registar za inkrementiranje programskog brojača,

Sl. 1.1 Arhitektura mikrokontrolera AT89C52.

Akumulator označava se sa A ili ACC i predstavlja registar opšte namjene. Koristi se u svim aritmetičkim i logičkim operacijama, jer u sebi sadrži jedan od operanada. Takođe, i rezultati operacija se smiještaju u akumulator.

Pomoćni registar B se naziva multiplikativnim registrom i služi za smiještanje drugog operanda za aritmetičke operacije množenja i dijeljenja. Posle izvršene operacije množenja u njemu se nalazi viši bajt rezultata, a u slučaju dijeljenja u njemu se nalazi ostatak dijeljenja.

Pokazivač steka (SP-Stack Pointer) veličine je osam bita i služi za adresiranje vrha stek memorije koja je dio internog RAM-a. Ovaj registar se inkrementira prilikom upisivanja podataka u stek, a

Page 4: Mikrokontroler AT89C51/52

3

dekrementira se prilikom čitanja podataka iz ove memorije. Upisivanje u stek se vrši instrukcijama CALL i PUSH dok čitanje steka vrše instrukcije RET, RETI i POP. Nakon resetovanja vrijednost pokazivača steka se postavlja na vrijednost 07h. Postoji mogućnost softverske incijalizacije vrijednosti pokazivača steka.

DPTR je 16-bitni registar koji se sastoji od dva osmobitna registra DPH i DPL. Koristi se prvenstveno za adresiranje vanjske RAM memorije ili za adresiranje lookup tabela u programskoj memoriji.

Registar stanja (PSW) je od velike važnosti za rad mikrokontrolera. Kod njega nije zanimljiva globalna vrijednost, nego, isključivo pojedinačno stanje bita (0 ili 1). Arhitektura PSW registra prikazana je na sljedećoj slici (sl. 1.2).

7 6 5 4 3 2 1 0 C AC F0 RS1 RS0 OV -- P

Slika 1.2 PSW registar.

Gdje je : C (Carry Flag) bit prenosa, može da se označava i sa CY. Ovaj bit se postavlja na jedinicu ako se

javi prenos pri sabiranju ili pozajmica pri oduzimanju na mjesto bita najveće težine u rezultatu. Takođe, koristi se i prilikom šiftovanja.

AC (Auxiliary Carry Flag) pomoćni bit prenosa. Koristi se samo za BCD operacije a odnosi se na prenos između nižeg i višeg nibla (donja i gornja četiri bita, respektivno). Koristi ga uglavnom mikrokontroler preko naredbi za BCD konverziju.

F0 pomoćni fleg. Stoji na raspolaganju programeru za univerzalnu upotrebu. RS1 i RS0 (Register Select) služi za izbor dijela internog RAM-a u kome je smiještena tekuća grupa registara R0-R7 u skladu sa sljedećom tabelom (tab. 1.1):

Tabela 4.1.1.

RS1 RS0 Mjesto u RAM-u

0 0 Grupa 0 00h-07h 0 1 Grupa 1 08h-0Fh 1 0 Grupa 2 10h-17h 1 1 Grupa 3 18h-1Fh

OV (Overflow) prekoračenje. Setuje se kada je rezultat aritmetičke operacije takav da ne može da se prikaže u jednom bajtu. Ako nema prekoračenja ovaj bit će biti nula.

PSW.1 je rezervisan od strane proizvođača za budući razvoj čipa. P bit parnosti. Ako je broj setovanih bita u akumulatoru paran ovaj bit će biti postavljen na

jedinicu, a u suprotnom slučaju biće resetovan. Uglavnom se koristi za generisanje bita parnosti kod slanja podataka preko serijskog porta ili za testiranje parnosti posle serijskog prijema podataka.

Page 5: Mikrokontroler AT89C51/52

4

2. Raspored i funkcije pojedinih pinova AT89C52

Na slici (sl. 2.1) prikazan je izgled mikrokontrolera AT89C52. Signali koji su nadvučeni su aktivni na nizak logički nivo.

Slika 2.1 Raspored pinova mikrokontrolera AT89C52.

Od 1 do 8 – Port 1:

Port 1 je 8- bitni univerzalni I/O port sa internim pullup otpornicima. Izlazni baferi porta 1 mogu da pogone četiri TTL ulaza. Kada se upiše jedinica na pin porta 1, pin je spojen na VCC internim pullup otpornikom i može se koristiti kao ulaz. Pinovi P1.0 i P1.1 mogu biti dodatno konfigursani kao eksterni ulazi za tajmer/brojač 2. Njihove dodatne funkcije prikazane su u sljedećoj tabeli (tab. 2.1):

Tabela 2.1.

Pin porta Alternativna funkcija

P1.0 T2 - eksterni brojački ulaz za tajmer/brojač 2, kao i klok izlaz

P1.1 T2EX - tajmer/brojač 2 capture/reload okidač kao i direktna kontrola brojača 2

9-Reset :

Ulaz za reset. Visok nivo na ovom ulazu u trajanju dva mašinska ciklusa, dok oscilator radi, prouzrokovaće resetovanje mikrokontrolera. Posljedica reseta je dovođenje internih registara u stanje 00h, sa slijedećim izuzetcima:

P0, P1, P2 i P3 (izlazni registri svih spoljnih portova) se dovode u stanje 11111111b,

sadržaj registra SUBF se ne mijenja,

SP se dovodi u stanje 07h,

Sadržaj cijelog internog rama se ne mijenja

Najvažnija posljedica resetovanja mikrokontrolera je resetovanje programskog brojača (PC) tako da će se započeti izvršavanje programa od adrese 0000h.

Od 10 do 17 – Port 3:

Port 3 je 8- bitni univerzalni I/O port sa internim pullup otpornicima. Izlazni baferi porta 1 mogu da pogone četiri TTL ulaza. Kada se upiše jedinica na pin porta 3 pin je spojen na VCC internim pullup otpornikom i može se koristiti kao ulaz. Pinovi porta 3, takođe, imaju po još neku dodatnu specijalnu funkciju koju možemo vidjeti iz tabele 2.2.

Page 6: Mikrokontroler AT89C51/52

5

Tabela 2.2.

Pin porta Alternativna funkcija

P3.0 RxD - serijski ulaz za serijsku komunikaciju P3.1 TxD - serijski izlaz za serijsku komunikaciju P3.2 INT0 - ulaz za prekid 0 P3.3 INT1 - ulaz za prekid 1 P3.4 T0 – ulaz spoljnjeg takta za brojač 0 P3.5 T1- ulaz spoljnjeg takta za brojač 1 P3.6 WR - signal za upis u spoljnju memoriju P3.7 RD - signal za čitanje spoljnje memorije

18 i 19 - X1 i X2:

Izlaz i ulaz internog oscilatora. Ako se koristi kvarc kristala za stabilizaciju učestanosti oscilatora, što je najčešći slučaj, on se vezuje na ove dvije nožice, s tim sto se na svaku nožicu treba dodati po jedan kondenzator prema masi. Vrijednost kondenzatora može da bude u granicama od 20 ÷ 40pF. Dodavanjem ovih kondenzatora sprečava se oscilovanje na višim harmonicima. Opseg učestanosti oscilatora za AT89C52 kreće se u granicama od 0 ÷ 24MHz.

20 – masa.

Od 21 do 28 –Port 2 ili adrese A8 do A15:

Port 2 je 8- bitni univerzalni I/O port sa internim pullup otpornicima. Izlazni baferi porta 2, takođe, mogu da pogone četiri TTL ulaza. Ako se mikrokontroler koristi sa internom fleš memorijom, onda se ovaj port može koristiti kao bidirekcioni I/O pinovi. Međutim, ako se koristi spoljnja memorija onda pinovi ovog porta predstavljaju adresne izlaze A8 ÷ A15. U ovom slučaju preostale nožice porta 2 ne mogu se iskoristiti kao posebni I/O pinovi.

29 – PSEN (Program Select Enable):

Služi za aktiviranje spoljašnjeg EPROM-a i ovaj izlaz se spaja sa CS (OE) ulazom spoljnjeg EPROM-a. Mikrokontroler ga aktivira svaki put kad čita bajt iz programske memorije.

30 – ALE (Address Latch Enable):

Da bi se sve željene funkcije spakovale u željeno kućište od 40 nožica moralo se koristiti multipleksiranje nekih signala. Tako port 0 ima dvije funkcije: izlazne adrese A0 ÷ A7 i I/O podataka D0 ÷ D7. Prije svakog očitavanja iz spoljne memorije mikrokontroler na port 0 prosljeđuje niži bajt adresnog registra i aktivira izlaz ALE. Spoljni registar na visok nivo ALE signala memoriše stanje porta 0, a izlazi ovog, spoljnjeg, registra se koriste kao adresni signali A0 ÷ A7. u drugom dijelu mašinskog ciklusa port 0 se koristi kao magistrala podataka.

31 – EA (External Access):

Ako je ovaj ulazni signal nizak mikrokontroler će sve instrukcije čitati iz spoljašnjeg EEPROM-a. A u suprotnom prvih 8 kB će čitati iz interne fleš memorije, dok će sve preko 8 kB, do kraja adresnog prostora, čitati iz spoljnjeg EEPROM-a.

Od 32 do 39 – Port 0, Adrese A0 do A7 ili magistrala podataka D0 do D7:

Port 0 je 8- bitni univerzalni I/O port sa open drain izlaznim tranzistorima. Izlazni tranzistori mogu da se opterete sa osam TTL ulaza. Ako se ne korist spoljna memorija ovaj port može se koristiti kao univerzalni I/O. Ako se korist spoljnja memorija tada se vrši multipleksiranje adresnih signala i signala podataka kao što je rečeno kod objašnjenja signala ALE.

40 – Napajanje +5V.

Page 7: Mikrokontroler AT89C51/52

6

Hardverska struktura portova Kao što je prikazano, postoje četiri 8-bitna porta, pri čemu kod konfiguracija sa spoljnom

memorijom portovi P0 i P2 služe za adresiranje i pristup podacima iz memorije, a P1 i P3 su univerzalni i koriste se onako kako to konkretan projekat zahtjeva. Svi ulazi i izlazi su kompatibilni sa TTL standardom, a to praktično znači da možemo direktno da ih spojimo sa TTL, ili njima kompatibilnim kolima. Ipak neke specifičnosti portova treba imati u vidu kada se projektuje okruženje ovih mikrokontrolera.

Svi portovi su realizovani sa otvorenim drejnom (Open Drain), uz dodatni MOSFET tranzistor u spoju aktivnog otpornika prema napajanju (pull-up, oko 50kΩ), kao na slici 2.2. Ovakvo rješenje obezbjeđuje dobru logičku nulu (kada je izlazni tranzistor uključen). Kada je ovaj tranzistor isključen, tada samo aktivni otpornik određuje logičku jedinicu, pri čemu se odgovarajuća nožica ponaša i kao ulazni priključak, jer spoljašnje kolo može da obori napon na logičku nulu.

Slika 2.2. Pojednostavljen prikaz pina porta.

U slučaju kada se na izlaz porta postavlja logička jedinica, uključuje se kratkotrajno dodatni tranzistor preko ubrzavajućeg kola, čime je obezbijeđeno savlađivanje izlaznih kapacitivnosti.

Zavisno od tipa instrukcija, moguće je čitanje stanja izlazne nožice, ali i stanja izlaznog flip-flopa. Instrukcije koje samo čitaju port uzimaju informaciju o stanju direktno sa pina (označeno kao ″čitanje stanja nožice″), dok instrukcije koje modifikuju port pročitaju stanje, promijene ga i zatim ponovo upišu na port. Instrukcije koje modifikuju port pri čitanju uzimaju stanje izlaznog flip-flopa, a ne izlaznog pina. (označeno kao ″čitanje stanja izlaznog registra″). Ovakve instrukcije su pod nazivom ″Read-Modify-Write″, a primjeri su:

Primjeri instrukcija koje čitaju izlazno stanje registra:

ORL P1,#72h ; Port se pročita, uradi se logička operacija OR, a zatim se vrijednost u port upiše SETB P1.2 ; Port se pročita, postavi se jedan bit, a zatim se vrijednost upiše u port

Primjeri instrukcija koje čitaju izlazno stanje pina:

MOV A,P2 ANL C,P1.1

Page 8: Mikrokontroler AT89C51/52

7

3. Organizacija memorije

Memorijski adresni prostor mikrokontrolera AT89C52 je podeljen u dva osnovna dela:

adresni prostor rezervisan za programe (Code Address Space) i

adresni prostor rezervisan za podatke (Data Address Space).

Mikrokontroler može da adresira 64KB programske EPROM memorije, kao što možemo vidjeti sa slike 3.1.

INTERNE MEM.

ILI64 kB

2000h

1FFFh

SPOLJNE

FFFFh

8 kB

MEMORIJE

56 kB

0000h

MEMORIJESPOLJNE

Slika 3.1 Programska memorija.

Da li će se program izvršavati iz unutrašnje ili vanjske programske memorije zavisi od priključka EA. Ako je ovaj priključak povezan na masu, program će se izvršavati iz vanjske memorije. Ako je EA vezan na napajanje program će se, za adresni opseg od 0000H do 0FFFH (u slučaju mikrokontorolera AT89C51), izvršavati iz unutrašnje programske memorije. Za selekciju programske memorije koristi se PSEN signal mikrokontrolera. Visok nivo ovog signala omogućuje očitavanje iz memorije. Na slici 3.2. data je šema povezivanja spoljašnje programske memorije sa mikrokontrolerom AT89C51/52:

Slika 3.2 Povezivanje spoljašnje programska memorije sa mikrokontrolerom..

Page 9: Mikrokontroler AT89C51/52

8

Najniži dio programske memorije rezervisan je za programe za obradu prekida. Svakom prekidu dodijeljena je odgovarajuća početna adresa (sl. 3.3.).

Slika 3.3 Početne adrese prekida.

Memorija podataka je RAM tipa. Mikrokontroler AT89C52 ima internih 256 bajtova RAM-a. U slučaju potrebe za većim kapacitetom RAM-a može se izvršiti proširenje dodavanjem spoljašnjeg RAM-a do 64 kB (sl. 3.4). Prvih 128 bajtova internog RAM-a (Od 00h ÷7Fh) je slobodan prostor koji možemo direktno ili indirektno adresirati. U adresnom prostoru od 80h ÷ FFh vrši se preklapanje bloka SFR-a i gornjih 128 bajtova internog RAM-a. Ako koristimo direktno adresiranje onda se obraćamo SFR bloku registara, dok u slučaju indirektnog adresiranja obraćamo se gornjem dijelu internog RAM-a.

INDIREKTNO

RAM

64 kB

INDIREKTNOADRESIRANJE

80h

SFR

7Fh

SPOLJNEFFh

DIREKTNO

DIREKTNO I

ADRESIRANJE

MEMORIJE

00h 0000h

FFFFh

ADRESIRANJE

Slika 3.4 Memorija podataka.

Organizacija nižih 128 bajtova interne memorije za podatke prikazana je na slici 3.5. Najnižih 32 bajta u internoj memoriji grupisano je u 4 grupe od po osam registara. Instrukcije pozivaju ove registre sa R0-R7. Dva bita u registru stanja RS1 i RS0 definišu koja grupa registara je aktivna. Sljedećih 16 bajtova (od 20H do 2FH) formiraju blok memorijskog područja u kom je moguće adresiranje bita pomoću odgovarajućih instrukcija. Adrese bita su od 00H do 7FH. Ostalih 80 bajtova internog RAM-a je slobodan memorijski prostor.

Page 10: Mikrokontroler AT89C51/52

9

Slika 3.5 Organizacija interne memorije za podatke.

Povezivanje spoljašnje memorije za podatke sa mikrokontrolerom AT89C51/52 prikazano je na slici

3.6. Selekcija vanjske memorije za podatke vrši se preko RD i WR signala mikrokontrolera. Pristup vanjskoj memoriji za podatke je moguć isključivo indirektnim adresiranjem.

Slika 3.6 Povezivanje spoljašnje memorije za podatke sa mikrokontrolerom.

Page 11: Mikrokontroler AT89C51/52

10

U zoni interne memorije (u opsegu adresa od 80h do FFh) nalazi se blok specijalnih registara (SFR - Special Function Registers) u koji su smješteni svi registri koje mikrokontroler koristi (ACC, B, PSW kao i registri za kontrolu rada mikrokontrolera). SFR blok registara prikazan je sljedećom tabelom (tab. 3.1).

Tabela 3.1.

0F8h 0FFh 0F0h B

00000000 0F7h

0E8h 0EFh 0E0h ACC

00000000 0E7h

0D0h 0DFh 0D0h PSW

00000000 0D7h

0C8h T2CON 00000000

T2MOD XXXXXX00

RCAP2L 00000000

RCAP2H 00000000

TL2 00000000

TH2 00000000

0CFh

0C0h 0C7h OB8h IP

XX000000 OBFh

0B0h P3 11111111

0B7h

0A8h IE 0X000000

0AFh

0A0h P2 11111111

0A7h

98h SCON 00000000

SUBF XXXXXXXX

9Fh

90h P1 11111111

97h

88h TCON 00000000

TMOD 00000000

TL0 00000000

TL1 00000000

TH0 00000000

TH1 00000000

8Fh

80h P0 11111111

SP 00000111

DPL 00000000

DPH 00000000

PCON 0XXX0000

87h

4. Instrukcije

AT89C52 u potpunosti izvršava instukcijski set INTEL-ovog mikrokontrolera 8051, te stoga ima 111 instrukcija od kojih je 49 jednobajtnih, 45 dvobajtnih i 17 trobajtnih. Generalni format koji važi u svakom asembleru za ove instrukcije je slijedeći:

mnemonik odredište, izvor

Mnemonik nosi kod instrukcije, dok su odredište i izvor operandi koji nose podatke, ili adresu sa koje se pribavljaju podaci, na kojima se vrši operacija. Ako postoje dva operanda, onda se rezultat uvijek smiješta u prvi koji je naveden. Npr, ako instrukcija glasi: ADD A, B ; to je isto kao da smo u nekom višem programskom jeziku napisali: A = A + B.

Page 12: Mikrokontroler AT89C51/52

11

Instrukcioni set možemo podijeliti u slijedećih pet grupa instrukcija:

instrukcije za prenos podataka: MOV, MOVX, MOVC, PUSH, POP, XCH, XCHD;

aritmetičke instrukcije: ADD, ADDC, SUBB, INC, DEC, MUL, DIV, DA;

logičke instrukcije: ANL, ORL, XRL, CLR, CPL, RL, RLC ,RR, RRC, SWAP;

bulove instrukcije: CLR, SETB, CPL, ANL, ORL, MOV, JC, JNC, JB, JNB, JBC;

potprogrami i skokovi: ACALL, LCALL, RET, RETI, AJMP, LJMP, SJMP, JMP, JZ, JNZ, DJNZ, CJNE, NOP;

Mikrokontroler AT89C52 podržava sve četiri osnovne aritmetičke operacije nad osmobitnim brojevima (sa izuzetkom INC DPTR, koja uvećava vrijednost 16-bitnog registra). Sabiranje se može obavljati i sa BCD brojevima, kod kojih osmobitni registar nosi dvije odvojene decimalne cifre.

Instrukcije za prenos podataka

Sve instrukcije iz ove grupe obavljaju prenos 8-bitnog podatka, sa dva izuzetka: XCHD vrši

razmjenu 4-bitnog podatka, a MOV DPTR, #data upisuje 16-bitnu vrijednost u registr DPH i DPL.

Instrukcije čija svrha je upis bajta iz programske memorije ili komunikacija sa spoljnjim RAM-om imaju 16-bitno adresno polje. Prvi slučaj (upis bajta iz programske memorije u akumulator) uglavnom se koristi za lookup tabele, gdje se pozicija u tabeli izračunava iz bazne adrese početka tabele (obično se smješta u DPTR) i ofseta (koji je u akumulatoru), pa je zbog toga ova instrukcija unaprijed proširena i glasi:

MOVC A, @A+DPTR

Ona najprije sabere 16-bitni DPTR sa 8-bitnim akumulatorom, pa rezultat iskoristi za adresiranje programske memorije, pročita bajt i upiše ga u akumulator. Ako nam treba samo 16-bitno adresiranje bez ofseta, pre ove instrukcije treba upisati 0 u akumulator (npr. CLR A).

Instrukcija:

MOVC A, @A+PC

radi isto to, ali umjesto DPTR uzima 16-bitnu adresu sljedeće instrukcije u programu. Sljedeći potprogram uzima vrijednost člana pod rednim brojem koji je upisan u akumulator (u ovom slučaju od 0 do 4), iz lookup tabele koja slijedi odmah iza potprograma:

REL_PC: INC A MOVC A, @A+PC RET DB 27h DB 41h DB 00h DB 5Eh DB 7Fh

Instrukcija INC A je potrebna da bi se u kalkulaciji preskočila instrukcija RET, koja u programu zauzima jedan bajt. Ako ovdje ima još koda, onda broj njegovih bajtova treba sabrati sa akumulatorom. Instrukcije koje komuniciraju sa spoljnim RAM-om (MOVX) mogu svoje 16-bitno adresno polje da uzmu iz DPTR, ili kombinovanjem R2 (viši bajt) i R0 ili R1 (niži bajt).

Page 13: Mikrokontroler AT89C51/52

12

Tabela 4.1.Prenos podataka sa instrukcijama koje pristupaju internoj memoriji.

Tabela 4.2.Prenos podataka sa instrukcijama koje pristupaju spoljašnjoj memoriji.

Tabela 4.3.Instukcije za čitanje lookup tabela..

Aritmetičke instrukcije Mikrokontroler podržava sve četiri osnovne aritmetičke operacije. Samo je osmobitna aritmetika podržana (sa izuzetkom INC DPTR, koji uvećava stanje 16-bitnog registra) i to sa pozitivnim brojevima, mada carry fleg omogućava sabiranje i oduzimanje sa predznakom. Sabiranje može da se obavlja i sa binarno kodovanim decimalnim brojevima (BCD), kod kojih osmobitni registar nosi dvije odvojene decimalne cifre, svaku u po četiri bita.

Page 14: Mikrokontroler AT89C51/52

13

Tabela 4.4.Aritmetičke instrukcije.

ADD - sabira akumulator sa izvornim operandom i smješta rezultat u A. Bit C je deveti bit rezultata, zapravo bit prenosa za sabiranje višebajtnih brojeva. ADDC (ADD with Carry) - sabira akumulator sa izvornim operandom i sa bitom C, a rezultat smješta u akumulator. SUBB (subtract with borrow) - oduzima drugi operand od prvog (koji je uvjek u akumulatoru). Pošto instrukcija SUB (oduzimanje na koje bit C ne utiče) ne postoji u setu instrukcija mikrokontrolera, možemo da ga sintetišemo tako što prije SUBB izvedemo CLR C (C=0). MUL AB - množi dva 8-bitna broja bez predznaka, od kojih je jedan smješten u akumulator, a drugi u B registar i 16-bitni rezultat smješta u akumulator (niži bajt) i registar B (viši bajt). Pošto je ovdje rezultat 16-bitni, prekoračenje nije moguće pa je bit C uvjek resetovan, a bit OV je setovan ako je rezultat veći od 255 (odnosno ako je registar B veći od 0), a resetovan ako je B=0. DIV AB - dijeli akumulator sa registom B i cjelobrojni rezultat smješta u A, a ostatak dijeljenja u B. Dijeljenje sa nulom (ako je B=0) rezultira nepredviđenim sadržajem registara i u tom slučaju OV će biti setovan. Inače,u normalnom slučaju (kada je B>0) bitovi OV i C su resetovani. Logičke instrukcije CLR - resetuje navedeni bit, a CLR A resetuje sve bitove u akumulatoru. CPL - komplementira navedeni bit, dok CPL A komplementira se bitove u akumulatoru. SETB - setuje navedeni bit. RL - rotira nalijevo akumulator. Sedmi bit dolazi na mjesto nultog bita. Bit koji izlazi sa krajnje pozicije i ulazi sa druge strane kopira se i prenos C. RR - rotira nadesno akumulator. Nulti bit dolazi na mjesto sedmog bita. Bit koji izlazi sa krajnje pozicije i ulazi sa druge strane kopira se i prenos C. RLC (RRC) - rotira nalijevo (nadesno) akumulator preko bita C (9-bitna rotacija). Tako će bit C da se preseli u bit 0 (bit 7), a bit 7 (bit 0) u bit C. SWAP - rotira akumulator vrši zamjenu nižeg i višeg nibla akumulatora. ANL - izvodi logičku operaciju I između prvog i drugog operanda, a rezultat smješta u prvi operand. Ova operacija moguća je sa operandima koji imaju veličinu bajta ili bita. ORL - izvodi logičku operaciju ILI između prvog i drugog operanda, a rezultat smješta u prvi operand. Ova operacija moguća je sa operandima koji imaju veličinu bajta ili bita. XRL - izvodi logičku operaciju EXILI između prvog i drugog operanda, a rezultat smješta u prvi operand. Ova operacija moguća je sa operandima koji imaju veličinu bajta.

Page 15: Mikrokontroler AT89C51/52

14

Tabela 4.5.Logičke instrukcije nad bajtovima.

Tabela 4.6.Logičke instrukcije nad bitima.

Page 16: Mikrokontroler AT89C51/52

15

Potprogrami ACALL (Absolute Call) i LCALL (Long Call) - pozivaju potprograme na sljedeći način: prvo se 16- bitna adresa sljedeće instrukcije u programu stavi na stek, nakon čega se SP uveća za dva, a zatim se u PC se upisuje pridružena adresa koja stoji uz instrukciju za poziv potprograma. Ta adresa u slučaju poziva ACALL može da se nađe samo u istom bloku od 2kB u kome je i prva instrukcija poslje poziva (ona koja se stavlja na stek), a kod LCALL nema ograničenja jer je adresa 16-bitna. Razlog za ograničenje kod ACALL je taj što ova instrukcija zauzima samo dva bajta (prema 3 bajta koja zauzima LCALL), tj., 5 bitova zauzima kod instrukcije, pa tako za adresno polje ostaje samo 11 bitova. RET - izaziva akciju koja je inverzna instrukciji ACALL tj., sa steka se uzimaju dva bajta i smješta u programski brojač, nakon čega se SP umanjuje za dva. Ovo je povratak iz potprograma, jer će poslje ovog program nastaviti da se izvršava od instrukcije koja je sljedila iza poziva. RETI - radi isto što i RET, samo što se uz to omogućava i prekid tekućeg nivoa prioriteta. Ova je standardna instrukcija za povratak iz prekidnog potprograma. Bezuslovni skokovi AJMP (Absolute Jump) i LJMP (Long Jump) - prenosi pridruženu adresu u programski brojač, tako da će program nastaviti da se izvršava nadalje od te adrese. AJMP i LJMP su po broju bitova adrese analogni pozivima potprograma ACALL i LCALL. SJMP (Short Jump) - je dvobajtna instrukcija koja omogućava skokove u opsegu -128 do 127 u odnosu na sljedeću instrukciju u programu. Sem dužine skoka, razlika između SJMP i AJMP je u tome što SJMP - može da preskoči blok i veći od 2kB, dok AJMP može samo da skoči unutar 2kB. U tabeli, kod instrukcije „JMP addr“, reč JMP se odnosi na sve tri instrukcije skoka: AJMP, LJMP i SJMP.

Tabela 4.7.Bezuslovni skokovi

JMP @A+DPTR - skače na adresu koja se izračunava tako što se sabere 16-bitni registar DPTR sa ofsetom koji se nalazi u akumulator. Ovo je od koristi kod složenih grananja u potprogramu, kad od stanja akumulatora zavisi na koju adresu treba izvesti skok (tabelarni skokovi). Sljedeći program će izvesti skok na jednu od lokacija iz tabele JP_TAB, zavisno od stanja akumulatora:

MOV B,3 ; priprema za množenje MUL AB ; A=A*3, jer je dužina LJMP instrukcije 3 bajta MOV DPTR, #JP_TAB JMP @A+DPTR ; skok na željeno mjesto JP_TAB: LJMP SERVICE_A LJMP SERVICE_B LJMP SERVICE_C LJMP SERVICE_D

Svaka instrukcija u tabeli mora da zauzme po 3 bajta, a posebnu pažnju treba obratiti da akumulator na ulazu nema vrijednost veću od broja članova tabele umnoženog za 1 (u ovom primjeru A mora da bude u opsegu od 0 do 3, jer ima 4 instrukcije skoka).

Page 17: Mikrokontroler AT89C51/52

16

Uslovni skokovi Svi uslovni skokovi su mogući samo u opsegu -128 do 127 u odnosu na sljedeću instrukciju u programu, kao što je slučaj kod SJMP. Ako je potrebno skočiti na neku dalju tačku, treba blizu uslovnog skoka postaviti repetitor, koji se sastoji od instrukcije AJMP ili LJMP, i onda izvesti kratki uslovni skok na repetitor. Druga mogućnost je da se komplementira uslov i preskoči repetitor, kao u ovom primjeru, koji zamjenjuje JZ FAR_LAB:

Instrukcija:

JZ FAR_LAB

se zamjenjuje sekvencom:

JNZ LAB1 LJMP FAR_LAB

LAB1:

Bitovi koji mogu da se iskoriste za uslovne skokove:

• JZ (Jump on Zero) - izvršava skok ako je akumulator jednak nuli, • JNZ (Jump on Not Zero) - izvršava skok ako je akumulator različit od nule, • JC (Jump on Carry) - izvršava skok ako je fleg C setovan, • JNC (Jump on Not Carry) - izvršava skok ako je fleg C resetovan, • JB (Jump on Bit) - izvršava skok ako je navedeni bit setovan, • JNB (Jump on Not Bit) - izvršava skok ako je navedeni bit resetovan, • JBC (Jump on Bit and Clear bit) - izvršava skok ako je navedeni bit setovan i istovremeno

resetuje navedeni bit, • CJNE (Compare and jump if Not Equal) - poredi prvi operand sa drugim i skače ako su

različiti. Bit C će biti setovan ako je prvi operand manji od drugog, u suprotnom biće resetovan.

• DJNZ (Decrement and jump if Not Zero) - umanjuje operand za jedan, a ako je poslje umanjenja operand različit od nule, skače na navedenu adresu, dok u suprotnom ignoriše skok i nastavlja izvršenje programa od sljedeće instrukcije (slično instrukciji LOOP kod mikroprocesora 8086).

Tabela 4.8.Uslovni skokovi

Uticaj instrukcija na flegove U toku pisanja programa od velike je važnosti znati na koji način instrukcije utiču na flegove u

PSW registru. Neke instrukcije uopšte ne utiču na flegove C, OV i AC, pa te instrukcije nisu pomenute u tabeli 5.1.

Page 18: Mikrokontroler AT89C51/52

17

Tabela 4.9.

C OV AC

ADD X X X ADDC X X X SUBB X X X MUL 0 X - DIV 0 X - DA X - -

RRC X - - RLC X - -

SETB C 1 - - CLR C 0 - - CPL C X - -

ANL C,bit X - - ANL C,/bit X - - ORL C,bit X - - ORL C,/bit X - - MOV C,bit X - -

CJNE X - -

Legenda: - instrukcija ne utiče na fleg, 0 instrukcija resetuje fleg, 1 instrukcija setuje fleg, X fleg se mijenja zavisno od rezultata operacije.

Neke od instrukacija koje direktno mijenjaju sadržaj PSW registra, takođe će uticaće na flegove. Preostala dva flega, P (parnosti) i Z (nule) nisu fizički implementirani u PSW registru kao flip-

flopovi, nego su izlazi logičkih kola koja testiraju stanje akumulatora. Prema tome nema smisla navoditi kako instrukcije utiču na ove flegove, jer to zavisi samo od trenutnog stanja akumulatora.

Načini adresiranja

Kod mikrokontrolera AT89C52 razlikujemo sljedeće načine adresiranja:

registarsko adresiranje – Registarsko adresiranje omogućava pristup jednom od 8 registara (R0-R7) unutar jedne od 4 banke, akumulatoru ACC, B registru i DPTR. ( npr.: ADD A, R1).

direktno adresiranje – Direktno adresiranje omogućuje direktni pristup memoriji podataka. Samo 128 nižih bajtova internog RAM-a i registri specijalne namjene mogu biti direktno adresirani. (npr.: ADD A, 7Fh).

neposredno adresiranje - Neposredno adresiranje omogućuje da jedan neposredan podatak bude u sastavu instrukcije. (Npr.: ADD A, #10h).

indirektno registarsko adresiranje - Indireknto registarsko adresiranje koristi samo registre R0 i R1, određene registarske banke, za smeštaj adrese operanda ili DPTR u slučaju 16-bintne adrese operanda (Npr.: ADD A, @R1).

indeksno adresiranje - Indeksno adresiranje omogućava pristup podacima programske memorije i moguće je samo čitanje podataka. Ovaj način adresiranja namenjen je čitanju tabela iz programske memorije. Kao bazni registar se koristi DPTR ili PC (kao pokazivač na vrh tabele), dok se u akumulatoru nalazi pokazivač na elemente u tabeli. Adresa elementa u tabeli se formira sabiranjem podatka u akumulatoru sa baznom adresom iz DPTR ili PC. (Npr.: MOVC A, @A+DPTR).

Page 19: Mikrokontroler AT89C51/52

18

Lista instrukcija U nastavku dat je pregled svih instrukcija za mikrokontrolera AT89C51/52 sa mnemonikom, kratkim opisom operacije, brojem bajtova koje instrukcija zauzima u programskoj memoriji i vremenom koje je potrebno za izvršenje instrukcije, dato u broju taktova oscilatora. Skraćenice korišćenje u setu instrukcija:

Rn – registar R0-R7. direct – 8-bitna adresa lokacije na kojoj se nalazi podatak. Ovo može da bude u internom

RAM-u (0-255) ili neki od specijalnih registara (ne primjer neki port, upravljački registar, statusni registar, itd.).

@Ri – lokacija u internom RAM-u (0-255) adresirana 8-bitnim regisrom R0 ili R1. #data – 8-bitna konstanta neposredno pridružena u instrukciji. #data16– 8-bitna konstanta neposredno pridružena u instrukciji. #addr16– 16-bitna adresa, koja sljedi iza instrukacija LJMP ili LCALL. #addr11– 11-bitna adresa, koja sljedi iza instrukacija AJMP ili ACALL. Skok koji izvode ove

instrukcije je ograničen samo na zaokruženi blok od 2kB u kome se nalazi prvi bajt sljedeće instrukcije poslje AJMP ili ACALL.

rel – 8-bitni ofset bajt za adresiranje lokacije koja se nalazi u opsegu -128 do 127 u odnosu na adresu prvog bajta sljedeće instrukcije.

bit – direktno adresirani bit u internom RAM-u (u opsegu od 0 do 127, tj. na adresama interne memorije u opsegu 20h – 2Fh).

Aritmetičke operacije

Page 20: Mikrokontroler AT89C51/52

19

Logičke operacije

Prenos podataka

Page 21: Mikrokontroler AT89C51/52

20

Bulove operacije

Page 22: Mikrokontroler AT89C51/52

21

Potprogrami i skokovi

5. Tajmeri/brojači

Mikrokontroler AT89C52 ima tri šesnaestobitna tajmersko-brojačka registra. Označavaju se kao tajmer 0, tajmer 1 i tajmer 2. Tajmeri se mogu kofigurisati da rade u četiri moda rada, izuzetak je tajmer 2 koji može da radi u tri moda rada. Kada rade kao brojači, sadržaj tajmerskog registra se uvećava za jedan na svaku silaznu ivicu odgovarajućeg ulaza mikrokontrolera (T0 za tajmer 0, T1 za tajmer 1 i T2 za tajmer 2).

Maksimalna frekvencija ulaznog signala koju brojač može da prati je 24 puta manja od radnog takta mikrokontrolera. Kada rade kao tajmeri sadržaji tajmerskih registara se uvećava za jedan u svakom mašinskom ciklusu. Jedan mašinski ciklus traje 12 perioda radnog takta mikrokontrolera. Npr , ako je radni takt 24MHz, registri se uvećavaju svakih 500 ns. Svakom tajmeru pripadaju po dva osmobitna registra:

tajmeru 0: TH0 i TL0,

tajmeru 1: TH1 i TL1 i

tajmeru 2: TH2 i TL1.

Kontrola rada tajmera

Tajmer 1 i 0

Radom tajmera 0 i 1 upravlja se pomoću registara TMOD (sl. 5.1) i TCON (sl. 5.2), dok za

kontrolu tajmera 2 se koriste registri T2CON i T2MOD (sl. 5.3 i sl. 5.4).

Page 23: Mikrokontroler AT89C51/52

22

(MSB) (LSB) GATE C/T M1 M0 GATE C/T M1 M0

TAJMER 1 TAJMER 0

Slika 5.1 Registar TMOD.

Značenje pojedinih bita je sljedeće:

GATE – kontrola gejta. Kada je ovaj bit na jedinici odgovarajući tajmer može da broji kada je pripadajući TR bit jedinica i pripadajući INTx ulaz mikrokontrolera visok. Ako je vrijednost GATE bita 0, onda je dovoljno da odgovarajući bit TR bude visok.

C/T - ovaj bit određuje da li odgovatrajući tajmer radi kao brojač opadajućih ivica na

odgovarajućem T ulazu ( C/T = 1) ili kao tajmer ( C/T = 0).

M1 i M2 biti određuju mod rada odgovarajućeg tajmera prama tabeli 5.1.

Tabela 5.1.

M1 M0 Način rada (mod)

0 0 Mod 0 – tajmer radi kao 13-bitni brojač

0 1 Mod 1 – tajmer radi kao 16-bitni brojač

1 0 Mod 2 – tajmer radi kao osmobitni brojač. Brojački registar TL, nakon preticanja se puni sadržajem TH registra (auto reload)

1 1 Mod 3 – tajmer 1 je u ovom modu zaustavljen, a tajmer 0 radi kao dva odvojena osmobitna tajmera

Na sljedećoj slici (sl. 5.2) prikazana je struktura TCON registra:

(MSB) (LSB) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Slika 5.2 Registar TCON.

Značenje pojednih bita je sljedeće:

TF1 – zastavica preteka tajmera 1 automatski se briše kada se skoči na potprogram za opsluživanje prekida.

TR1 – postavljanje ovog bita tajmer 1 počinje da broji, dok u suprotnom ne broji.

TF0 – zastavica preteka tajmera 0 automatski se briše kada se skoči na potprogram za opsluživanje prekida.

TR0 – postavljanje ovog bita tajmer 0 počinje da broji, dok u suprotnom ne broji.

IE1 – zastavica detektovanog spoljašnjeg zahtjeva za prekidom 1. Kada je zahtjev detektovan postavlja se na jedinicu, a briše se automatski kada se skoči na potprogram za opsluživanje prekida.

IT1 – određuje da li je ulaz spoljašnjeg prekida osjetljiv na na opadajuću ivicu (IT1=1) ili na nizak nivo (IT1=0).

Page 24: Mikrokontroler AT89C51/52

23

IE0 – zastavica detektovanog spoljašnjeg zahtjeva za prekidom 0. Kada je zahtjev detektovan postavlja se na jedinicu, a briše se automatski kada se skoči na potprogram za opsluživanje prekida.

IT0 – određuje da li je ulaz spoljašnjeg prekida osjetljiv na na opadajuću ivicu (IT0=1) ili na nizak nivo (IT0=0).

Modovi rada tajmera Mod 0

Ovaj mod se rijetko koristi. Registar TL0 se koristi kao 5-bitni preskaler (djelitelj

učestanosti sa 32), a glavni brojač je TH0 koji radi kao 8-bitni brojač (sl. 5.3.). Kad se vrijednost u registru TH0 promjeni sa FFH na 00N generisaće se zahtjev za prekid. TL0 i TH0 su brojački registri tajmera 0, pri čemu je TL0 niži, a TN0 viši bajt. TL1 i TN1 su brojački registri tajmera 1.

Mod 1

U ovom modu brojači TL0 i TN0 su kaskadno povezani tako da rade kao 16-bitni

tajmeri/brojači (sl. 5.3.).

Slika 5.3 Mod 0 i 1 Tajmera 0 ili 1.

Mod 2

Kao brojač aktivan je samo TL0 i na prvi impuls poslije FFH generiše se zahtjev za prekid, ali brojač ne počinje od 00H već se sadržaj registra TH kopira u TL0 i brojanje se nastavlja od te vrijednosti. Zahtjev za prekid će se generisati na svakih 256 TH0 impulsa (sl.5.4.).

Page 25: Mikrokontroler AT89C51/52

24

Slika 5.4 Mod 2 Tajmera 0 ili 1.

Mod 3

Tajmer 1 je zaustavljen, a TL0 i TH0 rade kao dva zasebna brojača. TL0 radi kao u MOD0, osim što nema preskalera, a TH0 broji učestanost oscilatora podijeljenu sa 12 i pri promjeni stanja sa FFH na 00H generiše se zahtjev za prekid koji je inače namijenjen za tajmer 1. Od tajmera 1 je takođe pozajmljen upravljački signal TR1 koji određuje da li će brojač TH0 brojati ili ne (sl. 5.5.).

Slika 5.5 Mod 3 Tajmera 0.

Page 26: Mikrokontroler AT89C51/52

25

Tajmer 2

Tajmer 2 je 16 – bitni tajmer/brojač. Vrsta operacije je određena bitom C/T registra T2CON. Tajmer 2 ima tri moda rada: capture, auto-reload i baud rate generator. Mod se bira na osnovu sadržaja T2CON registra kao što je priloženo u tabeli 5.2.

Tabela 5.2.

RCLK + TCLK CP/RL2 TR2 MOD

0 0 1 16-bitni auto-reload 0 1 1 16-bitni capture 1 X 1 baud rate generator X X 0 isključen

Sada ćemo da opišemo sadržaj registra koji utiču na rad tajmera 2. Počećemo od registra T2CON koji je prikazan na slici 5.3.

(MSB) (LSB) TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T CP/RL2

Slika 5.3 Registar T2CON.

Uticaj pojedinih bita T2CON registra je slijedeći:

TF2 – zastavica preteka tajmera 2. U odnosu na TF0 i TF1 bite, ovaj bit se ne briše automatski kada se skoči na potprogram za opsluživanje prekida. Njegovo brisanje se mora izvršiti softverski svaki put kad se izvrši prelazak na program za obradu prekida. TF2 neće biti setovan ako je RCLK ili TCLK setovani.

EXF2 – vanjski bit tajmera 2 koji se setuje kada je tajmer u capture ili reload modu usljed negativne tranzicije na T2EX i kada je EXEN2 setovan. Kada je omogućen prekid tajmeru 2, setovanje bita EXF2 uzrokuje da obradu prekida tajmera 2. EXF2 mora se brisat softverski. EXF2 ne uzrokuje prekid kada je je tajmer 2 u brojačkom modu.

RCLK – omogućenje prijemnog takta. Kada je setovan, serijski port koristi impulse preteka tajmera 2 kao prijemni takt. Kada je resetovan u tu svrhu se koristi tajmer 1.

TCLK – omogućenje transmisioni takta. Kada je setovan, serijski port koristi impulse preteka tajmera 2 kao prijemni takt. Kada je resetovan u tu svrhu se koristi tajmer 1

EXEN2 – omogućenje izlaza tajmera 2. Kada je setovan dozvoljava da tajmer 2 uđe u capture ili reload mod usljed negativne tranzicije na pin T2EX, pod uslovom da se tajmer 2 ne koristi kao generator takta za serijski port. Ako je EXEN2 resetovan tajmer 2 ignoriše stanje na pinu T2EX.

TR2 – start/stop kontrola za tajmer 2. Setovanje TR2 startuje tajmer 2, dok u suprotnom se vrši zaustavljanje tajmera 2.

C/T – ovaj bit određuje da li odgovatrajući tajmer radi kao brojač opadajućih ivica na

odgovarajućem T ulazu ( C/T = 1) ili kao tajmer ( C/T = 0).

CP/RL2 – izbor capture/reload. Ako je setovan uzrokuje capture mod usljed negativne tranzicije na pinu T2EX i EXEN2 = 1. Ako je resetovan uzrokuje automatic reload mod tajmera 2 kada se pojavio pretek tajmera 2 ili se pojavila negativna promjena na T2EX za vrijeme kad je EXEN2 = 1. Kada je RCLK ili TCKL setovan, ovaj bit se zanemaruje i tajmer je primoran na auto reload mod u slučaju preteka tajmera 2.

Page 27: Mikrokontroler AT89C51/52

26

Na narednoj slici (sl. 5.4) prikazan je registar T2MOD:

(MSB) (LSB) - - - - - - T2OE DCEN

Slika 5.4 Registar T2MOD.

Značenje pojedinih bita T2MOD registra:

- – nije implementirano (rezervisano za buduću upotrebu)

T2OE – bit za omogućenje izlaza tajmera 2.

DCEN – kada je ovaj bit setovan onda je omogućeno da se tajmer 2 konfiguriše kao brojač gore/dole.

6. Sistem prekida mikrokontrolera AT89C52

U mikrokontreolerskim sistemima često je potrebno istovremeno pratiti rad više perifernih jedinica. To se može postići neprestanim prozivanjem jedne po jedne jedinice, provjeravajući njihova stanja. Ako se utvrdi da je došlo do neke promjene na nekoj od tih periferija na koju treba reagovati, preduzimaju se odgovarajuće akcije kao odgovor na promjene. Na primjer, nakon startovanja A/D konvertora neprekidno se vrši čitanja BUSY pina konvertora, koji označava da li je konverzija u toku ili je završena. Ako neko očitavanje pokaže da je konverzija završena, tada se očita odgovarajući podatak sa A/D konvertora. U ovom slučaju mikrokontroler je neprestano zauzet provjerom stanja na liniji BUSY A/D konvertora.

Drugi način praćenja rada više perifernih jedinica je da same jedinice jave kada je potrebno opsluživanje. Ta metoda se naziva metodom prekida, dok se prethodno opisana naziva metodom prozivanja (pooling). Dakle, kada se koristi metoda prekida, periferna jedinica posebnim signalom javlja kada je neophodna reakcija upravljačkog uređaja, tj. mikrokontrolera. Taj signal se zove zahtjev za prekidom odnosno interaptom (interrupt request). Slučaj iz prethodnog primjera bi se mogao riješiti povezivanjem BUSY pina konvertora na odgovarajući INT (spoljašnji prekid) pin mikrokontrolera. Kada se BUSY signal deaktivira izaziva se prekid. Nakon što mikrokontroler uvaži zahtjev, prelazi na podprogram za opsluživanje prekida (u ovom slučaju na čitanje vrijednosti konverzije), a nakon toga nastavlja se izvršavanjem programa gdje je prekinut u trenutku stizanja zahtjeva za prekidom. U ovom slučaju mikrokontroler se ne opterećuje provjerom stanja na periferiji nego samo izvodi odgovarajuću akciju kada je to potrebno. Iz ovoga je jasno da u ovom slučaju mikrokontroler potroši mnogo manje vremena za opsluživanje periferija, zbog čega program može biti mnogo efikasniji.

Izvori prekida

Mikrokontroler AT89C51 podržava pet, a AT89C52 šest izvora prekida (sl. 6.1.) i to:

spoljašnji prekid 0 i 1 – mikrokontroler posjeduje dva ulaza, INT0 i INT1, koji su dio porta 3. Na njih se može dovesti signal zahtjeva za prekidom sa bilo kojeg uređaja iz okruženja mikrokontrolera. Dva bita, IT0 i IT1 iz registra TCON određuju hoće li ulazi INT0 i INT1 biti osjetljivi na nizak nivo ili opadajuću ivicu. U oba slučaja važeći zahtjev za prekidom postavlja odgovarajući bit IE registra TCON na jedinicu. Setovanje ovih bita izaziva prelazak na odgovarajuću potprogram za opsluživanje prekida, naravno ako prekidi nisu maskirni. Bitovi IE0 i IE1 se automatski resetuju kada mikrokontroler pređe na obradu potprograma za obradu prekida. Adresa od koje počinje potprogram za obradu spoljašnjih prekida INT0 je 0003h, dok za spoljašnji prekid INT1 ta adresa 0013h.

prekidi tamera 0, 1 i 2 – preticanje tajmera 0, 1 i 2 u bilo kom modu može predstavljati zahtjev za prekidom. Preticanje tajmera setuje odgovarajuće TF bite označavajući da je došlo do

Page 28: Mikrokontroler AT89C51/52

27

preticanja. Ako je odgovarajući prekid dozvoljen prelazi se na potprogram za opsluživanje prekida pri čemu se automatski brišu flegovi TF0 i TF1, dok se TF2 mora softverski obrisati nakon prelaska na potprogram za obradu pekida tajmera 2, u zavisnosti od odgovarajućeg prekida. Potprogram za obradu prekida tajmera 0, 1 i 2 počinju od adresa 000Bh, 001Bh i 002Bh, respektivno. Mikrokontroler AT89C51 nema tajmer 2, pa stoga nema prekid usljed preteka tajmera 2.

prekid serijskog porta – u koliko je dozvoljen prekid serijskog porta zahtjev za prekidom će se desiti svaki put kada je završeno slanje/primanje riječi preko serijske veze. Potprogram za obradu serijskog prenosa počinje od adrese 0023h

Slika 6.1Izvori prekida kod mikrokontrolera AT89C51/52.

Procedura pozivanja potprograma za opsluživanje prekida

Potrebno je još razmotriti koko se tačno odvija priznavanje za prekidom i prelazak na potprogram za opsluživanje prekida. Nakon izvršenja svake pojedine instrukcije provjerava se stanje svih bita koji označavaju validan zahtijev za prekidom (IE0, TF0, IE1, TF1, TI, RI i TF2). Svaki od ovih bita može biti postavljen automatski, validnim zahtjevom za prekidom (uobičajena situacija), ili softverski, upisivanjem u odgovarajući registar (softversko izazivanje prekida) pri čemu je efekat isti. Ako se utvrdi da postoji zahtjev za prekidom, a pri tome:

• taj prekid nije maskiran,

• nije u toku opsluživanje prekida istog ili višeg prioriteta,

• instrukcija koja je sljedeća po redu nije RETI ili instukcija upisa u registre IE i IP,

tada se na stek stavlja sadržaj programskog brojača (PC – 16 bita), a sam programski brojač se puni adresom početka servisnog potprograma tog konkretnog prekida (registar PSW – registar stanja se NE čuva na steku). Početne adrese servisnih potprograma su fiksne i unaprijed zadate za svaku vrstu prekida:

Tabela 6.1. Vektori prekida.

Page 29: Mikrokontroler AT89C51/52

28

Servisni potprogram se obavezno mora završiti instrukcijom RETI koja sa steka skida posljednji gurnuti 16-bitni podatak i ubacuje ga u programski brojač, što je adresa instrukcije koja je trebalo da se izvrši kada je prekid nastupio. Dakle, nakon instrukcije RETI nastavlja se sa redovnim izvršavanjem programa. Važno je primijetiti da isto to radi i instrukcija RET samo što ona ne obaviještava hardver mikrokontrolera da je prekid opslužen te je instrukcija RETI obavezna. Dodatno, za razliku od naredbe RET, naredba RETI briše interne indikatore tekućeg prekida, čime su novi prekidi istog prioriteta dozvoljeni. Maskiranje prekida

Svaki od pomenutih prekida se može dozvoliti ili zabraniti (maskirati). Kada je prekid maskiran odgovarajući biti (TF0, TF1, TF2, IE0 i IE1) se setuju, ali to ne izaziva prelazak na odgovarajući potprogram za obradu prekida. Kontrola prekida se vrši preko registra IE (Interrupt Enable) koji je prikazan na slici 6.2.

(MSB) (LSB)

EA X ET2 ES ET1 EX1 ET0 EX0

Slika 6.2 Registar za maskiranje prekida (IE).

Značenje pojedinih bita registra IE je sljedeće:

EA – ako je ovaj bit resetovan svi prekidi su maskirani. U suprotnom svaki od prekida se može pojedinačno maskirati pomoću ostalih bita ovog registra.

ET2 – ako je ovaj bit setovan, onda je prekid usljed preticanja tajmera 2 dozvoljen, dok je u suprotnom maskiran.

ES – ako je ovaj bit setovan, onda je prekid serijskog porta dozvoljen, dok je u suprotnom maskiran.

ET1– ako je ovaj bit setovan, onda je prekid usljed preticanja tajmera dozvoljen, dok je u suprotnom maskiran.

EX1– ako je ovaj bit setovan, onda je spoljašnji prekid INT1 dozvoljen, dok je u suprotnom maskiran.

ET0 – ako je ovaj bit setovan, onda je prekid usljed preticanja tajmera 0 dozvoljen, dok je u suprotnom maskiran.

EX0 – ako je ovaj bit setovan, onda je spoljašnji prekid INT0 dozvoljen, dok je u suprotnom maskiran.

Struktura prioriteta prekida

Kod mikrokontrolera AT89C52 svaki prekid može imati dva nivoa prioriteta. Ako se prilikom

opsluživanja prekida desi novi prekid, opsluživanje prethodnog će se prekinuti samo ako je novi višeg prioriteta. Prioritet prekida određuje stanje registra IP (sl. 6.3). Ako je neki bit resetovan, onda je njemu odgovarajući prekid nižeg, dok je u suprotnm slučaju višeg prioriteta. U slučaju da dva (ili više) prekida nastupe istovremeno, prvo će se opslužiti prekid sa višim, a zatim sa nižim prioritetom. U slučaju da su oba prekida istog prioriteta, tada je redosled prioriteta fiksan i sledeći: spoljašnji prekid 0, tajmer 0, spoljašnji prekid 1, tajmer 1, tajmer 2 i na kraju prekid serijskog interfejsa. Naravno, ovaj redosled važi samo ako zahtevi za prekidom stignu istovremeno.

(MSB) (LSB)

X X PT2 PS PT1 PX1 PT0 PX0

Slika 6.3 Registar za kontrolu prioriteta prekida (IP).

Page 30: Mikrokontroler AT89C51/52

29

Značenje pojedini bita IP registra je sljedeće:

PT2 – setovanjem ovog bita prekid tajmera 2 se postavlja kao prekid višeg prioriteta,

PS – setovanjem ovog bita prekid serijskog porta se postavlja kao prekid višeg prioriteta,

PT1 – setovanjem ovog bita prekid tajmera 1 se postavlja kao prekid višeg prioriteta,

PX1 – setovanjem ovog bita prekid INT1 se postavlja kao prekid višeg prioriteta,

PT0 – setovanjem ovog bita prekid tajmera 0 se postavlja kao prekid višeg prioriteta,

PX0 – setovanjem ovog bita prekid INT0 se postavlja kao prekid višeg prioriteta.

7. Serijska komunikacija

Mikrokontroler AT89C52 posjeduje dupleksni serijski port, što znači da može da predaje i prima podatke istovremeno. Za baferovanje i kontrolu serijskog prenosa zaduženi su slijedeći registri:

SUBF – ovo je registar koji predstavlja bafer serijskih primljenjih ili poslanih podataka. Ovo su ustvari dva zasebna registra. U jednom registru se nalazi bajt koji je upravo stigao na serijskih port, dok drugi služi za upis bajta koji će biti poslat sa serijskog porta mikrokontrolera.

SCON – ovo je kontrolni registar serijskog prenosa.

Struktura SCON upravljačkog registra prikazana je na slici 7.1.

(MSB) (LSB) SM0 SM1 SM2 REN TB8 RB8 TI RI

Slika 7.1 SCON registar.

Biti SM0 i SM1 određuju mod u kojem radi serijski port prema sljedećoj tabeli 7.1.

Tabela 7.1.

SM0 SM1 Opis Brzina prenosa

0 0 Mod 0 – brza sinhrona komunikacija sa pomjeračkim registrom

/12oscf

0 1 Mod 1 – osmobitni asinhroni prenos (8 –bitni UART)

programibilna

1 0 9 – bitna asinhrona komunikacija (9 – bitni UART)

/ 32, / 64osc oscf f

1 1 9 – bitna asinhrona komunikacija (9 – bitni UART)

programibilna

Značenje ostalih bita SCON registra je sljedeće:

REN – kada je postavljen na jedinicu omogućava prijem serijskih podataka.

TB8 – ovaj bit predstavlja deveti bit koji će biti poslan u modovima 2 i 3. Najčešće je to bit parnosti.

RB8 – u ovaj bit se smiješta deveti primljeni bit u modovima 2 i 3.

TI – ovaj bit se hardverski postavlja na kraju slanja osmog bita u modu 0, tj., na kraju slanja stop bita u ostalim modovima.

RI – ovaj bit se automatski postavlja na kraju prijema osmog bita u modu 0, tj., na kraju prijema stop bita u ostalim modovima.

Page 31: Mikrokontroler AT89C51/52

30

Modovi serijskog prenosa

Mod 0 – ovaj mod nije namijenjen za standardnu asinhronu komunikaciju, već se koristi za

proširenje ulaznih i izlaznih portova pomoću pomjeračkih registara. Ulaz/izlaz serijskih podataka se vrši preko pin RxD, dok se distribucija takt signala vrši preko pina TxD. Brzina serijskog prenosa je fiksna i iznosi dvanaestinu frekvencije oscilatora.

Mod 1 – u modu 1 vrši se slanje/primanje deset bita preko pina TxD/RxD. Prvi bit je start bit koji je uvijek nula, zatim slijedi osam bita podataka koji završavaju stop bitom koji je uvjek jedan (sl.7.2). Pri prenosu prvo se vrši predaja/prijem bita najmanje težine. Brzina serijskog prenosa u ovom modu je programibilna.

Slika 7.2 MOD 1 serijskog prenosa.

Mod 2 i 3 – u ovim modovima se vrši predaja/prijem jedanaest bita prako pinova TxD/RxD. Kao i u modu 1, prvi bit je startni koji je nula, zatim osam bita podataka (prvo ide prijem/predaja bita najmanje tažine), pa deveti bit koji se upisuje u RB8 iza koga slijedi stop bit koji je uvijek jedan (sl.7.3). U modu 2 brzina serijskog prenosa je fiksna i iznosi / 32oscf pri SMOD = 1, odnosno

/ 64oscf za SMOD = 0.

Slika 7.3 MOD 2 i 3 serijskog prenosa.

Brzina serijskog prenosa

Ako tajmer 1 koristimo za generisanje brzine serijskog prenosa potrebno je isključiti prekid

tajmera 1 i programirati ga tako da radi u modu 2 (auto reload). U tom slučaju za određivanje brzine serijskog prenosa važi relacija (7.1), tj.:

2

12 32 (256 1)

SMOD

oscfBRZINA

TH

⋅=

⋅ ⋅ −. (7.1)

Brzina se izražava u bitima po sekundi [b/s].

Page 32: Mikrokontroler AT89C51/52

31

Povezivanje mikrokontrolera AT89C52 serijskom vezom sa računarom

Šema povezivanja mikrokontrolera sa personalnim računarom prikazana je na slici 7.2. Priključci

serijskog porta PC računara, takođe, su prikazani u tabeli 7.2.

C4 10u

U1

AT89C52

9

18

19 29

30

31

1

2

3

4

5

6

7

8

21

22

23

24

25

26

27

28

10

11

12

13

14

15

16

17

39

38

37

36

35

34

33

32

RST

XTAL2

XTAL1 PSEN

ALE/PROG

EA/VPP

P1.0/T2

P1.1/T2-EX

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

P2.0/A8

P2.1/A9

P2.2/A10

P2.3/A11

P2.4/A12

P2.5/A13

P2.6/A14

P2.7/A15

P3.0/RXD

P3.1/TXD

P3.2/INTO

P3.3/INT1

P3.4/TO

P3.5/T1

P3.6/WR

P3.7/RD

P0.0/AD0

P0.1/AD1

P0.2/AD2

P0.3/AD3

P0.4/AD4

P0.5/AD5

P0.6/AD6

P0.7/AD7

C2

4.7u

VCC

C3

10u

P1

CONNECTOR DB9

5

9

4

8

3

7

2

6

1

C1

4.7u

U2

MAX232

13

8

11

10

1

3

4

5

2

6

12

9

14

7

R1IN

R2IN

T1IN

T2IN

C+

C1-

C2+

C2-

V+

V-

R1OUT

R2OUT

T1OUT

T2OUT

Slika 7.2 Povezivanje mikrokontrolera sa PC računarom.

Tabela 7.2.

BR

PINA OZN. IME FUNKCIJA

3 TD Transmit Data Izlaz za podatke koji se šalju serijskim putem

2 RD Receive Data Ulaz za podatke koji se šalju serijskim putem

8 CTS Clear to Send Preko ovog priključka komunikacioni uređaj potvrđuje da je spreman za razmjenu podataka

1 DCD Data Carrier Detect Preko ovog priključka (linije) se detektuje postojanje nosećeg signala ili nosioca

6 DSR Data Set Ready Preko ove linije komunikacioni uređaj obavještava serijski port (UART) da je spreman za uspostavljanje veze

7 RTS Request to Send Zahtjev za razmjenu podataka

4 DTR Data Terminal Ready Serijski port je spreman za povezivanje sa komunikacionim uređajem

5 SG Zajednička masa

Page 33: Mikrokontroler AT89C51/52

32

8. Asemblerske direktive

Asemblerske direktive ne generišu objektni kod, ali imaju određene funkcije u realizaciji asemblerskog programa. Direktivama se pojednostavljuje pisanje programa čime se povećava i njegova preglednost. Skup podržanih asemblerskih direktiva zavisi od asemblera koji se koristi. Ovde će biti opisane neke koje se najčešće koriste:

EQU – ova direktiva dodjeljuje numeričku vrijednost simbolu. Numerička vrijednost koja je ovom direktivom dodijeljena ne može se redefinisati u programu (npr. učestanost EQU 50). Ovo se koristi da bi program bio pregledniji.

SET – ova direktiva ima istu funkciju kao i EQU, ali omogućava redefinisanje vrijednosti konstante proizvoljan broj puta.

BIT – dodjeljuje adresu bita navedenom simbolu.

DATA – simbolu se dodjeljuje vrijednost memorijske lokacije.

ORG – definiše vrijednost prograskog brojača (npr. ORG 250h).

DB – upisuje navedenu vrijednost bajta u programsku memoriju.

DS – rezerviše prostor u memoriji izražen u bajtovima (npr. DS 7 ; rezerviše 7 bajtova).

DW – upisuje 16-bitnu vrijednost u programsku memoriju, prvo upisuje viši pa onda niži bajt.

CSEG – označava da se naredni segment odnosi na programsku memoriju.

XSEG – označava da se naredni segment odnosina spoljni RAM.

DSEG – označava da se naredni segment odnosi na interni RAM.

ISEG – označava da se naredni segment odnosi na gornji dio internog RAM-a koji se može isključivo adresirati indiraktno pomoću registara R0 i R1.

9. Mikrokontroler i spoljni periferni uređaji

Često je u praksi za rad mikrokontrolerskog sistema potrebni i dodatni perifereni uređaji koji nisu u sastavu mikrokontrolera.

POVEZIVANJE TASTATURE I SEDMOSEGMENTNOG DISPLEJA SA

MIKROKONTROLEROM

Na slici 9.1. prikazan je primjer povezivanja jednog sedmosegmetnog displeja i jednog tastera sa mikrokontrolerom. Kada taster nije pritisnut na pinu P3.2 je visok logički nivo. Kada se pritisne taster pin P3.2 se preko tastera spaja na masu, tj., dovodi se logička nula na taj pin. Kondenzator C služi da eliminiše varničenja koja se javljaju u trenutku pritiska tastera. Ova varničenja, ako se ne eliminišu, mogu da se protumače kao višestruko pritiskanje tastera što može prouzrokovati problem u funkcionisanju cijelog sistema. Osim hardverske eliminacije varničenja tastera, moguće je i softverski eliminisati taj uticaj. Softverska eliminacija efekata varničenja sastoji se u čekanju između 10 i 20 ms (ovo je vrijeme kada se nastanu oscilacije nastale usljed varničenja tastera) nakon kada se prvi put utvrdi pritisak tastera. Nakon isteka ovog vremena očita se ponovo stanje tastera i na osnovu toga izvršava se akcija definisana funkcijom tastera.

Za pogon sedmosegmentnog displeja koristi se NBCD/7s dekoder, koji u svom sastavu često ima i leč za memorisanje NBCD broja na svom ulazu, i drajver koji ima odgovarajući strujni kapacitet za pogon segmenata displeja. Otpornici od R1 do R7 služe da ograniče struju kroz segmente na

Page 34: Mikrokontroler AT89C51/52

33

dozvoljenu vrijednost. Na primjer, ako je dozvoljena kontinulana vrijednost struje kroz segmente 20 mA, vrijednost otpornika možemo odrediti na sljedeći način:

5 2150

20 20LED

Vcc VR

mA mA

− −= = = Ω ,

gdje je VLED pad napon na segmentima displeja (na LED diodi) i se kreće oko 2V, ali za tačnu vrijednost ovog napona potrebno je konsultovati datasheet korištenog sedmosegmentnog dispelja.

Slika 9.1. Povezivanje tastera i sedmosegmentnog displeja.

U praksi mnogo češće je potrebno koristiti više sedmosegmentnih displeja za prikazivanje numeričkih znakova. Kada se koristi više sedmosegmentnih displeja onda se prisupa multipleksorskom modu prikazivanja znakova na displeju. Na slici 9.2 prikazan je način vezivanja dva sedmosegmenta displeja sa mikrokontrolerom u modu multipleksiranja. Princip prikazivanja zanakova na displejima je sljedeći:

1. Na port P1 generiše NBCD kod znaka koga želimo prikazati, nakon čega uključimo tranzistor displeja na koji želimo da prikažemo znak,

2. Napravimo kašnjenje, 3. Isključimo tranzistor displeja na koji smo prikazivali cifru, na port P1 generišemo NBCD kod

znaka koga želimo prikazati na drugom displeju, nakon čega uključimo njegov tranzistor setovanjem odgovarajućeg pina.

4. Napravimo kašnjenje, 5. Isključimo tranzistor displeja na koji smo prikazivali cifru, nakon čega ponavljamo postupak

od početka.

Treba napomeniti da kašnjene ne treba da bude isuviše veliko, jer bi u tom slučaju frekvencija ispisa na displejima bila isuviše mala što bi prouzrokovalo vidljivo treperenje displeja. Multipleksiranjem se postiže ušteda u broju potrebnih pinova mikrokontrolera za rad sa displejima, a i broju dodatnih komponeneta. Međutim, kada se koristi multipleksiranje potrebno je povećati struju kroz segmente da bi se zadržao intenzitet svjetlosti segmenta, koji se smanjuje usljed multipleksiranja. U ovom slučaju neophodno je povećati struju kroz segmente za dva puta, tj. na 40mA, da bi svijetlili kao displej sa slike 9.1. koji se ne multipleksira. Sa povećanjem struje ne može se ići preko 100mA kroz segmente, jer bi u suprotnom došlo do unuštenja segmenta.

Page 35: Mikrokontroler AT89C51/52

34

Slika 9.2. Povezivanje sedmosegmentnog displeja za multipleksorski način rada.

SMART LCD

Poslednjih godina sve je više uređaja koji za indikaciju i vizuelizaciju svog rada koriste takozvane pametne displeje sa tečnim kristalom - 'Smart LCD'. Tamo gde su nekad bili analogni ili digitalni instrumenti (npr. izvori napona i struje, punjači baterija ...) danas stoje pametni LCD-i. Postoji mnogo vrsta ovih displeja, a najčešći u upotrebi su matrični tačkasti sa jednim, dva ili četiri reda. Mogu da imaju pozadinsko osvetljenje, ima ih koji rade i u grafičkom režimu. Izgled tipičnog smart LCD-a dat je na slici 9.3.

Slika 9.3. Tipičan smart LCD.

Obično imaju po 14 priključnih pinova od kojih su 2 za napajanje (jednostrano, 5V), jedan za podešavanje kontrasta, 3 su kontrolna, a preostalih 8 su data bitovi. Mogu da se povezuju sa svim mikrokontrolerima (Intel, Motorola, National Semiconductor, Microchip itd). Raspored pinova tipičnog pametnog LCD-a je dat u tabeli 1.

Page 36: Mikrokontroler AT89C51/52

35

Tabela 1. Pinovi pametnog LCD-a

Upotreba pametnih displeja je jednostavna. Postoji dvosmerni data bus i 3 kontrolna pina. Generisanjem negativne (opadajuće) ivice na kontrolnom pinu E (enable) vrši se upis u LCD ili iščitavanje iz njega. Pomoću pina RW (read, write) kontrološe se upis ili čitanje - 1 je za READ, 0 za WRITE. Treći kontrolni RS pin određuje da li se obraćamo instrukcijskom ili data registru. Upisom podataka u instrukcijski registar (RS = 0) definiše se na kom mestu na LCD-u treba da se pojavi karakter, može se obrisati ceo ekran, postaviti ili ukinuti kursor itd (vidi tabelu 2). Kada je RS = 1, vrši se upis ili čitanje iz DDRAM-a (Display Data Ram) ili CG RAM-a (Character Generator Ram). Upisom u DDRAM podaci se prikazuju na ekranu LCD-a. CGRAM sadrži matrične tačkaste prikaze karaktera koji se mogu ispisati na displeju. Sadržaj CGRAM-a je moguće softverski menjati, tako da se mogu prikazati i karakteri po želji korisnika. Pin broj 3 je obično pin za kontrolu kontrasta. Na slici 9.3. dat je način njegovog povezivanja, ali je najčešće najjednostavnije povezati ga na masu preko otpornika od nekoliko kilooma čiju vrednost treba odrediti experimentalno na osnovu uputstva proizvođača.

Slika 9.4. Adrese DD RAM-a

Na slici 9.4. prikazani su tipični jednoredni i dvoredni LCD. Na slici su takođe i adrese vidljivih mesta na LCD-u na koja se ispisuju karakteri, a koje se upisuju u instrukcijski registar (DD RAM). Primećuje se da tamo gde sledeći red počinje, prethodni ne završava. U stvari postoje mesta za ispis koja se ne vide i nalaze se u produžetku reda, i koriste npr. kada želimo da prikažemo neku poruku u pomeračkom (shift) modu. Tako npr. dvoredni displej ima dva reda po 16 (trenutno) vidljivih karaktera i još 24 nevidljiva. Interesantno je da se 16-karakterni jednoredni displej sastoji od po dva 32-karakterna (od kojih su 8 vidljivi) reda koji se nastavljaju jedan na drugi.

Page 37: Mikrokontroler AT89C51/52

36

Povezivanje pametnog LCD-a sa mikrokontrolerom 8051

Na žalost, pametni displeji koji se mogu lako nabaviti po nižim cenama su prespori da bi se mogli “mapirati” u adresni prostor kontrolera koji radi npr. na 12Mhz. Na prvi pogled, za jedan pametni LCD potrebno je “potrošiti” čak 11 pinova nekog mikrokontrolera. Ako se uzme npr. Intelov 8051, kada odbacimo pinove RD, WR, RXD, TXD, na rasploganju ostaje 4 pina porta P3 i ceo port P1. Posle priključivanja 11 pinova LCD-a, ostaje slobodan samo jedan pin. Ipak, pametni LCD zaslužuje pridev pametan. Negov data bus ima 8 pinova, ali LCD može da radi i sa 4-bitnim data interfejsom. Ovo znači da se LCD može povezati na mikrokontroler sa samo 7 pinova. Ako se LCD koristi samo za prikaz podataka, a ne i za iščitavanje, pin RW se može povezati na masu i broj pinova je tako smanjen na 6. Primer povezivanja pametnog LCD-a na mikrokontroler 8051 sa maksimalnim i minimalnim brojem žica dat je na Slici 9.5. i 9.6.

Slika 9.5. Povezivanje pametnog LCD-a na mikrokontroler 8051 sa maksimalnim brojem žica

U vezi ne korišćenja RW pina treba nešto reći. Naime, “regularno” upravljanje LCD-om zahteva da, slično kao kod npr. AD konvertora, proveravamo Busy bit LCD-a. To znači da sve dok LCD ne spusti Busy bit na nulu i time stavi do znanja da je završio sa prethodnim poslom koji mu je zadat, ne može mu se (uspešno) pristupiti.

Slika 9.6. Povezivanje pametnog LCD-a na mikrokontroler 8051 sa minimalnim brojem žica

Page 38: Mikrokontroler AT89C51/52

37

Da bi se proverilo stanje Busy bita (koji je u stvari bit 7 data busa LCD-a) mora se koristiti mod iščitavanja, tj. potreban je i RW pin. Međutim, ovo se može rešiti na zadovoljavajući način tako što se umesto proveravanja Busy-ja ubacuju softverska kašnjenja dovoljno duga da za to vreme LCD može da odradi prethodni posao. Ovo rešenje je na prvi pogled malo rogobatno, ali rad je sasvim pouzdan. U vezi provere Busy-ja jedan savet. Naime, provera Busy-ja se može izvesti na sledeći način (za mikrokontroler 8051):

... setb Busy čekaj: jb Busy,čekaj itd ...

Ukoliko LCD otkaže ili mu jednostavno otpadne neka žica, program može zauvek ostati u petlji kojom se proverava stanje Busy-ja. Ako je cela svrha uređaja koji koristi LCD sam LCD, tj. prikaz na njemu, onda to i nije tako strašno, jer u slučaju kvara LCD-a uređaj inače ne obavlja svoju funkciju. Međutim ako postoje važniji poslovi koji se obavljaju (kontrola nekog procesa npr.) onda zaglavljivanje programa zbog Busy-ja i nije tako bezazleno. Doduše, zaštita je moguća i u ovom slučaju, tako što se postavi vremensko ograničenje ispitivanja Busy-ja, ali to nas opet dovodi do softverskog kašnjenja.

SENZORI TEMPERATURE

KTY81-120 Ovo je analogni senzor temperature. U stvari riječ je o PTC otporniku čija je radna temperatura u granicama od -55 do 150 °C. Na slici 9.7. a. prikazan je izled kućišta temperaturnog senzora KTY81-120, dok je na slici 9.7.b. data oblast njegovog sigurnog rada sa koje se može vidjeti da sa povećanjem temperature da se smanjuje dozvoljena vrijednost struje kroz senzor. Na slici 9.7.c. data je grafička zavisnost otpornosti od temperature, dok je u Tabeli 9.1 ta zavisnost prikazana tačnije. Sa slike 9.7.c. vidimo da ta zavisnost nije linearna u čitavom radnom opsegu.

Slika 9.7. a) Kućušte senzora; b) Oblast sigurnog rada; c) Grafička zavisnost otpornosti senzora od temperature.

b) c)

a)

Page 39: Mikrokontroler AT89C51/52

38

Na slici 9.8.a. prikazano je odstupanje vrijednosti otpornosti senzora za slučaj kada kroz njega teče struja koja je različita od 1mA. Na slici 9.8.b prikazana je principijelna šema upotrebe senzora KTY81. naime, kroz njega se pomoću strujnog generatora propušta struja od 1mA, a napon sa njegovih krajeva vodi se na ulaz A/D konvertora. Pošto senzor pobuđujemo sa konstatnom strujom (od 1mA) napon na njegovim krajevima isključivo zavisi od njegove otpornosti. Pošto otpornost zavisi od temperature, to znači da će i napon na njegovim krajevima zavisiti od temperature. Iz tabele 9.1. vidimo da je tipična otpornost senzora na temperaturi od 250C 1kΩ, što će pri struji od 1mA na njegovim krajevima dati napon od 1V.

1mA

t

KTY81

PTC

Ka A/D konv ertoru

Slika 9.8. a) Odstupanje nominalne vrijednosti otpornosti od struje kroz senzor; b) Principijelna šema upotrebe senzora

KTY81.

Tabela 9.1.

a) b)

Page 40: Mikrokontroler AT89C51/52

39

DS1822 DS1822 je digitalni senzor temperature, što znači da ima digitalni interfejs prema mikrokontroleru i za njegov rad nije potreban A/D konvertor. Izgled njegovog kućišta prikazan je na slici 9.9.a., sa koje možemo vidjeti da posjeduje tri nožice, dok je na slici 9.9.b. prikazana njegova blok-šema. Za komunikaciju sa mikrokontrolerom ovaj senzor koristi jednožični interfejs (pin DQ), koji omogućava povezivanje više senzora na istu magistralu (žicu), dok su druga dva pina predviđene za napajanje (pinovi Vcc i GND). Za njegov rad nisu potrebne dodatne komponente, a radni opseg kreće mu se u granicama od -550C od 1250C, sa programljivom rezolucijom koja može da bude između 9 i 12 bita. Napon napajanja može da se kreće u granicama između 3 i 5.5V. Ovaj senzor ima mogućnost ”parazitnog” napajanja preko linije podataka tako da je za njegovo funkcionisanje dovoljno i dvije žice prema mikorkontroleru (linja za podatke DQ i masa GND). Međutim, ovaj način napajanja preporučuje se do temperatura koje ne prelaze 1000C.

Slika 9.9. a) Kućušte senzora; b) Blok-šema senzora DS1822.

Ovaj senzor ima mogućnost generisanja alarm signala koji se generiše kada se prekorače programirani temperaturni pragovi (viši ili niži temp. prag). Format temperaturnog registra prikazan je na slici 9.10.a. Negativne vrijednosti temperature prikazuju se u formi drugog komplementa. Na slici 9.10.b. prikazana je veza između nekih vrijednosti temperature i digitalne riječi koju generiše senzor.

Slika 9.10. a) Format registra temperature; b) Primjer zavisnosti dig. riječi od temperature.

DS1620 DS1620 takođe je digitalni senzor temperature. Izgled njegovog kućišta prikazan je na slici 9.11.a., a njegova blok-šema na slici 9.11.b. Ovaj senzor se sa mikrokontrolerom povezuje pomoću tri pina (žice) i to:

• DQ-pin za serijski prenos podataka,

• CLK/ CONV - za takt signal i

• RST - pin za resetovanje senzora.

a) b)

a) b)

Page 41: Mikrokontroler AT89C51/52

40

Ovaj senzor generiše 9-bitni podatak sa greškom od 0.50C. Izlazi THIGH, TLOW i TCOM služe za rad u termostatskom režimu. Senzor DS1620 ima mogućnost programiranja viskog i niskog temperaturnog praga i kada se prekorače vrijednosti ovih pragova na odgovarajućim izlazima generiše se visok logički nivo. Za rad u termostatskom modu, nakon programiranja željenih pragova, nije potreban mikrokontroler, tj., ovaj senzor može samostalno da funkcioniše ka termostat.

Slika 9.11. a) Kućušte senzora; b) Blok-šema senzora DS1620.

Negativne vrijednosti temperature prikazuju se u formi drugog komplementa. U tabeli 9.2. prikazana je veza između nekih vrijednosti temperature i digitalne riječi koju generiše senzor.

STEP MOTORI Step motori nalaze najveću primenu u digitalnom upravljanu. Ta prednost se ogleda u činjenici da se koračnim motorima upravlja pomoću digitalnih signala. Posjeduju visoku tačnost pozicioniranja, pa su nezamjenljivi u primjenama u kojima je tačnost od velikog značaja: roboti, štampači, disk jedinice, ploteri i sl. Izrađuju se u dvije varijante:

• sa stalnim magnetom (unipolarne i bipolarne step motore) i • sa rotorom od mekog magnetnog materijala (hibridni step motori).

Češće se koriste koračni motori sa stalnim magnetom, jer imaju bolje statičke i dinamičke karakteristike, kao i visoku efikasnost. Takođe, imaju i sopstveni moment držanja u nepobuđenom stanju. Step motore možemo podijeliti i na:

• unipolarne step motore - Karakteriše ih srednji izvod na namotaju statora (slika 9.12.a), • bipolarni step motori - Projektovani su sa odvojenim namotajima statora (slika 9.12.b), • hibridni step motori - Karakteriše ih zajednička tačka svih namotaja (slika 9.12.c).

Tabela 9.2.

a) b)

Page 42: Mikrokontroler AT89C51/52

41

Slika 9.12. a)Uunipolarni step motor; b) Bipolarni step motor; c) Hibridni step motor.

Obrtanje koračnog motora sastoji se iz velikog broja koraka. Koliko koraka ima u jednom punom okretu rotora zavisi od konstrukcije motora. U tabeli 9.3. prikazana je veza između broja koraka i ugla koraka.

Tabela 9.3.

Step motor može da radi u jednom od tri moda:

• jednofaznom, • dvofaznom i • polukoračnom modu.

Jednofazni način rada step motora Predpostavimo da imamo step motor sa četiri namotaja. U monofaznom modu za svaki korak dovodi sa napon samo na jedan namotaj što je dato na slici 9.13. Budući da se napaja samo jedan namotaj to je i mali pokretni momenat motora.

Slika 9.13.Jednofazni mod rada step motora.

Dvofazni način rada step motora U dvofaznom modu napajaju se po dva namotaja istovremeno. Ovo je i najčešći postupak koji se primenje jer je tada i obrtni momenat motora najveći. Ovaj način rada prikazan je na slici 9.14.

a) b) c)

Page 43: Mikrokontroler AT89C51/52

42

Slika 9.14.Dvofazni mod rada step motora.

Polukoračni način rada step motora U modu polukoraka se smjenjuje dvofazno sa jednofaznim napajanje motora i tako naizmenično (slika 9.15.). Na ovaj se način postiže dvostruko veći broj koraka step motora. Njegova je glavna mana promenljivi momenat.

Slika 9.15.Polukoračni mod rada step motora.

Koračni motori, u stvarnosti, imaju veliki broj koraka po jednom krugu. Da bi se malim brojem faza postigao veliki broj koraka po krugu, rotor i stator se izrađuju sa zupčastom strukturom po obodu (slika 9.16.). Zupci su raspoređeni tako da se u jednom koraku zupci rotora poklapaju samo sa zupcima jedne faze statora (na primjer prve faze). Zupci druge faze pomjereni su u odnosu na zupce rotora za četvrtinu periode jednog zupca, zupci treće faze za pola periode, a zupci četvrte faze za tri četvrtine periode.U sljedećem koraku zupci rotora se poklapaju sa zupcima druge faze, a pomjereni su u odnosu na ostale faze. Nakon završene jedne periode uključivanja prekidača rotor neće opisati puni krug. Da bi se opisao puni krug, potrebno je onoliko perioda koliko ima zubaca po obodu.

Slika 9.16.Konstrukcija step motora.

Page 44: Mikrokontroler AT89C51/52

43

Veoma važan parametar koračnog motora je najveća brzina koračanja pri kojoj neće doći do greške u pozicioniranju. Ova brzina zavisi i od opterećenja motora, pa se zato daje karakteristika zavisnosti momenta od ugaone brzine (slika 9.17.).

Slika 9.17. Momentna karakteristika step motora.

Izlazni portovi mikrokontrolera na mogu direktno pogoniti step motor. Iz tog razloga potreban je snažniji drajver koji ima dovoljan struni kapacitet za pogon motora (slika 9.18.).

Slika 9.18. principijelna veza između mikrokontrolera i step motora.

Na slici 9.19.a. prikazana je realizacija snažnog drajvera sa galvanskom izolacijom za pogon step motora, dok je na slici 9.19.b. prikazano bez galvanske izolacije. Galvansku izolaciju koristimo u sistemima gdje želimo da odvojimo spoljnje uređaje od upravljačke jedinice zbog sigurnosti i zbog eliminasanja smetinji.

Slika 9.19. a) Električna šema snažnog interfesa sa galvanskom izolacijom; b) Električna šema snažnog interfesa bez

galvanske izolacije.

a) b)

Page 45: Mikrokontroler AT89C51/52

44

PRIMJERI

Page 46: Mikrokontroler AT89C51/52

45

Page 47: Mikrokontroler AT89C51/52

46

Page 48: Mikrokontroler AT89C51/52

47

Zatatak 3. Projektovati hardver i napisati program za realizaciju elektronske kocke, odnosno generatora slučajnih brojeva od 1 do 6. Tajmer 1 (ili tajmer 0) radi u modu 0, kao 16-bitni brojač. U trenutku kada se pritisne taster, očita se sadržaj tajmerskih registara i dobijena vrijednost podijeli sa 6. Na ostatak dijeljenja se doda jedan i ta vrijednost se prikaže na 7-segmentnom displeju.

Rješenje: Projektovani hardver prikazan je na slici 9.1.

ORG 0000H

JMP POC

ORG 0003H

JMP INTEX0

POC: MOV TMOD, #01H

MOV TCON, #01H

MOV P1, #0

MOV IE, #82H

SETB TR0

JMP $

INTEX0: MOV DH, TH0

MOV DL, TL0

MOV DJ, #6

CALL DJEL

MOV A, DL

ADD A, #1

MOV P1, A

RET

END

Zatatak 4. Nacrtati šemu povezivanja sedmosegmentnog displeja i U/f konvertora sa mikrokontrolerom 8051 i napisati program koji mjeri srednju vrijednost napona. U/f konvertor je proporcionalan i generiše 100 impulsa u sekundi za maksimalnu vrijednost napona od 5 V. Frekvencija oscilatora je 12 MHz. Dobijeni rezultat prikazuje se u sljedećem formatu:

- prva cifra prikazuje napon u V - druga cifra prikazuje napon u 100 mV.

Napomena: tajmer 1 broji impulse koji dolaze sa U/f konvertora, a tajmer 0 mjeri vrijeme. Iz praktičnih razloga odabraćemo da prekid tajmera 0 snimamo svakih 10 ms. Za brojanje ciklusa tajmera 0 koristi se memorijska lokacija COUNT, a rezultat mjerenja se smješta u memorijske lokacije CIF_NIZA i CIF_VISA.

Rješenje: Projektovani hardver prikazan je na slici 9.2

CIFRA BIT0

CIF_NIZA DATA 30H

CIF_VISA DATA 31H

COUNT DATA 32H

NAPON DATA 33H

ORG 0000H

JMP POCETAK

ORG 000BH

JMP INTT0

POC: MOV TMOD, #51H; tajmer 0 i tajmer 1 rade u modu 1

MOV IE, #82H; omogucen prekid tajmera 0

MOV COUNT, #100; 100*100 ms = 1s

MOV TH0, #HIGH(-10000); mjera vremenskog intervala od 10ms

MOV TL0, #LOW(-10000)

MOV TCOM, #50H; start tajmera

JMP $

INTT0:DJMZ COUNT

MOV NAPON

Page 49: Mikrokontroler AT89C51/52

48

MOV TL1, #0

MOV COUNT, #100

L1: MOV TH0, #HIGH(-10000)

MOV TL0, #LOW(-10000)

CALL DISP

RETI

DISP: MOV A, NAPON

MOV B, #20

DIV AB

MOV CIF_NIZA, B

MOV CIF_VISA, A

JB CIFRA, L2

MOV P1, CIF_NIZA

SETB P1.5

SETB CIFRA

JMP KRAJ

L2: MOV P1, CIF_VISA

SETB P1.4

CLR CIFRA

KRAJ: RET

END

Zatatak 5. Projektovati sistem na bazi mikrokontrolera 8051 za regulaciju temperature u stanu i napisati odgovarajući asemblerski program. Za zadavanje srednje vrijednosti temperature u stanu korisniku su na raspolaganju dva funkcionalna tastera, jedan za inkrementiranje (povećanje za 1 °C) i drugi za dekrementiranje (smanjenje za 1 °C) koji su povezani na prekidne ulaze mikrokontrolera 8051 (INT0 i INT1) respektivno. Za prikazivanje srednje vrijednosti temperature koristi se 7-segmentni displej sa dva elementa. Za zagrijavanje stana na raspolaganju je grijač koji se uključuje, ako je temperatura u stanu manja za 2 °C od zadate, odnosno isključuje ako je ova temepratura veća za 2 °C od zadate. Sistem za zagrijavanje je aktivan samo od 7 do 21 časa u toku dana. Za mjerenje temperature u stanu na raspolaganju je odgovarajući temperaturni senzor i U/f konvertor.

Rješenje:

Page 50: Mikrokontroler AT89C51/52

49

GRIJAC BIT 00H

BR1 DATA 30H

BR2 DATA 31H

ZAD_TEMP DATA 32H

TEMP DATA 33H

MIN DATA 34H

SAT DATA 35H

ORG 0000H

JMP START

ORG 0003H

JMP INT_EX0

ORG 000BH

JMP INT_T0

ORG 0013H

JMP INT_EX1

; glavni program

START: MOV TMOD, #51H

MOV IE, #87H

MOV TCON, #05H

MOV TL0, #LOW(-10000)

MOV TH0, #HIGH(-10000)

MOV BR1, #100

MOV BR2, #60

CLR P1.6

MOV ZAD_TEMP, #20

MOV A, ZAD_TEMP

CALL DISP

SETB TR0

SETB TR1

L1: JUMP L1

INT_EX0: INC ZAD_TEMP

MOV A, ZAD_TEMP

CALL DISP

RETI

INT_EX1: DEC ZAD_TEMP

MOV A, ZAD_TEMP

CALL DISP

RETI

INT_T0: MOV A, BR1

CLR C

SUBB A, #01H

MOV BR1, A

JNZ KRAJ

MOV TL0, #LOW(-10000)

MOV TH0, #HIGH(-10000)

MOV BR1, #100

;azuriranje vremena

MOV A, BR2

CLR C

SUBB A, #01H

MOV BR2, A

JNZ L2

MOV BR2, #60

INC MIN

MOV A, MIN

CLR C

SUBB A, #60

JNZ L2

MOV MIN, #0

Page 51: Mikrokontroler AT89C51/52

50

INC SAT

MOV A, SAT

CLR C

SUBB A, #24

JNZ L2

MOV SAT, #0

MOV A, SAT

CLR C

SUBB A, #07

JC KRAJ

MOV A, SAT

CLR C

SUBB A, #21

JNC KRAJ

; poredjenje izmjerene i zadate temperature

MOV TEMP, TL1

MOV TL1, #0

JNB GRIJAC, L3

ADD A, #02H

CLR C

SUBB A, TEMP

JNC KRAJ

CLR GRIJAC

CLR P1.6

JMP KRAJ

L3: MOV A, ZAD_TEMP

CLR C

SUBB A, #02H

MOV R0, A

MOV A, TEMP

CLR C

SUBB A, R0

JNC KRAJ

SETB GRIJAC

SETB P1.6

KRAJ: RETI