bÖlÜm i gİrİŞ - feteknik.comtez).pdf · ile ffh adresleri arasındaki bellek alanı sfr, 00h...

77
1 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ü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.

Upload: others

Post on 02-Feb-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

1

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.

2

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.

3

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.

4

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

Şekil-2-2 ALE Kullanımı İle Harici Program Kodunun Okunma Zamanlaması

5

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.

Şekil-2-3 Ortak Adres ve Data Yolunun Program Kodu Okunması Sırasındaki Zamanlaması

Ş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

6

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.

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

7

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.

8

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

9

Şekil-2-7 Portların Giriş/Çıkış Durum Özellikleri

Şekil-2-8 İki yönlü Çıkış Yapısı

10

Şekil-2-9 Open-Drain Çıkış Yapısı

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

Şekil-2-11 Saat İşaretinin Üretilmesi İçin Kristal veya Harici Saat Kullanımı

11

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.

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

Adresleme modları Gösterim İşlem 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 :Dahili 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ı

12

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ı

Adresleme modları Gösterim İşlem 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)

Sak. Özel (sadece ACC ve B) DIV AB A =Int (A/B) B= Mod (A/B) Sak. Özel (sadece ACC)

DIV A Ondalık Ayar

Tablo-2-4: Aritmetik Komutlar

Adresleme modları Gösterim İşlem 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

13

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ı

14

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ı

15

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.

16

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

17

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.

18

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.

19

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

20

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

21

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.

22

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

23

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

24

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.

25

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

26

Ö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 ;

27

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

28

Bit0-1:Veri uzunluğu: 00 5bit 01 6bit 10 7bit 11 8bit Bit2:Durdurma 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: Zamanlama hatası. Bit4: Alıcı işlemi yarıda kesti. Bit5: Gönderme tamamlandı. Bit6: Kaydırma tamamlandı. Bit7 : Kullanılmaz.

29

7.Modem Status Register:

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

Bit0: CTS değişti. Bit1: DSR değişti Bit2: RI kesildi. Bit3: RLSD kesildi.

Bit4: CTS' nine sıfıra tümleyeni. Bit5: DSR' nine sıfıra tümleyeni. Bit6: RI' nın sıfıra tümleyeni. Bit7: RLSD' nin sıfıra tümleyeni.

2.2.5.1. Program Communicatıons' un Açıklanması

Procedure BaudRate Aktif: Data Format registerinin en anlamlı biti 1 yapılırsa , data register ile interrupt enable registeri baud rate değerinin belirlenmesinde kullanılabilir. Procedure' de data format registeri (2FB)' nin 8. Biti setlenmektedir.

Procedure DataAktif : Data Format registerinin en anlamlı biti resetlenmektedir. Data ve Interrupt Enable registerleri asıl işlevlerinde kullanılmaya başlanır.

Procedure DataHız Tanımı: BaudRate Aktif yapıldıktan sonra 2F8 ve 2F9 adreslerine verilen word baudrate değeri olarak yazılır.

Procedure DataHız Tanımı: Baud rate değeri okunuyor.

Procedure PortuSetle: Seçilen haberleşme portuna gerekli tanımlamalar yazıldı.

Function InterruptDurumu: Interrupt ID registeri okunarak verinin geldiğini veya gönderildiğini belirler.

Function PortuOku: Porttan gelen verinin okunmasını sağlar.

Procedure PortaYaz : Porta bir byte' lık veriyi koyar. Gönderilecek karakter data registerine konulur.

Function ByteToString: Byte olarak verilen veriyi string' e dönüştürür.

Function StringToByte: String olarak verilen veriyi byte' a dönüştürür.

Procedure SeriCom: PC' de 8051 işlemcisi için assembler program yazıp derlendikten sonra HEX uzantılı bir dosya oluşmaktadır. Bu HEX uzantılı dosya assembly emirlerin kodlarını ve adreslerini içermektedir. Dosyanın bir satırının formatı ;

30

dataların_uzunluğu+adres+kayıt_tipi+datalar+kontrol_byte'ı, şeklindedir. Bu procedure ile ismi verilen HEX uzantılı dosyadan okunmakta ve seri porttan gönderilmektedir.

Program Communications; uses dos,crt; ************************************************************* const baud rate tanımlamaları br_9600 =$000C; parity biti tanımlamaları pr_none =$00; pr_odd =$08; pr_even =$18; data uzunluk tanımlamaları dl_6 =$01; dl_7 =$02; dl_8 =$03; stop biti tanımlamaları sb_1 =$00; sb_2 =$04; seri port tanımlamaları com1 =0; com2 =1; 8250 entegresi içerisindeki register tanımlamaları data =0; interrupt_enable =1; interrupt_identification =2; data_format =3; seri_control =4; seri_status =5; modem_status =6; yetkilendir =128; register için port adresleri regs:array[0..1,0..6] of word=(($3f8,$3f9,$3fa,$3fb,$3fc,$3fd,$3fe), ($2f8,$2f9,$2fa,$2fb,$2fc,$2fd,$2fe));

31

interrupt_identification tanımlamaları veri_geldi =4; veri_gonderme_tamamlandi =2; Hexadecimal Rakamların Tanımlanması Hexal:Array[1..16] of String[1]=('0','1','2','3','4','5','6','7', '8','9','A','B','C','D','E','F'); var sayih,sayil:byte; ByteToString Function'u için hsayih,hsayil:string[1]; StringToByte Function'u için ch:char; ************************************************************* data_format registerinin en anlamlı biti 1 yapılıyor procedure BaudRateAktif(pn:byte); var temp:byte; begin temp:=port[regs[pn,data_format]] or yetkilendir; port[regs[pn,data_format]]:=temp; end; ************************************************************* data_format registerinin en anlamlı biti 0 yapılyor procedure DataAktif(pn:byte); var temp:byte; begin temp:=port[regs[pn,data_format]] and (not yetkilendir); port[regs[pn,data_format]]:=temp; end; ************************************************************* baud_rate değeri ilgili registere yerleştiriliyor procedure DataHizAyari(pn:byte;speed:word); begin baudrateaktif(pn); port[regs[pn,data]]:=lo(speed); port[regs[pn,data+1]]:=hi(speed); end; ************************************************************* byte tipinde olan register word olarak tanımlanıyor function DataHiziTanimi(pn:byte):word; begin baudrateaktif(pn);

32

datahizitanimi:=portw[regs[pn,data]]; end; ************************************************************* seçilen haberleşme portunun tanımlaması yapılıyor procedure PortuSetle(pn:byte;speed:word;parity,datalen,stopbits:byte); var kontrolreg:byte; begin datahizayari(pn,speed); kontrolreg:=parity or stopbits or datalen; port[regs[pn,data_format]]:=kontrolreg; end; ************************************************************* veri geldiğinde ilgili registeri setler function InterruptDurumu(pn:byte):byte; var b:byte; begin b:=port[regs[pn,interrupt_identification]]; interruptdurumu:=b and (veri_gonderme_tamamlandi+veri_geldi); end; ************************************************************* port veri koruması için setleniyor veya okunuyor function PortuOku(pn:byte):byte; begin dataaktif(pn); portuoku:=port[regs[pn,data]]; end; ************************************************************* data registerine bir byte yazar procedure PortaYaz(pn:byte;ch:byte); begin dataaktif(pn); port[regs[pn,data]]:=ch; end; ************************************************************* Function ByteToString(Sayi:Byte):String; Var HexSayi:String[2]; ie:Byte; Begin SayiH:=Trunc(Sayi/16); SayiL:=Trunc(Sayi-SayiH*16); For ie:=0 to 15 do

33

if SayiH=ie then HexSayi:=Hexal[ie+1]; For ie:=0 to 15 do if SayiL=ie then HexSayi:=HexSayi+Hexal[ie+1]; ByteToString:=HexSayi; End; ************************************************************* Function StringToByte(HexSayi1:String):Byte; Var Sayi1:Byte; ie:Byte; Begin HSayiH:=(Copy(HexSayi1,1,1)); HSayiL:=(Copy(HexSayi1,2,1)); For ie:=0 to 15 do if HSayiH=Hexal[ie+1] then Sayi1:=ie*16; For ie:=0 to 15 do if HSayiL=Hexal[ie+1] then Sayi1:=Sayi1+ie; StringToByte:=Sayi1; End; ************************************************************* Procedure SeriCom; Label Oku; Var DosyaAdi:String[50]; Run:String; Test:Boolean; PortOkunan:Byte; Dosya:Text; Uzunluk,KayitTipi,RamAdrH,RamAdrL,RamData:String[2]; UzunlukByte,RamAdrHByte,RamAdrLByte,RamDataByte:Byte; i,j:Integer; Begin clrscr; TextBackGround(7);TextColor(0); GotoXY(18,12);Write('-'); for i:=19 to 66 do Begin GotoXY(i,12); Write('-'); End; GotoXY(67,12);Write('-'); GotoXY(18,20);Write('-'); for i:=19 to 66 do Begin GotoXY(i,20); Write('-'); End; GotoXY(67,20);Write('-');

34

for i:=13 to 19 do Begin GotoXY(18,i); Write('-'); End; for i:=13 to 19 do Begin GotoXY(67,i); Write('-'); End; TextBackGround(4);TextColor(30); GotoXY(19,13);Write(' Seri Port COM2 :9600,n,8,1 '); TextBackGround(7);TextColor(1); Iletişim Test test:=FALSE; GotoXY(19,14);Write(' '); GotoXY(19,15);Write(' İletişim Kurulmaya Çalışılıyor '); GotoXY(19,16);Write(' '); GotoXY(19,17);Write(' '); while NOT test do begin PortaYaz(1,11); if InterruptDurumu(com2) =veri_geldi then begin PortOkunan:=PortuOku(com2); if PortOkunan=11 then test:=TRUE; end else if keypressed then begin GotoXY(19,14);Write(' '); GotoXY(19,15);Write(' İletişim Sağlanamıyor. '); GotoXY(19,16);Write(' '); GotoXY(19,17);Write(' '); halt; end; end; GotoXY(19,14);Write(' '); GotoXY(19,15);Write(' Yükleme Yapacağınız Dosya Adı: '); GotoXY(19,16);Write(' '); GotoXY(19,17);Write(' '); GotoXY(21,16);Readln(DosyaAdi); if DosyaAdi='' then begin TextBackGround(0);TextColor(15);GotoXY(1,21);exit; end;

