Professional Documents
Culture Documents
8051 Mikrokontrolcü Ailesi
8051 Mikrokontrolcü Ailesi
ekil. 3
ediniz.
Standart 8051 4 adet giri/k portuna sahiptir. Eer 8051 entegresini kullandnz
devre harici kod hafza ve harici RAM hafza kullanyorsa, P0 ve P2 portlarn bu
elemanlar adreslemede kullanlr. Byle bir devrede, yalnzca P1 ve P3 sizin serbest
kullanmnza kalm olacaktr.
Port 0 giri olarak kullanlnmak istendiinde., ilgili bite 1 yazlr. Bu sayede her iki
transistrde off durumuna getirilir. Her iki transistrnde off olduu bu durum yksek
empedans durumu olarak adlandrlr. Bu durumda giri direkt olarak Pin data oku
hattna balanm olur. Port 0 k olarak kullanldnda , 0 yazlmak istendiinde alt FET
alarak pin topraklanr. 1 yazlmak istendiinde ise klar yine yksek empedans
durumuna geer. Dolays ile port 0 k olarak kullanldnda, yksek sinyalleri salkl
grebilmek iin, port 0 klarna pull-up direnleri koymak gereklidir.
Port 0 adres bus olarak kullanldnda ise, i kontrol mant, adres hatlarnn FET
girilerine balar. Adres hattna 1 yazmak iin st FET on, alt FET off taplr ve d hatta
logik 12 verilir. Adres hattna 0 yazlacaksa ise, st FET off alt, FET on yaplr ve k
topraa ekilir. Adres oluturulduktan ve adres yoluna ALE darbesiyle yerletirildikten
sonra, adres yolu data yolu haline gelir. Bu durumda port 0 d hafzadan bilgi okumak
zere otomatik olarak giri moduna getirilir.
Giri/k 1 (Port 1)
Giri/k 1 8-bit iftynl bir giri k birimidir. Bu birim zerindeki herbir bacak
drt LS TTL entegrenin verdii akm zerinden geirebilir ve drt LS TTL entegreyi
srebilir. Port 1, yalnzca basit giri/k portudur. Bu porttaki pinlerin basit/giri k
grevinden baka grevleri yoktur. Bu yzden k direkt olarak FET kapsna (gate)
balanmtr. Bu FET i pull-up direncine sahiptir. Port 1 giri olarak kullanlaca
zaman, FET off yaplt ve dolaysyla k i pull up direnci ile 1 olur. Dardan balanan
0 deeri yksek i pull-up direncini yenerek pin giriini 0 yapar. Bu sayede 0 deeri
okunur. Dardan girilen 1 deeri ise pin deerini deitirmez.
Port 1 k olarak kullanld zaman ise, pine 1 yazlaca zaman FET off yaplr. Bu
sayede pull-up direnci zerinden d devre 1 deerine srlr. 0 yazlaca zaman ise, FET
alr ve FET k topraa alnr. Bu port yalnzca basit giri k olarak kullanldnda
port kontrol logik gerekli olmamtr.
ekil.4
Giri/k 2 (Port 2)
Giri/k 2'de giri/k 0 gibi iki greve sahip bir giri/k birimidir. Bu birim ya 8-bit iftynl giri/k
olarak, ya da d hafza elemanlarna ularken adres yolunun st bitleri (A 8-A15) olarak grev yapabilir.
Giri/k modunda her bir bacak drt LS TTL entegrenin akmn kendi zerinden geirebilir ve 4 LS TTL
entegreye akm srebilir. Birim d hafza elamanlarna ulalmak istendiinde aktif hale gelerek adres yolu
olarak grev yapar. Port 2 adres hatt olarak kullanldnda, adresleme boyunca karark kalr. Port 0 da olduu
gibi data girii yapmak zere tekrar 1 lenmez. Port 2 basit giri k iin kullanldnda ise, aynen Port 1 gibi
kullanlr.
Adres birimi olarak m, basit giri k birimi olarak m kullanlacan belirlemek zere, port 2 de bir kontrol
devresi ierir.
ekil.5 Port 1n pin yaps. kn pull-up ile 5Volta ekildiine dikkat ediniz.
Giri/k 3 (Port 3)
Giri/k 3'de iki grevli bir birimdir. Normal giri/k birimi olarak kullanldnda, drt LS TTL entegrenin
akmn zerinden geirebilir veya drt LS TTL entegreyi srebilir. Bu birimdeki her bir bacan ayn zamanda
kontrol amal kullanlmak zere deiik grevleri de vardr. Aadaki liste giri/k 3 deki bacaklarn dier
fonksiyonlarn gstermektedir. Basit giri k portu olarak kullanldnda port yaps aynen port 1 gibi
dnlebilir. Port 3 giri k fonksiyonlar, P3 latchleri ile veya farkl SFR zel fonksiyon gz kontrolleriyle
kontrol edilir.
Giri/k 3 Alternatif Fonksiyonlar
_______________________________________________
Pin Numaras
alternatif fonksiyon
_______________________________________________
P3.0
RXD ( seri giri baca)
P3.1
TXD ( seri k baca)
P3.2
INT0 ( d kesme 0)
P3.3
INT1 ( d kesme 1)
P3.4
T0 (zamanlayc/sayc 0)
P3.5
T1 (zamanlayc/sayc 1)
P3.6
WR (d hafzaya yazma kontrol)
P3.7
RD (d hafzadan okuma kontrol)
_______________________________________________
ekil.6 Port 3n pin yaps. kn pull-up ile 5Volta ekildiine dikkat ediniz.
RST
Giri baca. Bu bacaa verilecek bir YKSEK sinyali, mikrokontrolcy reset eder. Mikrokontrolc
alrken bu pinin deeri 0 olmaldr. RST sinyali en az 2 makine evrimi kadar yksek durumda kalmal ve
daha sonra tekrar 0 a dmelidir. Bunun iin bir RC devresi kullanlr. Aadaki kk devre bu i iin
uygundur. Normal alma srasnda, 8051 RST ucu 8.2 kohm diren ile 0 deerine ekilmitir. Reset tuuna
basld anda 100 ohm, 8.2 kohm zerinde 5 volt grlr ve RST ucuna 5volt gider. Kondansatr ise 100 ohm
zerinden hzla boalr. Tu brakldnda ise kondansatr 8.2 kohm zerinden biraz daha yava dolar. Bu
sayede en az iki makine evrim zaman 5 volt sinyali garantilenmi olur.
ALE/PROG
Adres yakalamay aktifle (adress latch enable) hatt, d hafzaya ularken, dk deerli
adres hatlarnn adres yoluna konulmas grevini yapar. Bu sebeble ALE hatt port 0n
adres ve data multipleksleme ileminde kullanlan 74573 oktal latchin CLK ucuna
balanr.
Bu bacak ayn zamanda, ierisinde eprom bulunan 8051 serilerinde i epromun programlanmas srasnda
kullanlr.
XTAL1, XTAL2
8051 entegresini daha iyi anlayabilmek ve daha iyi kullanabilmek iin 8051'in zamanlama kavramn anlam
olmak gerekir. 8051 zamanlamas entegrenin XTAL1 ve XTAL2 bacaklarna bal d bir kristal aracl ile
salanr. Frekans kristalleri kararll yksek, zerlerine enerji uygulandnda, belli zaman aralnda belli
sayda elektriksel sinyal reten cihazlardr. Uygulama gereksinimine gre ok eitli frekanslarda alan
kristalleri piyasada bulmak mmkndr. 8051 entegreleri ile en ok kullanlan kristal frekanslar 12 Mhz ve
11.0592 Mhz'lik kristallerdir. 12 Mhz kristal yerine ounlukla 11.0592 Mhz kristal tercih edilir. Byle garip bir
frekansta kristal seiminin sebebi bu kristal frekansnn daha yksek seri haberleme hzna olanak
salamasndandr. 8051 serisi entegrelerin data kitaplarnda maksimum ve minumum alma frekanslar
belirtilmitir Dolaysyla minumum alma frekansndan daha dk bir kristal devreye balanamaz. Aada
8051 serisi entegrelerin i osilatr devreleriyle uyumlu bir kristal devresi grlmektedir. ekildeki kapasitrler
22pF ile 27pF arasnda seramik kapasitrlerdir.
8051 komutlarnn ou farkl makina evrim saysnda altndan, zaman lmek gereken programlarda,
ounlukla 8051 zamanlayclar kullanlr.
_____
PSEN
PSEN hatt ( program store enable) , d hafzadan bilgi okunmas srasnda kullanlan hatlardan biridir. Bu hat
ROM veya EPROM elemann k aktifle (output enable OE) hattna balanr. 8051 temel yapsnda veri hafza
ve kod hafza birbirinden ayrlmtr. Veri hafzaya okuma ve yazmalarda RD ve WR sinyalleri kullanlr. Kod
hafza ise salt okunabilir hafzadr. Bu hafzadan okuma srasnda PSEN sinyali veri hafzadaki RD sinyalinin
grevini yapar. Mikroilemcinin almas srasnda PSEN sinyali gerektike CPU nun kendisi tarafndan
retilir ve kod hafzadan komut okunmasn salar. Bu tr kod ve veri hafzann ayrld dizayn yntemine
Harward Mimarisine gre dizayn dendiini hatrlaynz. Bu dizaynda program ak srasnda kod hafzann
herhangi bir baytnn okunmasnda MOVC komutu kullanlr.
Veri ve kod hafzann tek bir hafza parasym gibi dizayn edildii mimariye Von Neumann mimarisi
denmektedir. Bu mimaride kod veya veri hafzadan okuma ilemi iin, PSEN ve RD sinyali ANDlenir. Bylece
kod ve veri, tm hafzaya MOVX komutu ile ulalr. PSEN ve RD sinyallerinin ANDlenmesiyle elde edilen
MEMRD (memory read) sinyali EPROM ve RAM hafzann OE(output enable) ularna balanr.
Harwward mimamrisinin stnl, 64 kbayta kadar RAM ve 64kbayta kadar ROM hafzay
destekleyebilmesidir. Von Neumann mimarisi ise, tm hafzay ayn ekilde deerlendirdiinden programlama
teknikleri asndan kolaylklar salamaktadr.
___ ___
RD ve WR
Read ve Write sinyalleri d veri hafzaya MOVX komutlaryla okuma ve yazma srasnda kullanlr. Dolaysyla
bu sinyaller veri ve kod hafzann ayrld dizaynlarda, direkt olarak RAM hafzann OE (output enable) ve WE
(write enable) hatlarna balanr. (Harward Mimarisi)
Von Neumann mimarisine gre dizaynda ise, PSEN ve RD sinyallerinin ANDlenmesiyle oluan MEMRD
sinyali ROM ve RAM hafzann OE ularna ve WR sinyali RAM hafzann WE pinine balanr.
ekil .... Harward mimarisine gre dizayn edilmi bir 8051 devresini ve ekil .... Von Neumann mimarisine gre
dizayn edilmi bir 8051 devresini gstermektedir.
___
EA/VPP
Eer program, entegrenin i epromuna deilde d eproma kaydedilmise EA hatt DK deerde tutulur. Bu
hat ayn zamanda i EPROM'un programlanmasnda 21Volt programlama sinyallerinin alnmasnda kullanlr.
8051
Hafza
Dkm
8051 entegresinin adres
alanlar, drt farkl alana
blnmtr. Bunlar i veri
hafzas, d veri hafzas, i
kod hafzas ve d kod
hafzasdr.
8051 64K ya kadar d
geici hafza alann ve 64K
ya kadar d kod hafzasn
desteklemektedir. D hafza
kullanmann en nemli
dezavantajlar,
devrenin
bymesi ve giri/k 0 ve giri/k 2 nin adres ve data hatt olarak d hafza elemanna balanmas gereidir.
Bu sebeple baka ilemler iin kullanlabilecek entegre baca says azalr. Bu nedenle mmkn olduunda,
geni bir i EPROM ve geni bir i RAM kullanarak problemleri halletmek olduka iyi bir zm olacaktr.
8051 bir reset sinyali aldnda veya 8051 entegresine ilk g verildiinde, program saycs 0000H adresinden
balayarak, hafzadaki bilgileri okumaya ve bu bilgileri ilemeye balar. Eer EA hatt DK tutulmusa ilk
hafza hcresi olarak d hafzann birinci eleman alnr. Mikrokontrolc PSEN sinyalini DK yapar ve d
hafza birimi aktiflenir.
Eer EA YKSEK tutulursa birinci hafza eleman i kod hafzasnn ilk elemandr. lk 4K lk program kodu i
hafzadan, daha yukardaki hafzalardaki program kodu ise otomatik olarak d hafzadan okunur.
Eer uygulama byk miktarda data hafzasna gereksinim duyuyorsa, bu durumda d data hafzas (RAM)
kullanlabilir. D RAM eleman ile data alverii, MOVX komutlaryla yaplr. Program ierisinde bir MOVX
komutu grldnde, 8051 otomatik olarak d data hafzas ile ilgili bir veri iletiimi olduunu anlar ve uygun
WR, RD sinyallerini aktifler.
Eer 128 bayt (8052 de 256 bayt) RAM yeterliyse, i RAM hafzay kullanmak daha avantajldr. nk i
hafzaya erimek, ok daha hzldr ve i hafza ile bilgi alverii iin pek ok komut tipi sunulmutur. 8051
RAM hafza temel olarak iki bloktan olumutur. Birinci grup 00H'dan 7FH'a kadar adreslenmi toplam 128
bayttan oluur. kinci grup ise zel fonksiyon data gzleri olarak adlandrlr ve 7FH'dan FFH'a kadar adreslidir.
Her bir adres bir baytlk bir hafza dilimine karlk gelmektedir. Bu sayede kod alanna giri kolaylar ve data
alverii hzlanr.
RAM hafzann dkm yledir: lk 256 bit, 4 grup 8 bayt data gznden (register) olumutur. Her bir
gruptaki data gzleri R0..R7 olarak adlandrlmlardr. Bu gzlere direkt olarak data gznn ismi verilerek
ulalabilir. Bu drt gruptan hangisinin seilecei Program Stats Registerindeki (Program Status Word PSW)
gerekli grup seme bitlerinin seilmesiyle yaplr.
Bundan sonra gelen 128 bitlik blm bit adreslenebilir blmdr. Buras 20H ile 2FH arasnda adreslidir.
Buradaki her bir bite tek tek ulalabilir. Dolaysyla buradaki bitler kullancnn ON/OFF bayraklar ieren
deikenler iin kullanmas gereken blmdr.
30H'dan 7FH'a kadar ksm, genel amal data saklama ve yn iin kullanlr.
kinci 128 baytlk grup zel fonksiyon data gzlerinden olumaktadr. Bu zel fonksiyon data gzleri hem
program kodunun ilemesi iin gerekli birimleri, hem de 8051 iindeki donanmla ilgili birimleri ierir.
Aadaki tablo zel fonksiyon data gzlerinin isimlerini, adreslerini ve fonksiyonlarn vermektedir. Bir zel
fonksiyon data gznn adresi yalnzca 1 bayttr. Fakat zel fonksiyon data gzne ulamak iin, bu gzn
adresini verebileceiniz gibi, data gznn ismini de belirtebilirsiniz. Bu data gzlerinden bazlar bit
adreslenebilir data gzleridir. rnein akmlatrn nc bitine ulamak iin, E0H.3 adresini belirtebilirsiniz
veya ACC.3 diyerek belirtebilirsiniz. Program status data gz de bit adreslenebilirdir. Bu data gzndeki parite
biti 0 numaral bittir. Bu bite ulamak iin, bu bitin adresini; D0H.0 veya ismini PSW.0 diyerek belirtebilirsiniz.
Aadaki dier tablo program stats registerindeki, bitlerin sembollerini, adreslerini ve fonksiyonlarn
gstermektedir.
zel fonksiyon data gzleri (SFR), Hafza alan (80H'dan FFH'a)
Adres
Data Gz
P0
80Ha
SP
81H
DPL
82H
DPH
82H
PCON
87H
TCON
88H
TMOD
89Ha
TL0
8AH
TL1
8BH
TH0
8CH
TH1
8DH
P1
90Ha
SCON
98Ha
SBUF
99H
P2
A0Ha
IE
A8Ha
P3
B0Ha
IP
B8Ha
PSW
D0Ha
ACC
E0Ha
B
F0Ha
Bit adreslenebilir data gzleri
Fonksiyon
Port 0
Stak iaretleyici
Data iaretleyici (dk)
Data iaretleyici (yksek)
G Kontrol
Zamanlayc/sayc data gz
Zamanlayc/sayc modu
Zamanlayc/sayc 0 (dk)
Zamanlayc/sayc 0 (yksek)
Zamanlayc/sayc 1 (dk)
Zamanlayc/sayc 1 (yksek)
Port 1
Seri alveri kontrol
Seri alveri data buffer
Port 2
Kesme aktifleme
Port 3
Kesme ncelii
Program stats
Akmlatr
B data gz
Adres
D0H.7
D0H.6
D0H.5
D0H.4
D0H.3
Fonksiyon
Elde bayra
Yedek elde bayra
Genel amal bayrak
Data gz seme (MSB)
Data gz seme (LSB)
OV
-P
D0H.2
D0H.1
D0H.0
Tama bayra
Kullanc tanmlanabilir bayrak
Parite bayra
kullanlr. Daha nce sylediimiz gibi port 0 istenirse pin pin de kontrol edilebilir. Bit bit kontrol iin
kullanlabilecek 8051 assembly komutlar, SETB bit , CLR bit , CPL bit, MOV bit, C, MOV C, bit
komutlardr. Aada bu komutlarn nasl kullanlabilecine dair rnekler verilmitir.
SETB P0.1
; P0.1 pinini 1 yap.
CLR P0.5
; P0.5 pinini 0 yap
SETB C
; Elde bayra 1
MOV P0.4, C ; P0.4 pinine Elde bayrann deerini yaz.
SETB P0.7
; P0.7 pinini giri iin hazrla.
MOV C, P0.7 ; P0.7 pininin deerini Elde bayrana oku.
Daha ncedende bahsedildii gibi d hafza kullanlan devrelerde port 0 dk adres baytn ve data alveriini
gerekletirmek zere multiplex grev yapar. Adres ve data alverii CPU kontrol altndadr.
7
SMOD
6
-
5
-
4
-
3
GF1
2
GF0
1
PD
0
IDL
Bit 7 SMOD seri iletiim hz modifikasynu bit. Bu bit SET edildiinde seri haberleme hz, zamanlayc 1in
mod 1, 2 veya 3 ile kullanlmas sonucunda hesaplanan iletiim hznn 2 katna kar. Bu bit 0 olduunda,
iletiim hz zamanlayc 1 ile belirlenen iletiim hz olur.
Bit 6 - Kullanlmyor.
Bit 5 -Kullanlmyor.
Bit 4 -Kullanlmyor.
Bit 3 GF1 Genel amal bayrak. Programc tarafndan kullanlabilir.
Bit 2 GF0 Genel amal bayrak. Programc tarafndan kullanlabilir.
Bit 1 PD CMOS entegrelerde, entegrenin g tketimini azaltmakta kullanlr.
Bit 0 IDLE CMOS entegrelerin g tketim kontrol iin kullanlan dier bir bit.
tamasnda bu bit aktiflenmektedir. Bu zel fonksiyon registerinde bulunan bitlerden dier birka, zamanlayc
ve saycnn kesme retmesi iin programlanabilmektedir.
TCON registeri bit adreslenebilir bir registerdir. Bu registerin bitleri zamanlayc/sayclar kontrol etmekte
kullanlr.
7
6
TF1
5
TR1
4
TF0
3
TR0
2
IE1
1
IT1
0
IE0
IT0
Bit 7 TF1 Zamanlayc 1 tama bayra. Zamanlayc tat anda bu bayrak SET olur. Mikroilemci ilgili
kesme programna srad anda bu bayrak tekrar temizlenir. Eer kesme program yoksa bu bayrak program
tarafndan temizlenmelidir.
Bit 6 TR1 Zamanlayc 1 alma kontrol biti. Zamanlayc 1 altmaya balatlmak istendiinde bu bayrak
SET edilir. Bu bayrak SET olduu srece zamanlayc 1 almaktadr.
Bit 5 TF0 Zamanlayc 0 tama bayra. Zamanlayc tat anda bu bayrak SET olur. Mikroilemci ilgili
kesme programna srad anda bu bayrak tekrar temizlenir. Eer kesme program yoksa bu bayrak program
tarafndan temizlenmelidir.
Bit 4 TR0 Zamanlayc 0 alma kontrol biti. Zamanlayc 0 almaya balatlmak istendiinde bu bayrak
SET edilir. Bu bayrak SET olduu srece zamanlayc 0 almaktadr.
Bit 3 IE1 Harici kesme 1 kenar bayra. INT1 pininde yksekten alaa den bir sinyal grldnde, program
INT1 kesme adresi 0013he srar.
Bit 2 IT1 Harici kesme 1 INT1 tip belirleme biti. Eer sinyal yksekten de getiinde kesme aktiflenmesi
isteniyorsa bu bit SET edilir. Bu bit 0 olduunda pindeki bir 0 sinyali kesmeyi aktifler.
Bit 1 IE0 Harici kesme 0 kenar bayra. INT0 pininde yksekten alaa den bir sinyal grldnde,
program INT0 kesme adresi 0003he srar.
Bit 0 IT0 Harici kesme 0 INT0 tip belirleme biti. Eer sinyal yksekten de getiinde kesme aktiflenmesi
isteniyorsa bu bit SET edilir. Bu bit 0 olduunda pindeki bir 0 sinyali kesmeyi aktifler.
TMOD (zamanlayc modu registeri, adres 89h)
TMOD registerindeki btn bitlerin ayr ayr anlamlar olmasna ramen TMOD registeri bit adreslenebilir bir
register deildir. Bu register standart iki zamanlaycnn hangi modda alacan kontrol etmekte kullanlan
registerdir. Bu register kullanlarak zamanlayclar, 16 bit zamanlayc, 8-bit tekrar yklenen zamanlayc veya
13 bit zamanlayc olarak programlanabilmektedir. Buna ilave olarak zamanlayclar, sayc olarak ta
programlanabilir. Bylece harici bir sinyalin her deiiminde zamanlaycxnn deeri 1 artacaktr.
7
Gate
6
C/T
5
M1
4
M0
3
Gate
2
C/T
1
M1
0
M0
Bit 7 Gate OR kaps enable biti.. Zamanlayc 1in almaya balayabilmesi iin bu bitin deerinin 0 olmas
gereklidir. Yani GATE biti ve TCON registerindeki TR1 biti zamanlayc 1in almaya balamasn kontrol
eder. GATE biti 1 ve TR1 biti 1 ise, zamanlaycnn almas INT1 pinindeki sinyale baldr. Bu sinyal 1
olduu anda zamanlayc 1 alr.
Bit 6 C/T Sayc veya zamanlayc seme biti. Bu bit SET olduu zaman zamanlayc/sayc 1 sayc modunda
almaya balar. Bu durumda T0 pinine bal sinyal saylmaya balar.
Bit 5 M1 Zamanlayc/sayc 1 mod seme biti
M0
0
1
0
1
MOD
0
1
2
3
Grld gibi porttan okuma yapmadan nce, btn port giri moduna getirilir. Port giri moduna getirildikten
sonra ise okuma ilemi gerekletirilir. Yukardaki komutlar port 1e 1 bayt bilgiyi yazmak veya okumakta
kullanlr. Daha nce sylediimiz gibi port 1 istenirse pin pin de kontrol edilebilir. Bit bit kontrol iin
kullanlabilecek 8051 assembly komutlar, SETB bit , CLR bit , CPL bit, MOV bit, C, MOV C, bit
komutlardr. Aada bu komutlarn nasl kullanlabilecine dair rnekler verilmitir.
SETB P1.1
; P1.1 pinini 1 yap.
CLR P1.5
; P1.5 pinini 0 yap
SETB C
; Elde bayra 1
MOV P1.4, C ; P1.4 pinine Elde bayrann deerini yaz.
SETB P0.7
; P1.7 pinini giri iin hazrla.
MOV C, P0.7 ; P0.7 pininin deerini Elde bayrana oku.
SCON (seri kontrol, adres 98h, bit adreslenebilir)
SCON zel fonksiyon registeri 8051 seri giri/k biriminin davrann kontrol etmekte kullanlr. rnein bu
register kullanlarak seri haberleme hz (baud rate) belirlenir. Bu registerde, ayn zamanda seri bir karakter
baaryla yollandnda veya baaryla okunduunda aktiflenen bayraklar bulunur. Seri port kullanlmak
istendiinde yalnzca SCON registerinin konfigre edilmesi yeterli olmayabilir. Bu durumda TCON ve TMOD
registerlerinde de gerekli deiimler yaplmaldr. nk seri haberleme hzn ayarlamak iin
zamanlayclardan birisini kullanmak gerekebilir. Aada SCON registerinin yaps ve bitleri grlmektedir.
Bit
7
6
5
4
3
2
1
0
sim
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
Bit Adresi
9Fh
9Eh
9Dh
9Ch
9Bh
9Ah
99h
98h
Aklama
Seri port mod bit 0
Seri port mod bit 1.
Birden ok ilemci ile haberleme modu
Alc aktif biti. Karakter okumas iin bu bit aktif yaplmaldr.
Yolla biti, bit 8. Mod 2 ve 3 de karakter yollamak iin kullanlan bit.
Mod 2 ve 3 de karakter okumak iin kullanlan bit.
Yolla bayra. Bir karakter yolland zaman bu bit aktif olur.
Alc bayra. Bir karakter okunduu zaman bu bit aktif olur.
SM0 ve SM1 bitleri ve anlamlar.
SM0
SM1
Seri Mod
Aklama
Haberleme hz
0
1
1
1
0
1
1
2
3
8-bit UART
9-bit UART
9-bit UART
(*) Zamanlayc 1 kullanlarak haberleme hz seildii durumda, eer PCON.7 biti aktif yaplrsa, haberleme
hz iki katna ykselmi olur.
SCON registeri bit adreslenebili bir registerdir. Bu registerin bitleri isimleriyle kullanlabilir. MCS-51 assembly
programlama dilinde, bu registerin bitleri tanmlanm durumdadr.
SCON registerinin st 4 biti (bit 4 - bit 7 ) konfigrasyon bitleridir.
SM0 ve SM1 bitleri seri haberleme modunu semekte kullanlr. 4 farkl seri haberleme modu vardr. Seri
haberleme modunun seilmesiyle haberleme hznn nasl hesaplanaca da belirlenmi olur. Mode 0 ve Mod
2 de haberleme hz kristal frekans ile orantl bir saydr ve sabittir. Mod 1 ve 3 de ise haberleme hz
zamanlayc 1'in birim zamanda tama saysna bal olarak deikendir.
SM2 biti, birden fazla ilemci haberlemesi bayradr. Genelde 8051 seri hattan bir karakter okuduunda, RI
(alnd kesmesi) bayra aktiflenecektir. Bylece program bir karakterin alndn ve ilenmek zere hazr
olduunu bilebilecektir. Fakat SM2 biti aktiflenirse, RI bayra, ancak okunan 9'uncu bit "1" ise
aktiflenecektir. Bu bit gelimi seri haberleme olay iin zaman zaman son derece faydaldr. Fakat biz hemen
tm programlarmzda bu biti "0" yapacaz Dolaysyla her karakter okunuunda, RI bayra aktiflecektir.
Bir sonraki bit REN (receiver enable) alc aktifle bitidir. Bu bitin anlam ok aktr. Eer seri port zerinden
okuma yapmak istiyorsanz bu biti aktiflemeniz gerekir.
SCON registerinin son 4 biti, seri haberleme srasnda kullanlan ilem bitleridir. Bu bitler seri portu konfigre
etmek iin deil seri yazma/okuma ilemlerini gerekletirmek iin kullanlr.
TB8 biti mod 2 ve mod 3 de kullanlr. Mod 2 ve mod 3 de toplam 9 bit data yollanp okunmaktadr. lk 8 bit
karakter deeridir, 9'uncu bit TB8 den okunarak yollanr.
RB8 biti de mod 2 ve mod 3 de kullanlr. Mod 2 ve mod 3 de okuma yapldnda toplam 9 bit data okunur.
Okunan ilk 8 bit SBUF registerine kaydedilir. 9'uncu bit RB8 bitine okunur.
TI (transmit interrupt) yolland kesmesi bitidir. Program seri porttan bir bilgi yolladnda, deerin seri porttan
tamamen yollanmas iin belli bir zaman geecektir. Eer bu karakterin yollanmas bitmeden, yeni bir karakter
yollanmak zere SBUF registerine yazlrsa, datalar birbirine karacaktr. Bunu nlemek iin yollama
tamanland (TI) biti kullanlr. TI biti "1" ise bir nceki karakter yollanm demektir ve yeni bir karakter
yollanmasnda saknca yoktur. Dolaysyla programc, yeni bir karakter yollamadan nce TI bitini okuyarak
kontrol etmelidir.
RI (receive interrupt) alma kesmesi bitidir. Bu bit de TI bitine benzer bir grev grmektedir. Fakat bu defa,
dardan bir karakter okunduunda, okumann bittiini bildirmek zere bu bir "1" olmaktadr.
Eer devrede d hafza kullanlmayacaksa, bu porrta dier portlar gibi basit giri k ilemleri iin
kullanlabilir. Bu portta Port1 ve Port3 gibi dahili pull-up direnlerine sahiptir. Bu yzden darya veri yazarken
d pull-up direnlerine gerek yoktur. Basit giri k birimi olarak kullanldnda, bu zel fonksiyon data
gzndeki bitlerin herbiri 8051 entegresinin bacaklarndan birisine karlk gelmektedir. rnein port2
registerinin 0 nolu biti, entegrenin P2.0 bacana, 7 nolu bit P2.7 nolu bacaa karlk gelmektedir. Entegredeki
P2 bacaklarndan herhangi birisini 1 veya 0 yapmak iin, P2 registerinde, entegre bacana karlk gelen bit
deeri 0 veya 1 yaplr. Port 2ye yazmak veya okumak iin aadaki komutlar kullanabilirsiniz.
MOV P2, #0FH;
Bu komutla Port2ye bir seferde 1 bayt veri yazlmtr. Port2den bir seferde 1 bayt veri okumak iin ise
aadaki komutlar verebilirsiniz.
MOV P2, #0FFH;
MOV A, P2;
Port 2yi bit bit kontrol etmek iin ise 8051 assembly bit komutlar, SETB bit , CLR bit , CPL bit, MOV bit,
C, MOV C, bit kullanlabilir.
SETB P2.1
CLR P2.5
SETB C
; Elde bayra 1
MOV P2.4, C ; P2.4 pinine Elde bayrann deerini yaz.
SETB P2.7
; P2.7 pinini giri iin hazrla.
MOV C, P2.7 ; P2.7 pininin deerini Elde bayrana oku.
IE ( Kesme aktifle registeri, adres A8h)
IE zel fonksiyon registeri, kesmelerin aktiflenmesinde ve pasiflenmesinde kullanlan registerdir. Bit 0-1-2-3-45-6 , herhangi bir zel kesmeyi aktiflemekte veya pasiflemekte kullanlan bitlerdir. Bit 7 tm kesmeleri
aktiflemek ve pasiflemekte kullanlr. Bu bit pasiflendiinde, herhangi bir zel kesmeyi aktifleyecek bit 1 olsa
bile, kesme pasif kalr.
Bit
7
6
5
4
3
2
1
0
sim
EA
ES
ET1
EX1
ET0
EX0
Bit Adresi
AFh
AEh
ADh
ACh
ABh
AAh
A9h
A8h
Aklama
Genel kesme aktifle/engelle
Tanmsz
Tanmsz
Seri kesme aktifle
Zamanlayc 1 kesmesi aktifle
D kesme 1 aktifle
Zamanlayc 0 kesme aktifle
D kesme 0 aktifle
Herhangi bir kesmeyi aktiflemek iin, once hangi kesme aktifleneckse o bit SET edilir. Daha sonra EA biti SET
edilir. rnein D kesme 0n almaya balamas iin,
SETB EX0;
SETB EA;
komutlar verilir. Baz yerlerde BIT kontrol yerine bayt seviyesinde komutlar da grebilirsiniz. Bu sizi
artmasn. Fakat program okunulabilirlii asndan siz yine de BIT komutlarn tercih edin. Yukardaki 2 satr
kodu, rnein baka bir kitapta,
MOV IE, #01H ;
ORL IE, #080H;
veya,
ORL IE, #01H;
ORL IE, #080H;
veya baka formlarda grebilirsiniz. Bunlarn hepsinin ayn ii yaptna dikkat ediniz.
P3 (port 3, adres B0h, bit adreslenebilir)
Bu portta dier portlar gibi bit adreslenebilir bir porttur. Port 3 pinlerinin hepsi ift fonksiyona sahip pinlerdir.
rnein seri iletiim iin kullanlan TxD, RxD pinleri, d hafza okuma yazma pinleri WR ve RD,
zamanlayc/sayc pinleri T0 ve T1, D kesme pinleri INT0 ve INT1 hep bu portta bulunur. Btn bu
fonksiyonlar, kendi zel fonksiyon registerleri aracl ile programlanr. Bu fonksiyonlarn kullanlmad pinler
basit giri/k pinleri olarak kullanlabilir. Port3 de Port1 ve Port2 gibi i pull-up direnlerine sahiptir. Bu
sebeble bu port basit giri k iin kullanldnda, harici pull-up direnlere gerek yoktur. Dier portlarda
olduu gibi basit giri/k ilemleri P3 zel fonksiyon registeri aracl ile yaplr. Aadaki komutlar P3
pinlerinin P3 zel fonksiyon registeri aracl ile nasl kontrol edilebileceini gstermektedir.
MOV P3, #0FH;
Bu komutla Port3e bir seferde 1 bayt veri yazlmtr. Port3den bir seferde 1 bayt veri okumak iin ise
aadaki komutlar verebilirsiniz.
MOV P3 #0FFH;
MOV A, P3;
Yukardaki komut verildikten sonra port 1 pinlerinin deerleri aadaki gibi olacaktr.
P1.0, P1.1, P1.2, P1.3 = 1 ve P1.4, P1.5, P1.6, P1.7 = 0
Port 3 bit bit kontrol etmek iin ise 8051 assembly bit komutlar, SETB bit , CLR bit , CPL bit, MOV bit,
C, MOV C, bit kullanlabilir.
SETB P3.1
CLR P3.5
SETB C
; Elde bayra 1
MOV P3.4, C ; P3.4 pinine Elde bayrann deerini yaz.
SETB P3.7
; P3.7 pinini giri iin hazrla.
MOV C, P3.7 ; P3.7 pininin deerini Elde bayrana oku.
IP (kesme ncelii, adres B8h, bit adreslenebilir)
IP zel fonksiyon registeri kesme nceliklerini tanmlamakta kullanlr. Birden ok kesme yaratan bir sistemde,
ayn anl oluan iki kesmeden hangisin,n daha nce ileme sokulacan belirlemek gereklidir. 8051
entegresinde bir kesme ya dk ncelie (0) yada yksek ncelie (1) sahip olarak tanmlanabilir. rnein
birden fazla kesme kullanan bir sistemde, seri port kesmesini yksek, dier tm kesmeleri dk ncelikli olarak
tanmladmz varsayalm. Bu durumda, her bir seri port kesmesi, kesme altprogramnn almasn
salayacaktr. Seri port kesmesi srasnda, baka bir kesme aktif olsa bile nce seri port kesmesi program
tamamlanacaktr. Aada IP registerinin pinleri grlmektedir. Herhangi bir kesmeyi ncelikli yapmak iin o
kesmenin bitini SET etmek yeterlidir. rnein seri port kesmesinin dier kesmelerden daha ncelikli olmasn
istiyorsak,
SETB PS;
komutunu vermek yeterlidir.
Bit
7
6
5
4
3
2
1
0
sim
PS
PT1
PX1
PT0
PX0
Bit Adresi
BCh
BBh
Bah
B9h
B8h
Aklama
Tanmsz
Tanmsz
Tanmsz
Seri port ncelii
Zamanlayc 1 ncelii
D kesme 1 ncelii
Zamanlayc 0 ncelii
D kesme 0 ncelii
7
CY
6
AC
5
F0
4
RS1
3
RS0
2
OV
1
-
Bit Sembol
7
AC
F0
RS1
RS0
RS1
RS0
0
0
1
1
0
0
1
1
0
0
0
0
0
0
1
1
1
Register bank 3
0
0
1
0
0
1
0
0
1
0
0
1
0
0
1
OV
Kullanm d.
0 Register bank 0
1 Register bank 1
0 Register bank 2
0
P
8051 entegrenin seri haberleme biriminin Seri data modu 0a getirilmesi iin SM0 ve SM1 bitleri 0 yaplr. Seri
data modu 0da haberleme hz sabittir ve osilatr frekansnn 12 de birine eittir. 12Mhz kristal kullanlan bir
8051 devresinde bu haberleme hz 1 Megabyte/s dir. Bu haberleme modunda RxD ucu hem karekterlerin
okunmasnda, hem de karakterlerin yollanmasnda kullanlr. Entegre seri haberleme modu 0a getirildiinde,
TxD pininde ise kristal frekansnn 1/12 sinde kare dalga sinyal bulunur. Bu sinyal yalnzca haberleme
srasnda aktif duruma gelir. Hatta haberleme olmad zaman, TxD hatt 1 seviyesinde bulunur. Entegreden
data yollanrken, TxD hattnn ilk ykselmesinden, 1 clock sonra yollanacak karakterin ilk biti RxD hattna
kaydrlr. Daha sonra TxD hattnn her ykseliinden 1 clock sonra dier bitler RxD hattna konularak karakter
hattan yollanm olur. Entegreye data okunurken de, karakterler RxD hattndan okunur. TxD hattnda ise yine
senkronizasyon sinyali bulunur. Gelen bitler TxD hattnn den kenarndan 2 veya 3 clock sonra seri bafra
(SBUF ) alnr. Mod 0 bilgisayar ve 8051 arasnda haberlemeden daha ziyade 8051 ve mod 0 benzeri
haberleme kullanan dier entegrelerle veya dier 8051 ilemcilerle haberleme iin kullanlmak zere
dnlm bir haberleme modudur.
Eer kullandmz frekans 12 Mhz ise, 19200 haberleme hz iin ne yapabileceimizi grelim.
nce PCON.7 = 0 alp birinci forml deneyelim.
TH1 = 256 - ((Kristal frekans / 384) / Haberleme hz)
TH1 = 256 - ((12,000,000 / 384) / 19200 )
TH1 = 256 - ((31,250) / 19200)
TH1 = 256 - 1..63 = 254.37
Grdnz gibi, ksratl bir say elde ettik. Bu saynn TH1e konulmasna olanak yoktur. imdi PCON.7 = 1
alp ikinci forml deneyelim.
TH1 = 256 - ((Kristal frekans / 192) / haberleme hz)
TH1 = 256 - ((12,000,000 / 192) / 19200)
TH1 = 256 - ((62500) / 19200)
TH1 = 256 3.26 = 252.74
Yine ksratl bir say elde ettik. Buna gre 12 Mhz kristal kullanld zaman 19200 haberleme hz olanakl
deildir.
imdi 9600 haberleme hzn deneyelim. lk nce PCON.7 = 0 alalm.
TH1 = 256 - ((Kristal frekans / 384) / Haberleme hz)
TH1 = 256 - ((12,000,000 / 384) / 9600 )
TH1 = 256 - ((31,250) / 9600)
TH1 = 256 3.25 = 252.75
Bu say da TH1e konmak iin uygun deil. PCON.7 = 1 alalm.
TH1 = 256 - ((Kristal frekans / 192) / haberleme hz)
TH1 = 256 - ((12,000,000 / 192) / 9600)
TH1 = 256 - ((62500) / 9600)
TH1 = 256 6.5 = 249.5
Bu sayda TH1e yerletirmek iin uygun deil.
imdi 4800 haberleme hzn deneyelim. PCON.7 = 0
TH1 = 256 - ((Kristal frekans / 384) / Haberleme hz)
TH1 = 256 - ((12,000,000 / 384) / 4800 )
TH1 = 256 - ((31,250) / 4800)
TH1 = 256 6.5 = 249.5
Seri porttan okuma yapmak ta seri porta yazma kadar kolay bir ilemdir. Seri porttan okuma yapmak
iin RI bayrana baklr. Bu bayrak "1" ise seri porttan bir karakter gelmi demektir. Seri porttan gelen
bu karakter SBUF registerinde bulunur.
rnein, program kodumuz bir karakter okumak zere beklesin ve karakter geldiinde bu karakteri
akmlatre okusun. Bunun iin yazmamz gereken kod yalnzca iki satr olacaktr.
GETCHR:
JNB RI,$
; 8051 RI bayrann aktiflenmesini bekle
MOV A,SBUF ; Gelen karakteri akmlatre oku.
RET;
Yukardaki kodun birinci satr RI biti "1" oluncaya kadar beklemektedir. Eer seri hattan bir karakter
gelirse RI biti "1" olacaktr . RI biti "1" olduunda program ikinci satra geecek ve MOV komutunu
ileme sokacaktr.
DB9S konnektr:
Mikrokontrolclerle bilgisayarlarn iletiminde temel olarak TxD, RxD ve GND hatlar kullanlr. Pek
ok mikrokontrolcde, bilgisayarla haberlemek zere TxD ve RxD hatlar bulunur. Fakat
mikrokontrolcler de bu hatlarn sinyalleri 0 volt ve 5 volttur. Bilgisayarla haberlemede gereken RS-232
sinyalleri ise +12 volt ve 12 volttur. Bu yzden mikrokontrolc ve bilgisayar arasndaki iletiimde gerilim
dnmn salamak zere bir gerilim dntrc kullanlr. Bu tr gerilim dntrclerin en ok
kullanlan MAX232 entegresidir. Aada bilgisayarla mikrokontrolc RS232 hattnn balanmasnda
MAX232 entegresinin nasl kullanld grlmektedir.
Genelde mikrokontrolc tarafnda kullanlacak RS232 konnektr dii yaplr. Dolays ile
mikrokontrolc ile bilgisayar balayacak ara kablonun bir ucuna 9 pin erkek konnektr, bir ucuna da 9
pin dii konnektr balanr Daha nce de sylediimiz gibi gereken kablo says yalnzca 3 tr.
Konnektrlerin 5 nolu ular (GND) direkt olarak birbirine balanr. 2 (TxD) ve 3 (RxD) ular ise
birbirine arpraz balanr. Bylece mikrokontrolcnn GONDER (TxD) ucu bilgisayarn AL (RxD)
ucuna ve bilgisayarn YOLLA ucu mikrokontrolcnn AL ucuna balanm olur.
|0 1 |
16 bit timer/counter
|1 0 |
| 1 1 | TC1 - disabled
TH0 - TH0 is an 8 bit timer incremented by setting TR1.Interrupts are channelled to .001Bh
MOV TH0, #0
MOV TL0, #0
MOV TMOD, #5
SETB TR0
; Saylan olay says herhangi bir anda TH0/TL0 registerlerinin okunmasyla ; elde edilebilir. Sayma olay,
mikrokontrolcnn asl yapt iten bamsz ; olarak geri planda saylr.
Yukardaki program parasnda frekans yksek olaylarn saylmas srasnda nemli bir problem ortaya
kabilir. rnein zamanlayc 0'n ierii okunup, program tarafndan kullanlamadan zamanlayc 0 tam
olabilir.
n
Dzenleme
Kullanlarak
Pals
saylmas
(mod
0)
ndzenleme mod 0 kullanlarak, girite oluan palslar 32 ye blnebilir. Bu sayede ok hzl olaylarn
saylmas kolaylam olacaktr. Zamanlayc/sayc girite 32 olay olutuunda 1 artacaktr.
MOV TH0, #0
MOV TL0, #0
MOV TMOD, #4
SETB TR0
Eer zamanlayc/saycnn her iki registeri, 00h deeriyle yklenirse, bir tama meydana gelmeden nce,
zamanlayc/sayc 65,536 sayma gerekletirecektir. 12 Mhz lik entegre osilatr kullanlan bir devrede, bu
yaklak olarak 66 milisaniyelik (65,536 mikrosaniye) zaman dilimine karlk gelir. Pek ok uygulamada
genelde daha uzun zaman gecikmelerine gereksinim olduundan, zamanlayc/sayc registerlerine ilave olarak
bir 8 bit hafza eleman daha kullanlr. Bu hafza elemann deeri her tamada "1" azaltlarak gereken zaman
dilimi yaratlr. TH0 ve TL0 registerlerinin balang deerleri istee gre seilebildiinden hassas zaman
dilimleri yaratmak olanakldr. rnein TH0'a 80h, TL0'a 00h deerlerinin yklenmesiyle zamanlayc sayc
her 32,768 saymada taacaktr. Tama gerekletikten sonra, register deerleri tekrar 80h ve 00h deerleriyle
yklenmelidir. Aadaki program paras, gerek gn zamann lmek iin zamanlayc/saycnn nasl
kullanlabileceini gstermektedir.
org 0000h
JMP Anaprogram
org 000Bh
JMP TC0kesme
org 0100h
Anaprogram:
CALL Baslangc
dongu: sjmp dongu
; R0 * 33ms = 1sec
;
;
;
;
; kesmeler arasnda 33ms
;C/T=0, mod 1 (16bit zamanlayc)
;zamanlayc 0' balat
;tm kesmeleri aktifle biti "1"
;zamanlayc "0" kesmesi aktif
;Zamanlayc 0 olduunda devreye girecek kesme
program
TC0kesme: DEC R0
MOV A, R0
JNZ TC0CIK
MOV R0, #20h
INC SAN
MOV A, SAN
SUBB A, #60
JNZ TC0Ck
MOV SAN, #00
INC DAK
MOV A, DAK
SUBB A, #60
JNZ TC0CIK
MOV DAK, #00
INC SAAT
MOV A, SAAT
SUBB A, #24
JNZ TC0CIK
MOV SAAT, #00
TC0CIK:
MOV TH0, #80h
MOV TL0, #00h
CLR TF0
RETI
SAN EQU R2
DAK EQU R3
SAAT EQU R4
End
;
;
;
;
Bir nceki rnekte, zamanlayc registerleri kesme program ierisinde yeniden yklenmek zorundayd.
Zamanlayc otomatik yeniden ykleme modunda kullanarak THx registerindeki deerin otomatik olarak TLx
deerine yklenmesi olanakldr. THx yeniden ykleme deeri olarak adlandrlr ve TLx'de normal
zamanlayc grevini grmektedir. Bu yntemin tek dezavantaj, sayma ileminin yalnzca 8 bit olmasdr
(nceki rnekte 16 bit olduuna dikkat ediniz). Aada gn zaman lmnn bu modda nasl yaplabilecei
bir rnekle verilmitir.
org 0000h
JMP Anaprogram
org 0Bh
JMP TC0kesme
org 100h
Anaprogram:
CALL Baslangc
dongu: sjmp dongu
RET
TC0KESME: DEC R1
MOV A, R1
JNZ TC0CIK
MOV R1, #80h
DEC R0
MOV A, R0
JNZ TC0CIK
MOV R0, #20h
; R0 * 33ms = 1sec
; R0 azaltlmadan nce ka dng
;
;
;
; 256 kere
; kesmeler arasnda 33ms
;C/T=0, mod 2
;zamanlayc 0'i balat
;tm kesmeleri aktifle biti "1"
;zamanlayc "0" kesmesi aktif
;Zamanlayc 0 olduunda devreye girecek kesme
;her 80h seferde R0'i azalt
;akumulatore al
;sfr deilse geri don
;R1'i tekrar ykle
;
;
;
; R0 ilk deerini tekrar ykle
TC0CIK:
INC SAN
MOV A, SAN
SUBB A, #60
JNZ TC0CIK
MOV SAN, #00
INC DAK
MOV A, DAK
SUBB A, #60
JNZ TC0CIK
MOV DAK, #00
INC SAAT
MOV A, SAAT
SUBB A, #24
JNZ TC0CIK
MOV SAAT, #00
MOV TH0, #80h
MOV TL0, #00h
CLR TF0
RETI
SAN EQU
DAK EQU
SAAT EQU
END
R2
R3
R4
;saniye = saniye + 1
;
;saniye >= 60 ?
;
;saniye = 0
;dakika = dakika + 1
;dakika >= 60 ?
;
;
;dakika = 0
;saat = saat + 1
;saat >= 24 ?
;
;
;saat = 0
;
;
;
;
;
;
;
org 001Bh
RETI
;Bu noktada, TL0 ierisinde, INT0 yksek olduu sredeki sayma deeri bulunmaktadr.
;Bu deer kolaylkla zaman bilgisine evrilebilir.
lp3: JB F0, Hata
CALL Cevr
CLR F0
JMP lp1
; F0 "1" se Hata
;Tl0 daki deeri zaman bilgisine cevir
; F0'i temizle
; tekrar don
;
;
;C/T=1, Mod 3, Timer 0
;zamanlaycy balat
;Kesmeleri aktifle
;F= bayran temizle
;
JMP HataIsleme
;
8051 Kesmeler
Kesme isminden de anlalaca zere , bir kesme normal program almasn kesen bir mekanizmay
tanmlamaktadr. Mikrokontrolcler programlar sra ile ileyen cihazlardr. Bu sra yalnzca sra (JMP) ve
ar (CALL) gibi komutlarla deitirilebilmektedir. Kesmelerde ise normal program ak, bir kesme ile
krlmakta ve kesme program tamamlandktan sonra normal program ak, tam kesmeden nceki noktadan
normal akna devam etmektedir. Bu tr bir altprograma kesme hizmet program (Interrupt Handler) ad verilir.
Bu altprogram yalnzca bir kesme olduunda alr. Kesme olmamas durumunda programa hi bir katks
yoktur. Kesme yaratan mekanizma , "tama (overflowing)", " ser porttan bir karakter okuma", seri porta bir
karakter yazma", veya INT0 ve INT1 ularna bal sinyallerin aktif olmasyla gerekleebilir.
8051 uygun bir ekilde programland zaman bu kesmelerden birisi gerekletiinde, program aknn kesme
hizmet programna yneltilmesi mmkndr. Bu kesme tamamlandnda program kald yerden normal
akna devam edecektir. Ana program byle bir sramann farknda bile olmayacaktr. Normal program
aknn bu ekilde kesilebilmesi, belli koullar kontrol etmek asndan son derece nemli olabilir. Eer
kesmeler olmasayd, ana program srekli olarak zamanlaycnn tap tamadn, seri porttan bir karakter gelip
gelmediini veya INT0 ve INT1 ularnn deerlerinin "1" olup olmadn srekli olarak kontrol etmek
zorunda kalacakt. Bu durumda yazlan kod hem ok uzun ve okunmas zor olacakt, hemde ilemci zamannn
nemli bir ksm, ok nadir olarak gerekleen bir olayn, gerekleip gereklemediini kontrol etmekle
harcanacakt. rnein elimizde 30 kilobaytlk, pek ok altprogramdan oluan bir kodumuz olsun.
Programmzn yapmas gereken ilerden birisi de, rnein zamanlayc 0 her tatnda, P3.0 bacann deerini
"1" se "0", "0" sa "1" yapmak olsun. Byle bir ilemin kodu son derece kolaydr.
JNB TF0, SONRAKI_KOMUT
CPL P3.0
CLR TF0
SONRAKI_KOMUT: ...
Zamanlayici 0 her tatnda TF0 biti "1" olacandan, yukardaki kod her tamada P3.0 bitinin deerini
deitirecektir. Bylece program kodu istenilen grevi yapacak ekilde yazlm olmaktadr. Bu kod istenen
grevi yapmaktadr fakat nemli lde sistem zaman kullanmaktadr.
Yukardaki ksa kodun ne kadar ilemci zaman kullandn hesaplamaya alalm. JNB komutu 2 makine
evriminde tamamlanan bir komuttur. Zamanlayc 0'n tamas durumunda, CPL ve CLR komutlar ilenecektir.
Bu komutlarn her biri bir makine evriminde tamamlanan komutlardr. Dolaysyla iki makine evrimi de bu
komutlarn ilenmesine gidecektir. Matemetii biraz kolaylatrmak iin, programn geri kalan ksmnn 98
makine eviriminden olutuunu varsayalm. Byle bir durumda, zamanlayc 0'n tap tamadnn kontrol
iin 2 makine evrimi, programn geri kalan ksm iin 98 makine evrimi, toplam 100 makine evrimi zaman
geecektir. Zamanlayc 0'n 16 bit zamanlayc modunda (mod 0) altn dnelim. Bu durumda
zamanlayc 0, her 65,536 makine evriminde bir defa taacaktr. Bu zaman ierisinde 655 kere JNB komutu
ilenmi olacaktr. 655 JNB komutu 1310 makine avrimi alacaktr. Zamanlayc tatnda iki makine evrimi
de CPL ve CLR komutlarnn ilenmesinde kullanlacaktr. Buna gre zamanlayc 0 tatnda, P3.0 bitinin
deerini deitirebilmek iin toplam 1312 makine evirimi ilemci zaman kullanm olduk. Bu zaman, program
ilenmesi zamannda geen zamann yaklak %2 sidir. te yandan her dngde zamanlayc 0'n tap
tamadnn kontrol, tama olduysa P3.0 bitinin deitirilmesi, ana program ierisinde gerekletirildiinden,
program kodu da okunulabilirlik asndan ktdr.
Kesmeler bize bu tr sorunlar zme olana vermektedir. Kesme kullanmnda, zamanlayc 0'n tap
tamadn bizim kontrol etmemiz gerekmeyecektir. Bu kontrol mikroilemci kendisi yapacaktr. Tama
olutuunda, kontrolc kesme hizmet programna srayp, kesme programn ileyecek ve normal program
akna geri dnecektir. Bunun iin yazlmas gereken kesme hizmet program yalnzca 2 satrdr.
CPL P3.0
RETI
ncelikle kod ierisinde "CLR TF0" komutunun kullanlmadna dikkat ediniz. nk, 8051 zamanlayc 0
kesmesi iin programlandnda, tama olduunda TF0 biti otomatik olarak mikroilemci tarafndan
temizlenmektedir.
Ayn zamanda bir altprogramdan dnte kullanlan normal RET komutu yerine RETI ( return from interrupt)
komutu kullanldna dikkat ediniz. RETI komutu RET komutu ile ayn ii yapar, fakat ilemciye kesme hizmet
programnn sonlandn belirtir. Her kesme hizmet program mutlaka RETI komutu ile sonlandrlmaldr.
Buna gre kesme kullandmzda, P3.0'n deerini deitirmek iin yalnzca 3 makine evrimi zaman
kullanmamz gerekiyor. Bir makine evrimi CPL komutu iin, 2 makine evrimi de RETI komutu iin
kullanlacaktr. Bu iki komut 65,536 makine evrim zaman ierisinde yalnzca bir kez ileme sokulmu
olacaktr. Kesme kullanlmadnda ayn grevi yapmak iin 1312 makine evrim zaman kullandmz
dnlrse, kesme kullanldnda programmz 437 kere daha verimli bir ekilde ilemci zamann
kullanmaktadr! te yandan program daha kolay anlalabilir ve okunulabilir bir duruma gelmitir. nk
program iinde srekli olarak zamanlayc 0'n tap tamadn kontrol etmek zorunda deiliz. Yapmamz
gereken yalnzca kesme programn yazmak ve unutmaktr. Gerektii durumda ilemci kesme programn
devreye sokacaktr.
Ayn fikiri seri port haberlemesinde veri alrken zaman zaman son derece faydal olmaktadr. Seri porttan bir
karakter okumak iin kullanlabilecek yollardan birisi, srekli olarak RI bitini kontrol etmek ve RI biti "1"
olduysa, gelen karakteri SBUF registerinden okumaktr. Byle bir yaklamda, ana program kodu bydke
gelen karakterlerden birini karma riski de vardr.
nk biz RI bitini kontrol ettikten hemen sonra seri karakter gelmi olabilir RI hattn ikinci kere kontrol
edinceye kadar baka bir karakter daha gelebilir ve bylece birinci karakter kaybolmu olur. Seri port kesmesi
yardmyla bu sorunu da zebiliyoruz. Seri porttan bir karakter okunduunda hemen kesme programmz
devreye sokuyoruz ve gelen karakteri okuyoruz. Program ierisinde de srekli olarak karakter geldi gelmedi
kontrol yapmaktan kurtuluyoruz.
Dier bir deyile 8051, zamanlayc 0 tatnda veya seri porttan bir karakter okunduunda veya yazldnda
uygun kesme hizmet program arlacak ekilde programlanabilir.
Tabiki farkl kesmeler olutuunda, ilenmesi gereken kesme hizmet program farkl olacaktr. Bunun iin
mikroilemci ierisinde kesme hizmet program balang adresleri oluturulmutur. Bu adresler 8051'in
standart adresleridir ve oluan kesmeye gre program ak bu adrese dallanacaktr.
Kesme
D Kesme 0
Zamanlayc 0
D Kesme 1
Zamanlayc 1
Seri Kesme
Bayrak
IE0
TF0
IE1
TF1
RI/TI
Kesme Adresi
0003h
000Bh
0013h
001Bh
0023h
Yukardaki tablodan da anlalabilecei zere, eer zamanlayc 0 kesmesi oluabilecek ekilde 8051 konfigre
edildiyse, zamanlayc 0'nher tamasnda program ak 000Bh adresine gidecektir. Bu adreste zamanlayc 0
tatnda yaplacak ilem kodlar bulunmaldr.
Kesme Oluumunun Programlanmas
8051 entegresi ilk almaya baladnda, tm kesmeler engellenmi durumdadr (disabled). Kesmeler engelli
durumda olduunda, rnein zamanlayc 0 tasa bile, bir kesme oluturmayacaktr. Kesmelerin aktiflenmesi
iin programda 8051 kesmeleri aktif hale getirilmeli ve hangi kaynaklarn kesme yarataca belirtilmelidir.
Kesmeleri aktif hale getirmek veya engellemek iin zel fonksiyon registerlerinden kesme aktifleme registeri
(IE, adres A8h) kullanlr IE registerinin bit adreslenebilir bir registerdir. Aadaki tabloda bu registerin her bir
bitinin anlam gsterilmitir.
Bit
7
6
5
4
3
2
1
0
sim
EA
ES
ET1
EX1
ET0
EX0
Bit Adresi
AFh
AEh
ADh
ACh
ABh
AAh
A9h
A8h
Aklama
Genel kesme aktifle/engelle
Tanmsz
Tanmsz
Seri kesme aktifle
Zamanlayc 1 kesmesi aktifle
D kesme 1 aktifle
Zamanlayc 0 kesme aktifle
D kesme 0 aktifle
Yukardaki tablodan da grlebilecei gibi, her bir kesme IE registerinde kendi aktifleme/engelleme bitine
sahiptir. Herhangi bir kesmeyi aktiflemek iin IE registerinde o kesmeye ait bit aktiflenmelidir. rnein
zamanlayc 1 kesmesini aktiflemek iin ya,
MOV IE,#08h veya SETB ET1
komutunu vermek gereklidir. Yukardaki komutlardan her ikiside IE registerinin 3 nolu bitini, yani zamanlayc
1 kesmesini aktiflemektedir. Bu kesme aktiflendiinde, ne zaman TF1 biti "1" olsa 8051 001Bh adresine gidip
orada bulunan kesme programn ileyecektir.
Bununla beraber, zamanlayc 1 kesmesinin tam anlamyla katiflenmesi iin ayn zamanda genel kesme
aktifleme bitinin de (bit 7 ) "1" yaplmas gereklidir. Bu bit btn kesmeleri aktifler veya engeller. Baka bir
deyile bit 7 "0" olduunda, dier kesme aktifleme bitleri "1" olsa bile kesme olumayacaktr. Bu bit "1"
yapldnda, seilen kesmeler aktif hale gelecektir. Bu durum, zaman kritik kodlarda nemli yararlar salar.
Belli bir zaman ierisinde mutlaka ilenip bitirilmesi gereken bir kod varsa ve bu kodun kesmeler tarafndan
kesilmesi istenmiyorsa, bu kodun balangcnda tm kesmelerin engellenmesi yerinde olacaktr.
zetlemek gerekirse, rnek olarak zamanlayc 1 kesmesini aktif hale getirmek iin gereken kod yalnzca iki
satrdr. nce zamanlayc 1 kesme aktifleme biti "1" yaplr. Daha sonra genel kesme aktifleme biti "1" yaplr.
SETB
SETB EA
ET1
Bu iki satrla, zamanlayc 1 kesmesi aktif hale gelmi demektir. Bundan sonra ne zaman zamanlayc 1 tamas
olusa program 001Bh adresindeki kesme programn altracaktr.
Kesme ncelikleri
8051 kesme ncelii iin yalnz iki seviye tanmlamaktadr; dk ve yksek kesme ncelii. Kesme
nceliklerini kullanarak ayn zamanl oluan kesmelerden hangisinin daha nce ileme sokulacan belirlemek
mmkndr.
Bit
7
6
5
4
3
2
1
0
sim
PS
PT1
PX1
PT0
PX0
Bit Adresi
BCh
BBh
Bah
B9h
B8h
Aklama
Tanmsz
Tanmsz
Tanmsz
Seri port ncelii
Zamanlayc 1 ncelii
D kesme 1 ncelii
Zamanlayc 0 ncelii
D kesme 0 ncelii
rnein, zamanlayc 1 her tatnda, zamanlayc 1 kesmesi oluacaktr. ekilde ve seri port zerinden bir
karakter geldiinde seri port kesmesi aktiflenecek ekilde 2 kesme kullandmz varsayalm. Programnzda,
seri porttan bir karakter geldiinde bunu okumak, zamanlama kesmesinden daha nemli olabilir. Bu durumda
eer seri kesme geldiinde, zamanlayc 1 kesmesi alr durumdaysa, seri port kesmesinin zamanlayc 1
kesmesini durdurmasn ve ncelikle seri port kesmesi ilemini tamamlamasn isteyeceksiniz. Seri port
kesmesi tamamlandktan sonra kontrol tekrar zamanlayc 1 kesmesine geecektir. Bu amala yapmanz gereken
sadece, seri port kesmesine yksek ncelik, zamanlayc 1 kesmesine dk ncelik vermek olacaktr. Kesme
ncelii kontrol, kesme ncelii (Interrupt Priority, IP) zel fonksiyon registeri (adres B8h) kullanlarak
yaplr. Kesme ncelii kontrol registeri bit adreslenebilir bir registerdir ve aadaki bitlerden olumutur.
Kesme ncelikleri ile ilgili aadaki kurallar geerlidir.Yksek ncelikli bir kesme, baka yksek ncelikli bir
kesme tarafndan kesilemez. Yksek ncelikli bir kesme dk ncelikli bir kesme akn keser. Dk
ncelikli bir kesmenin alabilmesi iin yksek ncelikli btn kesmelerin alp tamamlanm olmas gerekir.
Eer iki kesme ayn zamanl olumusa nce yksek ncelikli kesme alacaktr. Eer yksek ncelikli iki
kesme ayn anl olumusa, 8051 kontrol srasnda daha nce srada olan kesme nce ileme sokulacaktr.
unutursanz, kesme tekrar tekrar sonunda kesme bayra temizleninceye kadar alacaktr. Bu nedenle seri
kesme programnn sonunda, kesme yaratan bayra temizlemek son derece nemlidir.
Kesmelerde Registerlerin Korunmas
Kesmelerle ilgili unutulmamas gereken ok nemli bir kural vardr. Kesme program sonucunda, mikroilemci
tamamen kesme balamadan nceki duruma gelmelidir. nk kesme mentalitesi, ana programn hi haberi
olmayan bir program parasnn kendiliinden ve geliigzel bir zamanda devreye girmesi demektir. Fakat
imdi aadaki kodu dikkate alalm.
CLR
C
;
Elde
MOV
A,#25h
;
Akmlatre
ADDC A,#10h ; 10h deerini elde ile birlikte akmlatre ekle
25h
bayran
deeri
temizle
ykle
Yukardaki kod tamamland zaman akmlatrde 35h deeri bulunacaktr. Fakat MOV komutundan hemen
sonra bir kesme olutuunu varsayalm. Bu kesme program, elde bayran "1" yapyor ve akmlatre 40h
deeri yklyor olsun. Kesme program bittiinde, program ak tekrar ana programa dnecek ve ADDC A,
#10h komutu ile program almaya devam edecektir. Kesme program ierisinde elde bayra "1" yapld ve
akmlatre 40h deeri yklendii iin toplama ilemi sonucunda akmlatrde 51h deeri kalacaktr. Bunun
ana program iin anlam aktr. Ana programda 25h ve 10h deerleri toplandnda elimizde kalan sonu 51h
olacaktr ? Byle bir sonu son derece anlamsz olduundan kesme programlar ile fazla almam bir
programc ilemcinin bozulduunu dnecektir.
Aslnda ortaya kan olay, kesme programnn, kulland registerleri koruma altna almam olmasdr. Tekrar
belirtirsek: Bir kesme program ilemciyi, kesme balamadan nceki durumda brakmaldr. Bu kurala
gre, eer kullandnz kesme program, akmlatr kullanyorsa, akmlatrn deeri kesme banda ve
sonunda ayn olmaldr. Bu olay genelde PUSH ve POP komutlar kullanlarak yaplr. Aadaki kod bu
kullanma bir rnektir.
PUSH
PUSH
MOV
ADD
POP
POP ACC
ACC
PSW
A,#0FFh
A,#02h
PSW
Yukaridaki kesme program temel olarak MOV ve ADD komutlarndan olumutur. Bu komutlardan her ikisi
de akmlatrn ieriini deitirmektedir. te yandan ADD komutu elde bayrann durumunu
deitirmektedir. Bir kesme program, registerlerin kesme bandaki durumlarn korumak zorunda olduuna
gre, kesme program banda PUSH komutlaryla korunacak registerler yna yazlr. Bu registerler yna
yazldktan sonra kesme program ierisinde, bu registerleri istendii gibi deitirme zgrl yakalanm olur.
Kesme program tamamland zaman, registerlerin orjinal deerleri yndan geri kalnr ve kesme program
RETI komutu ile sonlandrlr. Dolaysyla bir kesme olutuunda, ana program kesme oluup olumadn hi
bir ekilde bilmeyecektir.
Genelde kesme programlar aadaki registerleri korumaya almaldr.
PSW
DPTR (DPH/DPL)
ACC
B
R0-R7 registerleri
Bu registerlerden PSW eitli 8051 komutlar ile deiebilen bitlere sahip bir registerdir. Dolayyla, yaptnz
iten hi phesiz emin olmadnz durumlarda, PSW registeri korunmas gereken bir registerdir.
te yandan pek ok assembler,
PUSH R0
gibi bir komuta izin vermez. nk byle bir komut seilen register banka bal olarak 00h, 08h, 10h, veya 18h
i hafza elemanna karlk gelecektir. Dolaysyla R0, PUSH ve POP komutlarnn kullanabilecei geerli bir
hafza adresini gstermemektedir. Dolaysyla, kesme programnzn ierisinde bir "R" registeri kullanyorsanz,
dorusu direkt olarak register adresini PUSH etmektir. rnein, PUSH R0 yerine, kullanlan register bankna
bal olarak,
PUSH 0H, PUSH 8H, PUSH 10H veya PUSH 18H komutlarndan birini kullanmak gerekir
Register Korumas: Kesme programlarn da, nemli registerlerin mutlaka korunduundan emin olun. Eer
ana programnzda da kullanlan registerlerden birini korumay unutursanz, ok garip sonularla
karlaabilirsiniz. Eer register deerlerinin beklenmedik bir ekilde deiimini gzlyorsanz veya baz
ilemler beklenmedik sonular retiyorsa, byk olaslkla, kesme programnda, korumay unuttuunuz bir
registerden dolaydr.
Korunan deerlerin tekrar yerine konulmasnn unutulmas: Dier nemli problemlerden birisi, registerleri
yna sakladktan sonra, kesme program bitiminde, register deerlerinin yndan geri alnmasnn
unutulmasdr. rnein, kesme program balangcnda, ACC, B ve PSW registerlerini yna sakladysanz,
kesme bitiminden hemen nce bu deerleri yndan geri almalsnz. Deerleri yndan geri alrken, en son
sakladnz deeri en nce almanz gerektiini unutmayn. Mutlaka yna yazlan sayda registeri, geri
almalsnz. Yna korunan register saysndan fazla veya az registerin geri alnmas RETI komutunun tamamen
ilgisiz bir adrese dnne yol aar. Byle bir durumda, ounlukla program kilitlenir.
Giri
Btn mikrokontrolc ve ilemcilerle almay renmenin etkili bir yolu bu ilemci ile
yaplm bir deneme kartna sahip olmaktr. Artk bir mikroilemcinin ne olduunu
biliyorsunuz. Mikroilemci bir kod ileme makinasdr. lenecek kod hafza elemanlarnda
bulunur. 8051 mikroilemciye g verildii anda ilemci 0000h adresinden balayarak
program kodunu ilemeye balar. Bu sebeble 0000h adresinde ilemcinin ilk olarak
yapmas gereken ilemler bulunur ve bu ilemler genel olarak bir EPROMda saklanr.
Deneme kartnn temel amac, denenecek programlarn, EPROM hafzadan deil RAM
hafzadan altrlmasdr. Bu sayede denenecek her programn EPROMa yklenmesi
gerei ortadan kalkar. 0000h adresindeki EPROM hafzaya MONTR program adl bir
program yklenir.
Bu program mikroilemci deneme kart iin bir iletim sistemi gibidir. Bu program
sayesinde PC zerinde yazlan programlar kartta bulunan RAM hafzaya yklenebilir ve
oradan altrlabilir. Mikroilemci deneme kartlarnn temel yaplar son derecede
basittir. Deneme kart temel olarak mikrokontrolc entegre, PC ile haberlemek zere bir
RS232 iletiim birimi , EPROM hafza ve RAM hafzadr. Baz mikrokontrolc entegrelerin
kendi zerlerinde EPROM hafzalar vardr. Eer bu EPROM hafza yklenecek Monitr
program iin yeterli ise d EPROMada gerek kalmaz. Dolaysyla basit bir deneme
kartnda, mikrokontrolc entegre, RAM hafza ve RS232 haberleme birimi
bulunur.Aadaki sayfada minumum balantl bir deneme kart grlmektedir.
Deneme kartn gelitirmek iin kart zerine genelde dier baz entegrelerde balanr.
Bunlara rnek olarak ilave EPROM, paralel giri k birimleri, gelimi RS232
haberleme entegreleri (UART), tu takm ve display srcleri, analog saysal eviriciler,
saysal analog eviriciler, rleler, LEDler, gerek zaman entegreleri, ek zamanlayclar gibi
dier baz zel fonksiyonlu entegreler saylabilir.
Yanda verilen bu basit deneme devresinin bilgisayarla iletiiminin salanmas iin, 8051
entegresi iindeki EPROM'a kaydedilecek bir monitr programna gereksinim vardr. 8051
entegresi ailesinin btn rnleri ilk adres olarak 0000h adresini tandklarndan, monitr
program 0000h adresinden itibaren yklenecektir. Monitr programnn temel grevi PC
ile haberlemeyi salamak zere gerekli seri iletiim dzenini kurduktan sonra kullancya
bir men sunmaktr.
Devre emas
PCB st Yz
PCB Alt Yz
Eleman Yerleimi