8051 Mikrokontrolcü Ailesi

Embed Size (px)

Citation preview

8051 Mikrokontrolc Ailesi8051 mikrokontrolc entegrenin temel blok i emas aada gsterilmitir. hafza olarak 8051 entegre 4Kx8 ROM i hafzaya, ve 128x8 RAM i hafzaya sahiptir. Entegre iki tane 16 bit sayc/zamanlaycya, ve 5 d kesme kna sahiptir. Entegrenin d cihazlarla seri haberlemesi iin TXD ve RXD (yolla ve al) hatlar bulunmaktadr. Entegre 4 adet 8-bit paralel I/O kapsna (P0,P1,P2,P3) sahiptir. Bu ailenin 8052 yesi ise 8K ROM ve 256 RAM hafzaya ve sayc/zamanlaycya sahiptir. 8051 in dier versiyonlar 8751 ve 8031 entegreleridir. 8751 entegrelerde i ROM hafza yerine EPROM bulunur. 8031 de ise i ROM veya EPROM yoktur. Fakat tm entegre tiplerinin en nemli zellii ayn komut kmesini kullanmalardr.

ekil. 1 4K ROM ve 128 byte i hafzal bir 8051 entegesinin blok yaps.

8051 Mikroilemci MimarisiBu derecede fazla fonksiyonu tek bir entegre zerinde toplamak iin, mikroilemci entegre gelitiricileri, ayn i hafza elemanlarn kullanabilen bir mikroilemci mimarisi ve tek bir d entegre bacan birden fazla fonksiyon iin kullanmak zorundadr. 8051 40 bacakl bir entegredir. Drt giri/k birimi iin 32 tane bacaa gereksinim vardr. Bu sebeple bacaklardan ou birden fazla fonksiyonu gerekletirebilmek zere tasarlanmtr. Aada ekilde 8051 entegrenin bacak balantlar grlmektedir.

Giri/k 0 iki farkl ama iin kullanlabilecek bir 8 bit giri/k nitesidir. Bu nite ya iki ynl (bidirectional) giri/k birimi olarak yada dk deerli adres (AD0-AD7)/data yolu olarak kullanlabilir. Bir giri/k birimi olarak her bir bacak dk (LOW) durumda iken, 8 tane LS TTL devrenin verdii akm zerinden geirebilir ve yksek (HIGH) konumda ise dardaki entegrelere 3.2 mA akm srebilir. Adres ve data modunda, (AD0-AD7) hatlar d hafza elemanlarna ulamak amacyla kullanlr. ALE hatt kontrol kullanlarak, AD0-AD7 hatlar, adres veya data yolu olarak belirlenir. Yani AD0-AD7 hatlar, ALE sinyali yardmyla, A0-A7 ve D0-D7 hatlar olarak ayrtrlr (demultipleksing). Port 0 data ve adres yolunu multiplex olarak srmek zere ekil. 2 8051 serisi entegrelerin tanmlanmtr. Bu yzden port 0 pinleri open-drain olarak bacak balantlar tasarlanmtr. Open drain ular i pullup direnlerine sahip olmadndan bu pull-up direnlerinin darya konulmas salkl data alverii iin gerekli olabilir. Mikrokontrolc alt zaman d hafzadan veri transferlerinde, nce okunacak veya yazlacak hafza adresinin dk bayt port 0a yklenir. Daha sonra ise data okunur veya yazlr. Bu multiplex ilem iin, eer entegre d hafza elemanlarna balanyorsa, 74573 tr bir oktal latch kullanlr.

ekil. 3 ediniz.

Port 0n pin yaps. kn open-drain olduuna dikkat

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

