Makaleler / Elektronik / Mikrokontrolür Mikroişlemci / 8051 e Giriş


Yazar: Mehmet Özlav
Gönderen: Elektro   Tarih: 28-12-2001 15:40
Yorumlar: (0)   Oylar:
Bu yazıda öncelikle 8051 in kullanım amaçları ve avantajları hakkında bilgiler verilmiştir. Ve 8051 donanımı ve yazılımına genel bir bakışta bulundunulmuştur. Bu yazının amacı öncelikle 8051 MİB’sini kaba hatlarıyla tanıtarak uygulamalara bir temel hazırlamaktır.

8051 Ailesine Genel Bir Bakış

Genel olarak 8051 ailesine ait mikro işlemciler (mikro controller demek daha anlamlı) bünyelerinde programlanabilir portlar, eprom, analog dijital dönüştürücü (ADC) ve RAM bulundurabilirler. Bu yüzden Mİ’li kart uygulamalarda kart boyutunu oldukça küçültebilecek bu Mİ seçilmiştir. Bu Mİ ait blok diyagram aşağıda verilmiştir.

Şekil4. 8751BH Mikro İşlemcisi

Şekilde görüldüğü gibi 8751BH Mİ her biri giriş yada çıkış olarak programlanabilen dört adet port’a sahiptir. Dördüncü port şekilde açık olarak görülmediği halde TxD, RxD, RD, WR, T0, T1, INT0 ,INT1 bacakları toplu halde port gibi programlanabilirler. Ancak bu bacakların üstlendiği özel görevler vardır. Görüldüğü gibi 8751 Mİ ailesi asenkron seri haberleşme için oldukça uygun olup ayrı bir SIO arabirimine ihtiyaç duymamaktır. Bu sayede sadece bir RS232C yongasıyla PC ile seri olarak haberleşmek mümkün olur. Seri haberleşmeye ait setlemeler özel kontrol registerleri sayesinde yapılır. Böylece seri haberleşme kolayca tek yongayla halledilir. 87C51BH Mİ’sinde silinip programlanabilen 8K eprom bulunur. Bu eproma ilgili transfer ve kontrol programı yazılabilir. Bu sayede ayrı bir programlanabilir bellek yongası kullanmak zorunda kalınmaz. Ayrıca sistemin RAM ihtiyacı 87C51BH içinde bulunan 256 byte RAM’ın uygun organizasyonla kullanılmasıyla karşılanabilir. Yukarıda açıklamaya çalıştığım gibi bir çok işlemi 87C51BH üzerinde hallederek daha küçük bir kart elde edilebilir. Kartın yapısında kullanılacak diğer yongalar ise step motor sürücüsü (L293D), RS232C, 74HC123 gibi özel amaçlı yongalardan ibarettir. Ayrıca 87C51BH Mİ’si yüksek empedans özeliği gösteren programlanabilen portları sayesinde kolayca dış cihazlara (sürücü kullanmadan) bağlanabilir. 87C51BH’ın ayırıcı bir özeliği de interupt yapısının oldukça kolay anlaşılabilir ve rahat kullanılabilir olmasıdır.

Şekil 5.de 8751BH Mİ’sinin genel register bilgileri ve iç blok diagramı hakkında bilgi verilmiştir.

Şekil 5. 8051 mimarisi ve diğer üst modellere ilişkin ekler

Intel 8051 ailesine ait olan 87C51 Mİ’si genel özelikler bakımından 8051’le aynı mimariye sahip olmakla birlikte bazı ek donanımları bünyelerinde bulundururlar. Bu ek donanımlardan en önemli ikisi 87C51 Mİ’sinin 4K ve daha büyük kapasitelerde eprom’a ve 256 byte RAM’a sahip olmalarıdır. Ayrıca 8751 Mİ’sinde seri haberleşme için kullanılabilecek port bacakları da vardır. 8751 Mİ’sinde 128 adet özel ve genel amaçlı register bulunmaktadır. Aşağıda 8751 Mİ’sine ait hafıza tablosu verilmiştir.

Şekil 6. 8751 İçin direkt ve indirect adreslenebilen hafıza bölgeleri.