35

DosyaAdi:='C:\UTIL\ASM51\EXP\'+DosyaAdi+'.HEX'; $I- Assign(Dosya,DosyaAdi); Reset(Dosya); if IOResult<>0 then Begin TextBackGround(0);TextColor(12); GotoXY(24,18);Write(' Hatalı Dosya Adı'); GotoXY(26,19);Write(' '); Readkey; TextBackGround(0);TextColor(15); GotoXY(1,21); Exit; End; Close(Dosya); $I+ TextBackGround(0);TextColor(12); Assign(Dosya,DosyaAdi); Reset(Dosya); Oku: Read(Dosya,ch); if ch<>':' then Begin GotoXY(19,18);Write(' Çalışma dosyanız ASM51 HEX yapılı değil '); GotoXY(19,19);Write(' '); Close(Dosya); TextBackGround(0);TextColor(15); GotoXY(1,21); Exit; End; if ch=':' then Begin GotoXY(19,18);Write(' .......... Datalar RAM a yazılıyor ...........'); Uzunluk:=''; For i:=1 to 2 do Begin Read(Dosya,ch); Uzunluk:=Uzunluk+ch; End; UzunlukByte:=StringToByte(Uzunluk); RamAdrH:=''; For i:=1 to 2 do Begin Read(Dosya,ch); RamAdrH:=RamAdrH+ch; End; RamAdrHByte:=StringToByte(RamAdrH);

36

RamAdrL:=''; For i:=1 to 2 do Begin Read(Dosya,ch); RamAdrL:=RamAdrL+ch; End; RamAdrLByte:=StringToByte(RamAdrL); KayitTipi:=''; For i:=1 to 2 do Begin Read(Dosya,ch); KayitTipi:=KayitTipi+ch; End; if (Uzunluk='00') and (RamAdrH='00') and (RamAdrL='00') and (KayitTipi='01') then Begin Delay(50); PortaYaz(Com2,255); Delay(50); PortaYaz(Com2,255); Delay(50); PortaYaz(Com2,00); Delay(50); Close(Dosya); GotoXY(19,18);Write(' Transfer Tamamlandı... '); GotoXY(19,19);Write(' Programı koşmak istiyor musunuz ( E/H ): '); GotoXY(64,19);Readln(Run); if (Run='e') or (Run='E') then Begin PortaYaz(Com2,01); GotoXY(19,18);Write(' ......... Program Koşuluyor ......... '); GotoXY(19,19);Write(' '); End else Begin PortaYaz(Com2,00); GotoXY(19,18);Write(' '); GotoXY(19,19);Write(' '); End; TextBackGround(0);TextColor(15); GotoXY(1,21); Exit; End; For j:=1 to UzunlukByte do Begin RamData:=''; For i:=1 to 2 do Begin Read(Dosya,ch);

37

RamData:=RamData+ch; End; RamDataByte:=StringToByte(RamData); Delay(50); PortaYaz(Com2,RamAdrHByte); Delay(50); PortaYaz(Com2,RamAdrLByte); Delay(50); PortaYaz(Com2,RamDataByte); GotoXY(28,19);Write('Adres :',ByteToString(RamAdrHByte),ByteToString(RamAdrLByte),' Data : ',RamData); RamAdrLByte:=RamAdrLByte+1; if RamAdrLByte=0 then RamAdrHByte:=RamAdrHByte+1; End; End; Readln(Dosya); Goto Oku; End; begin PortuSetle(Com2,BR_9600,Pr_None,Dl_8,Sb_1); DataAktif(Com2); SeriCom; end.

38

BÖLÜM III

UYGULAMA ÖRNEKLERİ

3.1. Kesme ile Çalışan 8-Bit ADC Arabirimi

Bir önceki bölümde , ADC ,analog sinyali sayısal karşılığına çevirirken ,işlemci

meşgul bekleme durumundaydı. Bu bölümde verilecek örnekte , A/D çevirim sonu bir kesme ile işlemciye bildirilmektedir. ADC ‘nin çevirim sonunu belirten BUSY sinyali , bir inverter ile terslenerek mikrokontrtolörnin INTO girişine bağlanır. Bu örneğin tek donanım farkı budur ve şeması aşağıda görülmektedir.

Şekil-3-1 : ZN448 A/D Çeviricisinin Kesmeli Çalışması İçin 8051 Arabirimi

Aşağıda verilen ana programda , işlemci ,aDC’ yi çevirimi başlattıktan sonra , elde

bayrağı üzeride beklemeye başlar : BUSY : JNC BUSY Bu komut yürütülürken , ADC ,çevirimi bitirir ve BUS:Y sinyalini lojik 1 yapar.

Inverter ile terslenen bu sinyal ,ADC’ den işlemciye bir kesme hizmet programı

39

,INTSERVIS ,çalışır. Bu alt programda, 8- bit örnek okunur ev elde bayrağı 1’ lenir. Kesme hizmet programından döndükten sonra ,daha önce yürütülmekte olan , yukarıda verilen , bekleme durumunda olan satırdan çıkılmış olur.

*************************************************************** INTO kesmesi ile çalışan ADC örneği (Ana Program) ***************************************************************

ORG 2200H MOV DPTR ,# MESAJ ;ADC ‘nin çalıştığı CALL PSTRING ;ekrana yazılır. SETB IE. 7 ;Kesmeler aktif. SETB IE. 0 ;INTO aktif. SETB TCON. 0 ;INTO düşen kenarda aktif.

LOOP: MOV DPTR , #OLCU1 ;ekranda görünecek mesaj CALL PSTRING ; gönderilir. CLR START ; ADC ‘nin çevrime başlaması için ; START=0 yapılır. SETB START ; Sonra START =1 yapılır CLR C ;Çevirim işleminin bitme bayrağı BUSY:

JNC BUSY ; ISR’ de 1 yapılması beklenir. CALL BIMARYTOASCII ; İkili değeri ASCII değere çevirir ve ekrana yazdırır.

MOV DPTR, #OLCU2 ; Ekranda görünecek mesaj

CALL PSTRING ; gönderilir. JMP LOOP ; Bir sonraki çevrim için başa dönülür. *************************************************************** AMAÇ : INTO kesmesi geldiğinde çevirim değerini okur. Girişler : P1 Çıkışlar :ACC’ de bir örnek değer. Call (lar) : Yok Değişkenler : A, P3.4, C. ***************************************************************

; ADC çevirimini bitirdiğinde bu adrese dallanılır.

40

ORG 2000h INTSERVIS : CLR RD ; Verinin okunması için RD=0 yapılır.

MOV A, P1 ; P1’deki sayısal çevirim değeri A’ya alınır. SETB RD ;Veri okunduktan sonra RD=1 yapılır. SETB C ; Ana programdaki kesme döngüsünden çıkmak için C=1 yapılır. RETI END.

3.2- SAYISAL ANALOG ÇEVİRİM

Bazı mikrokontrtolör uygulamalarında analog çıkışa ihtiyaç vardır. Örneğin bir DC motor kontrolünde veya değişken voltajla bir lambanın ışık şiddetini ayarlama gibi uygulamalarda DC gerilim kullanılır. Bu tür uygulamalarda kontrol sinyalinin , yani yüke uygulanan gerilimin , sürekli bir şekilde değiştirilmesi gerekmektedir. Bu işleme sayısal –analog (D/A) çevirim denir. Bir D/A çeviriminde, çıkış gerilimi bir sayısal değerle (8-bit ,12 –bit gibi) orantılıdır. Şekil(a) da verilen örnekteki 3-bit D/A çeviricide , analog çıkış şekil(b)’ de görüldüğü gibi doğrusaldır.

Şekil-3-2 3-Bit DAC

41

Bir mikrokontrtolörlü sistemde , analog sinyal üretmek için değişik yollar

bulunmaktadır. Bir sayısal değerden , nalog sinyal üretmenin en kolay yollarından biri Darbe Genişlik Modülasyonu(PWM) tekniğidir. PWM’ de yüksek frekanslı bir kare dalga , sayısal çıkış olarak üretilir. Örneğin ,bir port bit’i sürekli şekilde yüksek frekansta 1 ev 0 olarak değiştirilir. Bu üretilen sinyal aşağıdaki şekilde görüldüğü gibi , bir alçak geçiren süzgece uygulanır. Süzgeci çıkışı kare dalga sinyalin RMS değeridir.

Şekil-3-3 PWM İle Üretilen Sinyalin DC Bileşeni Yoluyla D/A Çevirim. Kare dalga sinyalin RMS değeri ,sinyalin dolu ve boşluk oranını (duty cycle)

ayarlayarak değiştirilebilir. Dolu boşluk oranı bir çevrimde sinyalin yüksek voltajda (lojik 1 ) tutulma oranıdır. Bir çevrim, 0’ dan 1’e geçişte başlar ve benzeri bir sonraki çevirimde biter. Bir çevirimde eğer sinyalin lojik 1’de kalma süresi lojik 0’ da kalma süresine eşit ise çalışma çevrimi %50 dir. Yani bu çalışma . zamanının yarısında , sinyal yüksek değerde tutulmuş anlamına gelir. %100 bir çalışma zamanı ise devamlı yüksek değerde olduğu demektir. % 25’lik çalışma zamanında ise sinyal , zamanın ¼ ünde yüksek tutulmaktadır. Aşağıdaki grafikte çalışma çevrimleri ve çıkışın +5 V yüksek voltaj değerine karşılık gelen , ortalama DC çıkış değerleri görülmektedir.

Şekil-3-4 Değişen Ortalama DC Çıkış İçin PWM Değeri

42

Bir mikrokontrolör ile bir bit PWM yapılabilir. Bu tekniğin basit olması ve