Port 1n pin yaps. kn pull-up ile 5Volta ekildiine dikkat ediniz.

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 (A8-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.

ekil.7 8051 RESET devresi. 8051 devresine ilk g verildii anda, entegre RST almayabilir ve EPROM ierisindeki program kodu 0000h yerine ilgisiz bir adresten balayabilir. Bu sebeble 8051 bir cihaz yapmnda kullanlacaksa, cihaz ald anda entegrenin yukardakine benzer bir ekilde RESET olmasn salayacak bir devrenin yaplmas gerekir.

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.

ekil.8 ALE hattnn adres/data multiplekslemede kullanlmas.

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.

ekil.9 8051 resonant kristal devresi Mikrokontrolcler (ve dier pek ok elektronik sistemler) ilemlerini senkronize etmek iin kristalleri kullanrlar. 8051 mikrokontrolc de ilemlerini senkronize etmek iin bir d kristal kullanr. 8051 entegresini ilemlerini makine evirimi (machine cycle) dilimleri zamanlamasyla gerekletirir. Bir makina evrim zaman 8051 entegrenin bir kodu ilemesi iin gerekli minumum zaman anlamna gelir. 8051 entegrelerde bir makina evrim zaman kristalin 12 tetikleme zamanna eittir. Kristal frekans olarak 11,059,000 kullanan bir entegre iin, bir makina evrim zaman (1 / 921,853 ) saniyedir. 1/ (11,059,000 / 12) = (1 / 921,583 ) Bunun anlam 8051 entegrenin bir saniyede yaklak 921,853 makina kodu bayt deeri ilediidir. 12Mhz kullanan bir kristalde saniyede yaklak 1,000,000 makina kodu bayt deeri ilenir. 8051 komutlarndan bazlar bir makina evrim zamanndan fazla srede ilenebilirler. rnein DIV AB komutu 4 makina evrimi zamanda tamamlanr. Bu yzden ortalama olarak bir saniyede ilenen komut says yaklak 600,000 civarndadr. Programn ounluu 2 makina evriminde tamamlanan komutlardan oluuyorsa, 12 Mhz lik bir kristalle bir saniyede 460,791 komut ilenecektir. ALE sinyali kristal devresinin alp almadn gsteren en nemli sinyaldir. Bu sinyalin frekans, kristal freakansnn 1/6 s olmaldr.

ekil.10 Osilatr frekans, makina evrimi ve ALE sinyali 8051 serisi yeni kan entegrelerden bazlar, komut zamanlamasn deitirmilerdir. Bu iyiletirilmi modellerde makina evrim zaman 12 kristal vuruu yerine 4 kristal vuruu ile zamanlanmtr. Dolaysyla entegreye yine 12 MHz lik bir kristal bal olmasna ramen entegrenin komut ileme zaman 3 kat ksalmtr.

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.

ekil.11 Harward mimarisine gre dizayn edilmi 8051 devresi

ekil.12 Von Neumann mimarisine gre dizayn edilmi 8051 devresi

8051 Hafza Dkm8051 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 PSW Bit Adresleri Sembol CY AC Adres D0H.7 D0H.6 Fonksiyon Elde bayra Yedek elde bayra 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

F0 RS1 RS0 OV -P

D0H.5 D0H.4 D0H.3 D0H.2 D0H.1 D0H.0

Genel amal bayrak Data gz seme (MSB) Data gz seme (LSB) Tama bayra Kullanc tanmlanabilir bayrak Parite bayra

8051 zel Fonksiyon Registerleri8051 mikrokontrolc, pek ok alma moduna sahip olan esnek bir entegredir. Programlarn alma modunu deitirmek iin zel fonksiyon registerleri deerleri okunabilir veya deitirilebilir. zel fonksiyon registerlerine ulamak aynen normal RAM data gzlerine ulamak gibidir. genel hafza RAM 00h adresinden 7Fh adresine kadar uzanrken, zel fonksiyon registerleri 80h adresinden FFh adresine kadar uzanr. Bir nceki sayfadaki tablo zel fonksiyon registerlerinin isimlerini ve adreslerini vermektedir. Tabloda da grlebilecei gibi, 80h adresinden FFh adresine kadar 128 data gz bulunduu halde, standart 8051 entegresinde bu alanlarn yalnzca 21 tanesi zel fonksiyon registeri olarak kullanlmtr. Kullanlmayan bu adreslere yazmak veya okumak beklenmedik program hatalarna sebep olabilir. Bu nedenle bizim nerimiz, zel fonksiyon registeri olarak ayrlmam bu blgeleri kullanmamanzdr. 8051 entegresinin daha yukar modellerinde bu gzler farkl zel fonksiyon registerleri olarak tanmlanm olabilir. Not: Adres deerleri 8 ile blnebilen tm zel fonksiyon registerlerinde bit ilemleri yaplabilmektedir.

zel Fonksiyon Data Gz Tanmlamalar: Bu blmde yukardaki tabloda grlen tm zel fonksiyon data gzlerini tablodaki srasyla ksaca tanmlamaya alacaz.

P0 (Port0, adres 80h, bit adreslenebilir) Bu port giri/k portlarndan birisidir. Bu zel fonksiyon data gzndeki bitlerin herbiri 8051 entegresinin bacaklarndan birisine karlk gelmektedir. rnein port0 registerinin 0 nolu biti, entegrenin P0.0 bacana, 7 nolu bit P0.7 nolu bacaa karlk gelmektedir. Entegredeki P0 bacaklarndan herhangi birisini 1 veya 0 yapmak iin, P0 registerinde, entegre bacana karlk gelen bit deeri 0 veya 1 yaplr. Dolaysyla port 0 pinleri bit adreslenebilir pinlerdir. Port 0a yazmak veya okumak iin aadaki komutlar kullanabilirsiniz.

MOV P0, #0FH; Yukardaki komut port 0n pinlerinin dk nibelini 1 yksek nibelini 0 yapacaktr. Yukardaki komut verildikten sonra port 0 pinlerinin deerleri aadaki gibi olacaktr. P0.0, P0.1, P0.2, P0.3 = 1 ve P0.4, P0.5, P0.6, P0.7 = 0 Bu porttan bir okuma yapmak iin ise aadaki komutlar verilir. MOV P0, #0FFH;

MOV A, P0; Grld gibi porttan okuma yapmadan nce, btn port giri moduna getirilir. Port giri moduna getirildikten sonra ise okuma ilemi gerekletirilir. Yukardaki komutlar port 0a 1 bayt bilgiyi yazmak veya okumakta 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.

SP (Yn aretleyici, adres 81h) Bu register 8051 entegresinin yn iaretleyici registeridir. Yn hzl data alveriinin bir yoludur. Yn (Stack) last-in-first-out, son giren ilk kar prensibine gre alan bir hafza kavramdr. Yn iaretleyici, yna en son eklenen datann RAM hafza adresini gsterir (TOP of stack). Yna bir deer itilmeden nce yn iaretleyicisinin deeri 1 artrlr. rnein yn iaretleyicinin deeri 07h ise, bir PUSH komutundan sonra, yn iaretleyicinin deeri 08h olacaktr. Yndan bir deer geri alnrken ise nce deer yndan alnr, daha sonra yn iaretleyicisinin deeri 1 azaltlr. Yn iaretleyicinin deeri, yn ile alan tm komutlardan sonra deimektedir. 8051 komut kmesi iinde yn kullanan komutlar, PUSH, POP, LCALL, RET, RETI ve kesme program girileridir. 8051 entegresinin ilk almasyla, yn iaretleyicisi 07h deerini alr. Bunun anlam ynn balang adresinin 08h olduudur. Yn 08h adresinden yukar doru geniler. Bu sebeble eer programnnzda register banklar 1, 2 ve 3 kullanacaksanz dikkatli olmalsnz. Bu durumda ynn balangcn st hafza elemanlarna iaretlemek gerekecektir. rnein yn balangc olarak 2Fh adresini kullanmak uygun olabilir. Kullanc yn adresini nereden balatacana kendisi karar vermek durumundadr. rnein aadaki komut yn iaretleyicisinin balang deerini 2Fh deerine atar. MOV SP, #02FH;

DPL/DPH Data iaretleyicileri, adres 82h ve 83h ) DPL/DPH (data iaretleyicisi dk ve yksek registerleri, adres 82h ve 83h) DPL ve DPH registerleri 16 bit bir adres oluturmak zere bir arada kullanlan zel fonksiyon registerleridir. Data iaretleyici, d RAM hafza ile veri alveriinde ve d kod hafza ile ilgili baz ilemlerde kullanlr. Data iaretleyici iaretsiz 16 bit bir sayy gsterdiine gre, data iaretleyici ile 0000h dan FFFFh (0-65535) adresi aralnda hafza adreslenebilir. Assembler dilinde DPTR ismi ile kullandnz data iaretleyici, aslnda DPH ve DPL zel fonksiyon data gzleri tarafndan oluturulmu 16 bit bir saydr. Pek ok durumda DPTR nin DPH ve DPL baytlarn ayr ayr ilemek durumunda kalabilirsiniz. rnein DPTR deerini yna yazmak istediinizi varsayalm. 16 bit bir deeri tek hamlede yna yazacak bir 8051 komutu yoktur. Bu nedenle DPH ve DPL deerlerini ayr ayr yna yazmanz gerekir. te yandan DPTR iaretleyicini bir artran 8051 komutu olmasna ramen DPTR iaretleyicisini bir azaltan bir 8051 komutu yoktur. Byle bir durumda DPH ve DPL registerlerini kullanarak sizin bu azaltma ilemini yapmanz gereklidir. Data iaretleyicisi en ok d veri hafza ile data alveriinde kullanlr. Bu amala nce data okunacak veya yazlacak hafza adresinin deeri data iaretleyicisine yklenir.