Şekil 6. da görüldüğü gibi 8751 Mİ’si, Mİ’ye ait özel ve genel amaçlı register’ların bulunduğu bir hafıza bölgesine sahiptir. Bu hafıza bölgesi 256 byte’lık RAM’ın direkt adreslenebilen üst 128 byte’lık bölümüne yerleştirilmiştir. Aynı bölge endirekt adreslendiğinde ise 128 byte’lık serbest amaçla kullanılabilen bir hafıza bölgesi olarak davranır. Düşük 128 byte’lık hafıza bölgesi ise direkt ve endirekt adreslenebilen serbest kullanımlı bir hafıza bölgesidir. Ayrıca bu bölgenin (20H - 30H) arasındaki 16 byte’lık hafıza bölgesi bit adreslenebilir register’lardan oluşmaktadır. (00H- 20H) arasında bulunan 32 byte’lık bölge yazılım yardımıyla seçilebilen 4 farklı register bankına bölünmüştür. Bu register bankları PSW’de bulunan iki bit yardımıyla seçilebilir. Aşağıda bu duruma ilişkin tablo verilmiştir.

PSW Bit4 PSW Bit3 Hafıza Adresi

0 0 00H-07H(R0-R7)

0 1 08H-0FH(R0-R7)

1 0 10H-17H(R0-R7)

1 1 18H-1FH(R0-R7)

Tablo 6. Register bankları

Her register bankı R0’dan R7’ye kadar etiketlerle gösterilen ve çeşitli amaçlarla adreslenebilen ve kullanılabilen registerlar’a sahiptir. Bu register’lar genel amaçla kullanılabilen register’lardır. Bu register’lar bit bit adreslenebilirler. Ayrıca SFR kaydedicilerinin hepsi bit bit adreslenebilir.

Aşağıda 8751 Mİ’lerine ait kaydediciler bir tablo halinde verilmiştir.

Tablo 6. SFR’ye ait register’lar.

8751 Mİ’si kendi dahili EPROM’u ve RAM’ıyla çalıştırılabileceği gibi harici RAM ve EPROM’lada çalıştırılabilir. Bunun için 8751 Mİ’sinin EA ve PSEN uçlarından yararlanılır. EA=GND yapılırsa harici program hafıza (EPROM) erişimi sağlanır. Tersi durumda ise harici veri hafızaya erişilir.

Aşağıda sırasıyla özel fonksiyon registerları(SFR)ndan önemli gördüğüm bazılarını açıklamaya çalışacağım. İlk olarak PSW(program status word) registerini inceleyelim.

Şekil.8 PSW saklayıcısının yapısı

Carry(CY) bayrağı aritmetik işlemleri sonucunda elde oluşmuş ise setlenir. Ayrıca bu bit akümülatörde bulunan değerin bit bit incelenmesini sağlar.

RS0 ve RS1 bit’leri ise daha önce açıklandığı gibi R0-R7 register’larının bulunduğu register bankını seçmek için kullanılır.

Parity(P) akümlatörde bulunan değerin içerdiği 1 sayısının tek yada çift sayıda olmasına göre 1 veya 0 değerini alır.

Auxilary Carry(AC) düşük dört bit’ten yüksek dört bit’e elde geçişi olursa setlenir. Bu bayrak daha çok BCD işlemlerinde kullanılır.

Overflow(OV) bit’i ise işaretli sayıların toplanması veya çıkarılması sırasında taşma olup olmadığını gösterir.

F0 ve REC ile gösterilen bayraklar kullanıcı tarafında genel amaçlı olarak kullanılabilen bir bayraklardır. Program status word programın çalışması sırasında oluşan olayları izlememizi sağlar bu yüzden alt program çağırmalarından önce saklanmalıdır.

İkinci olarak TMOD saklayıcısına bakalım. TMOD saklayıcısı 8751 Mİ’sinin bünyesinde bulunan zamanlayıcı/sayıcılar’ın hangi mod’da çalışacağını gösterir.8751 Mİ’sinde 2 adet zamanlayıcı/sayıcı bulunur. Bu sayıcıların çalışma modları ve TMOD register’ının ayrıntılı yapısı aşağıda verilmiştir.

Şekil.9 TMOD saklayıcısının yapısı

M0 ve M1 : Mode Select

Bu bit’ler timer’ların 4 çalışma modundan birini seçer.Aşağada bu duruma ilişkin tablo verilmiştir.

Mod0’da,13-bit sayaç olarak çalışan sayıcı taştığında kesme oluşturur. Mod1,mod0’a benzer ancak kesme üretilmesi için 16-bit sayıcının taşması gerekir. Mod2’de ise 16 bit’lik sayıcıların anlamsız yarısı her taşmadan sonra anlamlı tarafta bulunan sabit değer tarafından tekrar yüklenir. Burada anlamsız yarı 8-bit sayıcı olarak davranır. Ve her taşmadan sonra anlamlı yarıdan otomatik olarak yüklenir. Ayrıca her taşma ve her yüklemeden sonra bir kesme üretilir. Mod3’te timer1 pasiftir timer0 iki ayrı 8-bit sayıcı olarak davranır.