mikrokontrtolörünün sadece bir çıkışının bu işlem için yeterli olması, bu tekniği cazip hale getirmektedir. Fakat bu basitlik , sinyalleme için gereken kod işlem yükü fiyatı ile beraber gelmektedir. Bugün özel PWM çıkışlarına sahip mikrokontrtolörler bulunmaktadır. Örneğin Intel 8096 mikrokontrtolörü tümdevre üzerinde PWM kaynaklarına sahiptir. Bu işlemcilerde PWM sinyali üretmede , program ile tek yapılan , bu işlem için ayrılan saklayıcılara gerekli değerlerin yüklenmesi ve sinyal üretiminin başlatılmasıdır. Bu sayede , PWM sinyali üretilmeye başlandıktan sonra , işlemciye bir kod yükü olmamakta ve işlemci sinyal üretimi için sürekli atanmaktadır. Mikrokontrolörlü sistemlerde analog sinyal üretmek için diğer bir yöntem , işlemci dışında bir DAC tümdevresi kullanmaktır. Şekil-3-5’ de tipik bir DAC tümdevresi görülmektedir. Bu tümdevrenin mikrokontrtolör ile kullanımında , mikrokontrtolörnin 9 tane ucu bu iş için ayrılır. 8-bit sayısal veri için , örneğin bir port ve 1 bit bu verinin DAC içindeki latch’ ta tutturulması için , kontrol sinyali olarak kullanılır. Mikrokontrtolör , 8-bit sayısal verisini bir port’ u üzerinden DAC tümdevresinin D7-D0 girişlerine uyguladıktan sonra , bu 8-bit verinin latch’ te tutturulması için CE (Chip Enable) DAC kontrol girişini lojik 0 yapar. Bu 8-bit veri tümdevre içindeki D/A çevirici ile , analog sinyale çevrilir ve bir op-amp üzerinden bu sinyal dışarı alınır.

Şekil-3-5 8-bit Bir DAC Blok Diyagramı Aşağıdaki şekil-3-6’ da tipik bir DAC uygulamasına örnek olarak ZN428’ in 8051 arabirimi verilmiştir. Sayısal veri üretimi için , mikrokontrtolörnin P1 portu ve bu veriyi DAC içindeki latch ‘te tutturma kontrol sinyali olarak , P3.3 ucu

43

kullanılmıştır. DAC’ ın kullanımını gösteren basit bir program aşağıda verilmiştir. Programda mikrokontrtolör P1 üzerinden sayısal veri üretmekte ve P3ç3 kontrol ucuyla bu veriyi DAC latchında kullanmaktadır. P1 önce sürekli bir şekilde azaltılmakta ev daha sonra arttırılmaktadır. Bu işlemler sırasında sayısal P1 vericisi, DAC’ a gönderilerek analog karşılıkları elde edilmektedir. Bu sayede DAC çıkışında bir üçgen dalga şekli elde edilir.

CLR P3.3 ; DAC çevrime hazır MOV P1 , #OFF ; P1 çıkış

AZALT ; DAC P1 MOV A, P1

CJNE A, #00h, AZALT ARTTIR ; INC P1 MOV A, P1 CJNE A ,#0FFh ,ARTTIR

JMP AZALT

Şekil-3-6 8 Bit DAC blok diyagramı

44

BÖLÜM IV

8051 GELİŞTİRME DEVRELERİ- YAZILIMLARI

4.1.CPU-EPROM-LATCH Kurulumu

8051 CPU' da adres hattını anlamsız yarısı ile data hattı ortak bir hat üzerine yerleştirilmişlerdir. Bunun amacı hem CPU' daki bacak sayısının azaltılması hem de IEEE standartlarına uyum içindir. Bu hattan ne zaman adres ve ne zaman datanın çıkarılacağı ise CPU üzerindeki ALE(Address Latch Enable) bacağı sayesinde olmaktadır. CPU dan data çıkarılacağı zaman ALE bacağı Lojik-0 seviyesine çekilmekte ,adres çıkarılacağı zaman ise ALE Lojik-1 seviyesine çekilmektedir. Eğer Adres-Data ortak hattı bir latch (74LS373) ' lanacak olursa CPU' dan adres ve data hattı ayrılmış olacaktır. Yapılacak çalışmalarda başlanacak en temel nokta burasıdır. Kullanılan CPU' nun (80C31) kendinden EPROM/PROM' u olmadığı için EA bacağı toprak' a çekilmiş böylece harici Program Bellek kullanılacağı ifade edilmiş olur. Artık en temel yapı kurularak işe başlanabilir. Şekil-3.3.'de bu yapı verilmiştir.

Şekil-4-1 EPROM Bacak Yapısı ve Bacak Adları

45

Şekil-4-2 Latch Bacak Yapısı ve Doğruluk Tablosu

Şekil-4-3 CPU-EPROM ve Latch' dan Kurulu Temel Devre

Devre kurulduktan sonra her aşamada bu yapının çalışıp çalışmadığının testini sağlayacak bir program yazılacak olursa ileride meydana gelecek arıza durumlarının testi moduler bir şekilde yapılmış olacaktır. Bunun için yazılmış program aşağıda gösterilmiştir.

46

;DENEME PROGRAMI 1 ;YAZAN:CUNEYT URGUN ;TARİH:14-3-1997/CUMA ;8051 CPU'NUN P1 PORTUNDAN YAKLAŞIK OLARAK (KRİSTALE BAĞLI)10-25 sn. ;ARALIKLARLA 10101010 VE 01010101 DEĞERİNİ GÖNDERİR. BASLA: MOV A,#0AAH MOV P1,A MOV R0,#080H BIR: NOP DEC R0 MOV R1,#080H IKI: NOP DEC R1 MOV R2,#080H UC: NOP DEC R2 CJNE R2,#000H,UC CJNE R1,#000H,IKI CJNE R0,#000H,BIR MOV A,#055H MOV P1,A MOV R0,#080H BIR1: NOP DEC R0 MOV R1,#080H IKI2: NOP DEC R1 MOV R2,#080H UC3: NOP DEC R2 CJNE R2,#000H,UC3 CJNE R1,#000H,IKI2 CJNE R0,#000H,BIR1 JMP BASLA END

47

4.2.RAM (6264)' ın Eklenmesi

Çalışmada iki adet 6264 Statik RAM kullanılacaktır. Bacak Yapısı şekil-4-1.'de verilmiştir. Bu RAM' lardan biri ,CPU' nun genel olarak kullanacağı RAM, diğeri ise devrenin PC ile bağlantısı sonucu alınacak bilgilerin yazılacağı ve sonrada bu bilgilerin program kodu olarak çalıştırılacağı RAM' dır. Bu RAM' lar CPU' nun adresleme bölgesi içinde sırası ile 2000h-3FFFh ve 4000h-5FFFh arasına oturtulmuştur. Bu RAM' ların seçilmesi için bazı gerekli kod çözme devrelerinin gerçekleştirilmesi gerekmektedir. Ancak devrede bu kod çözme elemanlarının eklenmesi hem ek masraf hem de daha fazla donanım gerekmektedir. Devremde 8'den fazla dış cihaz kullanılmadığı için 64KB'lık adresleme bölgesi 8 eşit parçaya ayrılabilir. Bu da adres hattını en anlamlı 3 biti olan A13-A14-A15'den yararlanarak ve bir 3'den 8'e kod çözücü (74LS138) kullanılarak yapılabilir.

Şekil-4-4 Kod Çözme İşlevinin Gerçeklenmesi

Aslında 8051 CPU' da EPROM için bellek alanı ayırmanın gereği yoktur. Yani kod çözücünün Y0 çıkışından alınan ve EPROM' un CE ucuna verilen bağlantı gereksizdir. CPU' da EA=0 yapmak ile zaten harici program bellek' in kullanılacağı ve PSEN(Program Stere Enable) bacağınında EPROM' un OE' sine vermek ile de EPROM' un program bellek' i olduğu tanımlanmış olur. Ama yaptığım çalışmada PC' den datalar alınıp RAM' a yazıldıktan sonra program bellek alanı RAM olacağından EPROM' un ortadan kaldırılması için gereklidir. Aşağıdaki şekil-4.6.'de birinci RAM' ın devreye bağlanışı gösterilmiştir. RAM bağlandıktan sonra yazılacak program RAM' ın ve diğer devre elemanlarının çalışmasını da test etmiş olacaklardır. Yazılan program birinci RAM' a 01010101b ile 10101010b sayılarını 2000h ve 2001h adreslerine yazmakta daha sonra ise onları okuyarak P1 portuna 2-3 sn.' lik aralarla çıkmaktadır.

48

Şekil-4-5 6264 RAM' ın Bacak Yapısı

Şekil-4-6 Birinci RAM' ın Devreye Eklenmesi

49

;DENEME PROGRAMI-2 ORG 0000H RAM_A_YUKLE: MOV DPTR,#2000H MOV A,#055H MOVX @DPTR,A INC DPTR MOV A,#0AAH MOVX @DPTR,A ACALL BEKLE GOSTER: MOV DPTR,#2000H MOVX A,@DPTR MOV P1,A ACALL BEKLE INC DPTR MOVX A,@DPTR MOV P1,A ACALL BEKLE SJMP RESET BEKLE: MOV R0,#015H BIR: DEC R0 MOV R1,#080H IKI: DEC R1 MOV R2,#080H UC: DEC R2 CJNE R2,#000H,UC CJNE R1,#000H,IKI CJNE R0,#000H,BIR RET END

İkinci RAM' ın bağlanması için önemli bazı ayrıntılar vardır. Birinci RAM' ın bağlanmasında, CPU' nun RD ve WR bacakları RAM' ın sırasıyla OE ve R/W bacaklarına karşı düşürülmüştür. Dolayısıyla direk olarak RAM' a bilgi yazılıp bu bilgiler okunabilecektir. Ama ikinci RAM' a yazılacak bilgiler bir data gibi değil de program kodu olarak okunacaktır. Dolayısı ile bu RAM program kodu olarak okunurken hem seçili olmalı hem de CPU' nun PSEN işareti uygulanabilmelidir. Bunu sağlayacak pek çok yöntem bulunabilir. Bu işi yerine getirecek donanımımız şekil-4.7.'de gösterilmiştir.

50

Şekil-4-7 Harici RAM İçin Okuma Sinyalinin Elde Edilmesi

Şekil-4-8 Kullanılan AND Kapısı İçin Bacak Yapısı ve Lojik Sembolü

Bu RAM' ın testi için yazılacak programda yazılan datalar okunurken program kodu yani 8031 CPU' su emir kodu olarak okunacaktır. Bu yüzden programın sonucunu görmek için RAM' a çok basit bir programın emir kodları yazılacak ve sonrada çalıştırılacaktır. Önce basit programımızı yazalım. Örneğin bu program P1 portuna 10000001b değerini çıkan bir program olabilir.

51

;DENEME PROGRAMI-3 ORG 0000H MOV A,#10000001B MOV P1,A END. Bu programın hexal yani emir kodu karşılığı