Daha sonra MOVX komutu ile bu deer hafzadan okunur veya hafzaya yazlr. Aadaki komut seti 2300H adresine 13 deerini yazmak iin kullanlmtr.

MOV DPTR, #2300H; MOV A, #13; MOVX @DPTR, A;

Hafzann 2300H adreindeki bir deeri okumak iin ise MOV DPTR, #2300H; MOVX A, @DPTR; Komutlar verilir. Harward mimarisine gre yaplan devrelerde, MOVC komutu yine data iaretleyicisi ile kullanlarak program hafzadan veri okunmasn salar. Aadaki komutlar program hafzann 0300H adresinden bir verinin okunmasnda kullanlmaktadr. MOV A, #0; MOV DPTR, #0300H; MOVC A, #A+DPTR PCON (G Kontrol registeri, adres 87h) Adresinden de anlalabilecei gibi PCON registeri bit adreslenebilir bir register deildir. Bit adreslenebilir registerlerin adreslerinin 8e blnebilmesi gerektiini hatrlaynz. Bu registerin PD ve IDL bitleri CMOS entegrelerde g kontrol amacyla kullanlmaktadr. imdi bu registerin bitlerini ve bit anlamlarn grelim.

7 SMOD

6 -

5 -

4 GF1

3 GF0

2 PD

1 IDL

0

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.

TCON (Zamanlayc kontrol registeri, adres 88h, bit adreslenebilir) Zamanlayc kontrol registeri standart 8051 entegresinde bulunan iki adet zamanlaycnn ayarlarnn yaplmasnda kullanlr. Bu register kullanlarak zamanlayclar altrlabilir veya durdurulabilir. Bu registerde bulunan bitlerden birisi zamanlaycnn tama biti olarak kullanlmaktadr. Bylece her zamanlayc veya sayc 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 TF1 6 TR1 5 TF0 4 TR0 3 IE1 2 IT1 1 IE0 0 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 Bit 4 M0 Zamanlayc/sayc 1 mod seme biti. Bit 3 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 2 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 1 M1 Zamanlayc/sayc 0 mod seme biti. Bit 0 M0 Zamanlayc/sayc 0 mod seme biti. M1 0 0 1 1 M0 0 1 0 1 MOD 0 1 2 3

TL0/TH0 (Zamanlayc 0 dk ve yksek, adres 8Ah ve 8Bh) Bu iki zel fonksiyon registeri zamanlayc 0' temsil eden zel fonksiyon registerleridir. Bu registerlerin nasl davranacaklar TMOD registerine yazlan kod ile konfigre edilir. Bilinmesi gereken nemli noktalardan birisi de zamanlayclarn yalnzca yukar doru saymasdr. TL0 ve TH0 saycnn sayma deerlerinin bulunduu registerlerdir.

TL1/TH1 (Zamanlayc 1 dk ve yksek, adres 8Ch ve 8Dh) Bu iki zel fonksiyon registeri zamanlayc 1'i temsil ederler. Zamanlayc/sayc 1in sayma deerleri bu registerlerde bulunur. Herhangi bir anda sayma deeri okunmak istendiinde, TL1 ve TH1 sayclar nn deerleri deikenlere okunur. rnein kullanacamz iki deiken TIMERH ve TIMERL olsun. MOV TIMERH, TH1; MOV TIMERL, TL1; P1 (Port 1, adres 90h, bit adreslenebilir) Bu port giri/k portlarndan birisidir. Bu zel fonksiyon data gzndeki bitlerin herbiri 8051 entegresinin bacaklarndan birisine karlk gelmektedir. rnein port1 registerinin 0 nolu biti, entegrenin P1.0 bacana, 7 nolu bit P1.7 nolu bacaa karlk gelmektedir. Entegredeki P1 bacaklarndan herhangi birisini 1 veya 0 yapmak iin, P1 registerinde, entegre bacana karlk gelen bit deeri 0 veya 1 yaplr. Dolaysyla port 1 pinleri bit adreslenebilir pinlerdir. Port 1e yazmak veya okumak iin aadaki komutlar kullanabilirsiniz. MOV P1, #0FH; Yukardaki komut port 1n pinlerinin dk nibelini 1 yksek nibelini 0 yapacaktr. 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

Bu porttan bir okuma yapmak iin ise aadaki komutlar verilir. MOV P1, #0FFH; MOV A, P1; 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 0 0 1 1

SM1 0 1 0 1

Seri Mod 0 1 2 3

Aklama

Haberleme hz

8-bit kaydrma Registeri Osilatr frekans / 12 8-bit UART 9-bit UART 9-bit UART Zamanlayc 1 ile ayarlanr.(*) Osilatr frekans / 32 Zamanlayc 1 ile ayarlanr. (*)

(*) 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.

SBUF( seri kontrol, adres 99h) Seri port bafr, seri port zerinden datalarn yazlmasnda ve okunmasnda kullanlr. SBUF registerine yazlan herhangi bir deer entegrenin yolla (TXD) baca zerinden seri bilgi halinde yollanlr. Benzer ekilde entegreye oku (RXD) baca zerinden gelen bir bilgi de SBUF registerinde okunmaya hazr bir ekilde tutulur. Yani bir karakter yollanaca zaman SBUF registerine yazlr. Bir karakter okunaca zaman ise SBUF registeri okunur. Aada seri porta bir karakter yazlmas iin verilmesi gereken komutlar grlmektedir. CLR TI ; nce TI bitini temizle. MOV SBUF,#A ; Yollanacak karakteri seri porta yaz. JNB TI,$ ; Karakter yollamasnn bitiini bekle. Seri porttan bir karakter okunmas iin ise aadaki komutlar verilmelidir. JNB RI,$ ; 8051 RI bayrann aktiflenmesini bekle MOV A,SBUF ; Gelen karakteri akmlatre oku.

P2 (Port 2, adres A0h, bit adreslenebilir) Bu portta dier portlar gibi bit adreslenebilir bir porttur. D hafza kullanan devrelerde bu portun grevi, d adres hattnn yksek baytn salamaktr. Mikroilemci d program hafzadan kod okuma yapt srada kodun