Bu bit 1 olduğunda zamanlayıcı /sayıcı , Sayıcı olarak çalışır. Tersi durumda zamanlayıcı olarak çalışır.

Eğer timer kontrol registerindeki timer run control bitleri setlenmiş ise bu bit’i temizleyerek zamanlayıcı/sayıcıyı başlatabiliriz.

TCON Saklayıcısı

Timer kontrol registerinin anlamlı ve anlamsız yarısının işlevleri farklıdır. Anlamlı yarı timer’ların kontrolü için kullanılırken anlamsız yarı harici interrupt(timer’lara ilişkin) kontrolü için kullanılır. Aşağada bu register’ın yapısı verilmiştir.

Şekil.10 TCON saklayıcısı

IT0: Bilindiği gibi 8751 Mİ’sinin iki adet harici kesme ucu vardır. IT0 bit’inin setlenmesi INT0 ucunun düşen kenarda aktif olmasına sebep olur.Bu bit’in resetlenmesi INT0 ucuna lojik -0 gelmesi durumunda kesme oluşmasına sebep olur. Bu durumda harici sinyal lojik-0 olduğu sürece tekrar tekrar kesme üretilir. IT0 ucu kullanıcı tarafından setlenir yada resetlenir.

IE0: Harici kesme (düşen yada yükselen) kenarı hissedildiğinde donanım tarafından setlenir. Bu durumda Mİ otomatik olarak sabit harici kesme adresine dallanacaktır. Kesme alt programının dönüşünde ise otomatik olarak bu bit resetlenir.

IT1: INT1 (harici interrupt 1) için IT0 bit’iyle aynı görevi üstlenir.

IE1: IE1 INT1(harici kesme 1) ile ilgili olup ,IE0’ın yaptığı görevin aynısını yapar.

TR0: TR0 biti zamanlayıcı/sayıcı 0’ın çalışmasını kontrol eder. Bu bit setlendiğinde zamanlayıcı/sayıcı 0 aktif olur.Ancak zamanlayıcı/sayıcı 0’ın çalışması için bu yeterli değildir. Bunun için TMOD register’indeki ilgili bit’in setlenmiş olması gerekir. Bu bit’in resetlenmesi zamanlayıcı/sayıcı 0’ı devreden çıkarır.

TF0: Zamanlayıcı/sayıcı 0 için taşma bitidir. Taşma oluştuğu zaman setlenir ve kesme servis programına dallanıldığında resetlenir. Bu işlemler tamamen donanım tarafından yapılır.

TR1: TR0’ın yaptığı işin aynısını zamanlayıcı/sayıcı 1 için yapar.

TF1: TF0’ın yaptığı işin aynısını zamanlayıcı/sayıcı 1 için yapar.

8751 Kesme Sistemi

8751 5 adet kesme kaynağına sahiptir. 8751’in kesme servis programlarına dallanma yöntemi sabit adreslere dallanma şeklindedir. Bu adresler servis programı yazılacak kadar bellek alanına sahip değildir. Bu yüzden bu adreslere konulan atlama emirleriyle servis programlarının başlangıcına gidilebilir. Bu kesmelere ilişkin öncelik sırası ve dallanma adresleri aşağıda verilmiştir.

Şekil.11 Kesme öncelikleri.

Aşağıda kesme yetkilendirme register’ının yapısı verilmiştir.

Şekil.12 kesme yetkilendirme register’ı

EA: Bu bit setlendiğinde bütün kesmeleri yetkilendirir.

ES: Bu bit setlendiğinde seri port kesmesini yetkilendirir.

ET1: Bu bit setlendiğinde zamanlayıcı/sayıcı 1 kesmesini yetkilendirir.

EX1: Bu bit setlendiğinde INT1(harici kesme1) kesmesini yetkilendirir.

ET0: Bu bit setlendiğinde zamanlayıcı/sayıcı 0 kesmesini yetkilendirir.

EX0: Bu bit setlendiğinde INT0(harici kesme 0) kesmesini yetkilendirir.