74 81 F5 90'dır. Şimdide deneme programımızı yazalım. ;DENEME PROGRAMI-4 RAM2 EQU 4000H ORG 0000H MOV DPTR,#4000H MOV A,#074H MOVX @DPTR,A INC DPTR MOV A,#081H MOVX @DPTR,A INC DPTR MOV A,#0F5H MOVX @DPTR,A INC DPTR MOV A,#090H MOVX @DPTR,A INC DPTR MOV A,#022H MOVX @DPTR,A LCALL RAM2 END.

52

Program çalıştırıldığında eğer bir sorunla karşılaşılmaz ise ikinci RAM' ın içindeki bilgileri data gibi değil de emir kodu gibi okuduğu ve sonuç olarak P1 portuna 10000001b değerini çıktığı görülecektir. Son satırlarda ayrıca RAM' ın içine 22h değerinin de yazıldığı görülmektedir. Bunun anlamı RET komutunun çalıştırılarak LCALL ile çağrılan yere geri dönmesini sağlamak içindir.

4.3.İki Mikrobilgisayar' ın Haberleştirilmesi

Yapılan uygulamalı çalışmalardan biride iki mikrobilgisayar sisteminin haberleştirilmesi olmuştur. CPU, EPROM, Latch ve RAM' dan kurulmuş iki sistem 8031'in içinde bulunan UASRT (Universal Asencrounus Receiver and Transmitter) sayesinde seri asenkron haberleşmeyi çok basit olarak yapabileceklerdir. Bu işlemi gerçekleştirecek program, seri haberleşmenin nasıl yapılacağı konusunda bilgi vermenin yanı sıra CPU' daki Timer/Counter kullanımı ve Baud Rate değeri üretiminin nasıl gerçekleştirileceği konusunda da faydalı olacaktır. Devrenin kurulmasında dikkat edilmesi gereken nokta, birinci CPU' nun RxD ve TxD bacaklarının sırasıyla ikinci CPU' nun TxD ve RxD bacaklarına bağlanması sonra da devrenin topraklarının birleştirilmesidir. ;DENEME PROGRAMI-5 ;CUNEYT URGUN ;VERICI 8031 ICIN PROG. ;05-04-1997/CUMARTESI ORG 0000H MOV PSW,#00011000B LCALL RAM_A_YAZ LCALL TIMER_KUR GOND: LCALL DATA_GONDER SJMP GOND TIMER_KUR: MOV TMOD,#00100010B CLR TR0 MOV TL1,#0FDH MOV SCON,#01000000B SETB TR1 RET DATA_GONDER: MOV R7,#003H MOV DPTR,#2000H

53

OKU: MOVX A,@DPTR MOV SBUF,A GONDER: JNB TI,GONDER INC DPTR CLR TI DJNZ R7,OKU RET RAM_A_YAZ: MOV A,#70H MOV DPTR,#2000H MOVX @DPTR,A INC DPTR MOV A,#52H MOVX @DPTR,A INC DPTR MOV A,#63H MOVX @DPTR,A RET END ;DENEME PROGRAMI-6 ;CUNEYT URGUN ;ALICI 8031 ICIN PROG. ;05-04-1997/CUMARTESI ORG 0000H MOV PSW,#00011000B LCALL TIMER_KUR LCALL DATA_AL YAZ: LCALL RAMDAN_P1_E SJMP YAZ TIMER_KUR: MOV TMOD,#00100010B CLR TR0 MOV TL1,#0FDH MOV SCON,#01010000B SETB TR1 RET BEKLE: MOV R0,#080H BIR:

54

DEC R0 MOV R1,#080H IKI: DEC R1 MOV R2,#080H UC: DEC R2 CJNE R2,#000H,UC CJNE R1,#000H,IKI CJNE R0,#000H,BIR RET DATA_AL: MOV R7,#003H MOV DPTR,#2000H AL: JNB RI,AL MOV A,SBUF MOVX @DPTR,A INC DPTR CLR RI DJNZ R7,AL RET RAMDAN_P1_E: MOV R7,#003H MOV DPTR,#2000H OKU: MOVX A,@DPTR INC DPTR MOV P1,A LCALL BEKLE DJNZ R7,OKU RET END

4.4. İletişim Arayüz Devre Elemanlarının (1488-1489) Eklenmesi

Ara yüz elemanları iki birim arasındaki işaret seviyelerini uygunlaştırmak için kullanılan ara elemanlardır. PC(Personel Computer)' ler seri haberleşmede RS232 standardını kullanırlar. RS232'de DTE (Data Terminal Equipment) karşısındaki DTE' yi yaklaşık 20mA'lik bir akımla sürer. Akımla sürme yöntemi hatlardaki kayıplardan dolayı daha uygun bir çözümdür. RS232 standardında lojik-0 seviyesi -15V ile --3V ve lojik-1 seviyesi ise +3V ile +15V arasındadır. Arada kalan -3Vile +3V bölgesi ise belirsizlik bölgesidir.

55

8051 CPU +5V'da çalıştığı için RxD ve TxD bacaklarında lojik-1 +5V ile lojik-0 ise

0V ile ifade edilecektir. PC' lerde ise lojik-1 +12V ve lojik-0 -12V olduğundan ikisi birbirleri ile haberleştirilirken gerekli gerilim genlik dönüşümlerinin yapılması gerekmektedir. Bu iş için 1488(Quad Line Receiver) ile 1489(Quad Line Driver) entegreleri veya tamamen bunlara eşdeğer 75188-75189 entegreleri kullanılabilir. **DCE(Data Communication Equipment) DTE DCE DCE DTE

Şekil-4-9. DTE ve DCE

PC ile 8031 arasındaki seri bağlantının ara yüzler ile yüzleştirilmesi aşağıdaki biçimdedir. +12V -12V RxD(2) 1488 TxD(11) PC +5V 8031 TxD(3) 1489 RxD(10)

Şekil-4-10. PC ile 8051'in Yüzleştirilmesi

56

BÖLÜM V

PIC 5.1. PIC MİKROKONTROLÖRÜ

Kod Verimliliği :

PIC Harvard mimarisi temelli 8 bitlik bir mikrokontrtolördir. Bu ,bellek ve veri için ayrı yerleşik bus’ ların bulunduğu anlamına gelir. Böylelikle akış miktarı veriye ve program belleğine simültane erişim sayesinde arttırılmış olur. Geleneksel mikrokontrtolörlerde veri ve program taşıyan bir tek yerleşik bus bulunur. Bu ,PIC’ le karşılaştırıldığında işlem hızını en az iki kat yavaşlatır. Güvenilirlik :

Tüm komutlar 12 veya 14 bitlik bir program bellek sözcüğüne sığar. Yazılımın programın VERİ kısmına atlamaya ve veri’yi komut gibi çalıştırmasına gerek yoktur. Bu 8 bitlik bus kullanan ve Horvard mimarisi temelli olmayan mikrokontrtolörlerde gerçekleşmektedir. Komut Seti :

16C5X ailesinde yazılım yaratmanız için 33 komut öğrenmeniz yeterlidir. 16CXX araçları içinse bu sayı 35 tir. OIC tarafından kullanılan komutların hepsi yazmaç (register) temellidir ve 16C5X ailesinde 12 bit 16CXX ailesindeyse 14 bit uzunluğundadır. CALL, GOTO ve bit test eden BTFSS, INCFSZ gibi komutlar dışında ,her bir komut, tek bir çevrimde çalışır. Hız:

PIC ,osilatör ve yerleşik saat yolu (clock bus) arasına bağlı yerleşik bir (divide by 4 ) 4’lü bölünme’ ye sahiptir. Bu , özelikle 4 MHz lik kristal kullanıldığında komut sürerlerinin hesaplanmasında kolaylık sağlar. Her bir komut döngüsü 1 µs’ dir. PIC oldukça hızlı bir mikrokontrtolördür. Örneğin 5 milyon komutluk bir programın , 20 MHz lik bir kristalle aydınlanması yalnız 1 saniye sürer. Bu süre 386 SX 33 hızının neredeyse 2 katıdır. Statik İşlem :

PIC tamamıyla statik bir mikroişlemcidir. Başka bir deyişle saati durdurduğunuzda ,tüm yazmaç içeriği korunur. Pratikte bunu tam olarak gerçekleştirmeniz mümkün değildir. PIC’i uyutma moduna getirdiğinizde , saat durur ve PIC ‘e uyutma işleminden ....hangi durumda olduğunu size hatırlatacak çeşitli bayraklar kurar. PIC uyuma modunda yalnızca 1µA dan küçük bir değere sahip bekleme (standby) akımı çeker.

57

Sürücü Kapasiteleri : PIC yüksek bir sürücü çıktı kapasitesine sahiptir.

Seçenekler :

PIC ailesinde her türlü ihtiyacınızı karşılayacak çeşitli hız, sıcaklık ,kılıf, I/O hatları ,zamanlama (timer ) fonksiyonları,seri iletişim portları ,A/D ve bellek kapasite seçenekleri bulunur. Güvenlik :

PIC endüstride en üstünler arasında yer alan bir kod koruma özeliğine sahiptir. Koruma bitinin programlanmasından itibaren , program belleğinin içeriği , program kodunun yeniden yapılandırılmasına olanak verecek şekilde okunamaz. Geliştirme :

PIC geliştirme amacıyla yeniden programlanabilen (EPROM) ve seri üretim amacıyla OTP (one time programmable – bir kere programlanabilir) için pencereli formda bulunabilir. Geliştirme araçlarının temini mümkündür ve fiyatları caziptir.

5.2.1. PIC Mikrokontrolör Yapısı

CPU bölgesinin kalbi ALU’dur. (Arithmetic Logic Unit –Aritmetik Mantık

Birimi) ve W (Working-Çalışan) yazmacı adında bir yazmaç içerir. PIC, diğer mikroişlemcilerden ,aritmetik ve mantık işlemleri için bir tek ana yazmaca sahip oluşuyla farklılaşır. W yazmacı 8 bit genişliğindedir ve CPU’daki herhangi bir veriyi transfer etmek üzere kullanılır.

CPU alanında ayrıca iki kategoriye ayırabileceğimiz Veri Yazmaç Dosyaları

(Data Register Files ) bulunur : I/O ve kontrol şeklinde çalışanlar ve tamamen RAM gibi çalışanlar. Harvard Mimarisi temelli mikrokontrolörlerde veri akış miktarını hızlandırmak ve yazılım güvenliğini arttırmak amacıyla aynı bus’lar kullanılır. Bu mimari , veri ve program belleğinne simultane erişimi olanaklı kılar.