adresinin yksek bayt bu port tarafndan salanr. D veri veya kod hafzadan MOVX veya MOVC komutlaryla veri alverii srasnda da bu port yine okunacak adresin yksek baytn salama ilevini grr. Port 2 pinlerinin d hafzaya nasl balandn grmek iin Harward ve Von Neumann mimarisine gre 8051 devre emalarna baknz. 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 ; P2.1 pinini 1 yap. ; P2.5 pinini 0 yap

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 ; P3.1 pinini 1 yap. ; P3.5 pinini 0 yap

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

ekil. Kesme ncelii registeri bitleri ve anlamlar. PSW (program stats kelimesi, adres D0h, bit adreslenebilir) Program stats kelimesi registerinde 8051 komutlarnn ilemesine gre, aktiflene ve pasiflenen bayraklar bulunur. PSW registerinde, elde bayra, yedek elde bayra, tama bayra ve parite bayra gibi nemli bitler bulunur. Buna ek olarak PSW registerinde hangi register bankasnn kullanlacan belirlemekte kullanlan bitler bulunur. Bir kesme program yazldnda, kesme program banda program stats kelimesini yna saklamak ve kesme program sonunda yndan geri almak, pek ok programlama hatasn nleyecektir. nk 8051 komut kmesi komutlarnn pek ou, PSW registerinin deimesine yol aar. 8051 matematik ilemlerinin sonucuna gre deien 4 PSW bitine sahiptir. Bu bitler Carry (elde) biti, Auxillary Carry (yardmc elde) biti, Overflow (tama) biti ve Parity (parite) bitleridir. PSW registerinde bunlardan baka RS0 ve RS1 register bank seme bitleri ve bir tan de programc kullanmna sunulmu genel amal bit F0 bulunur.

7 CY

6 AC

5 F0

4 RS1

3 RS0

2 OV

1 -

0 P

Bit Sembol 7 6 5 4 3 RS1 CY Elde bayra. Matematik ilemlerde, sra, dndr ve bit ilemlerinde kullanlr. AC F0 RS1 RS0 RS0 Yardmci elde. BCD say ilemlerinde kullanlr. Kullanc iin ayrlm bit. Register bank seme biti 1 Register bank seme biti 0

0 0 1 1 2 1 0

0 0 1 1 OV P

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

0 Register bank 0 1 Register bank 1 0 Register bank 2

Tama bayra. Aritmetik ilemlerde kullanlr. Kullanm d. Akmlatrn paritesini gsterir. 1 = ODD Parity

ACC (akmlatr, adres E0h, bit adreslenebilir) Akmlatr, 8051 registerleri ierisinde en ok kullanlan registerlerden birisidir. nk pek ok 8051 komutu direkt olarak akmlatr kullanmaktadr. Akmlatr de zel fonksiyon registerlerinden birisidir. Dolaysyla adresi veya ismi verilerek eriilebilir. rnein MOV A, #20h komutu ile MOV E0h, 20h komutu ayn ilemleri yapar. Bununla beraber birini komutu kullanmay tercih etmeliyiz. nk birinci komutun makina kodu karl 2 bayt, fakat ikinci komutun makina kodu karl 3 bayttr. B ( B registeri, adres F0h, bit adreslenebilir) B registeri 8051 komut kmesi ierisinde, arpma ve blme ilemlerinde kullanlan bir registerdir. Fakat bu register ayn zamanda geici datalarn saklanmas iinde sklkla kullanlr.

8051 Seri Port ile Haberleme8051 entegrenin gl zelliklerinden birisi de yapsnda bulundurduu seri haberleme birimidir (UART). 8051 entegrenin seri bir haberleme birimine ship olmas demek, 8051 ile standart RS-232 seri haberlemesinin yaplabilmesidir. Byle bir birim entegre ierisinde bir para olarak verilmeseydi, seri bir hattan bilgi yollayp okumak olduka uratrc bir i olarak karmza kacakt. Seri bir hattan bilgi yollamak iin bit deerini entegrenin bir bacana yazmak, daha sonra dikkatli bir zamanlama kullanarak srasyla bitleri hatta yerletirmek gerekecekti. Bir pin zerinden seri bilgi okunmas daha da klfetli bir i olarak karmza kacakt. Yollanan veya okunan her bir karakterin, balang biti (start bit), biti biti veya bitleri (stop bit), parite kontrolnn 8051 programcs tarafndan yaplmas gerekecekti. Fakat gnmz mikrokontrolclerinin ounda seri haberleme biriminin bulunmas bu sorunu gidermitir. Entegrenin seri portunu kullanmak iin yapmamz gereken yalnzca bir ka ilem vardr. Bunun iin entegrenin seri port iletiim modunu ve seri port haberleme hzn sememiz gereklidir. Bu ilemler yapldktan sonra yapmamz gereken tek ey yazacamz karakteri SBUF zel fonksiyon registerine yazmak ve okuyacamz karakteri SBUF registerinden okumaktr. 8051 bir karakteri yolladnda bize karakteri yolladn, veya seri porttan bir karakter okunduunda okunan bir karakterin olduunu bize bildirecektir. Bylece programlayc karakterin bit baznda gnderilme ileminin skntlarndan kurtulmu olmaktadr.

Seri port asenkron iletiim, bir start biti, bir veya daha fazla stop biti kullanr.

Seri haberleme ve A Yaplar Bir dizi bilgisayar veya bir dizi ilemciyi birbirine balamak iin en uygun yntem olarak bir ka temel yntem vardr. Bunlardan en nemlileri, yldz (star) ve loop (dng) balama yntemleridir. Yldz balama ynteminde ana kontrolcden birer hat tm dier ikincil kontrolclere gtrlr. Bu yntem de tm kontro karar ana kontrolc tarafndan verilir ve her bir ikincil kontrolc yalnzca ana kontrolc ile iletiimde bulunur. Dng (llop) balama ynteminde ise bir kontrol hatt ile ana kontrolc tm dier kontrolclere balanr. Hangi yntemin seilecei bu ii dzenleyen kiinin tercihine ve pek ok d etkene bal olabilir. Temel olarak yldz balama yntemi gvenilirlik ve hata bulma asndan dng yntemine gre daha stndr. Dng yntemi ise maliyet ve kablo says ynnden stndr. Yldz yntemi eer ikincil kontrolclerin says azsa ve ana kontrolc ile ikincil kontrolcler arasndaki mesafe az sa tercih edilen yntem olabilir. Fakat ikincil kontrolclerin says ve bu kontrolclerin ana kontrolcye olan uzakl arttka tercih dng yntemine doru gider. Seri Data Modu 0

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.