Şekil.11’deki öncelik sırası default öncelik sırasıdır. Bu sıra IP(Interrupt Priority) register’ı sayesinde değiştirilebilir. Aşağıdaki şekilde bu register’ın yapısı verilmiştir.

Şekil.13 kesme öncelik register’ı

PCT: Bu bit 1 olduğunda bu register’daki öncelik sırası Mİ tarafından dikkate alınır. Aksi durumda default öncelik sırası göz önüne alınır.

PS: Bu bit setlendiğinde en yüksek öncelikli kesme seri port kesmesi olur.

PT1: Bu bit setlendiğinde en yüksek öncelikli kesme zamanlayıcı/sayıcı1 kesmesi olur.

PX1: Bu bit setlendiğinde en yüksek öncelikli kesme INT1(Harici Interrupt 1) kesmesi olur.

PT0: Bu bit setlendiğinde en yüksek öncelikli kesme zamanlayıcı/sayıcı 0 kesmesi olur.

PX0: Bu bit setlendiğinde en yüksek öncelikli kesme INT0 kesmesi olur.

Seri port kesmesi diğer kesmelerden bir yönüyle ayrılır. Seri port kesmesi geldiği zaman Mİ sabit bir adres üretir.Fakat bu kesme iki sebepten dolayı gelebilir. Ya veri alımı tamamlandığında , ya da veri gönderimi tamamlandığında kesme oluşur. Kesmenin hangi sebepten dolayı oluştuğunu anlamak için SCON(seri port kontrol register) register’ında bulunan RI ve TI bitlerine bakılır. Aşağada bu register’a ilişkin yapı verilmiştir.

Şekil.14 Seri port kontrol register’ı

Seri port full-dublex çalışma moduna uygundur.Aynı anda bir veri birinci buffer’dan okunurken ikinci gelen veri diğer buffer’a yazılır.Eğer çok fazla veri gelir ise eski data alınmadan,eski verinin üzerine yeni veri yazılabilir.

SM0,SM1 veri iletişiminde kullanılacak baud-rate’in belirlenmesinde kullanılır. SM2 ise iki Mİ’lerin paralel çalışması söz konusu olduğunda Mİ’lerin haberleşmesi için kullanılır. REN bit’inin setlenmesi alıcıyı yetkilendirir. Eğer resetlenirse veri alımı durdurulur. TI ve RI yukarıda açıklandığı gibi gelen seri port kesmesinin türünü belirtir. TB8 ve RB8 ise mode 2 ve mode 3’te kullanılır. Aşağıda seri port için çeşitli veri transfer hızları için transfer modları açıklanmıştır. Veri transfer modlarına ilişkin tablo aşağıda verilmiştir.

Şekil.15 Veri Transfer Modları

Mod 0:
seri verinin geldiği uç RxD ucudur. TxD ucu ise gönderim saati ile dışarı veri göderir. 8 veri bit’i önce en az anlamlısı olmak üzere dışarı çıkartılır. Bu modda veri transfer hızı 1/12 osilatör(Sistem saat frekansı) frekansıdır.

Mod 1: 10 bit veri transfer edilir yada alınır. İlk alınan bit başlama bit’i olarak değerlendirilir. Ikinci kez alınan 8 bit veri olarak değerlendirilir. Son olarak alınan onuncu bit ise durma bit’i olarak değerlendirilir. Veri alınırken stop biti SCON register’ının RB8 bitinden okunabilir. Bu modda veri transfer hızı değişken olup zamanlayıcı 1 ile belirlenir.

Mod 2: 11 bit veri transferi yapılır. Bir başlama bit’i , 8 veri bit’i , bir programlanabilir dokuzuncu bit ve bir durma biti gönderilir yada alınır. Dokuzuncu bit 0 yada 1 olarak programlanabilir. Örneğin PSW’de bulunan eşitlik bit’I dokuzuncu bit olarak TB8’e taşınabilir. Gönderme sırasında bu dokuzuncu bit eşitlik bit’i olarak gönderilir. Veri alımında ise dokuzuncu bit RB8’e alınır. Stop bit göz önüne alınmadığı sürece bu modda veri transfer hızı 1/32 veya 1/64 osilatör frekansı olarak programlanabilir.

Mod 3: Bu modun mod 2 den farkı bu modda transfer hızının değişken olmasıdır. Bu modda veri transfer hızı zamanlayıcı 1 il belirlenir.

8751 Mİ’SİNİN YAZILIMI