58

Şekil-5-1 Temel PIC Blok Diyagramı

59

Max

ımum

fre

quan

cyof

Ope

rati

on

EP

RO

M

RO

M

EE

PR

OM

Dat

a M

emor

y (b

ytes

)

Dat

a E

EP

RO

M (

byte

s)

Tim

er M

odul

e(s)

Cap

ture

/Com

pare

/P

WM

Mod

ule

Ser

ial

Por

t(s)

(S

PI

/I2C

,SC

I )

Par

alle

l Sla

ve P

ort

Ana

log

to D

igit

al C

onve

rtor

(8-

bit)

Com

pera

tors

Ext

erna

l Int

erru

pts

Inte

rrup

t S

ourc

es

I/O

Vol

tage

Ran

ge (

Vol

ts)

Num

ber

of I

nstr

ucti

ons

Pac

kage

PIC16C620 20 512 _ _ 80 _ TMR0 _ _ _ _ 2 Yes 4 13 3.0to 6.0 35 16- pin DIP ,16-pin SOIC ,20

PIC16C621 20 1K _ _ 80 _ TMR0 _ _ _ _ 2 Yes 4 13 3.0to 6.0 35 16- pin DIP ,16-pin SOIC ,20

PIC16C622 20 2K _ _ 128 _ TMR0 _ _ _ _ 2 Yes 4 13 3.0to 6.0 35 16- pin DIP ,16-pin SOIC ,20PIC16C611 20 1K _ _ 36 _ TMR0 _ _ _ _ _ Yes 3 13 3.0to 6.0 35 16- pin DIP ,16-pin SOIC PIC16C641 20 2K _ _ 128 _ TMR0

TMR1 TMR2

1 SPI/ I2C

Yes

_ _ Yes 8 13 3.0to 6.0 35 40- pin DIP,44-pin PLCC ,44

PIC16C651 20 4K _ _ 192 _ TMR0 TMR1 TMR2

2 SPI/ I2C SCI

Yes

_ _ Yes 11 13 3.0to 6.0 35 40- pin DIP,44-pin PLCC ,44

PIC16C711 20

1K _

_ 36 _ TMR0 _ _ _ 4ch _ Yes 4 13 3.0to 6.0 35 18- pin DIP ,18-pin SOIC

PIC16C731 20 4K _ _ 192 _ TMR0 TMR1 TMR2

2 SPI/ I2C SCI

_ 5ch _ Yes 11 13 3.0to 6.0 35 28- pin DIP ,28-pin SOIC

PIC16C741 20 4K _ _ 192 _ TMR0 TMR1 TMR2

2 SPI/ I2C SCI

Yes

8ch _ Yes 12 13 3.0to 6.0 35 40- pin DIP,44-pin PLCC ,44

PIC16C841 20 _ _ _ 36 _ TMR0

_ _ _ _ _ Yes 4 13 2.0to 6.0 35 18- pin DIP ,18-pin SOIC

60

5.3. Gerekli Donanım :

PIC ‘i çalıştırmak için gereksinilen asgari donanım bir osilatörden ibarettir.

Osilatör ,bir dirennç ve kapasitör veya bir kristal /seramik rezonatör ve iki kapasitör formunda olabilir. Reset hattı kaynak gerilimine bağlanabilir. Dahili devreler , normal işletim şartlarında PIC’in yeniden başlatılmasını sağlayacaklardır.

Şekil-5-2 PIC İçin Gerekli Minimum Donanım Bir sonraki aşama harici reset bileşenlerinin ve gerekiyorsa gerilim

düşüklüğünden kaynaklanabilecek reset korumasını sağlanmasıdır. 100nF’lik bir dekuplaj kapasitörü PIC’ e olabildiğince yakın olarak güç kaynağına bağlanmalıdır. Güç ve toprağı taşıyan bakır yollar mümkün olduğunca geniş olmalıdır. Böylelikle elektriksel gürültü sorununu en aza indirgemeye yardımcı olacak bir direnç düşüklüğü sağlanabilir. 5.3.1.Reset Devreleri :

Mikrokontrtolör sistemlerinde reset devreleri aşağıda sıralanan nedenlerden

ötürü önemlidir : - Program sayacı ,I/O ve kontrol yazmaçları gibi belirli yazmaçlar için bilinen bir durumun varlığıundan emin olunmasını sağlar. - Saatin doğru frekansa yerleşmesi için yeterli zamanın verilmesine yardımcı olur. - Şebeke geriliminde bir sorun varsa ,mikrokontrtolör nin düzgün olarak yeniden

başlayacağından emin olunmasının sağlar.

61

PIC dahili Power On Reset devrelerine sahiptir. Eğer PIC’i besleyen güç kaynağı 0,05 V/ms’den daha büyük bir oranda artarsa dahili reset devreleri yeterli olacaktır (Kaynak geriliminin 0V’tan 5V ‘a kadar artması için gereken süre 100ms ‘den küçük olmalıdır).

Bazı düşük frekanslı kristal osilatörler çalışmak için 18ms’den fazlasının

gereksinirler. Bu durumda ve güç kaynağının yükselmesinin 100 ms’den uzun sürdüğü durumlarda ,harici bir RC reset devresi gerekebilir. Şebeke geriliminin inişli çıkışlı olabileceği veya gerilim düşüklüğü olasılığı bulunduğu uygulamalarda , gerilim düşüklüğü durumunu temiz bir reset’in izleyeceğinden emin olmak için extra reset devreleri eklenmesi gerekir.

Şekil-5-3 Kesinti Koruma Devreleri ve Harici Reset Devreleri

62

Kusursuz kesinlikle bir reset gerilim ayarı gereken uygulamalarda ,Texas Instruments TL7705 gibi bir cihaz kullanılabilir. Bu cihaz, şebeke gerilimi yeniden çalıştırma öncesinde gerekli değerin altına düşerse ,gerilim düşüklüğü oluşumuna karşı koruma sağlayarak reset’ in gerçekleşmesine çalışacaktır. Bu tip uygulamalar için tasarlanmış bir başka aygıt ,10-92 kılıflı Dallas EconoReset ‘tir. Not: 16C62X serisi aygıtlar gerilim düşmesi veya güç kesintisini algılayabilecek dahili devrelere sahiptirler. Programın gerilim düşmesi veya güç kesintisinin ardından kendini toplayabilmesi için yazmaçta bu durumun belirtilmesi gerekmektedir. 5.3.2. Osilatörler

PIC, sayılı seçeneklerde kristal ve RC osilatörleri kabul eder.

16C5X PIC sonekleri : -XT Kristal veya Seramik Rezonatör-genel amaçlı –4 MHz -RC Direnç / Kapasitör zaman sabitli – düşük maliyet –4MHz -HS Kristal veya Seramik Rezonatör –yüksekhız-20MHz -LP Kristal veya Seramik Rezonatör-asgari akım –40KHz

Yukarıdaki konfigürasyon lar için pencereli cihazlar-JW sonekleriyle

programlanabilirler. 16C5X ailesinin son sürümü artık bir sayı ve kılıf tipinin izlediği A soneklerine sahiptir. A cihazlarının en büyük farkı ,osilatör tipinin astın alma aşamasında değil, programlama aşamasında seçilebilmesidir.

RC osilatör tasarımın da direnç 5KΩ-100KΩ aralığında olmalıdır. 1MΩ gibi yüksek

R değerleri osilatörü gürültü ,nem ve sızıntıya duyarlı duruma getirir. Nem ve sızıntıyı PCB ve çevre birimleri üretir. 2,2KΩ ‘un altındaki R değerleri kararsızlığa hatta osilasyon kaybına yol açabilir.

RC osilatörünün kapasitans kısmı 20pF’den büyük olmalıdır.

R ve C seçiminde büyük ve yüksek değerli C ve R ‘den kaçınılmalıdır. C’nin sızıntısı ve R’nin direnci frekans kararlılığını etkileyebilir. Eğer bir RC osilatör kullanıyorsanız, OSC2/ CLKOUT bacağında saat frekansının ¼’ ü frekansta bir sinyal bulabilirsiniz. Bunu A/D dönüştürücülerini ve LCD sürücü yongalarını sürmek amacıyla devrelerinizde kullanabilirsiniz.

63

Şekil-5-4 PIC Osilatör Devreleri

KAPASİTÖR SEÇİMİ (KRİSTAL OSİLATÖR İÇİN)

OSC TYPE FREQ C 1 C 2

LP 32 KHz 15 pF 15 pF

XT

100 KHz 200 KHz 455 KHz 1 MHz 2 MHz 4 MHz

15-30 pF 15-30 pF 15-30 pF 15-30 pF

15 pF 15 pF

200-300 PF 100-200 pF

15 –100 pF 15 pF 15 pF 15 pF

HS

4 MHz 8 MHz

20 MHz

15 pF 15 pF

15 pF

15 pF 15 pF 15 pF

KAPASİTÖR SEÇİMİ (SERAMİK RESONATÖR İÇİN)

Oscillatör Type Resonatör Frequancy Capacitör Range C1 =C2

XT

455 KHz 2,0 MHz 4,0 MHz

150-300 pF 20-330 pF 20-330 pF

HS 8,0 MHz 20-230 pF

64

5.3.4. PIC’ lerde Kılıf Yapıları

PIC’ler çeşitli kılıf tiplerinde ,hız ve osilatör fonksiyonlarına sahip olarak

üretilmektedir. 16C5X gibi cihazlar standart DIL veya SO kılıfları halinde bulunabilirler ve osilatör tipiyle satın alınırlar. PIC’lerde A serisi (örneğin 16C54A) çalışabildikleri maksimum hıza göre (-0,4 ;10 ,-20) satın alınırlar ve osilatör tipi seçimi programlama aşamasında yapılır. Bu kullanıcıya maliyette ve envanter kontrolünde kolaylık sağlar. 5.3.5. Giriş / Çıkış Devresi

Bir PIC’e arabirim oluşturabilecek en temel I/O devresi bir düğme veya bir LED

olabilir. Bu PIC’le denenecek ilk örnekler için asgari gereksinimdir. PIC,LED’leri doğrudan sürebileceği gibi ,portların bağlı olduğu her 25 mA’e kadar akım çekebilir veya 20mA’e kadar akım pompalayabilir.(En fazla port sayısı ve akım sınırları için PIC veri tablolarına bakınız)Bu akım kapasiteleri PIC’lerin LCD ve mantık devrelerinden , şehir şebekesine bağlı triyaklara kadar uzanan aygıtları doğrudan sürebilmesini sağlar.