Seri Data Modu 1 Seri port konfigre edilirken yukarda da belirtildii gibi program seri port haberleme hzn belirleyecek dzenlemelreri yapmaldr. Yalnzca mod 1 ve mod 3 de seri port haberleme hznn konfigrasyonuna gerek vardr. mod 2 ve mod 4 seri port haberleme hzn direkt olarak kristal frekansndan rettiinden bu modlarda haberleme hz ile ilgili ilem yapmaya gerek yoktur. Mod 1 ve Mod 3 de seri port haberleme hz zamanlayc 1 tamalaryla belirlenir. Zamanlayc 1 ok sk tayorsa, haberleme hz yksek daha seyrek tayorsa haberleme hz daha dk olacaktr.Zamanlayc 1'i haberleme hzn belirlemek zere ok farkl biimde programlama olana vardr. Fakat en ok kullanlan metod, zamanlayc 1'i 8 bit otomatik ykle modunda (zamanlayc modu 2) kullanmak ve TH1 registerine gerekli tekrar ykleme deerini kaydetmektir. TH1 registerine yklenecek deeri bulmak iin (PCON.7 = 0) iken aadaki forml kullanmamz gerekmektedir. TH1 = 256 - ((Kristal frekans / 384) / Haberleme Hz) Eer (PCON.7 = 1) ise, haberleme hz iki katna kyordu. Dolaysyla PCON.7 = 1 olduu durumda kullanmamz gereken forml, TH1 = 256 - ((Kristal frekans / 192) / Haberleme Hz) olacaktr. rnein 11.059 Mhz lik bir kristalimiz olduunu dnelim. Bu kristal frekansnda, zamanlayc 1'i kullanarak saniyede 19,200 bit data haberleme hznda haberleme yapmak isteyelim. TH1 registerine yazmamz gereken deeri bulmak iin, yukariaki formllerden birincisini kulllanalm. TH1 = 256 - ((Kristal frekans / 384) / Haberleme hz) TH1 = 256 - ((11059000 / 384) / 19200 ) TH1 = 256 - ((28,799) / 19200) TH1 = 256 - 1.5 = 254.5 Yukardaki hesaplamalardan da grlebilecei 19,200 haberleme hznda alabilmek iin TH1'e yazmamz gereken deer 254.5 elde edilmektedir. Bir registere ksuratl bir say koyma imkan yoktur. Dolaysyla bu sayy TH1 registerine yazamayz. Bunun yerine 254 yazarsak elde edeceimiz haberleme hz 14,400, 255 yazarsak ise elde edeceimiz haberleme hz 28,800 olacaktr. yleyse 19,200 haberleme hzn gerekletirmek iin Pcon.7 bitini "1" yapp, ikinci forml kullanalm. TH1 = 256 - ((Kristal frekans / 192) / haberleme hz) TH1 = 256 - ((11059000 / 192) / 19200) TH1 = 256 - ((57699) / 19200) TH1 = 256 - 3 = 253 Burada elde ettiimiz deer, ksratl bir deer deildir. Dolaysyla bu deeri TH1 registerine yazarak 19,200 baud iin gerekli ilemleri tamamlam oluruz. Dolaysyla, 11,059 Mhz bir kristalle 19, 200 haberleme hznda haberleebilmek iin yapmamz gerekenler srasyla unlardr. 1. Seri portu mod 1 veya mod 3 e getirmek gerekir.

2. Zamanlayc 1'i mod 2'ye getirmemiz gerekir. 3. TH1'e 253 deerinin yazlmas gerekir. 4. PCON.7 (SMOD) bitini "1" yapmamz gerekir. imdi yukardaki ilemleri, ASSEMBLY dilinde gerekletirelim. MOV SCON, #048H MOV TCON, #020H MOV TH1, #0FDH MOV TL1, #0FDH ORL PCON, #080H ; seri port mod 1 ; zamanlayc 1 mod 2 ; TH1 = 253 ; TL1 = 253 ; PCON SMODE biti = 1

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 Bu sayda uygun deil. PCON.7 = 1 alalm. TH1 = 256 - ((Kristal frekans / 192) / haberleme hz) TH1 = 256 - ((12,000,000 / 192) / 4800) TH1 = 256 - ((62500) / 4800) TH1 = 256 13.02 = 242.98 Bu sayy 243 (F3H) olarak alp, TH1e yerletirebiliriz. Dolaysyla yukardaki hesaplardan da grld gibi, 12 MHz bir kristal kullanldnda, zamanlayc 1 kullanlarak oluturulabilecek maksimum haberleme hz, 4800 dr. 12 MHz kristalde 4800 haberleme hzn programlamak iin yazmamz fereken satrlar aadadr. MOV SCON, #048H ; seri port mod 1 MOV TCON, #020H ; zamanlayc 1 mod 2 MOV TH1, #0F3H ; TH1 = 243 MOV TL1, #0F3H ; TL1 = 243 ORL PCON, #080H ; PCON SMODE biti = 1 Biz 8051-8031 entegrelerini kullandmz devrelerde, standard oalrak 11,0592 Mhz kristali kullanacaz. Inceleyeceimiz 8052 entegresi nc bir zamanlaycya sahiptir. Bu zamanlayc da haberleme hznn kontrolnde kullanlabilmektedir. Bu zamanlayc 12 MHz kristalde 9600 haberleme hznda seri iletiime olanak vermektedir. 80535 entegresi ise, kendi iinde haberleme hz kontrol birimi bulundurmaktadr. Dolaysyla bu entegrelerle yaptmz devrelerde 12 Mhz kristal kullanacaz. nk 12 Mhz kristal kullanldnda, zaman lme hesaplar daha kolay olmaktadr. Seri Porta Yazma Seri port yukarda akland ekilde, konfigrasyonu yapldnda, seri port yazma ve okuma iin hazr hale gelmitir. Seri porta bir karakter yollamak iin yapmanz gereken sadece, bu karakteri SBUF (99h) zel fonksiyon registerine yazmaktr. rnein seri porta "X" karakteri yollamak istiyorsanz, vermeniz gereken komut, MOV SBUF,#X komutudur. Yukardaki komut ilemci taarafndan okunduunda, ilemci "X" karakterini seri port zerinden yollayacaktr. Elbetteki seri porttan yollama ilemi anlk bir ilem deildir ve bir zaman dilimi ierisinde gerekleecektir. Standart 8051 bir seri k bafrna sahip olmadndan, yeni bir karakter yollamadan nce, nceki karakterin yollandndan emin olmak zorundayz. 8051 entegresi bir karakterin yollanmasnn bittiini TI bitini "1" yaparak bildirir. Dolaysyla bu bitin deeri "1" ise karakterin yollanmas bitmitir ve yeni bir karakter yollanabilir. Bu kontrol 8051 kodu olarak aadaki ekilde yazlr. SENDCHR : CLR TI ; nce TI bitini temizle. MOV SBUF,#A ;Yollancak karakteri seri porta yaz. JNB TI,$ ;Karakter yollamasnn bitiini bekle. RET ; Yukardaki komut ile bir karakter seri port zerinden yollanr ve yollama ileminin bitii beklenir.

