SerkaN
Üye
- Katılım
- 2 Mar 2006
- Mesajlar
- 195
- Puanları
- 6
- Yaş
- 41
1. Genel Tanımlar................................................................................................................... 3
1.1 Microişlemci Nedir?................................................................................................... 3
1.2 Microdenetleyici Nedir?............................................................................................. 5
1.3 Microişlemci-Microdenetleyicinin Tarihsel Gelişimi................................................ 6
1.4 Neden Intel Tabanlı Microdenetleyici ?..................................................................... 7
2. MCS-51 Microdenetleyici Ailesinin Mimari Özellikleri................................................... 8
2.1 MCS-51 Microdenetleyici Ailesinin Genel Mimari Yapısı ....................................... 8
2.2 Pin Anlamları ........................................................................................................... 12
2.3 MCS-51 Microdenetleyici Ailesinin RAM yapısı ve Register’leri.......................... 13
2.3.1 Genel Amaçlı Registerler ve Stack .................................................................. 13
2.3.2 Özel Amaçlı Registerler................................................................................... 15
3. Atmel MCS-51 Microdenetleyici Komut Seti ................................................................. 24
3.1 Genel Assembler Bilgileri........................................................................................ 24
3.2 Assembler Yönlendirme Komutları ......................................................................... 24
3.3 Assembler Operatörleri ............................................................................................ 28
3.4 Hazır Fonksiyonlar................................................................................................... 31
3.5 Komut Seti ............................................................................................................... 33
3.5.1 Data Transfer Komutları .................................................................................. 33
3.5.2 Aritmetisel ve Logic Komutlar ........................................................................ 35
3.5.3 Dallanma Komutları......................................................................................... 37
3.5.4 Bit ve Bit Test Komutları................................................................................. 42
4. Atmel MCS-51 Microdenetleyici I/O Portları ................................................................. 43
5. Atmel MCS-51 Microdenetleyici Interrupt Sistemi......................................................... 54
5.1 External Interrupt’lar (Dış Interrupt’lar).................................................................. 56
5.2 Internal Interrupt’lar (İç Interrupt’lar)...................................................................... 58
6. Atmel MCS-51 Microdenetleyici Özel Amaçlı Devreleri ............................................... 58
Genel Tanımlar
1.1 Microişlemci Nedir?
Microişlemci, program yolu ile aritmetiksel ve mantıksal işlemler yapabilme gücü olan,
kendisine bağlı iç ve dış çevre birimleri yönetebilen ve bu birimler arasındaki ilişkileri
düzenleyebilen bir entegredir. Bir microişlemci, yapabileceği matematiksel ve mantıksal
işlemlerin, çevrebirim yönetim fonksiyonlarının dizayn sırasında belirlendiği bir entegredir.
Bu nedenle her microişlemci bir diğerinden farklıdır. (8088, Pentium III, Pentium II, Sparc,
Alpha vb.)
Microişlemciler genel amaçlar için dizayn edilmiş yapılardır. Bu nedenle temel işlevlerini
yerine getirebilmek için dizayn edilen komut setleri oldukça fazladır. Örneğin intel
microişlemci ailesinin ilk işlemcilerinden olan 8088’in 92 adet komutu bulunmaktadır.
Microişlemcilerin komut setleri ve bu komut setlerinin nasıl işletildiği işlemcinin
mimarisini belirler. Eğer komutların hafızada kapladığı alanlar farklı ise bu şekilde
düzenlenmiş işlemciler CISC (Complex Instruction Set Computing) işlemciler adını alırlar.
CISC mimari ile düzenlenmiş işlemcilerde, komutlar basitlik veya karmaşıklıklarına göre
hafızada farklı uzunlukta yer kaplarlar. Bu durum işlemcinin içinde komutların decode
edilmesi ile ilgili oldukça karmaşık bir birimin varlığını zorunlu kılar. Ancak, complex
komutlar programlarda kullanılması gereken komut sayısını azaltırlar. 1970 yılında ortaya
çıkan CISC mimari ilerleyen yıllarda hafıza birimlerinin büyümesi ve ucuzlaması, kısıtları
nedeniyle RISC mimarinin ortaya atılmasına öncülük etmiştir. 1974 yılında IBM, bir
işlemcinin daha az komut sayısı ve basit komutlardan oluşan bir komut seti ile çalışabileceğini
önererek RISC (Reduced Instruction Set Computing) mimariyi çıkarttı. Bu mimaride komut
uzunlukları sabittir ve her komut basit bir işlemi yerine getirir. Bir risc cipi bu iki karakteristik
özelliği sayesinde komutların yorumlamasını kolaylıkla ve hızla yapabilir. RISC mimarinin en
önemli dezavantajı CISC programlara göre programlarının hafızada daha fazla yer
kaplamasıdır.
Gerek RISC mimaride gerekse CISC mimaride dizayn edilmiş olsun bir microişlemci
herhangi bir komutu işleyebilmek için bir komut döngüsünü yerine getirmek zorundadır.
Komut döngüsünün nasıl düzenlendiği genel olarak işlemcinin performansını belirler. Bir
komut döngüsü 3 ana başlıktan oluşur.
1. Fetch
2. Decode
3. Execute
1. Fetch : İşlenme sırası gelen komutun ram’den okunarak microişlemcinin
içine alınması
2. Decode : Komutun nasıl işleneceğinin belirlenerek çözümlenmesi
4
3. Execute : Komutun çalıştırılması ve elde edilen sonuçların ilgili yerlere
aktarılması
İster CISC mimaride isterse RISC mimaride düzenlenmiş olsun bir microişlemci genel
olarak aşağıdaki yapıdadır.
• Execution Unit (Core): Bu ünite komutları çalıştırır. Genel olarak matematiksel
işlemlerin kontrolü ve mantıksal işlemleri gerçekleştirir. Execution Unit Artimetik
hesaplamalar için ALU (Arithmetic and Logic Unit) denen aritmetik ve mantık
ünitelerini kullanılır, ALU için işlemcilerin yapıtaşıdır denilebilir.
• Branch Predictor: Bu ünite, bir program çalışırken hangi komutun öncelikle
çalışacağını belirleyerek Prefetch ve Decode ünitelerine hız kazandırır.
• Floating Point Unit: Bu ünite tamsayı olmayan floating point sayılarla yapılan
matematiksel işlemlerin gerçekleştirilmesini sağlar.
• L1 Cache: Sistem belleğinden gelen veriler, bazı durumlarda CPU ‘nun hızına
yetişmeyebilir. Bu problemi çözmek için CPU içinde, küçük bir miktar cache
(tampon) bellek bulunur. Önemli kodlar ve veriler bellekten cache belleğe getirilir ve
burada tutulur. İhtiyaç duyulduğunda işlemci bunlara dış bellekte bulunan verilerden
çok daha hızlı ulaşabilir. İşlenecek makine kodlarının ve verilerin saklandığı cache
bellekler ayrı düzenlenirler.
• BUS Interface: Çevrebirimlerden işlemciye veri – kod karışımını getirir, bunları
ayırarak işlemcinin ilgili ünitelerine aktarılmasını ve işlem sonuçlarının dış ortama
aktarılmasını sağlar. Bu arayüzün genişliği işlemcinin adresleyebileceği hafızayı
belirler. Örneğin 32 bitlik hafıza genişliğine sahip bir işlemci 4 GB hafızayı
adresleyebilir ve bu hafızadan aynı anda 32 bitlik veriyi transfer edebilir.
5
Microişlemcilerin genel amaçlı yapılar olmaları, komut setlerinin büyüklüğü,
kullanıldığı sistemlerde ana eleman olmaları vb. nedenlerle çalışma hızları oldukça önemlidir.
Bir işlemcideki bütün elemanlar saat vuruşlarıyla çalışır. Saat hızı bir işlemcinin saniyede ne
kadar çevrim yapabileceğini belirler. 200 MHz saat hızı bir işlemci kendi içinde saniyede
200.000.000 çevrim yapabilir. Her çevrimde işlemcinin ne kadar işlem yapabileceği
işlemcinin yapısına göre değişir. Genel olarak bir işlemcinin performansını;
İşlemcinin Mimarisi
Saat Hızı
L1/L2 Cache Miktarı
belirler. Ham işlemci performansını ifade etmek için MIPS (Million Instructions Per
Second, saniyede işlenebilen komut sayısı) ve MFLOPS (Million Floating Point Operations
Per Second, saniyede yapılabilen kayar nokta hesabı) birimleri kullanılır.
1.2 Microdenetleyici Nedir?
Bir mikroişlemcinin çevrebirimleri (ram, rom, bus controller vb.) olmaksızın genel
amaçlı bir programı çalıştırarak bir problemi çözmesi beklenemez. Mikroişlemcilerin anlamlı
bir şekilde çalışabilmesi için minimum input ve output ünitelerinin bulunduğu bir sistemin
kurulması gereklidir. Bir mikroişlemci ve minimum input-output ünitelerinin tek bir entegre
içinde toplandığı yapılara microdenetleyici adı verilir.
Microdenetleyicilerde, çoğunlukla risc mimariye sahip bir microişlemci, proğramların
ve verilerin saklanabileceği 2K ile 512Kb arasında değişebilen flash rom, 64 byte ile 16Kb
arasında değişebilen statik ram, 4 ile 64 arasında değişebilen I/O, kontrol edilebilen
timer/counter’lar, PWM, dışarıdan tetiklenebilen Interrupt kaynakları, Analog-digital
çeviriciler, digital-analog çeviriciler bulunur. Bu özellikler microişlemci ile microdenetleyici
arasındaki en önemli farkı oluşturur.
Microdenetleyiciler genel amaçlı uygulamalardan çok özel amaçlı uygulamalar için
düzenlenmiş yapılardır. Kullanabilecekleri iç kaynakları çeşitli olmasına rağmen bu
kaynakların sınırlı olması nedeniyle daha çok özel amaçlı cihazların kontrolünde
kullanılmaktadırlar. Günlük hayatta kullandığımız birçok cihazın kontrolü microdenetleyiciler
tarafından gerçekleştirilmektedir. Cep telefonu, Televizyon, radyo, alarm sistemleri, taşıtlar,
hesap makineleri, giriş-çıkış kontrol sistemleri, kameralar, bilgisayar vb.
Kısıtlı miktarda olmakla birlikte yeterince hafıza birimlerine ve input – output uçlarına
sahip olmaları sayesinde tek başlarına (stand alone) çalışabildikleri gibi donanımı oluşturan
diğer Elektronik devrelerle irtibat kurabilir, uygulamanın gerektirdiği fonksiyonları
gerçekleştirebilirler. Mikrodenetleyiciler çoğunlukla, yer aldıkları uygulama devresinin içine
gömülmüş, sadece oraya adanmış olarak kullanılırlar. Bu özellikleri nedeniyle
bilgisayarlardaki kullanıcı uygulama programlarını çalıştırma gibi esneklikleri olmamakla
6
birlikte kontrol ağırlıklı uygulamalarda alternatifsiz seçenek olarak karşımıza çıkarlar. Onları
böyle cazip kılan, çok düşük boyutlu olmaları (az yer kaplamaları), düşük güç tüketimleri,
düşük maliyetlerine karşın yüksek performansa sahip olmaları gibi özellikleridir.
1.3 Microişlemci-Microdenetleyicinin Tarihsel Gelişimi
Microişlemcilerin gelişimi 1970 li yıllarda başlar. 1971 yılında İntel firması hesap
makinelerinde kullanılmak üzere ilk microişlemcilerden sayılabilecek 4004 işlemcisini üretti.
Bu işlemci 4 bit veri yoluna sahipti ve 640 byte adres uzayına sahipti. Bu işlemcinin rağbet
görmesi üzerine daha genel amaçlı ve daha büyük hafıza birimlerini adresleyebilecek 8080
microişlemcisi üretildi. 1974 yılında üretilen bu işlemci 8 bit veri yoluna ve 64Kb adres
uzayına sahipti. 8080 8 bit microişlemcilerde endüstri standardı olan bir entegredir. Intel 1976
yılında 8080 işlemcinin gelişmiş bir versiyonu olan 8085 işlemcisini piyasaya sürerek işlemci
gelişimini sürdürdü.
Intel 8080 işlemcisini duyurduktan kısa bir süre sonra Motorola 6800 microişlemcisini
üretti. Bu işlemci 8080 işlemci ile karşılaştırılabilir bir güce sahipti. Motorola 6800
işlemcisinin devamı olarak bu işlemci ile uyumlu 6809 işlemcisini üretti. Bu işlemci 16 bit
veri yoluna sahipti.
6809 işlemcisinden sonra Motorola 68000 işlemci serisinin üretimine başladı. Bu
işlemci iç yapısında 32 bit dış yapısında ise 16 bit veri yoluna sahip bir işlemcidir ve 6800
serisi işlemcileri desteklememektedir. 68000 serisi işlemciler 68008, 68010, 68012, 68020,
68030, 68040 ve Power PC ile günümüze kadar gelmiştir.
Intel firması 1978 yılında ilk 16 bit veri yoluna sahip microişlemcisi olan 8086’yı
duyurdu. 8086 gerek iç veri yollarında gerekse dış veri yollarında 16 bit uzunluk kullanan bir
yapıya sahipti. Çevrebirimlerle uyum problemleri yaşanması üzerine intel 1979 yılında iç
yapısında 16 bit, dış veri yolunda 8 bit yapıya sahip 8088 işlemcisini duyurdu. Bu işlemciler
8080-8085 microişlemci serisi ile benzeşmesine rağmen bu seri ile tam uyumlu değildir. 8086
ve 8088 1981 yılında ilk üretilen IBM-PC lerin gelişiminin temelini oluşturmuştur. Bu
işlemciler geriye uyumluluk kaygıları ile gelişimini bugüne kadar sürdüren Intel x86 ailesinin
başlangıcı olmuştur.
Intel firması 1976 yılında 8080-8085 microişlemcilerinin devamı olarak bazı
microişlemci çevre birimlerini içinde barındıran ve özel amaçlı uygulamalarda kullanılmak
üzere 8048 ve 8051 microdenetleyicilerin üretimini gerçekleştirdi. Bu microdenetleyiciler
üzerinde kullanılan yapı günümüzde de kullanılan birçok 8 bit microdenetleyicinin temelini
oluşturan standardı sağlamıştır. 8048 ve 8051 ile başlayan microdenetleyici serisi farklı
özelliklerle günümüze kadar gelmiştir.
Intel firmasının PC lerin gelişimine temel oluşturan 8086-8088 serisinin 1Mb hafıza
sınırlaması 80’li yıllarda birçok uygulama için ciddi problemler oluşturmaya başladı. Bu
nedenle Intel 16Mb belleği adresleyebilen 80286 işlemcisini üretti. Bu işlemci 8088
7
işlemcisinin devamı olarak piyasaya sürüldü ve 8088 ile tam uyumlu olarak çalışabiliyordu.
Intel firmasının bu işlemcisi IBM firmasının PC/AT makinelerinde kullanıldı.
1985 yılında Intel ilk 32 bit işlemcisi olan 80386 işlemcisini duyurdu. Bu işlemcinin
16 bit dış veri yoluna versiyonu 80386SX’in üretimini 1988 yılında gerçekleştirdi. 80386
işlemcinin devamı olarak piyasaya sürülen 80486, 80386 nın gelişmiş bir versiyonu
görünümündedir. 80486 ile 80386 arasındaki en önemli fark 80486 içinde kayan noktalı
sayılarla işlem yapabilecek bir FPU (Floatin-Point unit) bulunmasıdır.
80486 microişlemcinin ardından Intel, hızlarını, cache miktarlarını, işlem
kapasitelerini artırarak x86 microişlemci serisini geliştirmeye devam etti. (Pentium I, Pentium
pro, Pentium II, Pentium III, Pentium IV)
1.4 Neden Intel Tabanlı Microdenetleyici ?
Günümüzde microdenetleyicilerin birçok çeşidi bulunmaktadır. Intel, Microchip,
Motorola, National, Atmel firmalarının ürettiği microdenetleyiciler bunlar arasında sayılabilir.
Microdenetleyici gerektiren herhangi bir uygulama geliştirirken seçilecek microdenetleyicinin
uygulamanın gereklerini karşılayıp karşılamadığı önemlidir. Bunun yanı sıra kullanılacak olan
derleyici, programlayıcı, simülatör, elektriksel özellikler, kaynak temini, seçenek çeşitliliği,
kolay elde edilebilirlik, fiyat, Komut seti vb. özellikler de microdenetleyici seçiminde önemli
etmenlerdir.
8
Atmel firmasının ürettiği Atmega serisi microcontrollerların yukarıda sayılan birçok
özellikte öne çıktığı görülmektedir. Firma 8 bit Intel MCS-51 core’a sahip
microdenetleyicilerin yanı sıra 16/32 bit veri yoluna sahip microdenetleyiciler, otomotiv
temelli microdenetleyicileri de Intel MCS-51 core ile kullanıma sunmaktadır.
Microdenetleyicilerin aynı core’u kullanıyor olmaları, komut setlerinin de birbirini
desteklemesi anlamına gelmektedir. Bu nedenle herhangi bir microdenetleyici için yazılan
program özelliklerin aynı olması durumunda hiçbir değişikliğe ihtiyaç duymadan farklı bir
microdenetleyicide çalışabilmektedir. Atmel microdenetleyiciler elektriksel bozukluklardan
etkilenmeyi minimize edebilmek için Wath dog timer, Brown-out dedektör vb. özellikler
içermesi nedeniyle sanayi uygulamalarında oldukça yoğun kullanılmaktadır.
2. MCS-51 Microdenetleyici Ailesinin Mimari Özellikleri
2.1 MCS-51 Microdenetleyici Ailesinin Genel Mimari Yapısı
Sanayi Otomasyonu için günümüzde mevcut olan mikroişlemciler ve
microdenetleyiciler arasında en uygunlardan birisi MCS-51 ailesinden olan
microdenetleyicilerdir. Bu microdenetleyicilerin çekici tarafı, bu aileden olan her bir
microdenetleyicinin çok küçük boy bir bilgisayar olması ile birlikte içermekte olduğu girişçıkış
potlarının her birinin ve diğer önemli fonksiyon registerlerin (Special Function Registers
SFR) büyük çoğunluğunun üzerinde bayt ve bit maniplasyonu yapmaya direkt imkan
sağlamasıdır.
MCS-51 ailesinden olan microdenetleyici tabanlı kontrol kartına sanayi otomasyonuna
yönelik küçük boy bilgisayar özelliği kazandırmaya imkan sağlayan özellikler sadece bir çip
içerisinde yer alan aşağıdaki mimari özelliklerdir.
• 8/16/32 bit RISC merkezi işlem birimi (CPU),
• Dahili EEprom
• Dahili Flash Rom
• Harici veya dahili olarak seçilebilen osilatör,
• Bayt veya bit olarak düzenlenebilen, pull-up dirençleri aktif veya pasif yapılabilen
Giriş / Çıkış portları,
• Static RAM bellek (İç Ram),
• Dış program/veri belleği (Bazı microdenetleyicilerde),
• 8/16 bit Zamanlayıcı/Sayaç/Pwm,
• İç ve dış kaynaklara hizmet edebilen, farklı vektörlere sahip kesme (Interrupt) sistemi,
• Seri Port,
• ISP Port,
• JTag Port,
• Security bitler aracılığı ile program ve verinin korunabilmesi,
• Watch dog timer, Brown-out dedektör,
• Analog-Digital çevirici (Adc)
• 20 MHZ kadar çalışma frekansı,
• Çalışma frekansına bağımlı (MIPS) çalışma performansı
9
MCS-51 risc core’a sahip, Atmel firmasının atmega8 microdenetleyicisi yukarıda sözü
edilen mimari yapının tümüne sahiptirler. Atmega8 microdenetleyicisinin özellikleri aşağıdaki
şekilde özetlenebilir.
• Geliştirilmiş RISC mimari
- 130 adet komut
- 32 genel amaçlı register
- Her clock’ta 1 komut çalıştırma
• 8Kb program tarafından da yazılabilen program belleği
• 512 Byte EEprom
• 1 Kb statik ram
• 2 adet 8 bit timer/counter
• 1 adet 16 bit timer/counter
• 3 adet PWM kanalı
• 6 kanal 10 bit ADC
• Byte temelli çift yönlü seri kanal
• Programlanabilir seri USART
• Master/Slave SPI seri kanal
• Programlanabilir Watchdog timer
• Chip içinde analog comparador
• Power on reset ve programlanabilen Brown-out dedektör
• Internal düzenlenebilir RC oscillator
• İç/Dış kaynaklı Interrupt sistemi
• 5 değişik uyuma modu
• 23 programlanabilir giriş-çıkış ucu
• 0-16 Mhz çalışma frekansı
• 4.5 – 5.5v çalışma voltajı
Şekil 2.1.1’ de MCS-51 core mimarisinin blok diyagramını, şekil 2.1.2’de Atmega8
microdenetleyicinin blok diyagramı, şekil 2.1.3’ de ise bu microdenetleyicinin bacak bağlantı
şeması gösterilmiştir.
10
Şekil 2.1.1 MCS-51 core mimarisinin blok diyagramı
11
Şekil 2.1.2 Atmega8 Microdenetleyici Blok Diyagramı
12
Şekil 2.1.3 Atmega8 Microdenetleyici Bacak Bağlantı Şeması (PDIP)
Şekil 2.1.4 Atmega8 Microdenetleyici Bacak Bağlantı Şeması (TQFP)
2.2 Pin Anlamları
VCC Sistem besleme voltajı. 4.5v-5.5v
GND Sistem GND
Port B (PB0..PB7)
Xtal1/Xtal2/Tosc1/Tosc2
SPI
• Port B, programlanabilir pull-up dirençleri bulunan, 8 bit
genişliğinde bir giriş-çıkış portudur. Porta byte olarak
erişim yapılabileceği gibi bit olarak da erişim yapılabilir.
• Portun 6 ve 7. bitleri, Oscillator’ün internal RC seçilmesi
durumunda port bitleri, aksi durumda oscillator giriş uçları
13
olarak kullanılır.
• Oscillator’un internal RC seçilmesi durumunda portun 6
ve 7. bitleri ASSR registerinin durumuna göre
Timer/counter2’nin asenkron giriş uçları olarak
kullanılabilir.
Port ve portun fonksiyonlarının kullanımı ilerideki
konularda detaylı olarak anlatılacaktır
Port C (PC0..PC6)
PC7/Reset
Adc, Seri giriş-çıkış
• Port C, programlanabilir pull-up dirençleri bulunan 7 bit
genişliğinde bir giriş-çıkış portudur. Porta byte veya bit
erişimleri yapılabilir.
• Portun 7. biti RESDISBL yönlendirme biti ile anlam
değiştirebilir. RESDISBL biti programlanmış ise pin girişçıkış
pini, programlanmamış ise reset girişi olarak
kullanılır.
Port ve portun fonksiyonlarının kullanımı ilerideki
konularda detaylı olarak anlatılacaktır.
Port D (PD0..PD7)
Usart, int,
Timer/counter,
Analog comparator
• Port D, programlanabilir pull-up dirençleri bulunan 8 bit
genişliğinde bir giriş-çıkış portudur. Port byte veya bit
erimleri ile kullanılabilir.
Port fonksiyonlarının kullanımı ilerideki konularda detaylı
olarak anlatılacaktır.
AVCC Avcc analog digital çevirici için besleme voltaj girişidir. Bu voltaj
girişi saglanmadan ADC fonksiyonu kullanılamaz. ADC
fonksiyonunun kullanımı için Avcc ucu alçak geçiren bir filtre ile
besleme voltajına bağlanmalıdır.
AREF Analog-Digital çevirici için referans voltaj girişidir.
1.1 Microişlemci Nedir?................................................................................................... 3
1.2 Microdenetleyici Nedir?............................................................................................. 5
1.3 Microişlemci-Microdenetleyicinin Tarihsel Gelişimi................................................ 6
1.4 Neden Intel Tabanlı Microdenetleyici ?..................................................................... 7
2. MCS-51 Microdenetleyici Ailesinin Mimari Özellikleri................................................... 8
2.1 MCS-51 Microdenetleyici Ailesinin Genel Mimari Yapısı ....................................... 8
2.2 Pin Anlamları ........................................................................................................... 12
2.3 MCS-51 Microdenetleyici Ailesinin RAM yapısı ve Register’leri.......................... 13
2.3.1 Genel Amaçlı Registerler ve Stack .................................................................. 13
2.3.2 Özel Amaçlı Registerler................................................................................... 15
3. Atmel MCS-51 Microdenetleyici Komut Seti ................................................................. 24
3.1 Genel Assembler Bilgileri........................................................................................ 24
3.2 Assembler Yönlendirme Komutları ......................................................................... 24
3.3 Assembler Operatörleri ............................................................................................ 28
3.4 Hazır Fonksiyonlar................................................................................................... 31
3.5 Komut Seti ............................................................................................................... 33
3.5.1 Data Transfer Komutları .................................................................................. 33
3.5.2 Aritmetisel ve Logic Komutlar ........................................................................ 35
3.5.3 Dallanma Komutları......................................................................................... 37
3.5.4 Bit ve Bit Test Komutları................................................................................. 42
4. Atmel MCS-51 Microdenetleyici I/O Portları ................................................................. 43
5. Atmel MCS-51 Microdenetleyici Interrupt Sistemi......................................................... 54
5.1 External Interrupt’lar (Dış Interrupt’lar).................................................................. 56
5.2 Internal Interrupt’lar (İç Interrupt’lar)...................................................................... 58
6. Atmel MCS-51 Microdenetleyici Özel Amaçlı Devreleri ............................................... 58
Genel Tanımlar
1.1 Microişlemci Nedir?
Microişlemci, program yolu ile aritmetiksel ve mantıksal işlemler yapabilme gücü olan,
kendisine bağlı iç ve dış çevre birimleri yönetebilen ve bu birimler arasındaki ilişkileri
düzenleyebilen bir entegredir. Bir microişlemci, yapabileceği matematiksel ve mantıksal
işlemlerin, çevrebirim yönetim fonksiyonlarının dizayn sırasında belirlendiği bir entegredir.
Bu nedenle her microişlemci bir diğerinden farklıdır. (8088, Pentium III, Pentium II, Sparc,
Alpha vb.)
Microişlemciler genel amaçlar için dizayn edilmiş yapılardır. Bu nedenle temel işlevlerini
yerine getirebilmek için dizayn edilen komut setleri oldukça fazladır. Örneğin intel
microişlemci ailesinin ilk işlemcilerinden olan 8088’in 92 adet komutu bulunmaktadır.
Microişlemcilerin komut setleri ve bu komut setlerinin nasıl işletildiği işlemcinin
mimarisini belirler. Eğer komutların hafızada kapladığı alanlar farklı ise bu şekilde
düzenlenmiş işlemciler CISC (Complex Instruction Set Computing) işlemciler adını alırlar.
CISC mimari ile düzenlenmiş işlemcilerde, komutlar basitlik veya karmaşıklıklarına göre
hafızada farklı uzunlukta yer kaplarlar. Bu durum işlemcinin içinde komutların decode
edilmesi ile ilgili oldukça karmaşık bir birimin varlığını zorunlu kılar. Ancak, complex
komutlar programlarda kullanılması gereken komut sayısını azaltırlar. 1970 yılında ortaya
çıkan CISC mimari ilerleyen yıllarda hafıza birimlerinin büyümesi ve ucuzlaması, kısıtları
nedeniyle RISC mimarinin ortaya atılmasına öncülük etmiştir. 1974 yılında IBM, bir
işlemcinin daha az komut sayısı ve basit komutlardan oluşan bir komut seti ile çalışabileceğini
önererek RISC (Reduced Instruction Set Computing) mimariyi çıkarttı. Bu mimaride komut
uzunlukları sabittir ve her komut basit bir işlemi yerine getirir. Bir risc cipi bu iki karakteristik
özelliği sayesinde komutların yorumlamasını kolaylıkla ve hızla yapabilir. RISC mimarinin en
önemli dezavantajı CISC programlara göre programlarının hafızada daha fazla yer
kaplamasıdır.
Gerek RISC mimaride gerekse CISC mimaride dizayn edilmiş olsun bir microişlemci
herhangi bir komutu işleyebilmek için bir komut döngüsünü yerine getirmek zorundadır.
Komut döngüsünün nasıl düzenlendiği genel olarak işlemcinin performansını belirler. Bir
komut döngüsü 3 ana başlıktan oluşur.
1. Fetch
2. Decode
3. Execute
1. Fetch : İşlenme sırası gelen komutun ram’den okunarak microişlemcinin
içine alınması
2. Decode : Komutun nasıl işleneceğinin belirlenerek çözümlenmesi
4
3. Execute : Komutun çalıştırılması ve elde edilen sonuçların ilgili yerlere
aktarılması
İster CISC mimaride isterse RISC mimaride düzenlenmiş olsun bir microişlemci genel
olarak aşağıdaki yapıdadır.
• Execution Unit (Core): Bu ünite komutları çalıştırır. Genel olarak matematiksel
işlemlerin kontrolü ve mantıksal işlemleri gerçekleştirir. Execution Unit Artimetik
hesaplamalar için ALU (Arithmetic and Logic Unit) denen aritmetik ve mantık
ünitelerini kullanılır, ALU için işlemcilerin yapıtaşıdır denilebilir.
• Branch Predictor: Bu ünite, bir program çalışırken hangi komutun öncelikle
çalışacağını belirleyerek Prefetch ve Decode ünitelerine hız kazandırır.
• Floating Point Unit: Bu ünite tamsayı olmayan floating point sayılarla yapılan
matematiksel işlemlerin gerçekleştirilmesini sağlar.
• L1 Cache: Sistem belleğinden gelen veriler, bazı durumlarda CPU ‘nun hızına
yetişmeyebilir. Bu problemi çözmek için CPU içinde, küçük bir miktar cache
(tampon) bellek bulunur. Önemli kodlar ve veriler bellekten cache belleğe getirilir ve
burada tutulur. İhtiyaç duyulduğunda işlemci bunlara dış bellekte bulunan verilerden
çok daha hızlı ulaşabilir. İşlenecek makine kodlarının ve verilerin saklandığı cache
bellekler ayrı düzenlenirler.
• BUS Interface: Çevrebirimlerden işlemciye veri – kod karışımını getirir, bunları
ayırarak işlemcinin ilgili ünitelerine aktarılmasını ve işlem sonuçlarının dış ortama
aktarılmasını sağlar. Bu arayüzün genişliği işlemcinin adresleyebileceği hafızayı
belirler. Örneğin 32 bitlik hafıza genişliğine sahip bir işlemci 4 GB hafızayı
adresleyebilir ve bu hafızadan aynı anda 32 bitlik veriyi transfer edebilir.
5
Microişlemcilerin genel amaçlı yapılar olmaları, komut setlerinin büyüklüğü,
kullanıldığı sistemlerde ana eleman olmaları vb. nedenlerle çalışma hızları oldukça önemlidir.
Bir işlemcideki bütün elemanlar saat vuruşlarıyla çalışır. Saat hızı bir işlemcinin saniyede ne
kadar çevrim yapabileceğini belirler. 200 MHz saat hızı bir işlemci kendi içinde saniyede
200.000.000 çevrim yapabilir. Her çevrimde işlemcinin ne kadar işlem yapabileceği
işlemcinin yapısına göre değişir. Genel olarak bir işlemcinin performansını;
İşlemcinin Mimarisi
Saat Hızı
L1/L2 Cache Miktarı
belirler. Ham işlemci performansını ifade etmek için MIPS (Million Instructions Per
Second, saniyede işlenebilen komut sayısı) ve MFLOPS (Million Floating Point Operations
Per Second, saniyede yapılabilen kayar nokta hesabı) birimleri kullanılır.
1.2 Microdenetleyici Nedir?
Bir mikroişlemcinin çevrebirimleri (ram, rom, bus controller vb.) olmaksızın genel
amaçlı bir programı çalıştırarak bir problemi çözmesi beklenemez. Mikroişlemcilerin anlamlı
bir şekilde çalışabilmesi için minimum input ve output ünitelerinin bulunduğu bir sistemin
kurulması gereklidir. Bir mikroişlemci ve minimum input-output ünitelerinin tek bir entegre
içinde toplandığı yapılara microdenetleyici adı verilir.
Microdenetleyicilerde, çoğunlukla risc mimariye sahip bir microişlemci, proğramların
ve verilerin saklanabileceği 2K ile 512Kb arasında değişebilen flash rom, 64 byte ile 16Kb
arasında değişebilen statik ram, 4 ile 64 arasında değişebilen I/O, kontrol edilebilen
timer/counter’lar, PWM, dışarıdan tetiklenebilen Interrupt kaynakları, Analog-digital
çeviriciler, digital-analog çeviriciler bulunur. Bu özellikler microişlemci ile microdenetleyici
arasındaki en önemli farkı oluşturur.
Microdenetleyiciler genel amaçlı uygulamalardan çok özel amaçlı uygulamalar için
düzenlenmiş yapılardır. Kullanabilecekleri iç kaynakları çeşitli olmasına rağmen bu
kaynakların sınırlı olması nedeniyle daha çok özel amaçlı cihazların kontrolünde
kullanılmaktadırlar. Günlük hayatta kullandığımız birçok cihazın kontrolü microdenetleyiciler
tarafından gerçekleştirilmektedir. Cep telefonu, Televizyon, radyo, alarm sistemleri, taşıtlar,
hesap makineleri, giriş-çıkış kontrol sistemleri, kameralar, bilgisayar vb.
Kısıtlı miktarda olmakla birlikte yeterince hafıza birimlerine ve input – output uçlarına
sahip olmaları sayesinde tek başlarına (stand alone) çalışabildikleri gibi donanımı oluşturan
diğer Elektronik devrelerle irtibat kurabilir, uygulamanın gerektirdiği fonksiyonları
gerçekleştirebilirler. Mikrodenetleyiciler çoğunlukla, yer aldıkları uygulama devresinin içine
gömülmüş, sadece oraya adanmış olarak kullanılırlar. Bu özellikleri nedeniyle
bilgisayarlardaki kullanıcı uygulama programlarını çalıştırma gibi esneklikleri olmamakla
6
birlikte kontrol ağırlıklı uygulamalarda alternatifsiz seçenek olarak karşımıza çıkarlar. Onları
böyle cazip kılan, çok düşük boyutlu olmaları (az yer kaplamaları), düşük güç tüketimleri,
düşük maliyetlerine karşın yüksek performansa sahip olmaları gibi özellikleridir.
1.3 Microişlemci-Microdenetleyicinin Tarihsel Gelişimi
Microişlemcilerin gelişimi 1970 li yıllarda başlar. 1971 yılında İntel firması hesap
makinelerinde kullanılmak üzere ilk microişlemcilerden sayılabilecek 4004 işlemcisini üretti.
Bu işlemci 4 bit veri yoluna sahipti ve 640 byte adres uzayına sahipti. Bu işlemcinin rağbet
görmesi üzerine daha genel amaçlı ve daha büyük hafıza birimlerini adresleyebilecek 8080
microişlemcisi üretildi. 1974 yılında üretilen bu işlemci 8 bit veri yoluna ve 64Kb adres
uzayına sahipti. 8080 8 bit microişlemcilerde endüstri standardı olan bir entegredir. Intel 1976
yılında 8080 işlemcinin gelişmiş bir versiyonu olan 8085 işlemcisini piyasaya sürerek işlemci
gelişimini sürdürdü.
Intel 8080 işlemcisini duyurduktan kısa bir süre sonra Motorola 6800 microişlemcisini
üretti. Bu işlemci 8080 işlemci ile karşılaştırılabilir bir güce sahipti. Motorola 6800
işlemcisinin devamı olarak bu işlemci ile uyumlu 6809 işlemcisini üretti. Bu işlemci 16 bit
veri yoluna sahipti.
6809 işlemcisinden sonra Motorola 68000 işlemci serisinin üretimine başladı. Bu
işlemci iç yapısında 32 bit dış yapısında ise 16 bit veri yoluna sahip bir işlemcidir ve 6800
serisi işlemcileri desteklememektedir. 68000 serisi işlemciler 68008, 68010, 68012, 68020,
68030, 68040 ve Power PC ile günümüze kadar gelmiştir.
Intel firması 1978 yılında ilk 16 bit veri yoluna sahip microişlemcisi olan 8086’yı
duyurdu. 8086 gerek iç veri yollarında gerekse dış veri yollarında 16 bit uzunluk kullanan bir
yapıya sahipti. Çevrebirimlerle uyum problemleri yaşanması üzerine intel 1979 yılında iç
yapısında 16 bit, dış veri yolunda 8 bit yapıya sahip 8088 işlemcisini duyurdu. Bu işlemciler
8080-8085 microişlemci serisi ile benzeşmesine rağmen bu seri ile tam uyumlu değildir. 8086
ve 8088 1981 yılında ilk üretilen IBM-PC lerin gelişiminin temelini oluşturmuştur. Bu
işlemciler geriye uyumluluk kaygıları ile gelişimini bugüne kadar sürdüren Intel x86 ailesinin
başlangıcı olmuştur.
Intel firması 1976 yılında 8080-8085 microişlemcilerinin devamı olarak bazı
microişlemci çevre birimlerini içinde barındıran ve özel amaçlı uygulamalarda kullanılmak
üzere 8048 ve 8051 microdenetleyicilerin üretimini gerçekleştirdi. Bu microdenetleyiciler
üzerinde kullanılan yapı günümüzde de kullanılan birçok 8 bit microdenetleyicinin temelini
oluşturan standardı sağlamıştır. 8048 ve 8051 ile başlayan microdenetleyici serisi farklı
özelliklerle günümüze kadar gelmiştir.
Intel firmasının PC lerin gelişimine temel oluşturan 8086-8088 serisinin 1Mb hafıza
sınırlaması 80’li yıllarda birçok uygulama için ciddi problemler oluşturmaya başladı. Bu
nedenle Intel 16Mb belleği adresleyebilen 80286 işlemcisini üretti. Bu işlemci 8088
7
işlemcisinin devamı olarak piyasaya sürüldü ve 8088 ile tam uyumlu olarak çalışabiliyordu.
Intel firmasının bu işlemcisi IBM firmasının PC/AT makinelerinde kullanıldı.
1985 yılında Intel ilk 32 bit işlemcisi olan 80386 işlemcisini duyurdu. Bu işlemcinin
16 bit dış veri yoluna versiyonu 80386SX’in üretimini 1988 yılında gerçekleştirdi. 80386
işlemcinin devamı olarak piyasaya sürülen 80486, 80386 nın gelişmiş bir versiyonu
görünümündedir. 80486 ile 80386 arasındaki en önemli fark 80486 içinde kayan noktalı
sayılarla işlem yapabilecek bir FPU (Floatin-Point unit) bulunmasıdır.
80486 microişlemcinin ardından Intel, hızlarını, cache miktarlarını, işlem
kapasitelerini artırarak x86 microişlemci serisini geliştirmeye devam etti. (Pentium I, Pentium
pro, Pentium II, Pentium III, Pentium IV)
1.4 Neden Intel Tabanlı Microdenetleyici ?
Günümüzde microdenetleyicilerin birçok çeşidi bulunmaktadır. Intel, Microchip,
Motorola, National, Atmel firmalarının ürettiği microdenetleyiciler bunlar arasında sayılabilir.
Microdenetleyici gerektiren herhangi bir uygulama geliştirirken seçilecek microdenetleyicinin
uygulamanın gereklerini karşılayıp karşılamadığı önemlidir. Bunun yanı sıra kullanılacak olan
derleyici, programlayıcı, simülatör, elektriksel özellikler, kaynak temini, seçenek çeşitliliği,
kolay elde edilebilirlik, fiyat, Komut seti vb. özellikler de microdenetleyici seçiminde önemli
etmenlerdir.
8
Atmel firmasının ürettiği Atmega serisi microcontrollerların yukarıda sayılan birçok
özellikte öne çıktığı görülmektedir. Firma 8 bit Intel MCS-51 core’a sahip
microdenetleyicilerin yanı sıra 16/32 bit veri yoluna sahip microdenetleyiciler, otomotiv
temelli microdenetleyicileri de Intel MCS-51 core ile kullanıma sunmaktadır.
Microdenetleyicilerin aynı core’u kullanıyor olmaları, komut setlerinin de birbirini
desteklemesi anlamına gelmektedir. Bu nedenle herhangi bir microdenetleyici için yazılan
program özelliklerin aynı olması durumunda hiçbir değişikliğe ihtiyaç duymadan farklı bir
microdenetleyicide çalışabilmektedir. Atmel microdenetleyiciler elektriksel bozukluklardan
etkilenmeyi minimize edebilmek için Wath dog timer, Brown-out dedektör vb. özellikler
içermesi nedeniyle sanayi uygulamalarında oldukça yoğun kullanılmaktadır.
2. MCS-51 Microdenetleyici Ailesinin Mimari Özellikleri
2.1 MCS-51 Microdenetleyici Ailesinin Genel Mimari Yapısı
Sanayi Otomasyonu için günümüzde mevcut olan mikroişlemciler ve
microdenetleyiciler arasında en uygunlardan birisi MCS-51 ailesinden olan
microdenetleyicilerdir. Bu microdenetleyicilerin çekici tarafı, bu aileden olan her bir
microdenetleyicinin çok küçük boy bir bilgisayar olması ile birlikte içermekte olduğu girişçıkış
potlarının her birinin ve diğer önemli fonksiyon registerlerin (Special Function Registers
SFR) büyük çoğunluğunun üzerinde bayt ve bit maniplasyonu yapmaya direkt imkan
sağlamasıdır.
MCS-51 ailesinden olan microdenetleyici tabanlı kontrol kartına sanayi otomasyonuna
yönelik küçük boy bilgisayar özelliği kazandırmaya imkan sağlayan özellikler sadece bir çip
içerisinde yer alan aşağıdaki mimari özelliklerdir.
• 8/16/32 bit RISC merkezi işlem birimi (CPU),
• Dahili EEprom
• Dahili Flash Rom
• Harici veya dahili olarak seçilebilen osilatör,
• Bayt veya bit olarak düzenlenebilen, pull-up dirençleri aktif veya pasif yapılabilen
Giriş / Çıkış portları,
• Static RAM bellek (İç Ram),
• Dış program/veri belleği (Bazı microdenetleyicilerde),
• 8/16 bit Zamanlayıcı/Sayaç/Pwm,
• İç ve dış kaynaklara hizmet edebilen, farklı vektörlere sahip kesme (Interrupt) sistemi,
• Seri Port,
• ISP Port,
• JTag Port,
• Security bitler aracılığı ile program ve verinin korunabilmesi,
• Watch dog timer, Brown-out dedektör,
• Analog-Digital çevirici (Adc)
• 20 MHZ kadar çalışma frekansı,
• Çalışma frekansına bağımlı (MIPS) çalışma performansı
9
MCS-51 risc core’a sahip, Atmel firmasının atmega8 microdenetleyicisi yukarıda sözü
edilen mimari yapının tümüne sahiptirler. Atmega8 microdenetleyicisinin özellikleri aşağıdaki
şekilde özetlenebilir.
• Geliştirilmiş RISC mimari
- 130 adet komut
- 32 genel amaçlı register
- Her clock’ta 1 komut çalıştırma
• 8Kb program tarafından da yazılabilen program belleği
• 512 Byte EEprom
• 1 Kb statik ram
• 2 adet 8 bit timer/counter
• 1 adet 16 bit timer/counter
• 3 adet PWM kanalı
• 6 kanal 10 bit ADC
• Byte temelli çift yönlü seri kanal
• Programlanabilir seri USART
• Master/Slave SPI seri kanal
• Programlanabilir Watchdog timer
• Chip içinde analog comparador
• Power on reset ve programlanabilen Brown-out dedektör
• Internal düzenlenebilir RC oscillator
• İç/Dış kaynaklı Interrupt sistemi
• 5 değişik uyuma modu
• 23 programlanabilir giriş-çıkış ucu
• 0-16 Mhz çalışma frekansı
• 4.5 – 5.5v çalışma voltajı
Şekil 2.1.1’ de MCS-51 core mimarisinin blok diyagramını, şekil 2.1.2’de Atmega8
microdenetleyicinin blok diyagramı, şekil 2.1.3’ de ise bu microdenetleyicinin bacak bağlantı
şeması gösterilmiştir.
10
Şekil 2.1.1 MCS-51 core mimarisinin blok diyagramı
11
Şekil 2.1.2 Atmega8 Microdenetleyici Blok Diyagramı
12
Şekil 2.1.3 Atmega8 Microdenetleyici Bacak Bağlantı Şeması (PDIP)
Şekil 2.1.4 Atmega8 Microdenetleyici Bacak Bağlantı Şeması (TQFP)
2.2 Pin Anlamları
VCC Sistem besleme voltajı. 4.5v-5.5v
GND Sistem GND
Port B (PB0..PB7)
Xtal1/Xtal2/Tosc1/Tosc2
SPI
• Port B, programlanabilir pull-up dirençleri bulunan, 8 bit
genişliğinde bir giriş-çıkış portudur. Porta byte olarak
erişim yapılabileceği gibi bit olarak da erişim yapılabilir.
• Portun 6 ve 7. bitleri, Oscillator’ün internal RC seçilmesi
durumunda port bitleri, aksi durumda oscillator giriş uçları
13
olarak kullanılır.
• Oscillator’un internal RC seçilmesi durumunda portun 6
ve 7. bitleri ASSR registerinin durumuna göre
Timer/counter2’nin asenkron giriş uçları olarak
kullanılabilir.
Port ve portun fonksiyonlarının kullanımı ilerideki
konularda detaylı olarak anlatılacaktır
Port C (PC0..PC6)
PC7/Reset
Adc, Seri giriş-çıkış
• Port C, programlanabilir pull-up dirençleri bulunan 7 bit
genişliğinde bir giriş-çıkış portudur. Porta byte veya bit
erişimleri yapılabilir.
• Portun 7. biti RESDISBL yönlendirme biti ile anlam
değiştirebilir. RESDISBL biti programlanmış ise pin girişçıkış
pini, programlanmamış ise reset girişi olarak
kullanılır.
Port ve portun fonksiyonlarının kullanımı ilerideki
konularda detaylı olarak anlatılacaktır.
Port D (PD0..PD7)
Usart, int,
Timer/counter,
Analog comparator
• Port D, programlanabilir pull-up dirençleri bulunan 8 bit
genişliğinde bir giriş-çıkış portudur. Port byte veya bit
erimleri ile kullanılabilir.
Port fonksiyonlarının kullanımı ilerideki konularda detaylı
olarak anlatılacaktır.
AVCC Avcc analog digital çevirici için besleme voltaj girişidir. Bu voltaj
girişi saglanmadan ADC fonksiyonu kullanılamaz. ADC
fonksiyonunun kullanımı için Avcc ucu alçak geçiren bir filtre ile
besleme voltajına bağlanmalıdır.
AREF Analog-Digital çevirici için referans voltaj girişidir.