16Cxx ailesinde, PORT B üzerinde zayıf bir yukarı çekme (pull up)olanağı vardır. Bu OPTION yazmacında yer alır ve port B girdiler için kullanıldığında ortaya çıkabilecek direnç ihtiyacını giderir.

16Cxx cihazlarında T0CLK girdisi şeklinde fonksiyon gösteren ek bir PORT A(A4) bulunur. Bu girdi olarak kullanıldığında bir Schmitt tetikleyicisi aracılığıyla tamponlanır. Çıktı olarak ayarlandığındaysa , bacak açık kollektör durumundadır. A4 bacağının çıktı olarak kullanılması için , çıktı durumunda herhangi bir değişikliğin görülmesi gerektiğinden bir akımın varolması şarttır. Bu bir yukarı çekme direnci formunda olabilir. Çıktı açık kollektör olduğunda, bu bacağın mantığı tersine çevrilir-mantık1 transistörü açar ve bacağı mantık 0’a çeker. Bu bacak kaynak kapasitesine bağlı değildir yalnızca akım çeker. 5.3.6. Şehir Şebeke Gerilimi:

Şehir şebekesine doğrudan bağlanan devreler geliştirilirken daima bir yalıtım transformatörü ve toprak kaçak koruması kullanılmalıdır. Şebekeyle arabirim yapılanması iki yolla başarılabilir: a) Bir opto izolatörle b) Şebeke girişine seri bağlı 4,7MΩ dirençle

Her iki yöntemin de avantajları ve dezavantajları vardır.Opto ,özellikle son kullanıcının devrelere erişimi mümkün olduğunda güvenlik sağlar. Uygulamalar kullanıcıdan tamamen izole edilmiş olur. Öte yandan ,0V geçiş algılanmasının (zero crossing deetection) sağlanması için portlardan birine bağlanmış 4,7 MΩdirenç ve kapasitif güç kaynağıyla oluşturulmuş bir aydınlatma dimmeri, şebekeye doğrudan bağlanarak çalıştırılabilir.

65

5.3.7. Analog Girdiler :

16C71,C73,C74 PIC serileri dahili bir 8 bit’lik analogdan sayısala

dönüştürücüye sahiptir. A/D dönüştürücüsüne ulaşan bir gerilim ölçülür ve 256 seviyesinden birine dönüştürülür. Gerilim A/D’nin ölçebilme eşiklerinin dışında kalırsa, giriş geriliminin değişme aralığında bulunduğundan emin olmak için girişte seviye ayarı yapmak gerekebilir. Örneğin sensör 0-3V üretiyorsa ve A/D’nin referansı 5V ise, sensör için en iyi çözünürlük 5/256=19.5 mV olacaktır. Diğer yandan, sensör 5V’a çıkmışsa veya A/D referansı 3V’a dönüşmüşse, çözünürlük 11.7 mV’a düşer. Gerilim çok yüksekse, A/D’ye verilmeden önce düşürülmesi gerekir. En basit gerilim düşürücü, kaynağa yükleme yapmayan bir potansiyel bölücü gibi davranan bir çift dirençtir.

Direnç hesabı, A/D tarafından çekilen akım ihmal edilebilir olduğun düz oranla yapılabilir. Ancak yüksek gerilimin bölücü ağlardaki dirençlerin ısınmasını önlediğinden emin olmalısınız.

Örneğin 0-20 V’luk bir kaynağın 16C71’e sabit bir güç kaynağının bir parçası olarak verilmesi gerekir. 20K’lık bir direnç zinciri 20 mW tüketecektir. Direnç zinciri bir 15 K ve bir 5K’dan oluşturulabilir ve böylelikle PIC’e 05V’luk bir girdi ulaştırır. Direnç toleransının telafi edilmesi gereklidir. 5k’nin yerine 4K7 sabit dirence seri bağlanmış 1K’lık çok turlu trimer direnç konabilir. 20V’luk bir referans 15K’lık direncin üstüne uygulanır ve gerilim, trimmer ayarlanarak A/D girdisinde tam 5V’a ayarlanır.

Opamlar kullanılarak sinyal güçlendirilebilir. A/D ile bağlantılı olarak uğraşılması gereken üç yazmaç vardır: ADCON0, ADCON1 ve ADRES. ADRES, A/D dönüşüm süreci sonuçlarını tutan yazmaçtır.

66

EK 1

MİKROKONTROLÖR TESTİ

Özel bir uygulama için uygun mikrokontrolörün seçilmesi , piyasada çok sayıda kontrolör ailesi ve bunların bir çok türevi bulunduğundan kullanıcı için pek kolay değildir. Buarad verilecek bir takım kriterler , kullanıcıya , seçimde kolaylık sağlayacaktır.

Günümüzde mikrokontrolörler yarım düzineden fazla kriterlerle değerlendirilir ve

sınıflandırılır. Bu kriterler arasına CPU‘nun performansı ,iç ve dış belleğin büyüklüğü , iç çevre birimler ve onların interrupt yetenekleri , güç tüketimi , kılıf, sunulan geliştirme desteği , fiyatı ve istenen miktarın temin edilebilmesi girmektedir. Bu özelikler ,yan taraftaki “Mikrokontrolörler için seçim kriterleri” adlı kutuda ayrıntılı olarak gösterilmektedir.

Elbette genel geçerli performans verilerinin yanı sıra gerçekleştirilecek uygulama

da seçimi etkiler. Burada birincil hedef daima , geliştirilecek sistemin beklentilerinin minimuma indirgenerek karşılanmasıdır. Mikrokontrolör kullanımındaki şu anki eğilime bakılırsa gittikçe 4 bitlik elemanların yerini 8 bitliklerin aldığı görülebilir. 8 bit mimarilerinin avantajlarından biri ise hesap gücünün daha yüksek olmasıdır. Böylece klasik kumanda görevlerinin yanı sıra kontrol problemlerinin de çözülmesi mümkün olmuştur. Öte yandan da kullanıcı ,belleğin büyütülebilmesi ve uygun derleyicilerin bulunması sayesinde elemanı yüksek seviyeli bir dille programlayabilme imkanına kavuşmuştur.

Kontrolörlerin Çarpma ve Bölme İşlemleri Aracılığıyla Karşılaştırılması

Burada tamsayı çarpma ve bölme işlemleriyle bazı kontrolör ailelerinin hesap

gücü karşılaştırılacak. Bunun için ilk önce ilgili kontrolörün hangi işlemleri desteklediği incelenmelidir. Ayrıca bazı teknik özeliklerin de bilinmesi gerekir. Nitekim bir de ilgili işlemlerin süresi önem taşır. Bu, osilatör frekansı , makine çevrimi başına saat periyotları sayısı ve makine komutu başına makine çevrimleri sayısı gibi değerler üzerinden hesaplanır.(“Tam sayı hesap gücünün değerlendirilmesi” adlı kutuya bakınız). Tabloda birtakım 8 bitlik kontrolör aileleri karşılaştırılmaktadır. Bu tabloda osilatör frekansı ve makine çevrimleri sayısının yanı sıra çeşitli komutların işlenmesi için kaç çevrim gerektiği de gösterilmektedir. Ayrıca donanım olarak gerçekleştirilen çarpma ve bölme komutları ve onların ilgili kontrolöre göre işlem süreleri de Tabloda verilmiştir. Bu sürelerin verilen maksimum saat frekansında değil , tipik bir

67

frekansta hesaplandığı dikkate alınmalıdır , çünkü genelde bir ailenin her türevi maksimum saat frekansında çalışmaz.

Tamsayı Hesap Gücünün Değerlendirilmesi

1-Donanım aritmetik komutlarının analizi

Çarpma (8x8 , 16x16) , bölme (8/8 , 16 /16) (ön işaretli / ön işaretsiz) 2- Komut işleme süresinin hesaplanması

fos osilatör frekansı Makine çevrim sayısı(osilatör saatleri / makine çevrimi)

NCYCL Komut çevrimi sayısı (makine çevrimi / komut)

NINSTR

Komut işleme süresi (t INSTR)

t INSTR = NCYCL NINSTR

fosz

SGS Thomsan ‘un ST6 kontrolörleri ve Microchip’in PIC16C5X ailesi daha çok alt performans sınıfına girer. Bu tipler donanım olarak bir çarpma /bölme birimine sahip değildir. Ama PIC16C5X ailesinin RISC mimarisine benzer özelikleri nedeniyle aritmetik işlemlerin süresi çok kısadır. Verilen süreler çalışma süresine göre optimize edilmiştir.

Kuşkusuz 8 bit alanındaki en yaygın aileler Intel’ in 8051 ve Motorola’ nın 68Hc11 kontrolörleridir. 8051 ailesinde yazılım aritmetiğinin işlem süresiyle ilgili değerlerde çalışma süresi optimizasyonu söz konusu değildir. Bu rutinler PIC kontrolörlerininkiyle karşılaştırıldığında büyük bir fark görülecektir. PIC’ lerin avantajı 20MHZ saat frekansında 200ns kadar kısa bir makine çevrim süresine sahip olmalarıdır. Ayrıca PIC CPU’ su kütük-takım-makinesi(register-file-machine) olarak düzenlenmiştir.8051 kontrolörleri ise bir akümülatör CPU’ suyla çalışır. Bu demektir ki 8051 ‘de örneğin bir toplama veya çıkarma işleminin sonucu daima akümülatörde bulunur , PIC ‘te ise iç RAM hücrelerinden herhangi biri hedef kütük olabilir. Gerçi 68HC11 ailesi çok güçlü bir 16/16 Bit bölme komutu sunuyor, ama bunun uzun işlem süresi interrupt yanıt süresini olumsuz yönde etkiler.

Tabloya NEC ‘in görece yeni olan 78K/ 0 ailesi de alındı. Bu özelikle düşük akım çekişi ve özel iç çevre birimleriyle dikkati çeken çok güçlü bir ailedir. Bir kıyaslama yapmak amacıyla tabloda Siemens’in 16 Bitlik mikrokontrolörü SAB8XC166’ya da yer verildi. RISC’ e benzer mimari özeliklerine sahip olan (örneğin çok katlı bir pipelining) bu eleman ,performans açısından 32 bitlik