Seri Porttan Okuma 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.

Seri Data Modu 2 (oklu lemci Modu) Seri haberleme modu 2, seri haberleme modu 1e benzer. Mod 2de haberlemede 11 bit kullanlr. Bu 11 bitin biri start biti, birisi stop biti ve 9 tane data bitidir. Gnderilen datann 9uncu biti SCON registerinin TB8 bitine yazlr. Data okuma srasnda ise bu 9uncu bit RB8 bitine gelir. Seri data modu 2de iletiim hz, fbaud2 = (2SMOD / 64) x fclock formul ile hesaplanr. Dikkat edilirse, bu iletiim modunda da haberleme hz mod 1 haberleme hzndan ok daha yksektir. Pek ok ilemci kullanlan bir a zerinde, toplanan verilerin ok hzl bir ekilde aktarlabilmesine gerek vardr. Bu ieltiim modunun en nemli zellii kullanlan 9uncu data bitinde yatmaktadr. Bu data biti sayesinde yollanan bir mesajn adaki belli ilemciler tarafndan alglanmas, dierleri tarafndan ise ihmal edilmesi salanabilmektedir. Seri iletiim modlarnda, 8051 entegresine bir karakter geldiinde karakterin son bitinin alnmasyala RI bitinin 1 yapldn biliyoruz. Seri data modunda RI bitinin 1 olabilmesi extra baz artlara da balanmtr. RI bitinin set olabilmesi iin, ya son data biti 1 olmal yada SCON registerindeki SM2 biti 0 olmaldr. Dolaysyla adaki bir ilemci gnderilen mesajn adaki tm ilemciler tarafndan alnmasn istiyorsa gnderdii bilginin son bitini 1 yapmaldr. Eer adaki yalnz belli ilemcilerin bu mesaj almas isteniyorsa, mesaj yollayan ilemci gnderdii bilginin son bitini 0 yapar. Bu sayede adaki ilemcilerden yalnzca SM2 biti 0 olanlar, gelen mesaj alrlar. Bu sayede bir yerel a oluturulup, zaman zaman sadece belli entegrelerin sorgulama sonularna cevap verebilmeleri salanabilir. Bu yntem ilemci ve bilgisayar alarnda sk kullanlan, konuan ve dinleyenlerin belirlenmesi esasna dayanan bir yntemdir.

Seri Data Modu 3 Bu ilemci modu seri data modu 2 ile ayn alma mantna sahiptir. Yalnzca bu modda haberleme hz sabit deildir ve ayn seri mod 1 de olduu gibi zamanlayc 1 ile belirlenir.

RS-232 letiiminin Temel Kavramlar

RS-232 bilgisayar dndaki cihazlarn bilgisayar ile haberlemelerinde en ok kullanlan iletiim standartlarndan birisidir. RS-232 temel olarak bir seri iletiim birimidir. Seri iletiim biriminde karakterler bir hat zerinden bit bit yollanr. Seri iletiimin paralel iletiime gre en nemli stnl balant kolayldr. Bilgisayardan cihaza karakter yollamak iin bir hat , cihazdan gelen karakterleri okumak zere bir hat ve bir toprak hatt olmak zere toplam hat kullanlarak iletiim gerekletirilebilir. Bu standardn nemli dezavantaj, haberleme hz arttka bilgi kaybna yo amamak iin kablo uzunluunun da ksalmas gerekliliidir. Standard RS-232 19200 haberleme hznda en fazla 20m kablo uzunluuna izin vermektedir. Yeni seri iletiim standartlarndan RS-422, RS-449 ok daha yksek haberleme hzlarnda ok daha uzun kablolamaya olanak vermektedir. rnein RS-422 1600 m uzunluunda bir kablo zerinden bir magabit/saniye haberleme hzalarn desteklemektedir. Her bilgisayar en az bir seri RS-232 iletiim birimine sahiptir. Yeni bilgisayarlarda RS-232 konnektrleri hemen hemen tamamen 9 pin erkek konnektrlerdir. ncelikle bilgisayarnzn arkasnda byle bir konnektr olup olmadna bakn. Bilgisayar herhangi bir RS-232 portuna o portun adresi aracl ile ular. Bilgisayarnzda bulunan RS-232 portunun adresini bilgisayar denetim masasndan sistem seenei iinden aralar mensne geerek ulaabilirsiniz. Aralar mensnde bilgisayarda var olan tm iletiim birimlerinin (seri portlar, USB, printer portu, ekran kart vs.) adresleri bulunur. Seri iletiim biriminizin adresini buradan bulabilirsiniz. Baz bilgisayarlarda yalnzca bir RS-232 k bulunabilir. Eer bu k seri fare iin kullanlyorsa mikroilemci kartnz bilgisayar ile haberletirecek hi bir RS-232 biriminiz yok demektir. Yapmanz gereken seri fareden vazgeip, bilgisayarnzn fare giriine balanabilecek bir fare satn almak olacaktr. Bylece RS-232 portunuz mikroilemci kartnza balamak zere size kalacaktr. Bu aamada biraz da RS-232 konnektrnn yapsndan ve seri iletiimden bahsetmek faydal olacaktr. RS-232 seri iletiim standard elektriksel zelliklerinde 1 biti -3 volttan 25 volta kadar bir elektrik sinyali olarak tanmlanmtr. 0 sinyali ise +3 volttan +25 volta kadar elektrik sinyali olarak tanmlanmtr. 3 volt ile +3 volt arasndaki herhangi bir sinyal ise belirsiz bir sinyaldir. Daha nce de belirttiimiz gibi yeni bilgisayarlarda RS-232 iletiimi iin 9 pin erkek konnektrler kullanlmtr Fakat baz bilgisayarlarda ve seri iletiim kurulacak baz cihazlarda 25 pin erkek konnektrler de bulunabilmektedir. Aada 25 pin ve 9 pin DB kablolarda RS-232 sinyallerinin nasl balandn grebilirsiniz. DB25S konnektr:

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 RS232 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.