8751 Mİ’si genel itibariyle intel ailesi özeliklerini taşır. Mİ yazılımına adresleme modlarını inceleyerek başlayalım. 8751 Mİ’sinin birçok adresleme modu olmasına karşılık önemli görülenler incelenmiştir.

Immediate Adresleme Modu : Bu modda kaynak komutun içinde bulunur. Immediate datanın hedef registere yüklenmesi şeklinde özetlenebilir. Aşağıda bu moda ilişkin örnek verilmiştir.

MOV A,# 2BH

Burada 2BH immediate değeri A’ya yüklenir. Aşağada bu durumu açıklayan şekil verilmiştir.

MOV A,# 2BH(8-bit data)

Doğrudan Adresleme Modu : Bu modda adresi doğrudan verilen bir kaydedicinin içeriği hedef register’a kopyalanır.

MOV A,90H

MOV A Direk adres(90H)

Burada 90H bellek hücresinin içeriği A register’ına kopyalanır.

Ayrıca bu Mİ’nin indisli, indirek ve indisli indirekt adresleme modları da vardır. Mİ’ye özel iç register’ların değişik adresleme modları vardır.

Kısaca Mİ’nin adresleme modlarını verdikten sonra Mİ’ye ait komut setini inceleyelim. Bir intel ürünü olan 8751 Mİ’si genel özellikleri itibariyle 80x86 komut takımını kullanır. Bu yüzden daha önce 80x86 komut takımıyla çalışmış programcı bu Mİ’ye kolayca adapte olabilir. Ancak bu Mİ’de olan temel farklardan biri olan dahili hafıza, komutların dahili ve harici komutlar olarak ayrılmasına sebep olur. Bu ayrım daha çok veri transfer komutlarında göze çarpar. Aşağıda dahili veri transfer komutları verilmiştir.

Şekil.16 Dahili veri transfer komutları.

Aşağıdaki komutlar harici veri transfer komutlarıdır. Harici veri transferinde kullanılan komutlar daha çok indisli indirekt adreslemeye müsaittirler.

Mİ’nin yazılımı ve Komut takımı 17.08.1998

Şekil.17 Harici veri transfer komutları.

Şekilde görüldüğü gibi DPTR’nin ardışıl değerleri için ardışıl adreslere erişmek mümkündür.Dolayısıyla DPTR(16-Bit) ile bütün kullanılabilir hafızayı indisli olarak adreslemek mümkündür. Ayrıca DPTR bir look-up tablosunu adreslemek içinde kullanılabilir. Look-up tablosu aşğadaki şekilde adreslenebilir.

MOVC A, A+DPTR ; Program hafıza (A+DPTR) hücresini oku. Aritmetik lojik komutlar ve duruma bağlı dallanma komutları aşağada bir tablo yardımıyla verilmiştir.

Şekil 18. Genel komutlar

Mİ’nin yazılımı ve Karmaşık komutlar 18.08.1998

Ayrıca bir kaç işlemi bir arada yapabilen karmaşık komutlar da vardır. Bu komutlar ve uygulamalar aşağıda verilmiştir.

İlk olarak şartlı dallanma emirlerinden olan CJNE emrini inceleyebiliriz. Aşağıda bu emre ilişkin kullanımlar verilmiştir.

CJNE A,direct,; eğer A kaydedicisi ile direct dahili adresindeki değer aynı değilse atla.

CJNE A,# data,; eğer A kaydedicisi ile immediate data değeri aynı değilse atla.

CJNE Rn,# data,; eğer Rn kaydedicisi ile immediate data değeri aynı değilse atla.

CJNE Ri,# data,; eğer Ri kaydedicisi ile adreslenen kaydedicinin içeriği ile immediate data değeri aynı değilse atla.

DJNZ Rn, birinci operand sıfır oluncaya kadar azalt sıfır oluncaya kadar adres ile verilen adrese atla.

DJNZ direct, birinci operand sıfır oluncaya kadar azalt sıfır oluncaya kadar adres ile verilen adrese atla. Burada ilk operand olarak bir dahili ram bölgesi verilmiştir.

Bu inceleme yazısı 8051 Mİ’leri hakkında genel bir bilgi sunumu amacıyla yazılmış tır. Ayrıntılı bilgi almak isteyenler aşağadaki kaynaklardan yararlanabilirler.

1-)Mikroişlemciler ve 8051 Ailesi (Yazar: Dr. Haluk Gümüşkaya Basım Tarihi:1998, e-mail:halukmam.gov.tr)

2-) 8051 Databook (Temic Corp.)