68

kontrolörlerle bile rekabet edebilir. Ama yüksek saat frekanslarında hesap gücünün değerlendirilmesi 8 bitliklerde olduğu kadar kolay değildir. Burada verilen değerler , yalnızca iç kod belleği aracılığıyla yapılan program işlemlerinde elde edilen minimum komut işleme sürelerine dayanmaktadır. Dış bellekle çalışıldığında bu süreler , konfigüre edilen bellek arabirimine bağlı olarak bir hayli uzayabilir. Mikrokontrolörler İçin Seçim Kriterleri

CPU’ nun Performansı İç çevre Birimlerinin İnterrupt Yeteneği Komut dağarcığı(RISC/CISC) Dış interruptlar Adresleme türleri İnterrupt Tepki Süresi Veri yolu genişliği( 4...32 bit) İç , Dış bellek (büyüklüğü) Güç Tüketimi Veri belleği olarak RAM, Akım çekişi EPROM Power Down modları Program belleği olarak Statik Dizayn ROM Sub Clock FLASH , EPROM (OTP) Besleme gerilimi bölgesi Sub Clock

Kılıf(DIP ,SDIP, SOIC, PLCC, PQFP)

İç Çevre Birimleri Geliştirme Desteği Zamanlayıcı (Compare , Assembler Linker Capture , PWM) Yüksek seviyeli dil(ANSI-C) Seri arabirimler(UART ,USART ROM –Monitörlü ,emülatörlü , I2C ,SPI) geliştirme kartı A/D çevirici (8 veya 10 Bit) Gerçek zamanlı işletim sistemi D/A çevirici Watchdog Paralel portlar

69

Karşılaştırma Kütükleri İçin Formüller Periyot süresi =Yakalama değeri 2 –Yakalanan değeri 1

Karşılaştırma değeri 1 rel = Karşılaştırma Açısı 1. Periyot süresi 360 0

Karşılaştırma değeri 1 = Karşılaştırma açısı1 + Yakalama değeri 2 Karşılaştırma değeri 2 rel = Karşılaştırma Açısı 2 .Periyot süresi

360 0 Karşılaştırma değeri 2 = Karşılaştırma açısı 2 rel + Yakalama değeri 2

Ayrıca şunu da belirtmek gerekir ki hesap işleminin süresi sadece o işlemin yerine getirilmesiyle sınırlı değildir ,buna da bir giriş işlenenlerinin yüklenmesi ve sonuçların güvence altına alınması için gereken süre de eklenmelidir. Bu süreler ise uygulamaya bağlı olarak değişebilir. Burada 16 bitlik aktarma komutlarına sahip olan 8 bitlik kontrolörler daha avantajlı durumdadır (örn: 68HC11 ,78K/0) Bir başka kontrolör özeliği de aritmetik yardımcı işlemcidir. Bir örnekse , hesap gücü bu şekilde 16 bitlik kontrolörlere erişen Siemens’ in 8 bitlik kontrolörsi SAB80C537 dir. Ne var ki burada hesap işleminin yerine getirilmesi bazı özel fonksiyon kütüklerinin (SFR) programlanma sırasına bağlıdır. Dolayısıyla bu komut dizileri kesilemez. Bu demektir ki programdaki “yardımcı işlemcinin SFR’ sinin yüklenmesi ve işlemin yerine getirilmesi” akışının yardımcı işlemciyi kendi hesap işleri için kullanacak bir interrupt servis rutini tarafından kesilmesi gerekir. Uygulama Örneği :

Aşağıda aritmetik işlemlerdeki zaman sorununun gösterilmesi için yararlı olan bir

uygulama örneği verilecektir.

Çizimde görüldüğü gibi periyodik bir giriş işaretinden (XE) iki çıkış işareti (XA1 ve XA2) üretilecek ve bunların açı bağıntısı değişken olacak , XE , maksimum devir sayısı 15000 devir/ dakika olabilen bir milden alınacak. Bu görevin yerine getirilmesi için Siemens ‘in SAB80C535 mikrokontrolör' ü uygun bulundu ,çünkü onun 2 numaralı zamanlayıcısı (timer 2) ve özel karşılaştırma / yakalama fonksiyonlarıyla (compare / capture) darbe ölçümü ve darbe üretimi için gereken donanım desteği sağlanmış oluyor. Bu iş için 2 numaralı zamanlayıcı ,500 Khz’ lik bir giriş saatiyle zaman üreteci olarak kullanılır. Bir başka zamanlayıcıda yakalama fonksiyonu için programlanır : bu kanal tahsis edilmiş bir işlemci bacağında bir L-H kenarı meydana geldiği zaman aktüel zamanlayıcı değeri özel bir Capture kütüğünde yakalanır ve bir interrupt çözülür. Ardından ilişkin interrupt servis rutininde (ISR) bu yakalanan değer işlenebilir. Böylece art arda gelen iki capture değeri arasındaki farkın hesaplanmasıyla giriş işaretinin periyot süresi kolayca belirlenebilir. Çıkış işaretlerinin üretilmesi için iki zamanlayıcı kanlı daha karşılaştırma moduna programlanır. Bu çalışma türünde kanallara tahsisi edilen karşılaştırma kütüklerinin içerikleri donanım yoluyla zamanlayıcının sayma kütüğüyle karşılaştırılır. Eşitlik durumunda kontrolörün buna ayrılmış bir bacağında programlı bir seviye değişimi gerçekleştirilir ve bir interrupt çözülür.

70

Burada bir de karşılaştırma kütükleri için gerekli değerlerin gerçek zamanlı

olarak hesaplanması sorunu çıkıyor. “karşılaştırma kütükleri için formüller” adlı kutuda gerekli matematiksel bağıntılar verilmiştir. Periyot süresi iki 16 bit yakalama değerinin farkından elde edilir ve 16 bit büyüklüğünde bir değer olabilir. Açılar 0.5 derece kadar bir çözünürlükle işlendiğinden onların veri genişliği 10 Bit olur. Dolayısıyla ikinci denklemde bir 10x16 bit çarpma ve ardından bir 10 bit değerinde bölme işleminde 16 bitlik bir sonuç elde edilir. Ardından yapılan bir 16x16 Bit toplama işleminin sonucu ise 16 bitlik bir karşılaştırma değeridir. İkinci karşılaştırma değeri için de aynı akış geçerlidir.

Maksimum devir sayısında (15000 devir /dakika) giriş işaretinin minimum

periyot süresi 4 ms olur. Hesapların giriş işaretiyle senkron yapılması gerektiğinden bunlar devir sayısı işaretinin ISR’ sinde halledilir. Hesaplar tablodaki yazılım aritmetik rutinleriyle gerçekleştirilmiştir. Devir sayısı yakalama ISR’ sinin toplam çalışma süresi olarak 2.5 ms kadar bir süre ölçülmüştür. Bundan , söz konusu hesapların CPU ‘nun işlem kapasitesinin % 62 ‘sini gerektirdiği anlaşılmaktadır. İkinci bir işaretin üretilmesi ise kontrolörün kapasitesini aşardı. Kontrolörün saat frekansının yükseltilmesi de çözüm değildir ,çünkü onunla birlikte zamanlayıcının giriş frekansı da yükselir. Gerçi daha yüksek giriş frekansında periyot süresi ölçümünün çözünürlüğü yükselir ,ama bununla birlikte ölçülebilir en kısa periyot süresi de artar( 12 MHZ saat frekansı ve 458 dev /dak kadar bir devir sayısında 0.131 ms)

Daha iyi bir çözüm ise yazılımın , SAB80C535 ‘e karşılık daha kapsamlı bir iç çevre birimlerine sahip olan ve aritmetik yardımcı işlemcisiyle dikkatleri çeken SAB80C537 ‘ye taşınmasıdır. Bu nedenle karşılaştırma değerlerini hesaplama rutinleri SAB80C537 ‘nin imkanlarına uyarlandı. Sonuç olarak yakalama ISR’ sinin çalışma süresi olarak (iki karşılaştırma değeri hesaplandığında ) 230 µs ölçüldü.

71

EK 2

EEPROMLARIN PROGRAMLANMASI

Genelde basit türden programlanabilir bellek elemanlarının hedef donanıma bağlanmaları için standart arabirimleri vardır. Birkaç istisna dışında bellek bölgesi genelde homojen olduğundan programlama olaylarının gerçekleştirilmesi için böyle bir arabirim yeterlidir. Kumanda için OE ile CS işaretleri ve çoğu zaman özel bir programlama gerilimi bacağı (Vpp) kullanılır (şekil-1). Ayrıca bu elemanların uygulama alanı da basit ve standart bir programlama arabirimi gerektirir. Programlanabilir belleği olan mikrokontrolörlerde ise iş daha karmaşıktır. Burada CPU ile bellek arasındaki arabirimi olsa bile onun yapısı uygulama alanına , elemanın fonksiyon kapsamına ve elbette yapımcının konseptine bağlıdır.

Şekil –1 Basit Bir Programlanabilir Belleğin Standart Arabirimi. Bellek Bölgesi Homojen Olduğundan Böyle Bir Arabirim Programlama İçin Yeterlidir. Motorola’da Standart Arabirim :

Motorola’ nın MC68HC711 mikrokontrolörün’ de EPROM birimi , kontrolör EPROM bölgesi açısından standart bir bellek elemanı (örn :27256) gibi programlanabilecek ve okunabilecek şekilde düzenlenmiştir.(şekil-2). Burada işaretlerin doğru sıralanması için sadece pasif bir adaptör gerekir. Saat işareti gerekli değildir, erişme süreleri ve akım çekimi ise standart bellek elemanınkiyle aynıdır. Ama kontrolördeki EPROM belleğinin iç adres bölgesi D000H ile FFFFH arasındadır ,oysa bakılırsa –programlama cihazından –EPROM için 0 ...7FFFH adres bölgesi ayrılmış. Bu çelişkinin çözülmesi için programlama cihazının belirli ofset ve bölge

72

işlemleri sunması gerekir. Ayrıca MC68HC711 mikrokontrolörü , bu arabirim üzerinden erişilemeyen bir EEPROM bölgesine de sahiptir.

Şekil 2 – Motorola 68HC711 ‘de iç EPROM bölgesine standart bir elemanda olduğu gibi erişilebilir. Dıştan bir saat işareti uygulanması gerekmez. Ama programlama cihazının ofset bölge işlemleri yapabilmesi gerekir ,çünkü iç ve dış adresler farklıdır.