8051 Zamanlayc ve SayclarZamanlayc ve sayclar aadaki grevler iin kullanlrlar. Zaman gecikmesi yaratmak iin Pals zaman veya zaman aral lmek iin Pals veya oluan olaylar saymak iin oklu ilem uygulamalarnda (Multi-tasking) Kesme retmek iin Standart 8051 iki zamanlayc/saycya sahiptir. Bu zamanlayc/sayclar 8 bit veya 16 bit zamanlayc/sayc olarak kullanlabilir. Aada M1 ve M0 bitlerinin deerlerine bal olarak zamanlayc/sayclarn hangi modlarda kullanlabilecei belirtilmektedir. TMOD M1 M0 FUNCTION |0 0 | |0 1 | |1 0 | |1 1 | 8 bit counter or 8 bit timer with / 32 scaler 16 bit timer/counter 8 bit timer counter with auto-reload to initial start for count up TC1 - disabled

TH0 - TH0 is an 8 bit timer incremented by setting TR1.Interrupts are channelled to .001Bh

TL0 - is an 8 bit timer/counter controlled by TMOD and TCON Zamanlayc/sayc altr bitleri TR1 ve TR0, TCON registerinde bulunur. Bu bitlerden birisi "1" yapldnda, bu bite karlk gelen sayc almaya balar. Bu bitlerin deeri "0" yapldnda zamanlama/sayma ilemleri de bitirilmi olur. Kesme kontrol registerinde (IE) bulunan ET1 ve ET0 bitleri, zamanlayc tamasnda kesme retilip retilmeyeceini belirlemekte kullanlr. Bit deerinin "1" olmas, zamanlayc/sayc tamasnn kesme retmesi anlamna gelir. TMOD registerindeki C/T biti, zamanlayc/saycy, sayc modunda veya zamanlayc modunda altrmak iin kullanlr. Bu bitin deeri "1" yapldnda zamanlayc/sayc, 8051 entegrenin TX giri pinindeki olaylar saymak zere konfigre edilmi olur. Bu bitin deeri "0" olduunda zamanlayc/sayc, zamanlayc modundadr ve sistem osilatrnden gelen sinyali 12'ye blerek alr. TMOD registerindeki GATE biti, "1" yapldnda, zamanlayc/sayc n'in aktif olmas iin, INTn ve TRn bitleri "1" yaplmaldr. GATE biti "0" yapldnda zamanlayc/sayc n,in aktif yaplmas iin, TRn bitinin "1" yaplmas yeterlidir. GATE biti zaman lmekte, olaylarn zamann lmekte, pals geniliini lmekte kullanlr. INTx hatt "1" olduu srede, bu deerler saycya geirilir. Sistem osilatrnn frekans 12'ye blnerek zaman saymas gerekleir. Buna gre 12 MHz osilatr kullanan bir sistemde, zamanlaycnn frekans 1 Mhz olur.

T0 Giri Ucundan Pals Saylmas zamanlayc 0 (mod 1) ; T0 ucuna gelen d sinyallerin saylmas MOV TH0, #0 ; zamanlayc/saycy sfrla MOV TL0, #0 ; MOV TMOD, #5 ; zamanlayc/saycy sayma moduna getir. ; C/T=1, Mod 1 SETB TR0 ; zamanlayc/saycy balat ; 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. ;T0 ucunda oluan olaylar 32'ye blerek say ; zamanlayc/saycy sfrla. ; ; zamanlayc 0 sayc modunda , C/T=1, Mod 0 ; zamanlayc/saycy balat

MOV TH0, #0 MOV TL0, #0 MOV TMOD, #4 SETB TR0

Zaman dilimi yaratmak Mod 1: 16 bit zamanlayc/sayc Zamanlayc/sayclar, ilemcinin servisine gerek duymadan geri planda alabildiklerinden, zamanlayc/sayclar kullanlarak zaman dilimi yaratmak ve gerek zaman saydrmak olanakldr.

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 ; program balang adresi ; zamanlayc 0 kesme adresi ; zamanlayc 0 kesme programna git ; ana dng balangc ; RTC ilk deerlerini ver ; ana programn yap is

; R0 : uzun zaman dilimi yaratmak iin kullanlan deiken ;TH0 ve TL0 0000h deerine ulanca kesme oluturmak zere programlansn Baslangc:MOV R0, #20h MOV SAN, #00h MOV DAK, #00h MOV SAAT, #00h MOV TH0, #80h MOV TL0, #00h MOV TMOD, #01 MOV TCON, #10h MOV IE, #82h RET 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 ;sayc deikeni azalt ;akmlatore al ;sfr deilse geri don ;R0'n ilk deerini tekrar ykle ;saniye = saniye + 1 ; ;saniye >= 60 ? ; ;saniye = 0 ;dakika = dakika + 1 ;dakika >= 60 ? ; ; ;dakika = 0 ;saat = saat + 1 ;saat >= 24 ? ; ; ;saat = 0 ; ; ; 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

CLR TF0 RETI SAN EQU R2 DAK EQU R3 SAAT EQU R4 End

; ; ; ; ;

Zaman Dilimi Yaratmak Mod 2: 8 bit Otomatik Yeniden-ykleme (Auto-Reload)

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

; program balang adresi ; zamanlayc 0 kesme adresi ; zamanlayc 0 kesme programna git ; ana dng balangc ; RTC ilk deerlerini ver ; ana programn yapt i

; R0 : uzun zaman dilimi yaratmak iin kullanlan deiken ;TH0 ve TL0 0000h deerine ulanca kesme oluturmak zere ;programlansn Baslangc:MOV R0, #20h MOV R1, #80h MOV SAN, #00h MOV DAK, #00h MOV SAAT, #00h MOV TH0, #00h MOV TL0, #00h MOV TMOD, #02 MOV TCON, #10h MOV IE, #82h program RET ; 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 ; ; ;

TC0KESME: DEC R1 MOV A, R1 JNZ TC0CIK MOV R1, #80h DEC R0 MOV A, R0 JNZ TC0CIK

TC0CIK:

MOV R0, #20h 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 R2 R3 R4

; R0 ilk deerini tekrar ykle ;saniye = saniye + 1 ; ;saniye >= 60 ? ; ;saniye = 0 ;dakika = dakika + 1 ;dakika >= 60 ? ; ; ;dakika = 0 ;saat = saat + 1 ;saat >= 24 ? ; ; ;saat = 0 ; ; ; ; ; ; ;

SAN EQU DAK EQU SAAT EQU END

