Bölüm I
BÖLÜM I
GİRİŞ
Günümüzde mikroiÅŸlemci kelimesi pek çok insan için yabancı olmayıp herkese fraklı anlam ifade eder. Teknik olmayan pek çok kiÅŸi , mikroiÅŸlemcinin , bir kiÅŸisel bilgisayarda (PC) kullanılan , bilgisayarını gücünü belirleyen çok önemli bir elektronik tümdevre olduÄŸunu bilir. PC‘lerden baÅŸlayıp ,diz üstü PC’ler, minibilgisayarlara kadar bütün bilgisayarlar, mikroiÅŸlemcinin görevini gerçekleÅŸtiren , daha genel bir ifadeyle ,bir iÅŸlemciye sahiptir. Bilgisayarlardaki iÅŸlemciler , 1950’lerden günümüze çok deÄŸiÅŸik ÅŸekiller almıştır. Günümüzde tipik bir bilgisayar üç ana birimden oluÅŸur :
1- Merkezi İşlem Birimi(Central Processing Unit-CPU) 2- Hafıza (Memory) 3- Giriş/ Çıkış(I/O) Birimleri
CPU ,bilgisayarın deÄŸiÅŸik birimleri arasındaki veri akışı ve veri iÅŸleme görevlerini yerine getirir. Veri iÅŸlemenin çoÄŸu, CPU içindeki aritmetik lojik birimde gerçekleÅŸtirilir. CPU çeÅŸitli komutları yürüterek , bilgisayar sisteminin çalışmasını yönetir. Bilgisayar hafızasında saklı olan komutlar, bilgisayarın yürüteceÄŸi programı oluÅŸturur. Bir CPU‘ daki kontrol alt birimi, sistemdeki veri akışını yönetir, hafızadan okunan komutu çözer ve komut tarafından belirlenen iÅŸlemi yerine getirir. İşlemler ,veri transferi veya ALU’ daki iÅŸlemlerdir. ALU , toplama ,çıkarma .çarpma ,bölme gibi temel aritmetik iÅŸlemler ve lojik iÅŸlemleri yerine getirir. Lojik iÅŸlemler, AND, OR ve EX-OR gibi iÅŸlemlerdir.
Dış dünyadan CPU’ ya veri transfer eden alt birim giriÅŸ cihazıdır. GiriÅŸ verisi, bir insan ,diÄŸer bir bilgisayar veya baÅŸka bir elektronik sistem gibi çok deÄŸiÅŸik kaynaklardan gelebilir. CPU tarafından iÅŸlenen veri , hemen çıkışa gönderilebilir veya daha sonra iÅŸlenmek üzere hafızada saklanır. CPU’ dan dış dünyaya veri transfer eden alt birim çıkış cihazıdır. Bu birim ile, göstergeler, yazıcılar ,diÄŸer bilgisayarlara veya elektronik sistemlere veri transfer eden cihazları belirtmektedir.
1971 yılında , bir bilgisayarın ALU ile kontrol birimlerinin bir silikon tümdevresi üzerine , INTEL firması tarafından konulması ile , mikroişlemciler dönemi başlamıştır.
Basit bir teknik tanım ile , mikroiÅŸlemci, yarı iletken tek bir tümdevre üzerine yerleÅŸtirilmiÅŸ CPU’’ya denir. MikroiÅŸlemciler genel amaçlı cihazlar olup bir çok uygulama için uygundur. Bir mikroiÅŸlemci temel olarak CPU’ nun fonksiyonlarını yerine getirdiÄŸi için ,pek çok kere , CPU ile mikroiÅŸlemci eÅŸ anlamda kullanılmaktadır.
Bir bilgisayarın CPU’ su baskı devre kartında bulunuyorsa , bilgisayar , minibilgisayar diye adlandırılır. Bir mikroiÅŸlemci etrafına kurulu bilgisayar, mikrobilgisayar diye adlandırılır. Bir mikrobilgisayarın mikroiÅŸlemcisi, I/O ve hafıza cihazları ,teknolojiye ve uygulamalara göre devamlın deÄŸiÅŸim göstermektedir. Teknolojinin geliÅŸimi doÄŸrultusunda , daha önce mikroiÅŸlemci tümdevresi üzerinde olmayıp dışarıda olan , pek çok giriÅŸ/ çıkış ve hafıza alt birimleri, CPU üzerine taşınmıştır.
Mikrokontrolör , bir tümdevre üzerinde üretilen bilgisayara denir. Bir mikrokontrolör tümdevresinde bulunan hafıza ve giriş/ çıkış alt sistemleri, bu işlemcilerin bir çok uygulama içinde , gömülü olarak doğrudan ve tek başına , mikroişlemcilere göre çok daha basit ve ucuz arabirim teknikleriyle , kontrol amaçlı olarak kullanılmalarını sağlar. Günümüzde mikroişlemciler ev mikrokontrolörler teknolojinin vazgeçilmez birimleri olup , sayısız alanlarda kullanılmaktadır. Bugün ,mikroişlemci ve mikrokontrolör üreten pek çok firma bulunmaktadır. Bunların en önemlileri INTEL ve MOTOROLA firmalarıdır.
Bir mikrokontrolör, özet olarak , kullanıldığı sistemin bir çok özeliğini aynı anda gözleme (monitoring) ,ihtiyaç anında gerçek zamanda cevap verme (real-time response) ve sistemi denetlemeden (control) sorumludur.
Mikrokontrolörler , örneÄŸin , otomobillerde motor kontrol, elektrik ve iç panel kontrol ; kameralarda , ışık ve odaklama kontrol gibi amaçlarla kullanılmaktadır. Bilgisayarlar , telefon ve modem gibi çeÅŸitli haberleÅŸme cihazları ,CD teknolojisi , fotokopi ve faks cihazları , radyo, TV,teyp,oyuncaklar, özel amaçlı elektronik kartlar ve sayılamayacak kadar pek çok alanda , mikrokontrolörler yoÄŸun olarak kullanılmaktadırlar. Bu kadar geniÅŸ uygulamalarda kullanılan mikrokontrolörler , tümdevre –üzerinde yer alan çok deÄŸiÅŸik donanım özelikleri sunmaktadır. Bu özeliklerden bazıları ÅŸunlardır :
Paralel ve Seri I/O portları ,zamanlayıcı / sayıcılar, ADC, ve RAM, ROM, EPROM ve EEPROM gibi değişik kapasitelerde ve özeliklerde hafıza birimleri.
Mikrokontrolörlerin yoğun olarak kullanıldığı elektronik ve kontrol uygulamalarının yapısı , mikrokontrolör , onun arkadaşı olan genel amaçlı mikroişlemciden ayırmaktadır. Bu uygulamalarda gerçek zaman (real time) işlemi ve çok görevlilik( multi-tasking ) özeliği bulunur. Gerçek zamanda işleme , kontrolörün , sinyalleri çalışma ortamından hazır olduklarında alıp ortamı bekletmeden işleyebilmesi demektir. Benzeri şekilde ,kontrolör ihtiyaç anında çalışma ortamına ,gereken kontrol sinyallerini göndermeli ve ortamı bekletmeyecek tarzda hızlı olmalıdır. Diğer bir deyişle mikrokontrolör , sistemin çalışmasında sınırlayıcı etmen olmamalıdır. Çok görevlilik, bir çok görevi aynı anda veya aynı anda gibi yapabilme kapasitesidir.
BÖLÜM II
8051
2.1 8051 MİKROKONTROLÖR AİLESİ
8051 Intel firması tarafından , 1980 ‘lerin başında piyasaya sunulan , dünyanın en popüler 8-bit mikrokontrolörüdür. Bu mikrokontrolör için , baÅŸta Intel olmak üzere , pek çok üretici firma (Philips , Dallas, Siemens ,Oki ve Matra/Harris gibi) geniÅŸ bir donanım ve yazılım desteÄŸi sunmuÅŸ ve bunun neticesi, 8051, 1980‘lerden bugüne , bir endüstri standardı olmuÅŸtur.
8051 ailesi bazen MCS-51 ailesi olarak da belirtilir. “ MCS” harfleri, geleneksel olarak , Intel firmasının üretmiÅŸ olduÄŸu , bir sistemi veya CPU ‘lar , hafızalar, saat üreteçleri, giriÅŸ/ çıkış birimleri ve benzeri birimler içeren , mikrobilgisayar ve uyumlu parçaları (components) belirtmede kullanılmıştır. Kitapta 8051 ve MCS-51 ifadeleri , eÅŸ anlamlı olarak aynı aileyi belirtmek için kullanılmıştır ve genelde ,bir iÅŸlemciyi belirtmeyip ailenin ismi olarak kullanılmaktadır. Bununla beraber , 8051, MCS-51 ailesinin ilk üyelerinden olan , 8051, 8751 ve 8031 mikrokontrolörlerinden birinin de adıdır. Bugün için deÄŸiÅŸik mikrokontrolör aileleri arasında ,8051 ailesi, geliÅŸmiÅŸ ürünleriyle beraber yaklaşık % 40 gibi bir piyasa payına sahiptir. 8051 ailesinin temel özelikleri aÅŸağıda maddeler halinde özetlenmektedir:
Popüler : Kolay bir şekilde bulunmakta ve desteklenmektedir. 8051 geliştiricileri için bir çok Internet Web sayfası , kitaplar , teknik dökümanlar , yazılım ve donanım gereçleri bulunmaktadır.
Uygun, Hızlı ve güçlü : 8051 çekirdek mimarisi hedef kontrol uygulamalar için çok uygun olup hızlı ve güçlüdür.
GeniÅŸ yelpaze ve uyumluluk :Çok deÄŸiÅŸik 8051 ürünleri olmasına karşın , ikili kod düzeyinde bütün ürünler uyumludur (compatible). DiÄŸer mikrokontrolör aileleri , 8051 ‘in sunmuÅŸ olduklarını , farklı ve uyumsuz iÅŸlemcilerle (genellikle tek üretici firma kaynaklı olarak ) ancak saÄŸlayabilmektedir. Bu uyumluluk , kolaylık ve esneklik , program geliÅŸtirme araçlarında , eÄŸitiminde ve yazılım desteÄŸinde de bulunmaktadır.
Çok kaynaklılık : Günümüzde çok değişik 8051 işlemcisi üreten 12 üreticinin üzerinde firma bulunmakta ve sayısız yazılım ve bilgi kaynakları bulunmaktadır.
Sürekli iyileÅŸtirme: 1980‘lerden bugüne silikon ve tasarım olarak sürekli geliÅŸtirilen 8051’ler hızını ve gücünü arttırmıştır. Günümüzde 16-bit modellerinin de bulunduÄŸu 8051’ler deÄŸiÅŸik kapasite , boyutlarda ve fiyatlarda kolay bir ÅŸekilde temin edilebilmektedir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image002.gif[/IMG] Şekil-2-1 8051 Mikrokontrolör Blok Diyagramı
8051 ailesi 8-bit single-chip mikrokontrolör ‘ler sanayi uygulamaları için geliÅŸtirilmiÅŸ üzerinde hem giriÅŸ hem de çıkış için kullanılabilen 4 adet I/O port’u bulunan ayrıca bu portları Data ve Adres hatları olarak kullanabilen bir yapıya sahiptir. 8051′de Program Bellek olarak 8KB ROM, 8751′de ise 8KB EPROM vardır. Program Bellek 16-bit adresleyebildiÄŸinden, Program BelleÄŸimiz 64 KB olabilir.16-bitlik Data Bellek’ in adreslenebilmesi CPU’ da bulunan DPTR register’ i sayesinde mümkündür. Program Bellek yalnız okunabilir,yazılamaz. Bu ailede 64KB’dan büyük Program Bellek alanına sahip olan iÅŸlemciler de vardır. 8051′de programın ilk 4KB’lık kısmı chip üzerinde bulunan ROM’ da tutulabilir. ROM’ suz versiyonlarda Program Bellek haricidir ve örneÄŸin EPROM olabilir. Bu versiyonlarda harici Program Bellek ucu PSEN (Program Store Enable) ‘dir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image004.jpg[/IMG] Şekil-2-2 ALE Kullanımı İle Harici Program Kodunun Okunma Zamanlaması
Data Bellek (RAM) ,Program Bellekten ayrı bir adres alanını iÅŸgal eder. 8051′de 128 Byte’ lık Data Bellek chip’ in üzerindedir. Bunlarda en fazla 64KB harici RAM ,harici Data Bellek alanında adreslenebilir. ROM’suz versiyonlarda 128 Byte’ lık Data Bellek (RAM) chip üzerindedir. CPU’ nun RD ve WR bacaklarından çıkan okuma ve yazma sinyalleri ile ihtiyaç duyulan Data Bellek’ e eriÅŸilebilinir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image006.jpg[/IMG] Şekil-2-3 Ortak Adres ve Data Yolunun Program Kodu Okunması Sırasındaki Zamanlaması
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image008.jpg[/IMG]
Şekil-2-4 Okuma İşlemi Zamanlaması
RD ve PSEN sinyalleri lojiksel olarak AND’ lenirse bu çıkış ucu harici Program/Data Bellek için okuma sinyali oluÅŸturulabilir. 8051 Blok Diyagramı ÅŸekil-2-4.’de verilmiÅŸtir.
Reset’ ten sonra CPU programını icra etmeye 0000H adresinden baÅŸlar. Program Bellek’ in bazı bölgeleri İnterrupt’ lar için ayrılmıştır. Gelen interrupt CPU’ nun bu adres alanına atlamasına ve buradan servis programının icrasına baÅŸlamasına neden olur. ÖrneÄŸin harici INT0 interrupt’ ı 0003H bölümüne ayrılmıştır. EÄŸer harici INT0 kullanıma girerse, program servis rutini 0003H bölümüne atlayarak interrupt’ a cevap vermeye çalışır. EÄŸer harici INT0 kullanımda deÄŸilse servis rutini genel Program Bellek’ i okumaya ve icra etmeye devam eder.
İnterrupt servis bölümleri 8 Byte’ lık aralarla yerleÅŸtirilmiÅŸlerdir.
Örneğin; Vektör Adres
Interrupt-0 : 0003H
Timer -0: 000BH
Interrupt-1: 0013H
Timer-1: 001BH
RI+TI: 0023H ‘dir.
Program Bellek’in (ROM) , harici ROM veya dahili ROM’ dan hangisinin seçileceÄŸi chip üzerindeki EA (External Access) bacağının durumuna baÄŸlıdır. EÄŸer EA bacağı +5V potansiyeline çekilirse program direk olarak dahili ROM’un 0000H ile 0FFFH adreslerinden çaÄŸrılır. EÄŸer program 1000H ile FFFFH adreslerinden çağırılıyorsa harici ROM kullanıldığı anlaşılır. EA bacağı toprak potansiyelinde ise tüm program harici ROM(EPROM) ‘dan direk olarak çaÄŸrılır. ROM’ suz versiyonlarda(8031-80C31) program’ ın harici Program Bellek alanından çaÄŸrılması için EA bacağı toprak potansiyeline çekilmelidir
Harici program icrası için donanım konfigürasyonu ÅŸekil-2-5′ de gösterilmiÅŸtir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image009.gif[/IMG] Şekil-2-5. CPU-EPROM ve Latch ile Harici Program Kodunun Okunması İçin Gerekli Donanım
Burada P0 ve P2 (16-bit I/O hattı) external Program Bellek’ ten programı getirmek için bum fonksiyonlarını yerine getirmek görevini üstlenmiÅŸlerdir. P0 (PORT-0) adres ve data hattının çoÄŸullanmasından oluÅŸmuÅŸtur. Böylece CPU’ nun bacak sayısı azaltılabilmiÅŸtir. Bu çoÄŸullama iÅŸleminden adres ve data hatlarını birbirinden ayırma iÅŸlemi CPU’ dan çıkan ALE (ADDRESS LATCH ENABLE) bacağı sayesinde olmaktadır.
Dahili Data Bellek alanı 3 bellek bloÄŸuna bölünmüştür ve bunlar 128 Byte’ n altı,üstü ve SFR (Special Function Register) olarak bilinir. Dahili Data Bellek adresleri her zaman 1Byte’lıktır. Bu yüzden bu adres alanı yalnızca 256 Byte’ ı ima eder. Kuramsal olarak Data Bellek alanı 384 Byte olarak farz edilir. Bu bellek’in 7FH’dan üstüne, direk adresleme ve indirek adresleme yöntemleri ile iki farklı bellek alanına eriÅŸilir. Kuramsal olarak kabul edilen bu bellek alanından fiziksel olarak 256 Byte’ ından faydalanılır. 80H ile FFH adresleri arasındaki bellek alanı SFR, 00H ile 7FH adresleri arasındaki bellek alanı ise Dahili Kullanılabilir RAM olarak adlandırılır.
Dahili RAM’ n 128 Byte’ lık alt kısmına direk ve indirek adresleme ile ulaşılabilir. Dahili RAM 4 Register Bankı (yığını) (Bank0′dan Bank3′e) ve bu bankların her biri 8 registerden oluÅŸan kullanışlı bir bellek alanıdır. Bu bankların seçimi SFR içindeki PSW (Program Status Word)’deki RS0 veRS1 (Register Selection bits) bitlerinin durumuna göre belirlenir.
SFR kısmına ise sadece direk adresleme ile ulaşılabilir. Dahili RAM’ ın 128 Byte’ lık üst kısmında, komut takımı komutları ile, 128 Byte direk olarak adreslenebilir. SFR ; port adresleri, timer , status ve kontrol bitlerini, akümülatör , stack pointer vs gibi kaydedicileri (register) içerir. Buradaki register’ lara yukarıda da deÄŸinildiÄŸi gibi yalnız direk adresleme ile eriÅŸilebilir. SFR’ nin içindeki 60 adres alanı hem byte hem de bit bit adreslenebilir. Bitleri adreslenebilen SFR alanlarının adreslerinin sonu 0H ya da 8H deÄŸerindedir.
Tüm bunların yanı sıra 8051 MCU’ da;
·2 adet 16 bitlik timer/event (zaman/olay) sayıcı
·Full dublex seri giriş/çıkış ara yüzü
·Boolean işlemler yapabilme
·Entegre üzerinde dahili osilatör
·İki öncelikli bölüm ile 5 interrupt kaynağı yapısı
·Çarpma,bölme,çıkarma ve karşılaştırma emirleri
·3.5MHz-15MHz arası saat frekansı
·128 Byte stack genişliği özellikleri de vardır.
8051 CPU’ nun bacak baÄŸlantı yapısı ÅŸekil-2-6′ da verilmiÅŸtir. Burada bulunan 4 port’ un da ortak özellikleri çıkışlarının latch’ lanmış , iki yönlü dahili pull-up’ lıdır. Yani bir sonraki bilgi gelene kadar önceki bilgiyi portta tutar.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image010.gif[/IMG]
Şekil- 2-6 8051 Mikrokontrolör Bacak Bağlantıları
RST bacağı yüksekte iken ve osilatör çalışıyorken iki makine periyodu için CPU resetlenir. Sistem çalışıyorken RST pini 0V potansiyelinde ve reset anında +5V potansiyelinde olması gerekmektedir. Eğer sürekli olarak +5V seviyesinde ise CPU sürekli resetleniyor ve herhangi bir program icra edemiyor demektir.
RxD ve TxD pinleri seri iletişim için data alma ve data gönderme işlevini yerine getirir.
Şekil 2.6. 8051 Bacak Yapısı
INT0 veINT1 pinleri harici interrupt giriş uçlarıdır.
T0 ve T1 pinleri zamanlayıcı harici giriş uçlarıdır.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image012.jpg[/IMG] Şekil-2-7 Portların Giriş/Çıkış Durum Özellikleri
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image014.jpg[/IMG]
Şekil-2-8 İki yönlü Çıkış Yapısı
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image016.jpg[/IMG]
Şekil-2-9 Open-Drain Çıkış Yapısı
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image018.jpg[/IMG]
Şekil-2-10. Push-Pull Çıkış Yapısı
XTALL1 veXTALL2 pinleri ise CPU’ nun dahili osilatörüne baÄŸlı bacaklardır. Hem harici uygun frekanslı kristal baÄŸlayarak hem de harici osilatör kullanarak CPU çalıştırılabilir.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image020.jpg[/IMG]
Şekil-2-11 Saat İşaretinin Üretilmesi İçin Kristal veya Harici Saat Kullanımı
Sistemin resetlenmesini saÄŸlamak için ÅŸekil-2-12′deki devre (Power-ON Reset) kullanılabilir. Devreye baÄŸlanan R ve C’nin deÄŸeri deÄŸiÅŸtirilerek reset süresi deÄŸiÅŸtirilebilir. KurduÄŸum devrede R=8.2K ve C=10nF’dır.
[IMG]file:///C:/DOCUME%7E1/Yasin/LOCALS%7E1/Temp/msohtml1/01/clip_image022.jpg[/IMG]
Åžekil-2-12. Power-ON Reset Devresi
2.1. 8051 Komut Kümesi
8051 komut kümesi üçe ayrılır. Bunlar ; veri transfer komutları , veri işleme komutları ev program akışı kontrol komutlarıdır.
Gösterim İşlem
Adresleme modları Dir
Ind
Reg
Imm
MOV A ,<src>
A = <src>
* * * * MOV <dest>, A
<dest> =A
* * * MOV <dest> ,<src>
<dest>=<src>
* * * * MOV DPTR, #data16
DPTR =16-bit ivedi sabit
* PUSH <src>
INC SP : MOV @SP , <src>
* POP <dest>
MOV<dest> , @SP : DEC SP
* XCH A , <byte>
ACC ó <byte>
* * * XCHD A ,@Ri
ACC ó @Ri (Düşük 4-bit)
* Tablo-2-1 ahili Veri Hafıza Alanına Veri Transfer Komutları
Adres geniÅŸliÄŸi
Gösterim
İşlem
8- bit
MOVX A, @Ri
Harici RAM @Ri ‘ yi oku
8- bit
MOVX @Ri, A
Harici RAM @Ri ‘ yi yaz
16- bit
MOVX A, @DPTR
Harici RAM @DPTR‘ yi oku
16- bit
MOVX @DPTR ,A
Harici RAM @DPTR‘ a yaz
Tablo-2-2 :Harici Veri Hafıza Alanına Erişen Veri Transfer Komutları
Gösterim
İşlem
MOVC A, @A+DPTR
Prog. Hafıza @(A+DPTR)Hücresini Oku
MOVC A, @A+ PC
Prog. Hafıza @ (A+PC ) Hücresini Oku
Tablo-2-3 : Tablo Okuma Komutları Gösterim İşlem
Adresleme modları Dir Ind Reg Imm ADD A , <byte>
A =A +<byte>
* * * * ADDC A ,<byte>
A =A +<byte> +C
* * * * SUBB A ,<byte>
A =A -<byte>- C
* * * * INC A
A =A +1
Sak. Özel (sadece ACC) INC <byte>
<byte> =<byte>+1
* * * INC DPTR
DPTR =DPTR +1
Sak. Özel (sadece DPTR) DEC A
A=A-1
Sak. Özel (sadece ACC) DEC
<byte>=<byte> -1
* * * MUL AB
B:A =BxA
Sak. Özel (sadece ACC ve B) DIV AB
A =Int (A/B)
B= Mod (A/B)
Sak. Özel (sadece ACC ve B) Sak. Özel (sadece ACC) DIV A
Ondalık Ayar
Tablo-2-4: Aritmetik Komutlar Gösterim İşlem
Adresleme modları Dir Ind Reg Imm ANL A,<byte>
A = A AND<byte>
* * * * ANL <byte> ,A
<byte> = <byte> AND A
* ANL <byte>, #data
<byte> = <byte> AND #data
* ORL A, <byte>
A=A OR <byte>
* * * * ORL <byte>, A
<byte> = <byte> OR A
* ORL <byte>, #data
<byte> = <byte> OR #data
* XRL A, <byte>
A= A XOR <byte>
* * * * XRL <byte>, A
<byte> = <byte> XOR A
* XRL <byte>, #data
<byte> = <byte> XOR #data
* CLR A
A =00H
Sak. Özel (ACC) CPL A
A=NOT A
Sak. Özel (ACC) RL A
ACC’ yi bir –bit sola döndür.
Sak. Özel (ACC) RLC A
Sola CY üzerinden.
Sak. Özel (ACC) RR A
ACC’ yi bir-bit saÄŸa döndür:
Sak. Özel (ACC) RRC A
Sağa CY üzerinden döndür.
Sak. Özel (ACC) SWAP A
ACC’ deki iki 4 –bit ‘i deÄŸiÅŸtir.
Sak. Özel (ACC) Tablo-2-5 :Byte Tabanlı Lojik Komutlar Gösterim
İşlem
ANL C, bit
C bayrağını adreslenen bit ile AND ‘le
ANL C, /bit
C bayrağını adreslenen bit in tersi ile AND‘ le
ORL C, bit
C bayrağını adreslenen bir ile OR‘ la
ORL C, /bit
C bayrağını temizle
CLR C
Adreslenen bit ’i temizle
CLR bit
C bayrağını tersle
CPL bit
Adreslenen bit’ i tersle
SETB C
C bayrağını 1 ‘le
SETB bit
Adreslenen bit’ i 1’ le
Tablo-2-6 : Bit Tabanlı Lojik Komutlar Gösterim Açıklama SJMP <rel data>
(Short Jump –Kısa dallanma )operand 2-nin tümleyeni tek bir byte olup deÄŸeri PC’ ye eklenir. Bir sonraki komut, 127 byte ileri veya 128 byte gerideki bir komut olacaktır.
AJMP <Address 11> (Absolute Jump- Mutlak Dallanma) Operand 11- bit bir adres olup Program Hafızanın o anki 2 Kbyte’ lık alanı içine karşı gelir.
LJMP<Address 16> (Long Jump – Uzun Dallanma) Operand 16- bit bir adres olup Program Hafızanın 64 Kbyte‘ lik alanı içinde bir yere karşı gelir.
LJMP @ A + DPTR (Long Jump – Uzun Dallanma) Yürütülecek bir sonraki komutun adresi ,ACC ile DPTR ‘ın toplamıdır.
Tablo-2-7 : Durumdan Bağımsız Dallanma Komutları Gösterim
Açıklama
ACALL<address 11>
(Absolute Call)
PC yığın hafızaya atılır ,11-bit adres PC’ye yerleÅŸtirilir.11-bit adres ile ,Program Hafızada 2K byte’ lık bir alan içinde dallanma gerçekleÅŸir.
LCALL<address 16>
(Long Call)
PC yığın hafızaya atılır ,16-bit adres PC’ye yerleÅŸtirilir.16-bit adres ile ,Program Hafızada 64K byte’ lık bir alan içinde dallanma gerçekleÅŸir.
RET
(Return)
Yığından ,PC olarak alınacak değer okunur.
RETI
(Return from Interrupt)
Yığından PC olarak alınacak değer okunur ve kesme donanımı sıfırlanır.
Tablo-2-8 : CALL ev RET komutları Gösterim Açıklama JZ<rel add> (jump if ACC zero)
EÄŸer ACC sıfır ise , 2’ nin tümleyeni olan byte operand PC’ye eklenir.
JNZ<rel add> (jump if ACC Notzero)
EÄŸer ACC sıfır deÄŸil ise , 2’ nin tümleyeni olan byte operand PC’ye eklenir.
JC<rel add> (jump if carry is set)
EÄŸer elde bayrağı 1 ise , 2’ nin tümleyeni olan byte operand PC’ye eklenir.
JNC<rel add> (Jump if Carry not set)
EÄŸer elde bayrağı 1deÄŸil ise , 2’ nin tümleyeni olan byte operand PC’ye eklenir.
JB<bit>, < rel add> (jump if Bit set)
EÄŸer ilk operand (adreslenen bit) 1 ise , 2’ nin tümleyeni olan ikinci byte operand PC’ye eklenir.
JNB <bit>, < rel add> (jump if Bit not set)
EÄŸer ilk operand (adreslenen bit) 1 deÄŸil ise , 2’ nin tümleyeni olan ikinci byte operand PC’ye eklenir.
JBC <bit>, < rel add> (jump if Bit set and Clear bit)
EÄŸer ilk operand (adreslenen bit) 1 ise , 2’ nin tümleyeni olan ikinci byte operand PC’ye eklenir. Komuttan sonra bit temizlenir.
CJNE A, direct, <rel add> (Compare and Jump if not equal)
Birinci operand ACC ; ikinci bir dahili saklayıcı ; ve üçüncü , göreceli adres. EÄŸer ACC ‘nin içeriÄŸi saklayıcıdan farklı ise, 2’ nin tümleyeni olan üçüncü byte operand PC ‘ye eklenir.
CJNE A, # data , <rel add> (Compare and Jump if not equal)
Birinci operand ACC ; ikinci, bir sabit ; ve üçüncü , göreceli adres. EÄŸer ACC ‘nin içeriÄŸi sabitden farklı ise, 2’ nin tümleyeni olan üçüncü byte operand PC ‘ye eklenir.
CJNE Rn, # data ,< rel data> (Compare and Jump if not equal)
Birinci operand Rn ;ikinci operand ,bir sabit; ve üçüncü göreceli adres. EÄŸer Rn’ nin içeriÄŸi sabitten farklı ise 2‘ nin tümleyeni olan üçüncü byte operand PC’ye eklenir.
CJNE @Ri ,# data, < rel add > (Compare and Jump if not equal)
Birinci operand Ri ile iÅŸaretli byte; ikinci ,bir sabit ; ve üçüncü göreceli adres. EÄŸer @Ri’ nin içeriÄŸi sabitten farklı ise 2‘ nin tümleyeni olan üçüncü byte operand PC’ye eklenir.
DJNZ Rn, <rel add>
(Decrement and Jump if not Zero)
Birinci operand Rn ;ikinic ,göreceli adres. EÄŸer azaltılan Rn içeriÄŸi sıfırdan farklı ise, 2’nin tümleyeni olan üçüncü byte operand PC’ ye eklenir.
DJNZ direct ,< rel add>
(Decrement and Jump if not Zero)
Birinci operand bir dahili saklayıcı; ikinci göreceli adres. EÄŸer azaltılan saklayıcının içeriÄŸi sıfırdan farklı ise , 2‘ nin tümleyeni olan üçüncü byte operand PC’ye eklenir.
Tablo2-9 : Duruma Bağımlı Dallanma Komutları Gösterim
Açıklama
ACALL<address 11>
(Absolute Call)
PC yığın hafızaya atılır ,11-bit adres PC’ye yerleÅŸtirilir.11-bit adres ile ,Program Hafızada 2K byte’ lık bir alan içinde dallanma gerçekleÅŸir.
LCALL<address 16>
(Long Call)
PC yığın hafızaya atılır ,16-bit adres PC’ye yerleÅŸtirilir.16-bit adres ile ,Program Hafızada 64K byte’ lık bir alan içinde dallanma gerçekleÅŸir.
RET
(Return)
Yığından ,PC olarak alınacak değer okunur.
RETI
(Return from Interrupt)
Yığından PC olarak alınacak değer okunur ve kesme donanımı sıfırlanır.
Tablo2-10 : CALL ve RET komutları 2.1.1. Adresleme Modlarındaki Gösterim :
Adresleme modlarında kullanılan gösterim aşağıda verilmektedir :
Rn : Aktif saklayıcı kümesindeki 8 saklayıcıdan biri.
ACC : Akümülatör
PC : Program Counter
direct : Dahili RAM bölgesinden, bit-adreslenebilir hafıza ve SFR’ lar dahil alana eriÅŸen 8-bit adres.
@Ri : Saklayıcı-dolaylı adresleme modunu gösterir. Aktif saklayıcı kümesinden sadece R0 ve R1 bu modda kullanılabilir. Ri dahili RAM bölgesinden , bit-adreslenebilir hafıza ve SFR’ lar dahil , 8-bit bir adres içerir.
# data : İvedi adreslemede kullanılan 8-bit bir sabit ,yani komutun içindeki veri.
addr16 : 64 K program Hafıza içinde herhangi bir yere işaret eden iki byte adres.
addr11 : Program Hafızada 2K’lık blok içinde, herhangi bir yere iÅŸaret eden 11-bit adres.
rel :Göreceli dallanmada kullanılan ,ikinin tümleyeni ofset adres. Bu adres ile program akışı , PC yi takip eden öndeki –128 byte ve sonraki 127 byte‘ lık bir alan içinde, dallanabilir.
bit : Bit adreslenebilir RAM veya SFR’ ın 8-bit adresi.
reg : Saklayıcı adresleme modu.
dir : DoÄŸrudan (direct ) adresleme.
ind : Saklayıcı-dolaylı( register-indirect) adresleme modu.
imm : İvedi (immediate) adresleme modu.
2.2.1. 8051 Interrupt Yapısı
ROM’ suz ve EPROM’ lu versiyonlarda CPU’ lar 5 interrupt kaynağına sahiptir. Bunlar; 2 harici interrupt, 2 timer interrupt ve seri port interrupt’ ıdır.
İnterrupt yetkileri:Interrupt kaynakları SFR içindeki IE registerinin bitleri set/reset (1/0) yapılarak yetkili veya yetkisiz kılınabilir.
EA - - ES ET1 EX1 ET0 EX0 msb lsb
INTERRUPT ENABLE (IE) REGISTER
EA : Tüm interrupt’ ları yetkisizleÅŸtirebilir. EÄŸer EA=0 ise interrupt’ lar yetkisizdir ve EA=1 ise diÄŸer interrupt bitleri set/reset’ lenerek interrupt’ lar yetkili/yetkisiz yapılabilir.
ES : Seri port interrupt yetki biti
ET1 : Timer1 taÅŸma interrupt yetki biti
EX1 : INT1 bacağından gelen interrupt yetki biti
ET0 : Timer0 taÅŸma interrupt yetki biti
EX0 : INT0 bacağından gelen interrupt yetki biti
Interrupt Öncelikleri:Interrupt öncelikleri SFR içindeki IP registerinin programlanması ile belirlenebilir.
- - - PS PT1 PX1 PT0 PX0 msb lsb
INTERRUPT PRIORITY (IP) REGISTER
PS : Seri port interrupt’ ı öncelik kontrol biti. 0 ise düşük ,1 ise yüksek öncelikli.
PT1 : Timer1 Int. öncelik kontrol biti
PX1 : INT1 bacağı Int. öncelik kontrol biti
PT0 : Timer0 Int. öncelik kontrol biti
PX0 : INT0 bacağı Int. öncelik kontrol biti
Eğer farklı önceliklere sahip iki interrupt isteği eşzamanlı alındığında istek yüksek öncelikliye servis verilecektir. Eğer öncelikleri yazılımla tanımamışsak CPU kendi belirlediği interrupt öncelik sırasına göre hizmet verir. Buna göre en yüksek öncelikliden en düşük öncelikliye göre sıralanmış interrupt kaynakları şöyledir;
·IE0
·TF0
·IE1
·TF1
·RI ya da TI .
İnterrupt yetki bayrakları setlenmiÅŸ interrupt alındığında LCALL emiri ile belirtilen adrese atlanılır ve gerekli servis programı çalıştırılır. LCALL emirinden önce programın kesildiÄŸi yeri belirten PC (Program Counter)’nin içeriÄŸi otomatik olarak stack’ e itilir ve iÅŸlem bitirildikten sonra tekrar otomatik olarak yüklenir. EÄŸer istenilen register’ ların stack bellek’ e itilmesi isteniyorsa bu iÅŸlem programcı tarafından yapılmalıdır. ÖrneÄŸin ;
PUSH IE
MOV IE,#MASK
CALL LABEL
————————-
POP IE
RET
LABEL:
RETI
gibi…
2.2.2. Zamanlayıcı ve Sayıcı Yapısı (Timer / Counters)
8051 iki 16 bitlik Timers/Counters registeri içerir. Bunlar Timer0 ve Timer1′dir.Her ikisi de zamanlayıcı ya da olay sayıcı olarak konfigüre edilebilir.
Timer (Zamanlayıcı) işlevinde , register her makine saykılın da bir arttırılır. Bir makine saykılı ise 12 osilatör periyoduna eşittir. Böylece sayma hızı (count rate) 1/12 osilatör frekansına eşitlenir.
Counter (Olay sayıcı) iÅŸlevinde ise register harici giriÅŸ bacağı yerini tutan T0 veT1′deki her 1′den 0′a geçiÅŸte bir arttırılır.
Timer0 ve Timer1 dört iÅŸlem moduna sahiptir. Zamanlayıcı ya da ‘Olay sayıcı’ iÅŸlevlerinin seçimi SFR’ deki TMOD register’ inin içindeki C/T kontrol biti ile saÄŸlanır. Her iki zamanlayıcı TMOD içindeki M1-M0 bit çiftlerinin sayesinde dört iÅŸlem moduna sahip olur
GATE C/T M1 M0 GATE C/T M1 M0 msb lsb
TIMER-1 TIMER-0
TIMER/COUNTER MODE CONTROL (TMOD) REGISTER
GATE: Kapı Kontrol Setlendiği zaman sadece INTX bacağı yüksek ve TRX kontrol biti 1 ise yetkili olur. Sıfırlandığı zaman, TRX kontrol biti 1 olduğunda Timer/Counter yetkilidir.
C/T: Zamanlayıcı veya Sayıcı seçici Zamanlama işlevinde resetlenir Sayma işlevinde setlenir.
M1 M0 İşlem Modu
0 0 (Mode 0) MCS-48 ile aynı zamanlayıcı özelliğinde TLX 5 bitlik ön ölçeklendirici gibi servis verir.
0 1 (Mode 1) 16 bit zamanlayıcı. TLX ve THX kaskat bağlıdır. Ön ölçeklendirici yoktur.
1 0 (Mode 2) 8 bitlik otomatik yeniden yüklemeli Timer/Counter.
1 1 (Mode 3) TL0 , standart Timer0 kontrol bitlerinin kontrol ettiÄŸi bir
Timer/ Counter. TH0 , Timer1 kontrol bitlerinin kontrol ettiği 8 bitlik bir zamanlayıcıdır.
1 1 Timer1 Timer/Counter durdurulmuÅŸtur.
Mode-0 : Mode 0 ‘da 8051 timer aynen 8048 Timer’ ın yerine konulabilir yani aynı özellikler gösterir. 8 bitlik sayıcı ve 5 bitlik ön ölçeklendirici.
Bu modda zamanlama registeri 13 bit’e ayarlanabilir. 1′den 0′a geçiÅŸler sayılır ve Timer interrupt bayrağı olan TF1 setlenir. TR1=1 ve GATE=0 ya da INT1=1 gerçeklenirse sayılmış giriÅŸ yetkilidir. TR1 kontrol biti SFR’ deki TCON ‘da bulunur. GATE ise TMOD ‘da bulunur.
Mode-1: Mode 0 ile aynıdır,tek farkı Timer registerinin 16 bit olmasıdır.
Mode-2: Timer register 8 bitlik Counter (TL1) ile otomatik yeniden yüklemeli olarak konfigüre edilebilir. TL1 ‘in yeniden yükleme deÄŸeri TH1′de saklanır. Yazılım ile presetlenebilir. TH1′in yeniden yükleme deÄŸeri deÄŸiÅŸtirilemez.
Mode-3: Timer1 sayılacak deÄŸeri tutar. Etkin olabilmesi için TR1=0 ‘a setlenmelidir. Mode 3′de Timer0′ın TL0 ve TH0 iki ayrı sayıcı olarak atanır. Mode 3 bazı uygulamalar için gereken ekstra 8 bitlik Counter üzerindeki zamanlayıcı saÄŸlar. Mode 3′de Timer 0 ile 8051 üç adet Timers/Counters’ a sahip gibi görünür. Mode 3′de Timer/Counter, Seri port için Baud Rate üreteci gibi kullanılabilir ve interrupt istekleri oluÅŸturmakta faydalana bilinir.
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 msb lsb
TIMER/COUNTER CONTROL (TCON) REGISTER
TF1/TF0: Timer 1/0 taÅŸma bayrağı. Timer/Counter’ da taÅŸma olduÄŸunda donanımla setlenir ve interrupt iÅŸlendiÄŸinde resetlenir.
TR1/TR0: Timer 1/0 koÅŸma kontrol biti. Yazılım ile set/reset’lenir.
IE1/IE0: Interrupt 1/0 üstünlük bayrağı. Harici interrupt üstünlüğü belirtildiğinde setlenir ve interrupt işleminde resetlenir.
IT1/IT0: Interrupt 1/0 tipi kontrol biti. Yazılım ile set/reset’lenir.
2.2.3. Güç Kontrolu (Power Control)
8051′de güç harcamasını minimuma indirebilmek için iki yazılım seçim modu vardır. Bunlar; Idle ve Power Down Modlarıdır. CPU Idle modda iken dahili RAM, zamanlayıcı, seri port ve interrupt sistem fonsiyonlarının iÅŸlemesine izin verir. Power Down modunda iken sadece dahili RAM deÄŸerleri korunur ve diÄŸer bütün fonksiyonlar iÅŸlevsizdir. Bu özel modlar yazılım yolu ile aktif hale geçerler. Aktif hale geçirmek için gerekli register SFR’ deki PCON
registeridir
SMOD
-
-
-
GF1
GF0
PD
IDL
msb lsb
PCON(POWER CONTROL REGİSTER)
SMOD : Çift veri iletim hızı (baud) oranı biti. Eğer setlenirse veri iletim hızı iki katına çıkar. Bu halde iken seri port varolan diğer modları kullanır.
GF1 : Genel amaçlı bayrak biti.
GF0 : Genel amaçlı bayrak biti.
PD : Power Down biti. Bu bit setlenirse Power Down moduna girilir.
IDL : Idle mode biti. Setlenirse Idle moduna girilir.
Bazen aynı anda hem PD hem de IDL bitleri setlenmeye çalışılabilir. Bu durumda üstünlük PD’ ye verilmiÅŸ olduÄŸundan Power Down moduna girilir. PCON Registerinin reset deÄŸeri (0***0000)’dır.
2.2.3.1. IDLE Modu
CPU , Idle modunda iken , Stack Pointer(SP), Program Counter (PC), Program Status Word(PSW), Akümülatör , Dahili RAM ve bütün diÄŸer registerlerin deÄŸerleri korunur. Idle modu, donanım ile geçerli bazı interruptlar sayesinde PCON.0′ın resetlenmesi ile sona erdirilebilir. Bu modu sona erdirmenin diÄŸer bir yolu ise donanım reseti vermektir. Önce osilatör koÅŸturulur ve donanım resetinin aktif olabilmesi için yalnızca 2 makine saykılı (24 Osc. Periyodu) ile karşılaşılınca reset iÅŸlemi tamamlanacaktır.
2.2.3.2. POWER DOWN Modu
PCON.1 bitinin setlenmesi ile aktif olur. Power Down’ da osilatör durdurulur. Çipin üzerindeki RAM’ ın ve SFR’ nin içeriÄŸi bu modda korunur. Bu moddan çıkmanın tek yolu donanım reseti vermektir ama donanım reseti vermek SFR yeniden tanımlanmasına raÄŸmen dahili RAM’ ın içeriÄŸi deÄŸiÅŸtirilemez. Power Down modu ile devrede en küçük güç harcaması gerçekleÅŸir ve Vcc gerilimi yaklaşık 2V seviyesini kadar indirilebilir. Ama Power Down moduna girilene kadar Vcc geriliminin düşürülmemesi gerekir. Power Down moduna girildikten en az 10msn sonra Vcc erilimi 2V’a çekilebilir.
2.2.4. 8051 Mikrokontrolörlerde İletişim
Data bir noktadan diğer bir noktaya iletilirken ya seri ya da paralel formatta düzenlenir. Her ikisinin de birbirine göre avantaj ve dezavantajlı olduğu yönler bulunmaktadır. Paralel data transferi genelde belirli sürede çok miktarda data transferinin gerektiği yerlerde kullanılır.(PC ile Printer arasındaki gibi) . Seri data iletim metotlarında yüksek data transfer hızlarına erişilebilir fakat paralel data transferine göre en önemli üstünlüğü datanın iletilebilmesi için gerekli iletken sayısının paralele göre daha az olmasıdır.
2.2.4.1. Paralel HaberleÅŸme
Paralel data transferinde ,bir bilgisayarın mikroişlemcisi ile çevre birimler arasındaki data bus üzerindeki bilgilerin iletimi gibi datalar bu metodda paralel olarak iletilir. Paralel ve seri data transferinde bir karakterin iletimi 8 bit ile yapılıyorsa, paralel data iletimi seri iletime göre daha hızlı olacağı hiç şüphesizdir. Çünkü seri data iletiminde bir karakter iletmek için 8t süre harcanıyorsa (start,stop ve parity bitleri hariç) paralel data iletiminde t kadar bir sürede işlem gerçeklenmiş olacaktır(Buna diğer üç bitin eklenmediğine dikkat !). Paralel data iletiminde polling ve handshaking gibi kontrol işlemleri için de ayrı kabloların kullanılması maliyeti iyiden iyiye arttırmaktadır. Ayrıca uzak mesafelere iletimde sinyal zayıflamasını kompanze etmek için Repeater cihazının kullanılması ekonomikliği ortadan kaldırmaktadır. Böylece paralel data iletimi, bilgisayar sistemlerinin çevre birimlerle haberleşmesinde ve mesafenin kısa olması durumunda tercih edilebilir.
2.2.4.2. Seri HaberleÅŸme
Uzak mesafelere dataların paralel iletimi için kablo ve diğer masrafların çok olmasından dolayı bu durumda daha çok seri data iletimi tercih edilir. Tek bir iletim kanalı üzerinden belirli bir zamanda bir bit iletilmesi seri data transferi olarak adlandırılabilir. Seri iletişim kendi arasında ikiye ayrılır. Şimdi de bunlar hakkında kısa ve öz bilgiler verelim;
2.1.4.2.1. Seri-Senkron HaberleÅŸme
Senkron seri data iletiminde önemli bir konu iletim kanalının iki ucundaki alıcı ve verici düzeneklerin birbiriyle her zaman senkronize çalışması gerekmesidir. Senkronizasyon iÅŸlemi ikinci bir iletim hattı üzerinden ortak bir clock (saat) sinyalinin hem alıcıya hem de vericiye gönderilmesi ile elde edilebilir. İletim kanalının her iki ucunda zamanlamayı saÄŸlamak, senkronizasyonu elde etmek için her zaman bir ana saat sinyali kullanılır. Senkron seri data iletimi veri bloklarının hazır olduÄŸu durumlarda kullanılır. ÖrneÄŸin ; Harddisk’ teki bilgilerin karşı tarafa gönderilmesinde. Senkron iletiÅŸim asenkron iletiÅŸime göre daha karmaşıktır. Bunun ana nedeni alıcı ünitede Byte EÅŸzamanlısının yapılmasının gerekmesindendir.
2.2.4.2.2. Seri Asenkron HaberleÅŸme
Asenkron seri data iletimi, veri iletiÅŸiminde kullanılan en basit ve en kolay yöntemdir. VerimliliÄŸi düşük olduÄŸu için düşük hızlardaki veri iletiminde daha çok kullanılır. Transmitter’ den gönderilen her bir karakter 8 bit ile temsil edilir ve iletim sırasında veri karakterlerinin başına start biti (lojik - 0) ve sonuna parity (hata denetimi amacıyla) ile stop bitleri eklenir.
Her bir data dizisinin ilk biti start bitidir , lojik-1′den lojik-0′a geçiÅŸle belirtilir ve bu start biti bir bit süresince lojik-0′da kalır. Ardından data bitleri gelir ve data biti sayısı 5..8 bit arası seçilebilir. Hemen ardından hata denetimi biti ve stop biti gelir. Stop biti 1,1.5 ve 2 bit sürelerinde seçilir ve bu süre boyunca lojik-1′de kalır. Hat boÅŸ iken aradaki hat sürekli lojik-1 seviyesinde tutulur. Bunun nedeni tabi ki hattaki gürültülerden etkilenmemek içindir.
PC kullanıcıları data iletimi yapmak için bir RS-232 seri port’ a ihtiyaç duyarlar. Bu konnektör için bacak numaraları ve sinyal adları aÅŸağıdaki tabloda verilmiÅŸtir.
BACAK NO ORTAK İSİM RS232C İSMİ TANIM 1 AA Koruma toprağı 2 TxD BA Gönderilen data 3 RxD BB Alınan data 4 RTS CA Gönderme için istek 5 CTS CB Gönderme için serbest 6 DSR CC Veri kümesi hazır 7 GND AB Sinyal toprağı 8 CD CF Alınan hat sinyal algılayıcı 9 10 Veri kümesi testi için ayrılmış 11 Tanımlanmamış 12 SCF İkincil alınan hat sinyali algılayıcı 13 SCB İkincil gönderme serbest 14 SBA İkincil gönderme veri 15 DB İletim sinyal elemanı zayıflaması (DCE) 16 SBB İkincil alınan veri 17 DD Alıcı sinyal elemanı zayıflaması (DC) 18 Tanımlanmamış 19 SCA İkincil gönd.içn istek 20 DTR CD Veri terminali hazır 21 CG Sinyal kalitesi algılayıcı 22 CE Halka gösterge 23 CH/CI Veri sinyali hızı seçici(DTE/ DCE) 24 DA İletken sinyal elemanı zayıflaması 25 Tanımlanmamış
Tablo-2-11- RS-232 Bacak Bağlantıları Tablosu
2.2.4.3. Standart Seri Arabirim
8051′deki seri portumuz Full -Dublex’ tir. Yani hem alıcı hem de verici eÅŸzamanlı olarak gerçeklenebilir. Seri portun alıcı ve verici (receiver - transmitter ) registerlerı SFR ‘de SBUF adı ile bulunmaktadır. Gönderilecek bilgiler SBUF’ a yazılır, alınacak bilgiler ise SBUF’ dan okunur. Seri portun dört iÅŸlem modu vardır;
Mode-0 : Seri data giriÅŸ ve çıkışı RxD üzerindendir. TxD çıkışı saat için kullanılır. Bu uç kaydırmalı-kaydedicileri (Shift -Register) uyarmak için kullanılabilir. 8 bit alınır/gönderilir. Mutlaka TTL veya CMOS kaydırmalı-kaydedicilerle senkronize I/O biçiminde kullanılmalıdır. Bu modun Baud Rate deÄŸeri 1/12 osilatör frekansına eÅŸittir. Sistem seri ise bu modda hız, eÄŸer osilatör 12MHz ise baud rate 1Mbit/sn gibi UART’nin çok üstünde bir deÄŸer olabilmektedir. Ayrıca paralel sistemlerde Shift -Register’ den önce sadece iki hatta (RxD ve TxD) ihtiyaç duyması avantajdır.
Mode-1 : 10 bit RxD ucundan ya da 10 bit TxD ucundan alınır/gönderilir. Bir adet baÅŸlama (start) biti,8 data biti ve birde durdurma (stop) biti bulunur. Alıcı durumda , durdurma biti SCON’ daki RB8 bitinin içeriÄŸine gider. Baud Rate deÄŸeri deÄŸiÅŸkendir.
Mode-2 : 11 bit RxD ucundan ya da 11 bit TxD ucundan alınır/gönderilir. Bir start biti, 8 data biti, bir adet programlanabilir 9. data biti ve bir stop biti bu modda bulunur. Gönderici durumda 9. data biti SCON registerindeki TB8 bitinin içeriÄŸine gider. Ya da örneÄŸin, PSW ‘nin içindeki P (parity bit),TB8 ‘in üzerine taşınabilir. Alıcı durumda 9.data biti SCON üzerindeki RB8 deÄŸerine gider (eÄŸer stop bitine önem verilmezse).Baud Rate deÄŸeri osilatör frekansının 1/32 veya 1/64 ‘ü olarak programlanabilir.
Mode-3 : 11 bit RxD üzerinden veya 11 bit TxD üzerinden alınır/gönderilir. Bir start biti, 8 data biti, bir programlanabilir 9. data biti ve bir adet stop biti bulunur. Gerçekte Mode-3 ile Mode-2 arasındaki fark, Mode-3′ün istisnai Baud Rate deÄŸerlerine ayarlanabilmesidir. Yani Baud Rate deÄŸeri deÄŸiÅŸkendir.
Tüm bu dört modda iletişim bazı komutların SBUF gibi tanımlama registerlerini kullanması ile sağlanır.
SCON registerinin içeriÄŸi yalnız mod seçmek için gerekli bitleri içermeyip ,alıcı ve verici için 9.biti (TB8 ve RB8) ve seri port interrupt bitleri olan RI ve TI ‘yı da içerir.
SM0 SM1 SM2 REN TB8 RB8 TI RI msb lsb
SERİ PORT KONTROL (SCON) REGİSTER
SM0 SM1 mode Baud Rate
0 0 0 Fosc/12
0 1 1 DeÄŸiÅŸken
1 0 2 Fosc/32 yada Fosc/64
1 1 3 DeÄŸiÅŸken
SM0, SM1, SM2 : Seri port modu kontrol biti. Yazılımla set / resetlenir.
REN : Alma yetkili kontrol biti. Seri data alma yetkili/yetkisiz yapmak için yazılımla set / resetlenir.
TB8 : 9. data bitinin (mode-2 ve 3′e göre) gönderilip gönderilmeyeceÄŸini belirlemek için kullanılan yazılım ile set/resetlenebilen bitdir.
RB8 : 9. data bitinin alınıp alınmayacağını belirlemek için kullanılan yazılım ile set/resetlenebilen bitdir.
TI : Gönderme interrupt bayrağı. Byte gönderildiğinde donanım tarafından setlenir. İşlem tamamlandığında yazılım ile resetlenmelidir.
RI : Alma interrupt bayrağı. Byte alındığında donanım tarafından setlenir. İşlem tamamlandıktan sonra yazılım ile resetlenmelidir.
2.2.4.4. Çokişlemcili Haberleşme (Multiprocessor Communications)
ÇokiÅŸlemcili HaberleÅŸmede Mode-2 ve Mode-3 çok özel durumlara sahiptir. Bu modlarda 9.data biti kullanılabilir. Data alınırken 9.bit RB8′e yazılır ve arkasından stop biti gelir. Stop biti alındığında port programlanabilir böylece seri port interrupt’ ı yalnız RB8=1 iken aktif olur. Bu özellik SCON üzerindeki SM2 bitinin setlenmesi ile geçerlidir. Bu özelliÄŸin ÇokiÅŸlemcili HaberleÅŸme sistemlerinde kullanımı ÅŸu ÅŸekilde olabilir;
Birincil(Master) iÅŸlemci bir ya da birkaç İkincil(Slave) iÅŸlemciye data bloklarını göndermek isterken ,ilk olarak hedef slave iÅŸlemciyi tanımlayan adres byte’ larını yollar. Burada adres byte’ ı ile data byte’ larının farkını 9.bit belirler. 9.bit 1 ise adres byte’ ı , 0 ise data byte’ ıdır. SM2=1 yapmak ile , data byte’ ı ile slave iÅŸlemci interruptlanmayacaktır. Adres byte’ ında tüm slave iÅŸlemciler interruptlanacaktır. Bu yüzden slave iÅŸlemciler eÄŸer belirtilen adresin kendi baÅŸlangıç adresleri (kendilerine ayrılan adres ise) olup olmadığını aldıkları adres byte’ ını inceleyerek anlayabilirler. AdreslenmiÅŸ olan slave iÅŸlemci kendi SM2 bitini temizleyecek ve gelecek olan data byte’ larını almak için kendilerini hazırlayacaklardır. Yani slave iÅŸlemciler baÅŸlama adresi verildikten sonra bunun kendi adresleri olup olmadığını test edeceklerdir ve daha sonra gelecek dataları alarak iÅŸleyeceklerdir.
SM2 (SCON.5) biti Mode-0 ‘da kullanım dışıdır ve Mode-1 ‘de stop bitinin saÄŸlamlığını(doÄŸruluÄŸunu) test etmek için kullanılır. Mode-1 ‘de SM2=1 ise alınan interruptlar stop biti alınıncaya kadar aktif olmayacaktır.
2.2.4.4.1. BAUD RATE DeÄŸerleri
Mode-0 ‘da baud rate deÄŸeri (osilatör frekansı/12) ‘dir. Mode-2 ‘de PCON registerindeki SMOD biti 1 ise baud rate 1/32 ve SMOD 0 ise 1/64 osilatör frekansına eÅŸittir. Mode-1 ve Mode-3 ‘de baud rate timer-1′in taÅŸma zamanı (overflow rate) ile karakterize edilebilir.
Timer-1 ‘in Baud Rate Generatörü Olarak Kullanılması:
Timer-1 ‘in baud rate generatörü olarak kullanılırken, baud rate deÄŸeri SMOD bitinin ve Timer-1 taÅŸma deÄŸerine göre karakterize edilmiÅŸtir. Bu uygulamada Timer-1 interrupt’ ı geçersiz kılınacaktır.
Mode-1,3 BR= (2 (SMOD) /32)*(Timer-1 taşma zamanı)
BR : Baud Rate
Timer-1 bazı durumlarda otomatik yeniden yüklemeli (Auto Reload Mode) modda konfigüre edilebilir. Bu durumda baud rate değeri ise;
Mode-1,3 BR=(2* (SMOD) /32)*(O_Freq /(12*[256-(TH1)]))
ile verilebilir.Aşağıdaki tabloda Timer-1 ile çok kullanılan bazı baud rate değerlerinin elde edilmesi için gereken değerler verilmiştir.
Baud Rate OSC_freq (MHz) SMOD C/T c=1,t=0 Mode Reload value Mode-0 Max :1.67MHz 20 X X X X Mode-2 Max : 625 kHz 20.00 1 X X X Mode-1,3 Max : 104.2 kHz 20.00 1 0 2 FFh 19.2k 11.059 1 0 2 FDh 9.6k 11.059 0 0 2 FDh 4.8k 11.059 0 0 2 FAh 2.4k 11.059 0 0 2 F4h 1.2k 11.059 0 0 2 E8h 137.5 11.986 0 0 2 1Dh 110 6.00 0 0 2 72h 110 12.00 0 0 1 FEEBh
{ Timer-1 için }
Özetlenecek olursa seri port timer-1′in taÅŸması tarafından saatlenecektir. Timer-1′in giriÅŸinde osilatör frekansı 12′ye bölünür ya da harici saat uygulanır. Mode-0′da 12MHz’lik bir kristal ile 1Mbit/sn ve Mode-2′de ise gene 12Mhz’lik kristal ile 187.5kHz’lik baud rate deÄŸerlerine eriÅŸilebilir. Mode-1,3′de ise baud rate timer-1′e baÄŸlıdır ve timer yeniden yükleme deÄŸeri ile istenen frekansa eÅŸitlenebilir.
Şimdi bu yeniden yükleme değerinin nasıl hesaplandığına dair bir örneğe bakalım. UART işlem hızının 300 bps ve osilatör frekansının 12Mhz olduğu durumdaki yeniden yükleme değerini hesaplayalım; (ARV:Auto Reload Value)
ARV=(Clock rate)/(12*32*Bit rate) ; 104.16
Eğer T1 üzerinden harici saat kullanılıyorsa;
ARV=(Clock rate)/(32*Bit rate) ; olur.
Yaklaşık tamsayı olarak 104 kabul edilir ve Timer için aktüel deÄŸer 256-104=152=98h ‘ dir. EÄŸer TH1 98h deÄŸeri ile yüklenirse doÄŸru hız olan 300 bps alınır.
Buna göre bizim kullanacağımız sistemde 9600 bps için ve kristalinde 12MHZ olduğu kabulu ile hesap yapılacak olursa;
ARV=12M/(12*32*9600)=3.25 olur.
Yaklaşık olarak 3 kabul edilir ve 256-3=253d=0FCh bulunur.
2.2.5. PC Seri I/O Arayüz Cihazının Kontrolü ve Programlama Çalışmaları
PC’ lerde seri ara yüz I/O cihazı olarak 8250 entegresi kullanılmaktadır. PC’ lerde genel olarak iki seri ve bir paralel portları vardır. Bu sayı genel kullanım için yeterlidir. Amaca göre istenildiÄŸinde arttırılabilir. Sistemde bulunan seri port ,taban vektör ve adresleri tabloda verilmiÅŸtir.
COM1 00000:00400H 03F8H COM2 00000:00402H 02F8H COM3 00000:00404H 0378H COM4 00000:00406H 0278H
Bu portların kullanımı için bazı registerlerin bulunması ve bunların gerekli değerlere setlenmeleri gereklidir. Bu registerler ;
1.Data Register
2.Interrupt Enable Register
3.Interrupt Identification Register
4.Data Format Register
5.Serial Control Register
6.Serial Status Register
7.Modem Status Register’ dir.
1.Data Register:
Data register göndermek ve almak için 1 byte tutar. İçindeki bitler alınacak veya gönderilecek bitleri tutar.
Data Bit7 Data Bit6 Data Bit5 Data Bit4 Data Bit3 Data Bit2 Data Bit1 Data Bit0 msb lsb
2.Interrupt Enable Register:
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Bit0:Veri geldiğinde interrupt üret.
Bit1:Veri gönderme işlemi tamamlandığında interrupt üret.
Bit2:Hat durum değişikliğinde interrupt üret.
Bit3:Modem hattı değişikliğinde interrupt üret.
Bit4-7:Kullanılmaz.
3.Interrupt Identification Register:
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Bit0:Interrupt bekliyor.
Bit1-2: 00:Modem hattında değişiklik oldu.
01:Gönderme tamamlandı.
10:Veri geldi.
11:Hattın durumunda değişiklik oldu.
Bit3-7:Kullanılmaz.
4.Data Format Register:
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Bit0-1:Veri uzunluÄŸu: 00 5bit
01 6bit
10 7bit
11 8bit
Bit2urdurma biti sayısı: 0 1bit
1 2bit
Bit3:Parity var/yok: 0 OFF
1 ON
Bit4:Parity tek/çift: 0 Tek
1 Çift
Bit5 : Stick parity
Bit6 : Set Break
Bit7 : Bölücüye erişim biti: 0 Diğer kütükler
1 Bölücü
5.Serial Control Register:
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Bit0: Terminal iletişime hazır.
Bit1: Gönderme isteği.
Bit2: Out1
Bit3: Out2
Bit4: Geri beslemeli teste geç.
Bit5-7:Kullanılmaz.
6.Serial Status Register :
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Bit0: Veri hazır.
Bit1: Veri ezilmesi var.
Bit2: Parity biti hatası var.
Bit3: Zamanlam