INTEL’ de Aktif Parelel Arabirim :

8051 mikrokontrolörün’ de (Intel –Siemens, AMD) şu yöntem seçildi ; Önceden belirlenmiş tolerans bölgesinde bir saat frekansı uygulanarak iç yol fonksiyonları kumanda edilir. Mikrokontrolörünün kendisi ise aktif çalıştırılır. Kumanda girişlerine( örn :RDY, EA , PSEN ,P1.0 v.b) uygulanan belirli seviyelerle eleman programlama moduna getirilir ve port bacakları iç adres ve veri yollarına bağlanır(şekil-3). EA bağlantısı üzerinden de programlama gerilimi uygulanır. Programlama cihazı ise serbest erişimle bellek hücrelerini okuyup programlayabilir. Ama paralel modda bir kaç elemanın aynı anda programlanması gerektiğinde (üretimde) ne yazık ki her zaman belirlenmemiş olan özel işaret kombinasyonları gerekir. Bazı 8051 versiyonlarında güvenlik fonksiyonları tümleştirilmiştir. Örneğin programlanmış belleğin okunmasını engelleyen güvenlik bitleri ve hata kontrolü sağlayan deşifre tabloları. Bu özel fonksiyonlar ise basit programlama cihazlarının standart fonksiyon kapsamını aşar. Bu özel fonksiyonların çalıştırılabilmesi için en azından kullanıcı arabiriminde gerekli düzenlemelerin yapılmış olması, elemanda ise özel kumanda işaretlerinin uygulanması gerekir.

73

Şekil –3 8051 ailesinde kumanda işaretleriyle programlama modu seçildikten sonra port bağlantıları iç veri ve adres yoluna bağlanmış olur.

SIEMENS’ te Kütük Arabirimi : Siemens’in SAB88C166(16-bit)ve SAB80C512( 8051 varyasyonu) mikrokontrolörlerinde programlama arabirimi (şekil-4) şu şekilde düzenlenmiştir. Programlama modunda port bağlantıları üzerinden ,gerekli bilgilerin (adresler, bölgeler, veriler) yazıldığı ve işlemlerin sonuçlarının bulunduğu iç kütüklere erişebilir. Asıl okuma ve programlama olayı elemanın içinde gerçekleşir. Programlama cihazı açısından bu yöntem daha karmaşık değil ,ama farklı.

Şekil- 4 8051 ‘in Siemens versiyonu olan 80C512 ‘de programlama içte yapılır. Programlama cihazı , C512’ yi programlama moduna getirmek için kontrolörnin belir li kütüklerine verilir.

74

Motorola’ da Yükleyici Arabirimi :

68HCXX mikrokontrolör ailesinin tam servisten yararlanmadan salt programlanması için yapımcı, özel devreler kullanılmasını öneriyor. Bunları ya kullanıcın kendisi hazırlaması ya da bu devrelerin bulunduğu bir geliştirme kiti astın alması gerekiyor. Bu devrelerde ,iç belleği kullanılacak master EEPROM ‘un içeriğiyle besleyen sabit olarak programlanmış bir yazılımı aktifleştirilir. (şekil-5). Geliştirmede zahmetli olan ve üretimde gerekli kalite güvencesini sağlamayan (çünkü elemanın okunarak kontrol edilmesi mümkün değil) bir yöntem.

Buna karşılık PGS53 vePGS67 ertec sistemleri eksiksiz bir yöntem sunuyor: gerçi biraz zahmetli , ama kullanıcı bunu fark etmiyor ; üstelik bu sistem tüm özel fonksiyonlarla donatılmış. Burada programlama cihazıyla yükleyici üzerinden elemana seri olarak bir program yüklenir ve orada başlatılır. Bu servis rutini sadece programlama cihazıyla iletişimi sürdürmek ve elemandaki programlama fonksiyonlarını kumanda etmek için kullanılır. İletişim ya seri ya da hızı yükseltmek amacıyla port bağlantıları üzerinden paralel yapılabilir. O zaman örneğin MC68HC711 elemanının EEPROM bölgesi de okunup programlanabilir. Ayrıca güvenlik bitleri ve konfigürasyon kütüklerinin aktifleştirilmesi de mümkündür.

Bir başka sorun da mikrokontrolör içindeki belleklerin homojen bir yapıya sahip olmamasıdır. Ama bu sorun , programlama cihazının kullanıcı arabirimindeki ofset ve bölge operatörleriyle çözülebilir. Ne yazık ki kullanılan yazılım çeviricileri bu tür elemanların içeriğini eksiksiz ve çelişkisiz gösteren – ki bu üretim için gereklidir. –kod dosyaları sağlamıyor. Burada programlama cihazı yapımcıları tarafından verilmesi gereken dönüştürme araçları yardımcı olur.

Ayrıca MC68HC11F1’de ,yükleyici üzerinden de dıştan erişilmeyen bir EPROM hücresi ( konfigürasyon kütüğü ) vardır. Ama elemanın tüm davranışları (örn: memory-mapping) bu hücre üzerinden belirlendiği için bu hücrenin içeriğini mutlaka –en azından üretimde-erişilebilmelidir. Burada da yüksek performanslı programlama cihazları bir çıkar yol sunuyor :Elemana ,zamanlama spesifikasyonlarına uyarak bir dış kod belleği bağlanır ve ardından aktif dış veri yolu üzerinden konfigürasyon kütüğünün içeriği okunur.

75

Şekil-5 Karmaşık : 8HC11 mikrokontrolör bir master-EPROM üzerinden programlanır. EPROM içeriğinin kontrol amacıyla okunması mümkün değildir. Kalite güvencesi açısından kötü. İyi programlama cihazlarıyla bu dezavantajlar giderilebilir. Yükleyici üzerinden mikrokontrolöre , programlama olaylarını kumanda eden bir servis rutini yüklenir.

PIC’ lerde Mantıksal Arabirim : Microchip firmasının PIC mikrokontrolörlerinin programlama arabirimi basittir ,

ama programlama cihazından birtakım zeki fonksiyonlar bekler(şekil-6) : Elemanın kendi içindeki bazı kütükler dış programlama ve okuma erişimlerini kumanda eder. Ama bu kütüklerin hepsine dıştan erişilemez. Örneğin adres kütüğü sadece silinebilir ve saatle saydırılabilir. İç bellek hücrelerine erişilmesi için bu kütüğün kontrollü olarak çok kez saatlenmesi gerekir.

Şekil 6 -Gerçi PIC ailesinin programlama arabirimi basit , ama programlama cihazının zeki olması gerekir. Dış okuma / yazma erişimlerini kumanda eden her kütüğe dıştan erişilemez.

76

“Eşitleyici”Olan Bir Programlama Cihazı :

Sözü edilen mikrokontrolörde erişim ne kadar karmaşık ve değişik olursa olsun ; Bu kullanıcıdan gizli kalmalıdır. Kullanıcının beklentileri şunlardır : Bütün iç EPROM ve EEPROM hücrelerine serbest ve parametrelenebilir şekilde erişmek. Bu standart fonksiyonlara ek olarak konfigürasyon ve güvenlik kütüklerine yazma ve kontrol amacıyla okuma için yöntemlerde bulunmalıdır. Özelikle üretim alanında proseslerin daha fazla otomatikleştirilmesi için cihaz fonksiyonlarının kullanıcı için sadece inter aktif olarak değil , açık ve kesin belirlenmiş komutlar üzerinden de başlatılabilmesinde yarar vardır. O zaman işçilerin de kullanabileceği projeye özel yığın işlemlerinin hazırlanması da mümkün olur.

Örneğin ertec GmbH ‘nın geliştirme için PGS53 ve üretim için PGS67 (şekil –7) programlama sistemlerinde , özellikle yukarıda belirtilen son beklentiyi karşılayan bir komut dili kullanılmaktadır. Burada bir elemanın programlama sı için gereken çağrı şu şekilde yapılır. PGS67 w –emc68hc11f1_ee -fproject.rel

Bu çağrı Motorola nın MC68HC11F1 mikrokontrolörsinin EEPROM bölgesini PROJECT.REL dosyasındaki verilerle programlar. Bu Motorola-S formatlı doya tüm EPROM bölgesini kesin olarak tanımlarsa başka ofset veya uzunluk bilgileri verilmesi gerekmez. İkinci bir çağrıyla da PGS67 c –emc68hc11f1_ee -fproject.hex Programlamanın sonucu bir kez daha kaynak dosyayla karşılaştırılır. Ancak bu şekilde programlamanın kesin olarak doğru yapıldığı kanıtlanabilir. Konfigürasyon kütüğünün yazılması ise şu şekilde yapılır. PGS67 #3,0x1f -emc68hc11f1_ee

Bir özel fonksiyon olan #3 ,ardından gelen hexadesimal sayıyı kütüğe yazar ve içeriğini geri bildirir.

Gerçi bu programlama sistemleri için Windows versiyonları da vardır, ama fonksiyon dizilerinin toplu işlem dosyaları içinde işlenmesi oldukça etkili ve her zaman tekrarlanabilir bir çalışma yöntemi teşkil etmektedir. Hata kodlarının ve onunla kumanda edilen çalışma akışlarının değerlendirilmesi nedeniyle böyle bir kumanda dili , üretime uygun programlama için idealdir. Programlama görevi kesin olarak tanımlandıktan sonra cihazı, üretimde çalışan elemanlar da basit çağrılarla ( yanlış kullanma tehlikesi çok az ) kullanılabilir. İster basit bellek elemanı, ister karmaşık mikrokontrolör, ister basit kod programlaması veya elemana özel fonksiyonlar olsun kullanıcı için hepsi bir.

77

KAYNAKLAR 1- Mikroişlemciler ve 8051 Ailesi(Donanım Programa Ve Uygulamalar) ,

Dr.Haluk Gümüşkaya 2- ELO, Elektronik Dergisi , Sayı-92 –S.54-57 3- ELO, Elektronik Dergisi , Sayı-92 –S.58-60 4- PIC Programlama El Kitabı 5- MCS51 Microcontroller Family User’s Manuel , Intel ,1994 6- The 8051 Family Of Microcontroller, Richard H. Barnett , Prentice Hall ,1995

(164 Sayfa) 7- Applications Notes For 80C51 –Based 8-Bit Microcontroller, Intel