Zamanlayc/Saycnn Mod 3 de kullanm Bu modda zamanlayc/saycnn TH0 ve TL0 registerleri iki bamsz sayc olarak kullanlr. TCON ve TMOD registerlerindeki bit kontrolleri TH0 registerindeki tamalar kontrol eder. Kesme oluumu TH0'n tamas ile meydana gelir. Pals Genilii veya olay zaman lme (Gating) Zamanlayc/sayc Mod 3 kullanlarak, pals genilii, geen zaman ve durum saym gerekletirilebilir. Kaplama biti (Gating) aktiflendiinde, zamanlayc yalnzca, INTx girii "1" olduu srece aktif kalr. Bu sayede, INTx giriindeki bir sinyalin aktif olduu zaman miktarn bulmak mmkndr. Aadaki rnek, byle bir uygulamay anlatmaktadr. org 0000h JMP AnaProgram org 000Bh SETB F0 RETI org 001Bh RETI Anaprogram: CALL BaslangIc lp1: JNB P3.2, lp1 lp2: JB P3.2, lp2 ; program balang adresi ; Zamanlayc 0 kesme adresi ; F0 bitini tasma olduunu belirtmek zere aktifle ; kesmeden dn ; Zamanlayc 1 kesme adresi ; Kesmeden dn ;INT0 dkse dng ;INT0 yksekse dng

;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

BaslangIc: MOV TH0, #0h MOV TL0, #0h MOV TMOD, #07h MOV TCON, #10h MOV IE, #82h CLR F0 RET Hata: CevIr: RET end JMP HataIsleme

; ; ;C/T=1, Mod 3, Timer 0 ;zamanlaycy balat ;Kesmeleri aktifle ;F= bayran temizle ;

;

8051 KesmelerKesme 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.

Hangi Olaylar Kesme Aktifleyebilir ve Bu Kesmeler Nasl lenir 8051'in temel kesme kaynaklar aada verilmitir. 8051 bu kesmelerden biri veya birden fazlas kesme oluturacak ekilde programlanabilir Zamanlayc 0 tamas Zamanlayc 1 tamas Seri bir karakter konmas veya yazlmas

Harici kesme 0 Harici kesme 1 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.

8051'in kesme oluumunu kontrol etmesi 8051 otomatik olarak her bir komuttan sonra bir kesme oluup olumadn kontrol eder. Kesme koullarn konrol ederken, hangi kesmenin olutuunu belli bir srada kontrol eder. Bu konrol sras aadaki gibidir. D kesme 0 Zamanlayc 0 kesmesi D kesme 1 Zamanlayc 1 kesmesi Seri port kesmesi Buna gre rnein, seri port kesmesi ve d kesme 0 aynu anl olarak olumusa, nce d kesme 0 program ilenecektir. D kesme 0 program tamamlandktan sonra da seri kesme program tamamlanacaktr.

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.

Bir kesme olutuunda 8051 entegrenin yapt ilemler Bir kesme olutuunda 8051 otomatik olarak aadaki ilemleri gerekletirir. Program saycs yna yazlr, nce program saycsnn dk bayt daha sonra program saycsnn yksek bayt yna yazlr. Ayn ncelikli ve dk ncelikli dier kesmeler bloke edilir. Zamanlayc kesmesi ve d kesmelerde, kesmeye karlk gelen kesme bayra temizlenir. Program almas kesme vektr adresine geirilir.Kesme program altrlr. nc adma tekrar dikkat edelim. Eer ilenen kesme zamanlayc kesmesi veya d kesmelerden biriyse, bu kesmeye karlk gelen kesme bayra otomatik olarak temizlenmektedir. Bu nedenle program ierisinde bu bayraklar temizlemeye gerek yoktur.

Bir Kesme Sonunda 8051 entegrenin yapt iler Bir kesme program, RETI komutu ile sonlandrlr. RETI komutuna rastlandnda 8051 otomatik olarak aadaki iki ilem yaplr. Yna yazlan program saycs deeri yndan geri alnr. Kesme stats kesmeden nceki durumuna getirilir. Seri Port Kesmeleri Seri port kesmeleri dier kesmelerden baz farkllklar gsterir. Bunun sebebi seri port kesmesinin iki farkl kesme bayrana (RI ve TI) sahip olmasdr. Eer bu bayraklardan birisi aktif olursa seri port kesmesi aktiflenmi olacaktr. Daha nceki tartmalardan da hatrlanabilecei gibi seri porttan bir karakter okunduunda RI kesmesi, seri porta bir karakter yazldnda ise TI kesmesi aktiflenecektir. Buna gre eer bir seri port kesmesi olumusa, ya bir karakter okunmutur, yada bir karakter yollanmtr. Dolaysyla yazlacak kesme program bu iki durumdan hangisinin gerekletiini anlamak ve ona gre gerekli ilemleri yapmak durumunda kalacaktr. Ayn zamanda 8051 RI ve TI bayraklarn otomatik olarak temizlemedii iin , yazlan kod bu bayraklar kendisi temizlemek durumundadr. Aada basit bir seri kesme program gsterilmektedir. SERI_KESME : JNB RI,CHECK_TI ; RI "0" ise TI_KONTROL MOV A,SBUF ; RI = 1, karekteri oku CLR RI ; RI bitini temizle CHECK_TI: JNB TI, KESME_SONU ; TI "0" ise KESME_SONU CLR TI ;TI bitini temizle MOV SBUF,#A ;Seri porta "A" karakteri yolla KESME_SONU: RETI

Yukardaki kodda da grlebilecei gibi, program iki seri port kesme bayran kontrol etmektedir. Eer her iki bayrakta aktif durumdaysa, kodun iki blm de altrlacaktr. Dikkat edilmesi gereken dier bir nokta da her iki blmn sonunda da ilgili kesme bayra temizlenmektedir. Eer kesme bayran temizlemeyi 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 bayran deeri temizle ykle

25h

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

Kesmelerle lgili ok Karlalan Problemler Kesmeler 8051 programcsnn kullanabilecei gl programlama kavramlardr. Fakat yanl kullanlmalar durumunda, kesmelerden kaynaklanan hatalarn tespit edilmesi son derece zordur. Eer programlarnzda kesme kullanyorsanz, ve programlarnz zaman zaman hi beklenmedik hatalara neden oluyorsa, aadaki nemli kurallar dikkatlice incelemeniz faydal olacaktr.

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.

RETI komutu yerine RET komutu kullanlmas: ok karlalana hatalardan birisi de kesme program dnnde, RETI komutu yerine yanllkla RET komutunun kullanlmasdr. RETI komutu yerine RET komutu kullanldnda, ilk bata programnz normal alyor gibi grnebilir. lk kesme geldiinde, kesme program doru alacaktr. Fakat daha sonraki kesmelerde kesme hizmet program devreye girmeyecektir.

GiriBtn 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