DOLAR %
EURO %
ALTIN 1.051,02-0,01
BITCOIN 3087510,00%
Adana
13°

PARÇALI BULUTLU

02:00

İMSAK'A KALAN SÜRE

Mikroişlemciler

Mikroişlemciler

ABONE OL
18 Ekim 2022 13:33
Mikroişlemciler
0

BEĞENDİM

ABONE OL

BÖLÜM-1

1.GİRİŞ
1.1 Mikroişlemciler
Mikroişlemci herhangi bir sistemde merkezi işlem birimidir ve bulundugu sistemde aritmetik ve mantiksal işlemleri yürütür. Merkezi işlem birimi (central processing unit: CPU), kontrol devresini, bir ALU, bazi kaydediciler ve bir adres/program sayiciyi içerir.
Bir klavyeden gelen verilerin, bir basınç algılayıcısından gelen sayısallaştırılmış çıkışın veya bir başka verinin bilgisayara alınması ve bu bilgilerin çıkış olarak sağlanması mikroişlemci tarafından kontrol edilir. Mikroişlemcinin bu tür işlemleri giriş olarak algılayıp, çıkışa yansıtması için mikroişlemci programlanır. Bir mikroişlemci, belleğinde saklı bulunan programı her bir komutu sıra ile okuyarak yürütür. Her komut önce, onu yürütmek için gerekecek işlemleri belirlemek üzere mikroişlemcinin anlayabileceği makina koduna çevrilir ve sonra gereken işlemler yapılır. Mikroişlemci entegre devresi, yazılan programları meydana getiren makina komutlarını yorumlamak ve yerine getirmek için gerekli olan tüm mantıksal devreleri içerir.
Bir mikroişlemci temel olarak üç kisimdan oluşur. Bunlar merkezi işlem birimi (CPU), giriş çikiş birimi (G/Ç) ve bellektir.
1.1.1 Merkezi İşlem Birimi
Bilgisayarın kalbi veya beyni olarak adlandırılan mikroişlemci aynı zamanda merkezi işlem birimi olarak da anılırlar. Merkezi işlem birimi genel olarak aşağıdaki işlemleri yapar:
• Sistemdeki bütün elemanlar ve birimlere zamanlama ve kontrol sinyali sağlar.
• Bellekten komut veya veri alıp getirir ve işler,
• Veriyi giriş/çikiş birimlerine ya da oradan kendisine aktarir,
• Komutların kodunu çözer,
• Komutla birlikte aritmetik ve mantık işlemlerini gerçekleştirir,
• Program işlenirken giriş/çikiş cihazlarindan gelen servis isteklerine I bayraginin durumuna göre cevap verirler.
Intel ve Motorola firmalarının üretmiş olduğu mikroişlemcilerde yukarıda bahsedilen işlemleri gerçekleştirmek üzere üç ana bölüm vardır. Bunlar; kaydediciler, aritmetik mantık birimi (ALU) ve zamanlama-kontrol Birimidir.
1.1.1.1 Kaydediciler
Mikroişlemcinin içinde işlem yaparken geçici olarak verilerin saklandiklari saklayicilardir. Mikroişlemci içerisinde degişik işlemleri gerçekleştirmek üzere akümülatör, indis kaydedicileri, stack pointer, program counter gibi kaydediciler mevcuttur. Mikroişlemciler içerisinde işlem yapilirken bu kaydedicilere veri atilabilir, toplama, karşilaştirma ve kaydirma gibi bazi işlemle gerçekleştirilebilir.
1.1.1.2 Aritmetik Mantık Birimi (ALU)
ALU, yürütülmekte olan komutta belirtilen iki değer üzerinde aritmetik ve lojik işlemleri yerine getirir. Bu iki değerden biri daima özel bir mikroişlemci kaydedicisi olan ve A kaydedicisi olarak adlandırılan kaydedicinin o anki içeriğidir. Diğer ALU girişi ise; mikroişlemcinin bölümünü oluşturan genel amaçlı kaydedici grubundan bir başka kaydedicidir.
1.1.1.3 Zamanlama-Kontrol Birimi
Mikroişlemcinin kontrol birimi, mikroişlemcinin içinde ve dişinda olan bütün veri aktarimlarini ve ALU işlemlerini kontrol eder ve çevre birimlerle eş zamanlama için gerekli sinyallemeyi saglar. Ayrica, kontrol birimi ALU’da en son yapilan aritmetik ve mantiksal işlemin sonucunu yansitan bayraklari giriş olarak alir.
1.1.2 Giriş-Çikiş Birimi (G/Ç)
Mikroişlemcinin diş dünya ile ilişkisinin saglandigi ünitedir. Mikroişlemciye verilen bilgiler bu ünite yolu ile işlemci içerisine alinirken, CPU ve diger birimlerde işlenen veriler yine bu ünite sayesinde diş ortama aktarilirlar.

1.1.3 Bellek
Bellek bir mikro bilgisayar sistemi içerisinde bilgileri saklar. Bellek iki bölüme ayrılmıştır. Bir bölümü programı saklar, diğer bölüm ise mikro bilgisayara gerek duyduğu bilgi ya da veriyi tutmak için kullanılır.
Genel amaçlı bir mikro bilgisayar sisteminde program sıklıkla değiştirilir. Çamaşır makinası denetleyicisi gibi bir mikroişlemci tabanlı sistemde program, fabrikada üretilirken yüklenmiştir ve asla değişmez. Bu tür bir uygulama için program ROM adı verilen özel bir bellek türünde saklanır.
ROM (Sadece okunur bellek):Program deyimleri, veri vb. sadece ROM bellekten kopya edilebilir. Yapımcı veya kullanıcı tarafından ROM belleğe kaydedilen hiçbir bilgi değiştirilemez ve bu tür belleklere yeni kayıt yapılamaz. ROM belleklerden başka bir de RAM bellekler de vardır.
RAM (Rastgele erişimi bellek): Kural olarak RAM’ lar, üzerinde yazma ve okuma işlemleri yapilabilen bellekler olarak tanimlanmiştir. Bir başka deyişle RAM, degişken veri saklayabilen bir rastgele erişimli bellektir. RAM, bir elektronik devre oldugu için, güce gereksinim duyar. Güç kaynagi kesildigi anda çok anlik olsa bile saklanan bir veri yitirilir. Sistem anahtari kapatildigi anda, bellegin içerigi yitirilmiş olur. Bu nedenle bu bellege kalici olmayan saklama ortami adi verilir.
Başka bellek türleri de vardir. Örnegin, EPROM, silinebilir programlanabilir ROM’ dur. EPROM, programciya bir yonga satin alip bunu programlama imkani verir.
1.2 Mikrodenetleyiciler
Bir yazılım olmadan hiçbir işe yaramayan, ancak içerisine yazılan program vasıtasıyla istenilen bir işlemi gerçekleştiren kontrol elemanıdır. Mikrodenetleyici yazılım olması halinde neredeyse sınırsız bir kullanım alanına sahiptir.
Aslında mikrodenetleyici bir bakıma bir bilgisayardır. Her nekadar bir klavyesi, monitörü, kasası ve bunun gibi çevre birimleri olmasa da bir bilgisayarın yaptığı herşeyi yapabilir. Örneğin her bilgisayarın bir merkezi işlem ünitesi (CPU:Central Processing Unit) vardır ve bu ünite makine kodlarını bizim anlayabileceğimiz karakterlere dönüştürür, programları yorumlar, işler, düzenler, bilgisayarın çeşitli birimleriyle irtibat kurar. Ve bu işlemleri yaparken bazi degişkenleri ve geçici olarak elde ettigi bilgileri sakladigi bir rastgele erişimli hafizaya (RAM:Random Access Memory) ihtiyaç duyar. Ayrica bilgisayarlarin diş dünyayla bilgi aliş ve verişlerinde kullandiklari bazi giriş ve çikiş üniteleri bulunmaktadir. Örnek olarak fare ve klavye giriş yaptigimiz elemanlara, monitör ve yazici çikiş aldigimiz elemanlara birer örnektir. Bilgilerimizi kaydettigimiz harddiskler ise hem giriş hem de çikiş elemani olarak çalişmaktadirlar. Aynen bilgisayarda oldugu gibi mikrodenetleyiciye de fare ve klavye gibi çevre elemanlarinin işlemlerini nispeten de olsa yerine getirecek elemanlar ekleyerek küçük bir bilgisayar gibi kullanmamiz mümkündür.
Bir mikrodenetleyici genel olarak aşagidaki birimlerden oluşur:
• CPU (Merkezi işlem ünitesi – central processing unit)
• RAM (Rastgele erişimli bellek-Random Access Memory)
• EPROM/PROM/ROM (Silinir, yazılır sadece okunur bellek-Erasable Programmable Read Only Memory)
• I/O (Girdi/çıktı – input/output) – seri ve paralel
• Timers (Zamanlayıcılar)
• Interrupt controller (Kesmeler)
Sadece kullanılacak işe uygun özellikleri bulunan bir mikrodenetleyici seçildiğinde maliyet nispeten düşmektedir.
Mikrodenetleyicilerde işlemler ve komutlar bit bit kontrol edilebildiginden giriş ve çikiş birimleri ve kesmeler çok etkin bir şekilde kulllanilabilmektedir.
Şu an kullandigimiz masaüstü veya dizüstü bilgisayarlar genel amaçli bilgisayarlardir ve binlerce programi çaliştiribilirler. Mikrodenetleyiciler ise özel amaçli bilgisayarlardir. ve programlandiklari şeyi en iyi şekilde yaparlar. Bunun dişinda;
• Mikrodenetleyiciler sadece bir iş için programlanmişlardir ve bu program içlerindeki ROM’da degişmemek üzere sakli bulunur.
• Mikrodenetleyiciler düşük güçte çalişan çiplerdir. Bir bilgisayar 50W civari güç harcarken mikrodenetleyiciler sadece 50 miliWatt civarinda güçharcarlar.
• Mikrodenetleyicelere sadece girdi yapılmaz aynı zamanda çıktı da alınabilir. LED göstergelerle, sıvı kristal göstergelerle, ikaz sesleriyle vb.. Örneğin televizyonunuzda ve uzaktan kumandasında bulunan mikrodenetleyicilerden bahsedelim. Kumandada bulunan mikrodenetleyici tuşlara bastığımızda girdisini almış olur ve bunu televizyondaki alıcı mikrodenetleyiciye gönderir. Ve o mikrodenetleyici de gelen sinyale göre çıkış vererek ya kanal seçer, ya ses ayarı yapar ya da televizyonla ilgili işlemleri yapar.
• Mikrodenetleyiceler genelde küçük ve düşük fiyatli çiplerdir. Bir çok parçadan oluşan kompleks birdevreyi kolayca küçük boyutlara ve maliyete indirmenizi saglar.
Ayrıca mikrodenetleyiceler belleklerine göre de çeşit gösterirler ;

1.2.1 EEPROM Bellekli Mikrodenetleyiciler
Elektriksel olarak silinebilen ve yazılabilen belleklerdir.Çoğu mikrodenetleyicilerde sınırlı sayıda bulunan EEPROM lar, bir defadan fazla yazılıp silinebildikleri için oldukça kullanışlıdır.

1.2.2 Flash (EPROM) Bellekli Mikrodenetleyiciler
Flash bellekler EEPROM lardan daha hızlı ve daha çok yazma silme işlemine
izin vermeleri yönünden üstündürler. Flash belleklerde bilgilerin korunması söz konusu değildir.

1.2.3 OTP Bellekli Mikrodenetleyiciler
Bir kez programlanabilen mikrodenetleyicilerdir. OTP bir kez programlanabilen bir ROM’dur. Programınızı bir EPROM programlayıcı ile bir kez yazdıktan sonra silemez veya değiştiremezsiniz. Bu yöntem programınız artık tamamen hazır olduğunda ve bütün hatalarından arındırıldıktan sonra kullanılır.
Mikrodalga fırınlar gibi birçok üründe kullanılan ve maliyeti de oldukça düşük olan bu çiplerin içine düşük güçlü ve düşük maliyetli CPU lar yerleştirildi. Motorola 6811 ve Intel 8051 ailesi mikrodenetleyicileri bu türe iyi birer örnektir. Bunların yanında Microchip firması tarafından üretilen PIC mikrodenetleyicileri de son zamanlarda oldukça popülerdir. Günümüz standartlarında bu çipler inanılmayacak kadar küçük ve düşük fiyatla satın alınabilmektedir. Sıradan bir mikrodenetleyici içinde en azından 1,000 byte kapasiteye sahip bir ROM ve 20 byte kapasiteye sahip bir RAM, 8 adet I/0 pini bulundurabilir.

1.3 Mikrodenetleyicinin Mikroişlemciye Olan Üstünlükleri
• Mikroişlemcinin kullanimi ve mikroişlemcili sistemin tasarimi mikrodenetleyicili sisteme göre hem daha masrafli hem de daha karmaşiktir.
• Mikrodenetleyicili bir sistemin çalışması için elemanın kendisi ve bir osilasyon kaynağının olması yeterlidir.
• Mikrodenetleyicinin ihtiyaç duyduğu önbellek ve giriş çıkış birimi bir yonga içerisinde bulunmaktadır. Ancak mikroişlemcili bir sistemde önbellek harici olarak bulunur.

BÖLÜM-2

2-PIC MİKRODENETLEYİCİ AİLESİNE GENEL BAKIŞ
PIC serisi mikrodenetleyiciler MICROCHIP firması tarafından geliştirilmiştir. Üüretim amacı; çok fonksiyonlu mantık uygulamalarının hızlı ve ucuz bir mikrodenetleyici ile yazılım yoluyla karşılanmasıdır.
PIC’in kelime anlamı PERIPHERAL INTERFACE CONTROLLER (Çevresel arabirim denetleyicisi) dir. İlk olarak 1994 yılında 16 bitlik ve 32 bitlik büyük işlemcilerin giriş ve çıkışlarındaki yükü azaltmak ve denetlemek amacıyla çok hızlı ve ucuz bir çözüme ihtiyaç duyulduğu için geliştirilmiştir.
Çok geniş bir ürün ailesinin ilk üyesi olan PIC16C54 bu ihtiyacin ilk ürünüdür. PIC denetleyicileri RISC benzeri işlemciler olarak anilir. PIC16C54 12 Bit komut hafiza genişligi olan 8 bitlik CMOS bir işlemcidir. 18 bacakli dip kilifta 13 I/O bacagina sahiptir ve 20 Mhz osilator hizina kadar kullanilabilir. 33 adet komut içermektedir. 512 byte program EPROM’u ve 25 byte RAM`i bulunmaktadir. Bu hafiza kapasitesi CISK işlemciler için düşük gibi görünebilir ancak PIC’in RISC denetleyici olmasi birçok işin bu kapasitede uygulanmasina olanak vermektedir.
PIC serisi tüm denetleyiciler herhangi bir ek bellek veya giriş/çikiş elemani gerektirmeden sadece 2 adet kondansatör, 1 adet direnç ve bir kristal ile çaliştirilabilmektedir. Tek bacaktan 40 mA akim çekilebilme ve entegre toplami olarak 150 mA akim akitma kapasitesine sahiptir. Entegrenin 4 Mhz osilator frekansinda çektigi akim; çalişirken 2 mA, stand-by durumunda ise 20uA kadardir.
PIC 16C54 ‘un mensup olduğu denetleyici ailesi 12Bit core 16C5X olarak anılır.
Bu gruba temel grup adı verilir. Bu ailenin üyesi diğer denetleyiciler PIC16C57, PIC16C58 ve dünyanın en küçük işlemcisi olarak anılan 8 bacaklı PIC12C508 ve PIC 12C509’dur.
Interrupt (Kesme) kapasitesi ilk denetleyici ailesi olan 12Bit Core 16C5X ailesinde
bulunmamaktadır. Daha sonra üretilen ve orta sınıf olarak tanınan 14Bit Core- 16CXX ailesi birçok açıdan daha yetenekli bir grup işlemcidir.
Bu ailenin temel özelliği interrupt kapasitesi ve 14 bitlik komut işleme hafızasıdır. Bu özellikler PIC’i gerçek bir denetleyici olmaya ve karmaşık işlemlerde kullanılmaya yatkın hale getirmiştir. PIC16CXX ailesi en geniş ürün yelpazesine sahip ailedir. 16CXX ailesinin en önemli özellikleri seri olarak devre üstünde dahi programlanmasıdır.
PIC 16CXX ailesinin amatör elektronikçiler arasında en çok tanınan ve dünyada üzerinde ençok proje üretilmiş elemanı ise PIC16C84 veya PIC16F84 tur.
PIC 16F84 un bu kadar popüler olması onun çok iyi bir denetleyici olmasından
ziyade program belleğinin EEPROM (Elektrikle silinip yazılabilen bellek) olmasından kaynaklanmaktadır. Seri olarak dört adet kabloyla programlanması da diğer önemli avantajıdır. Bugüne kadar amatörce bir işlemciyle uğraşmış herkesin en büyük sıkıntısı EPROM veya EPROM tabanlı denetleyicileri programladıktan sonra UltraViole ışık kaynağı ile silip tekrar programlamaktır. Bu çok zahmetli ve bir amatör için ekipman gerektiren yöntem olmuştur.
Tez içerisinde inceleyeceğimiz PIC 16F877 ise PIC 16F84’ün tüm özelliklerini taşımaktadır. Ancak ileride genişçe değineceğimiz üzere PIC 16F877 PIC16F84’e ek olarak bazı özellikleri barındırmaktadır.

2.1 PIC Çeşitleri
Microchip ürettiği mikrodenetleyicileri 4 gruba ayırarak isimlendirmiştir. Her bir grubu ise bir PIC ailesi olarak adlandırmıştır. PIC ailelerine isim verilirken kelime boyu (word lenght) göz önüne alınmıştır. Bu kısımda kelime boyunun ne anlama geldiğini açıklamakta fayda vardır. Mikroişemciler (CPU) veya mikrodenetleyiciler (MCU) kendi içlerindeki dahili veri saklama alanları olan kayededicileri arasındaki veri alışverişini farklı sayıdaki bitlerle yaparlar. Örneğin 8088 mikroişlemcisi çip içerisindeki veri alışverişini 16 bit ile yaparken, pentium işlemcileri 32 bitlik verilerle iletişim kurarlar. Bir CPU veya MCU’nun dahili veri yolu uzunluğuna kelime boyu denir.
Microchip PIC’leri 12/14/16 bitlik kelime boylarında üretilmektedir ve buna göre aşağıdaki aile isimleri mevcuttur.
• PIC 16C5XX ailesi 12 bit kelime boyu
• PIC 16CXXX ailesi 14 bit kelime boyu
• PIC 17CXXX ailesi 16 bit kelime boyu
• PIC 12CXXX ailesi 12 bit/14 bit kelime boyu
Bir MCU çip dışındaki harici ünitelerle veri alışverişini kaç bitle yapıyorsa buna veri yolu bit sayısı denir. PIC’ler farklı kelime boylarında üretilmelerine rağmen harici veri yolu tüm PIC ailelerinde 8 bittir. Yani bir PIC, G/Ç portu aracılığı ile çevresel ünitelerle veri alışverişi yaparken 8 bitlik veri yolu kullanır.
PIC programcıları program kodlarını yazarken bir komutun kaç bitlik kelime boyundan oluştuğu ile pek fazla ilgilenmezler. Seçilen bir çipi programlarken uyulması gereken kuralları ve o çiple ilgili özelliklerin bilinmesi yeterlidir. Bu özellikler PIC’in bellek miktarı, G/Ç portu sayısı, A/D dönüştürücüye sahip olup olmadığı, kesme (interrupt) fonksiyonlarının bulunup bulunmadığı, bellek tipinin ne olduğu (Flash, EPROM, EEPROM vb) gibi bilgilerdir.

2.2 PIC Mikrodenetleyicilerinin Tercih Sebepleri
a-) Fiyatının ucuz olması;
b-) Mantıksal işlemlerde performansının yüksek olması;
c-) Verilere ve belleğe hızlı bir şekilde erişimin sağlanması;
d-) 8 bitlik bir mikrodenetleyici olması ;
e-) Veri ve bellek için arı yolların (bus’ların) ayrılmış olması;
f-) Yüksek frekanslarda çalışabilme özelliği;
g-) Uyku modunda (Sleep mode) 1A gibi küçük bir akım çekmesi;
h-) 14 bitlik komut işleme hafizasi;
i-) Yalnızca 2 kondansatör ve bir direnç ile çalışabilme özelliği;
j-) RISC mimarisine sahip olması;

2.3 PIC’in Özellikleri
• Güvenirlik:PIC komutları bellekte çok az yer kaplarlar. Dolayısıyla bu komutlar 12 veya 14 bitlik bir program bellek sözcüğüne sığarlar. Harward mimarisi kullanılmayan mikrodenetleyicilerde yazılım programının veri kısmına atlama yaparak bu verilerin komut gibi çalışmasını sağlamaktadır . Bu ise büyük hatalara yol açmaktadır. PIC’ lerde bu durum engellenmiştir.
• Hız: PIC oldukça hızlı bir mikrodenetleyicidir. Her bir komut satırı 1µsn’lik bir zaman diliminde işlenir. Örneğin 5 milyon komutluk bir programın 20Mhz’ lik bir kristalle işletilmesi yalnız 1sn sürer. Bu süre kabaca 386 diye tanımladığımız sayısal bilgisayarın hızının yaklaşık 2 katıdır. Ayrıca PIC’lerin RISC mimarisine sahip olmasının hıza etkisi oldukça büyüktür.
• Komut Takımı:PIC’te bir işlem gerçekleştirmek için kullanilacak komut sayisi oldukça azdir. Örnegin PIC16F8XX ailesinde 33 komutu kullanarak sinirsiz sayida işlem yapabilmek mümkündür.
• Statik işlem:PIC mikrodenetleyici tamamıyla statik bir işlemcidir. Bu da demek oluyor ki işlemciye pals sağlayan osilasyon kaynağı durdurulsa bile işlenen veriler muhafaza edilmektedir.
• Sürme özelliği: PIC’ler yüksek bir sürme kapasitesine sahiptir. Çıkış olarak tanımlanan pinlerin yalnız birinin aktif olması halinde 40mA çekilebilmektedir. Entegre elemanın tamamı düşünüldüğünde ise 150 mA’e kadar akım çekilebilmektedir.
• Güvenlik: PIC üretim özelliği itibariyle bir protect yani koruma bitine sahiptir. Bu bitin programlanması yolu ile PIC içerisine yazılan programın başkaları tarafından okunması ve kopyalanmasına engel olunmuş olunur.
• Flash olma özelliği: Bu özellik PIC’in yeniden programlanabilir olması durumunu ifade etmektedir. Yani PIC üzerine yazılan program geliştirme amacı ile silinebilir ve yeni bir program yüklenebilir.
2.4 Bir PIC’in İşlem Yapabilmesi İçin Gerekli Bileşenler
• Giriş-Çikiş (I/O): Mikrodenetleyicinin dış dünya ile ilişkisini sağlayan, girdi ve çıktı şeklinde ayarlanabilen bir bağlantı pinidir.
• Yazılım: Mikrodenetleyicinin çalışmasını ve işletilmesini sağlayan bilgidir. Başarılı bir uygulama için yazılım hatasız olmalıdır. Yazılım C, Pascal veya Assembler gibi çeşitli dillerde veya ikilik(binary) olarak yazılabilir
• Donanım: Mikrodenetleyiciyi, bellek, arabirim bileşenleri, güç kaynaklari, sinyal düzenleyici devreler ve bunlari çaliştirmak ve arabirim görevini üstlenmek için bu cihazlara baglanan tüm bileşenlerdir
• Simülatör:PC üzerinde çalışan ve mikrodenetleyicinin içindeki işlemleri simüle eden MPSIM gibi bir yazılım paketidir. Hangi olayların ne zaman meydana geldiği biliniyorsa bir simülatör kullanmak tasarımları test etmek için kolay bir yol olacaktır. Öte yandan simülatör, programları tümüyle veya adım adım izleyerek hatalardan arındırma fırsatı sunar. Şu anda en gelişmiş simülatör programı Microchip firmasının geliştirdiği MPLAB programıdır.
• ICE : PIC MASTER olarak da adlandırılır. (In- Circuit Emulator / İç devre takipçisi) PC ve Mikrodenetleyicinin yer alacağı soket arasına bağlanmış yararlı bir gereçtir. Bu gereç yazılım, PC de çalışırken devre kartı üzerinde bir mikrodenetleyici gibi davranır. ICE, bir programa girilmesini, mikro içinde neler olduğunu ve dış dünyayla nasıl iletişim kurulduğunun izlenilmesini mümkün kılar.
• Programlayıcı : Yazılımın mikrodenetleyicinin belleğinde programlamasını ve böylece ICE’ nin yardımı olmadan çalışmasını sağlayan bir birimdir. Çoğunlukla seri port ’a (örneğin ICSTART, PROMASTER) bağlanan bu birimler çok çeşitli biçim, ebat ve fiyatlara sahiptir.
• Kaynak Dosyası : Hem asembler’ in hem de tasarımcının anlayabileceği dilde yazılmış bir programdır. Kaynak dosya mikrodenetleyicinin anlayabilmesi için önceden assemble edilmiş olmalıdır.
• Assembler : Kaynak dosyayı bir nesne dosyaya dönüştüren yazılım paketidir. Hata araştırma bu paketin yerleşik bir özelliğidir. Bu özellik assemble edilme sürecinde hatalar çıktıkça programı hatalardan arındırırken kullanılır. MPASM, tüm PIC ailesini elinde tutan Microchip’ in son assemble edicisidir.
• Nesne dosyası (object file) : Assembler tarafından üretilen bu dosya; programcı, similatör veya ICE’ nin anlayabilecekleri ve böylelikle dosyanın işlevlerinin çalışmasını sağlayabilecekleri bir dosyadır. Dosya uzantısı assemble edicinin emirlerine bağlı olarak , .OBJ veya .HEX olur.

BÖLÜM-3

3-PIC 16F877
3.1 Genel Tanımlama
PIC 16F877 yüksek performanslı, CMOS, full-statik, 8 bit mikrodenetleyicidir. Tüm PIC 16/17 mikrodenetleyicileri gibi PIC 16F877 de RISC mimarisini kullanmaktadır.
PIC16F87X mikroları birçok esas özelliklere sahiptir. 14 seviyeli, derin küme ve çoklu iç ve dış kesme kaynaklarına sahiptir. 2 aşamalı komut hattı tüm komutların tek bir saykıl’ la (çevrimle) işlenmesini sağlamaktadır. Yalnızca bazı özel komutlar 2 saykıl çekerler. Bu komutlar dallanma komutlarıdır. PIC16F87X ailesi dış elemanları azaltacak spesifik özelliklere sahiptir ve böylece maliyet minimuma inmekte, sistemin güvenirliği artmakta, enerji sarfiyatı azalmaktadır. Bunun yanı sıra tüm PIC’lerde 4 adet osilatör seçeneği mevcuttur. Bunlarda tek pinli RC osilatör, düşük maliyet (4 MHZ) , LP osilatör (Kristal veya seramik rezonatör) , enerji sarfiyatını minimize etmekte (asgari akım) (40 KHZ), XT kristal veya seramik rezonatör osilatörü standart hızlı ve HS kristal veya seramik rezonatörlü osilatör çok yüksek hıza sahiptir (20 MHZ). PIC mikrodenetleyicilerinin en büyük özelliği sleep modu özelliğidir. Bu mod sayesinde işlem yapılmadığı durumlarda PIC uyuma moduna geçerek çok düşük akım çeker. Kullanıcı bir kaç iç ve dış kesmelerle PIC’ i uyuma modundan çıkarabilmektedir. Yüksek güvenilirlikli Watchdog Timer kendi bünyesindeki çip üstü RC osilatörü ile yazılımı kilitlemeye karşı korumaktadır. PIC16F877 EEPROM program belleği , aynı aygıt paketinin orjinali ve üretimi için kullanılmasına olanak vermektedir. Yeniden programlanabilirliği mikroyu uygulamanın sonundan kaldırmadan kodu güncelleştirmeye izin vermektedir. Bu aygıtın kolayca erişilemediği, fakat prototipinin kod güncelleştirmesi gerekli olduğu durumlarda, bir çok uygulamanın geliştirilmesinde yararlıdır. Bunun yanı sıra bu kodun güncelleştirilmesi diğer ayrı uygulamalarda da yararlıdır.
3.2 PIC 16F877’nin Genel Özellikleri
• Yüksek hızlı RISC işlemciye sahiptir;
• 35 adet komut mevcuttur;
• Tüm komutlar 1 saykıl çeker, (Dallanma komutları 2 saykıl çeker.);
• 20 Mhz’ye kadar işlem hizina sahiptir;
• 8Kx14 word’lük flash program belleği mevcuttur;
• 368×8 bayt’lık data belleği;
• 256×8 byte’lık EEPROM data belleği;
• PIC16C73B/74B/76/77 ile uyumlu pin yapısı;
• Doğrudan ve dolaylı adresleme;
• Power-on Reset (POR), Power-up Timer (PWRT) , üzerinde bulunan RC osilatör ile çalışan Watchdog Timer (WDT);
• Programlanabilen kod koruma;
• Enerji tasarrufu için uyku (SLEEP) modu;
• Düşük güçlü yüksek hizli CMOSFLASH/EEPROM teknolojisi;
• Tamamen statik dizayn;
• Devre üzerinde seri programlama;
• 5 V’luk kaynak ile çalışma;
• 2 V ile 5.5 V arasında işlem yapabilme özelliği;
• Düşükj güç harcamasi;
– < 2 mA typical @ 5V, 4 MHz
-20 mA typical @ 3V, 32 kHz
-< 1 mA typical standby
3.3 PIC 16F877’nin Belirleyici Özellikleri
• Timer0: 8 bit pescaler’e sahip 8bit zamanlayıcı/sayıcı,
• Timer1:Sleep modunda artış gösterebilen ve harici saat darbesiyle artırılabilen Prescaler’ li 16 bit zamanlayıcı/sayıcı,
• Timer2:8bit peryot kaydedicili,prescaler ve postscalerli 16bit zamanlayıcı/sayıcı,
• İki adet tutma,karşılaştırma, PWM modülü
• 200ns çözünürlükte 16 bitlik karşilaştirma
• 10 bit çözünürlükte PWM
• 10 bit çok kanallı Analog-Dijital çevirici
• Seri port ve I2C modülleri
• 9 bit adres saptamaya sahip USART/SCI
• 8 bit genişliginde paralel slave port
PIC16F877’nin kendine teknolojik anlamda en yakın kardeşi PIC16F ile karşılaştırılması
ÖZELLİKLER PIC16F877 PIC16F84
Çalışma hızı DC-20Mhz DC-10 Mhz
Program Belleği 8Kx14 word Flash ROM 1Kx14 word Flash ROM
EEPROM Belleği 256 byte 64 byte
Kullanıcı RAM 368 x 8 byte 68 x 8 byte
Giriş / Çıkış port sayısı 33 13
Timer Timer0, Timer1, Timer2 Timer0
A / D çevirici 8 kanal 10 bit YOK
Capture / Comp / PWM 16 bit Capture
16 bit Compare
10 bit PWM çözünürlük YOK
Seri çevresel arayüz SPI (Master) ve
12C (Master / Slave)
modunda SPI portu
(senkron seri port) YOK
Paralel slave port 8 bit, harici RD,WR ve CS kontrollu YOK
USART / SCI 9 bit adresli YOK

.

Şekil 3.1:PIC 16F877’nin bacak yapısı

3.4 PIC 16F877’nin Basitleştirilmiş Iç Yapisi

Şekil 3.2 : PIC 16F877 basitleştirilmiş iç yapisi
3.5 Bellek Organizasyonu
Her PIC mikrodenetleyicisinde 3 bellek bloğu bulunmaktadır. Bunlar program belleği,veri belleği ve bunları ayıran veri hattıdır. Her bir bellek kendi taşıyıcısına sahiptir; böylece her bir bloğa erişim aynı osilatör süreci boyunca meydana gelebilmektedir. Bunun ötesinde, veri belleği genel amaçlı RAM ve özel fonksiyon kayıtları (SFR) olmak üzere ikiye bölünür. SFR`ler her bir bireysel özelleşmiş modülü ele alan bölümde açıklanan özel modülleri kontrol etmek için kullanılmaktadır. Veri belleği EEPROM veri belleğini de içermektedir. Bu bellek, direkt veri belleğine planlanmamış, fakat indirekt olarak planlanmıştır; ve indirekt adres göstergeleri okumak/yazmak için EEPROM belleğinin adresini belirlemektedir.
3.5.1 Program Bellek Organizasyonu
PIC 16F877 13 bit program sayacına ve 8Kx14 adresleme kapasitesine sahiptir. PIC16F877 denetleyicisi 8Kx14 FLASH program belleğine sahiptir. Reset vektörü 0000h ve kesme vektörü 0004h adresindedir. Şekil 3.3’te PIC16F877 program bellek haritası görülmektedir.

Şekil 3.3:PIC16F877 program bellek haritası

3.5.2 Veri Bellek Organizasyonu
Veri belleği ikiye ayrılır. Birincisi özel fonksiyon kayıt alanı (SFR), diğeri ise genel amaçlı kayıt alanıdır. SFR’ ler aygıtın işlemini kontrol eder.
Veri belleğinin bölümleri kümelenmiştir. Bu kümeler BANK adýný alýrlar. Bu hem SFR alaný hem de GPR alaný içinde geçerlidir. GPR alaný genel amaçlý RAM`in 16 bayt` ýndan daha fazlasýna olanak saðlanabilmesi için kümelenmiþtir. SFR` nin kümelenmiþ alaný özel fonksiyonlarý kontrol eden kayýtlara aittir. Kümeleme küme seçimi için kontrol bitleri gerektirmektedir. Bu kontrol bitleri STATUS kaydýnda yer almaktadýr. Þekil 2.4 veri belleði haritasý organizasyonunu göstermektedir.
Veri belleðin tümüne ya direkt her kayýt dosyasýnýn mutlak adreslerini kullanarak, yada, dolaylý yoldan dosya seçim kaydý (FSR) üzerinden eriþilebilir. Dolaylý adresleme, veri belleðinin kümelenmiþ alanýna eriþmek için RP1: RPO` un þimdiki deðerlerini kullanmaktadýr.
Veri belleði genel amaçlý kayýt ve özel fonksiyon kaydýný içeren iki kümeye bölünmektedir. RPO bitinin (STATUS <5>) (Yani 5. Bit RPO bitidir.) silinmesiyle BANK 0 seçilir. RPO` in kurulmasý BANK 1`i seçer. Her bir BANK (küme) 7Fh (128 bytes) kadar uzanýr (geniþler). Her bir kümenin ilk on iki yerleþimi özel fonksiyon kaydý için rezerve edilmiþtir. Kalaný ise statik RAM olarak genel amaçlý kayýt yürütebilmektedir.

3.6 Özel Fonksiyon Kaydedicileri
Özel fonksiyon kaydedicileri gerçek bellek birimleri olarak gözükmeseler de, PIC içerisinde veri belleği adreslerinde tanımlanmış sıradan bellek hücreleridir. Bu kaydediciler programlama esnasında bir nevi kayıt tutma görevi üstlenirler. Tablo 3.3’te özel fonksiyon kaydedicilerinin isimleri ve adresleri verilmiştir.

Tablo 3.3: PIC 16F877’de Özel Fonksiyon Kaydedicileri ve Adresleri
3.6.1 STATUS Kaydedicisi

Aritmetiksel işlemlerin yürütüldügü, sifirlama işlemlerinin gerçekleştirildigi ve küme kurma işlemlerinin gerçekleştirildigi kaydedicidir.
Status,0 (C): (Carry Bit)Aritmetiksel işlemler sonucunda taşmalarin kaydedildigi bittir. Bu bit bir işlem sonucunda 1 ise taşmanin oldugu, 0 ise taşmanin olmadigi anlaşilir.
Status,1(DC):(Digit Carry Bit)Bu bit; işlem sonucunda ilk 4 bitin dişina taşma olup olmadiginin kaydini tutar. Eger bu bit 1 ise 5. bite taşma oldugu, 0 ise 5. bite taşma olmadigi anlaşilir.
Status,2(Z):(Zero Bit)İşlem yapılan hücrede sıfırlamanın olup olmadığının kontrolünü yapar. 1 ise kontrolün yapıldığı hücrenin sayısal değeri 0 olmuş demektir, 0 ise hücre sıfırdan farklı bir sayısal değere sahiptir.
Status,3(PD):(Power Down Bit)Sleep modu ve watchdog timer ile ilgili işlemlerde kullanilir. Watchdog timer sifirlandiktan sonra (CLRWDT) bu bit 1 yapilmalidir. Mikrodenetleyici sleep moduna sokulur iken de bu bit 0 yapilarak işleme başlanir.
Status,4(TO):(Time Out Bit)PD biti gibi bu bit de sleep modu ve watchdog timer ile ilgili işlemlerde kullanilir. Watchdog timerin sifirlanmasi işlemi sonunda bu bit 0 yapilirken, mikrodenetleyici sleep modundan çikarilirken bu bit 1 yapilir.
Status,5,6(RP0-RP1):(Register Bank Select Bits) Küme seçimi ile ilgili işlemlerde kullanilirlar. Iki bit bir arada düşünüldügünde 4 konum mevcuttur ve bu dört konumun her birisinde de ayri bir küme kurulmaktadir.(00=Bank0, 01=Bank1, 10=Bank2, 11=Bank3). Direkt adresleme modunda kullanilan bir bittir.
Status,7 (IRP): Status5,6 gibi bu bit de küme seçimi işlemlerinde kullanilir. Ancak bu bit dolayli adresleme durumlarinda kullanilir.( 1 = Bank 2, 3 0 = Bank 0, 1 )
3.6.2 OPTION Kaydedicisi

Bu kaydedici üzerinde portB, TMR0 ve dış kesmeleri düzenleyici bitler bulunmaktadır.
Option,0,1,2(PS0,PS1,PS2):(Prescaler Rate Select Bits)Timer0(TMR0) ve Watchdog Timer (WDT)’ın süreç oranlarını belirleyen bitlrdir. Üç bit bir arada düşünüldüğü zaman 8 farklı durum ortaya çıkmaktadır
Option,3(PSA):(Prescaler Assignment Bit) Aldığı duruma göre TMR0 veya WDT’a tahsis edilir. Eğer 0 ise TMR0 üzerinde yapılan işlemlerde kullanılır, 1 ise WDT üzerinde yapılan işlemlerde kullanılır.
Option,4(TOSE):(Timer0 Source Edge select bit) Devrede harici clock kaynağı kullanılması durumunda palslerin düşen kenar mı yoksa yükselen kenar mı olduğunun tayininde işlem yapar. Eğer 1 ise RA4/TOCKI pininde kullanılan palslerin düşen kenar, 0 ise RA4/TOCKI pinindeki palslerin yükselen kenar olması gerekir.
Option,5(TOCS):(Timer0 Source select) PIC ile yapılan devrede hangi pals kaynağının kullanılacağına karar vermek için kullanılır. Eğer 1 ise palsler RA4/TOCKI pininden, 0 ise dahili pals kaynağından (CLKOUT) sağlanır.
Option,6(INTEDG):(Interrupt edge select )RBO/INT pininde kesme sinyali olması halinde yükselen kenar veya düşen kenar tetikleme gönderilmesi durumlarını ayarlar. 1 ise RBO/INT pininden yükselen kenar, 0 ise RBO/INT pininden düşen kenar bir tetikleme uygulanmalıdır.
Option,7(RBPU):(PortB Pull-up Control ): Bu bit uygulamalarda alan daralmasını sağlayan bir bittir. Bu bitin 1 yapılması ile gerilimin pozitif ucu ile portB pini arasına bir direnç konulur. Bu direnç sayesinde PortB’nin bu pini lojik 1’de tutulmuş ulur. Bu pini lojik 0 yapmak için ise pin ile gerilimin negatif ucu arasını bir push buton ile kısa devre yapmak yeterli olacaktır. Bu bitin 0 yapılması halinde ise pinledeki pull-up dirençleri kaldırılır. Bu biti kullanır iken yalnız portB için pull-up direnci konulduğunu unutmamak gerekir.

.3.6.3 INTCON Kaydedicisi

Bu kaydedici tüm kesmelerin kontrolü için bazı okunabilir ve yazılabilir bitler sağlayabilmektedir.
Intcon,0 (RBIF): B portuna ait kesme bayrak bitinde değişiklikler yapmaya yarar. Program başında RB7:RB4 bitlerinin sıfırlandığı varsayılır ise RB7:RB4 pinlerinden herhangibirisinin durum değiştirmesi halinde RBIF 1 olur. (0’dan 1’e) 1’den sıfıra düşme durumunda ise RBIF lojik olarak konum değiştirir ve 0 olur.
Intcon,1(INTF):RB0/INT pini ile ilişkilendirilmiştir. Bu bitin 0 olmasi durumunda RB0/INT aktif degildir, 1 olmasi durumunda ise aktiftir.
Intcon,2 (TOIF): TMRO da meydana gelen taşmaya göre işlem yapar. Egerki TOIF 1 ise TMRO’da taşma vardir. Aksi durumda ise taşma yoktur.
Intcon,3 (RBIE): İşlevi RBIF’inkine benzer. PortB kesme yetkilendirme bitidir. 1 olması durumunda PortB kesme yetkilendirmesi aktif, diğer durumda ise aktif değildir.
Intcon,4 (INTE): RB0/INT kesme yetkilendirme bitidir. Bu bitin 1 olması halinde RB0/INT pini kesme yetkilendirmesi verilmiştir. 0 olması halinde RB0/INT pininde kesme yetkilendirmesi yoktur.
Intcon,5 (TOIE): TMR0 kesmesini yetkilendirme bitidir. TOIE=1 ise kesme yetkilendirmesi aktif durumdadır. 0 olması halinde ise TMR0 ‘daki kesme ketkilendirmesi kalkmış durumdadır.
Intcon,6 (PEIE):Çevresel Kesmeler için yetkilendirme bitidir.PEIE=1 olması durumunda çevresel kesmeler etkindir,PEIE= 0 olması durumunda çevresel kesmeler etkin değildir.
Intcon,7 (GIE):Geniş kapsamli bir yetkilendirme bitidir. Bu bitin 1 yapilmasi ile program içerisinde tüm yetkilendirmeler aktif hale getirilebilir. 0 olma durumunda ise verilen tüm yetkilendirmeler kaldirilabilir

3.6.4 PIE1 Kaydedicisi
Çevresel kesmelerle ilgili işlemleri gerçekleştirmek için kullanilan kaydedicidir.
Pie1,0(TMR1IE): TMR1’de meydana gelen taşmayi saptamak için gerekli olan kesmeyi kontrol eden bittir. TMR1IE=1 ise TMR1 taşma kesmesi etkin olur,TMR1IE=0 ise TMR1 kesmesi kullanim dişi olur.
Pie1,1(TMR2IE): TMR2 ve PR2 nin denklik kesmesini kontrol eden bittir. Kesmeyi etkinleştirmek için bu bit 1 seviyesinde, kullanim dişi birakmak için ise 0 seviyesinde tutulur.
Pie1,2(CCP1IE):CCP1 (Capture/Compare/PWM) kesmesini kontrol etmek için kullanılan bittir. Eğer bu bit 1 ise CCP1 kesmesi etkin olur, 0 ise CCP1 kesmesi kullanım dışı olur.
Pie1,3(SSPIE):Eşzamanli seri port (SSP= Synchronous Serial Port) uygulamaları için kesme yetkilendirme bitidir. Bu bit 1 ise SSP kesmeleri etkin, 0 ise kullanım dışıdır.
Pie1,4(TXIE):USART gönderme kesmesini yetkilendirme bitidir. TXIE 1 ise kesme etkin, 0 ise kesme kullanım dışıdır.
Pie1,5(RCIE): USART alma kesmesini yetkilendirme bitidir. RCIE 1 ise kesme etkin, 0 ise kesme kullanım dışıdır.
Pie1,6(ADIE):A/D çevirme kesmesini yetkilendirme bitidir. ADIE=1 ise kesme etkin, ADIE=0 ise kesme kullanım dışı yapılır.
Pie1,7(PSPIE): Parallel Slave Port okuma/yazma kesmesini yetkilendirme bitidir. PSPIE 1 ise kesme etkin, 0 ise kullanım dışıdır.

3.6.5 PIR1 Kaydedicisi
Çevresel kesmelerin işlemlerini bitirip bitirmediklerini kontrol eden kaydedicidir.
Pir1,0(TMR1IF): TMR1’de meydana gelen taşmayi tutan bittir. Eger bu bit 1 ise TMR1’de taşma vardir,0 ise taşma yoktur.
Pir1,1(TMR2IF): TMR2 ile PR2 arasındaki denkliği gösteren bittir. Eğer TMR2IF=1 olmuşsa TMR2 ve PR2 arasında bir denklik söz konusudur,TMR2IF= 0 ise böyle bir durum yoktur.
Pir1,2(CCP1IF):CCP1 işlemine dair bilgi veren bittir. Eğer bu bit 1 ise; capture modunda TMR1 kaydedicisi capture edilmiştir ve bu bitin temizlenmesi gerekir, compare modunda TMR1 kaydedicisi eşlik yönünden karşılaştırılmıştır ve bu bitin temizlenmesi gerekir,0 ise CCP işlemleri tamamlanmamıştır.
Pir1,3(SSPIF):Eşzamanli seri port (SSP) uygulamalarinin durumlarini gösteren bittir. Bu bit 1 ise SSP işlemleri tamamlanmiştir, 0 ise tamamlanmamiştir.
Pir1,4(TXIF): USART gönderme hattının durumunu gösteren bittir. TXIE 1 ise USART gönderme hattı boş,0 ise doludur.
Pir1,5(RCIF): USART alma hattının durumunu gösteren bittir. RCIE=1 ise USART alma hattı dolu,RCIF=0 ise boştur.
Pir1,6(ADIF):A/D çevirme işleminin tamamlanip tamamlanmadigi hakkinda bilgi veren bittir. ADIF 1 ise çevirme işlemi tamamlanmiş, 0 ise tamamlanmamiştir.
Pir1,7(PSPIF): Parallel Slave Port okuma/yazma işleminin tamamlanip tamamlanmadigini gösteren bittir. PSPIF 1 ise okuma/yazma işlemi tamamlanmiştir, 0 ise okuma/yazma işlemi henüz tamamlanmamiştir.
3.6.6 PIE2 Kaydedicisi

BU HABER İLGİNİZİ ÇEKEBİLİR  Bilgisayarların Kullanım Alanları

CCP2 çevresel kesmesi, SSP hat çakışması ve EEPROM yazma kesmesi kontrollerinin yapıldığı kaydedicidir.
Pie2,0 (CCP2IE): CCP2 (Capture/Compare/PWM) kesmesini kontrol etmek için kullanılan bittir. Eğer bu bit 1 ise CCP2 kesmesi etkin olur, 0 ise CCP1 kesmesi kullanım dışı olur.
Pie2,1-2:Kullanım dışıdır ve daima 0 seviyesindedir.
Pie2,3(BCLIE):Hat çakışma kesmesidir. BCLIE =1 olması durumunda bu kesme etkin, BCLIE=0 olması durumnda ise kullanım dışıdır.
Pie2,4(EEIE):EEProm yazma kesmesi yetkilendirme bitidir. EEIE=1 ise yazma kesmesi etkin,EEIE= 0 ise kullanım dışıdır.
Pie2,5: Kullanım dışıdır ve daima 0 seviyesindedir.
Pie2,6:Başka işlemler için ayrilmiştir.
Pie2,7: Kullanım dışıdır ve daima 0 seviyesindedir.
3.6.7 PIR2 Kaydedicisi
CCP2 çevresel kesmesi, SSP hat çakışma kesmesi ve EEPROM yazma kesmesinin yaptığı işlemler hakkında bilgi veren bitleri bulunduran bir kaydedicidir.

Pie2,0 (CCP2IF): CCP2 işlemleri ile ilgili kayit tutan bir bittir. Eğer bu bit 1 ise; CCP2 işlemleri tamamlanmıştır, 0 ise tamamlanmamıştır.
Pie2,1-2:Kullanım dışıdır ve daima 0 seviyesindedir.
Pie2,3(BCLIF):Hat çakışmasını izleyebileceğimiz bir bittir. BCLIF 1 ise SSP’de bir çakışma meydana gelmiştir, 0 ise böyle bir durum yoktur.
Pie2,4(EEIF):EEPROM yazma durumunu gösteren bittir. EEIF= 1 ise yazma İşlemi tamamlanmıştır, 0 ise yazma işlemi tamamlanmamıştır.
Pie2,5: Kullanım dışıdır ve daima 0 seviyesindedir.
Pie2,6:Başka işlemler için ayrilmiştir.
Pie2,7: Kullanım dışıdır ve daima 0 seviyesindedir.
3.7 PCL ve PCLATH Kaydedicileri
Program Sayıcısı (PC=Program Counter) hangi satırda işlem yapılacağının kayıtlarını tutar ve işletim için gidip komut alınması işlemlerini gerçekleştirir. 13 bit genişliğindedir. Düşük bayt PCL kaydedicisi olarak adlandırılır. Bu kaydedici okunabilir ve yazılabilir özelliğe sahiptir. Yüksek bayt ise PCH kaydedicisi olarak adlandırılır ve direkt olarak yazılamaz ve okunamaz. PCH kayıtında bütün güncelleştirmeler, PCLATH kaydedicisini gözden geçirirler.
3.7.1 STACK (Yığın)
Stack (yığın) program içerisinde kesme ve çağırma neticesinde dallanılan 8 programın satır adreslerini tutar. Program işletilirken ise RETLW,RETURN,RETFIE gibi komutlar görüldüğünde gidilecek satırların adresleri de yine yığınlarda tutulur. 8 adet yığının herbirisi 13 bit genişliğe sahiptir ve bunlara program içerisinde müdahale edilemez.
3.8 Giriş/Çikiş Portlari (G/Ç Portlari)
G/Ç portları giriş/çıkış vazifelerinin dışında bazı çevresel işlemleri de yapacak özelliklere sahiptirler. Çevre birimleri kullanıldığında genel amaçlı giriş/çıkış pini kullanılmaz.
3.8.1 PORTA ve TRISA Kaydedicisi

PORTA 6 bit giriş/çikiş olarak yönlendirilebilir porttur. Bu portu yönlendiren yazmaç ise TRISA yazmacidir. TRISA kaydindaki herhangi bir bit 1 ise buna uygun çikiş sürücüsü yüksek direnç moduna getirilecektir. TRISA kaydindaki herhangi bir bitin 0 olmasi durumunda ise çikiş mandali seçilen pinin üzerine getirilir. Analog giriş kullanildiginda TRISA yazmaci RA pininin yönünü kontrol eder. Şekil 3.12.a ve şekil 3.12.b A portunun iç yapısını göstermektedir.

Şekil 3.12.a :RA0:RA3 ve RA5 İç yapısı Şekil 3.12.b:R A4/TOCKI İç Yapısı

3.8.2 PORTB ve TRISB Kaydedicisi
PORTB 8 bit giriş/çikiş olarak yönlendirilebilir porttur. Bu portu yönlendiren yazmaç ise TRISB yazmacidir. TRISB kaydindaki herhangi bir bit 1 ise buna uygun çikiş sürücüsü yüksek direnç moduna getirilecektir. TRISB kaydindaki herhangi bir bitin 0 olmasi durumunda ise çikiş mandali seçilen pinin üzerine getirilir. Analog giriş kullanildiginda TRISB yazmaci RB pininin yönünü kontrol eder. (1)
Her bir PORTB pini iç direnç düşürücü engellere sahiptir. RBPU(OPTION – REG<7) bitinin silinmesiyle aktif yapilir. Düşürücü engeller, port pini çikiş olarak konfigüre edildigi zaman otomatik olarak kapanmaktadir. Ayrica dört PORTB pini, RB7: RB4 degişim özelliklerinde kesmelere sahiptir. Yalnizca giriş olarak konfigüre edilen pinlerkesmenin meydana gelmesine sebep olabilirler. (yani, herhangi bir çikiş olarak şekillendirilen RB7:RB4 pini degişim ilişkisi üzerindeki kesmeden hariç tutulmuştur. ) Giriş modundaki pinlerin degeri PORTB` nin önceki okunmasindaki eski degeri ile karşilaştirilir. Pinlerin “uyuşmayan” kisimlari RB port degişim kesmesini üretmek için birlikte OR’lanir. şekil 3.13.a ve şekil 3.13.b portunun iç yapısını göstermektedir.

Şekil 3.13.a: RB3:RB0 Pinleri İç Yapısı Şekil 3.13.b: R7:RB4 Pinleri İç Yapısı
3.8.3 PORTC ve TRISC Kaydedicisi
PORTC 8 bit G/Ç olarak yönlendirilebilir porttur. Bu portu yönlendiren yazmaç ise TRISC yazmacıdır. TRISC Kaydındaki herhangi bir bit 1 ise buna uygun çıkış sürücüsü yüksek direnç moduna getirilecektir. TRISC Kaydındaki herhangi bir bitin 0 olması durumunda ise çıkış mandalı seçilen pinin üzerine getirilir. Analog giriş kullanıldığında TRISC yazmacı RC pininin yönünü kontrol eder.

3.8.4 PORTD ve TRISD Kaydedicisi
PORTD 8 bit Schmitt trigger tampon girişli porttur. Bu port PSPMODE (TRISD) denetim biti tarafindan kurulur. Giriş tamponu TTL tampondur. Şekil 3.15 de D portunun blok diyagramı görülmektedir.
3.8.5 PORTE ve TRISE Kaydedicisi
Bu port RE0/RD/AN5, RE1/WR/AN6 ve RE2/CS/AN7 olmak üzere 3 adet pine sahiptir. Giriş veya çikiş portu olarak ayarlanabilir. PORTE kontrolü TRISE tarafindan yapilir. PSPMODE(TRISE<4>) denetim biti tarafindan ayarlanir. Şekil 3.16 da E portu blok diyagramı görülmektedir.

3.9 Veri EEPROM ve Flash Program Hafızası
Veri EEPROM ve FLASH proram hafızası normal işlem süresinde okunabilme ve yazılabilme özelliğine sahiptir. Veri belleği, kaydedici dosyaya doğrudan planlanmamıştır. Bunun yerine bu bellek, özel fonksiyon kaydı üzerinden dolaylı olarak adreslenmiştir. Burada bu belleği okuyan ve yazan 6 özel kaydedici mevcuttur.
• EECON1
• EECON2
• EEDATA
• EEDATH
• EEADR
• EEADRH
EEPROM veri belleği okuma ve yazmaya izin verir. EEDATA yazma/okuma için 8 bitlik veri tutar ve EEADR erişilen EEPROM adreslerini saklar. EEDATH ve EEADRH kaydedicileri veri EEPROM’ u kullanmak için erişemezler. Bu aygıtlar Oh ile FFh genişliğindeki adresli EEPROM belleğinin 256 byte’ ına sahiptir. EEPROM veri belleği yüksek silme/yazma süreçlerine oranlanmıştır. Yazma süresi yonga (chip) zamanlayıcısı tarafından denetlenmektedir. Yazma süresi chipten chipe olduğu gibi sıcaklık ve gerilimlede değişmektedir. Program hafızası kelime okuma ve yazmasına izin verir. Byte veya word verisi otomatik olarak silinir ve yeni veri yazılır. Program hafızası arabirimi bloklandığı zaman, EEDATH : EEDATA kaydedicileri oku/yaz için 14 bit veriyi 2 byte word halinde tutar. EEADRH ve EEADR kaydedicileri EEPROM’da 13 bitlik 2 byte word adresini tutar. Bu aygıtlar OH ile 3FFFh arasındaki adreste 8K word program EEPROM’una sahiptir. Program hafızasına yazılan değer bir talimat olmayı gerektirmez. Bu yüzden kalibrasyon parametreleri, seri numaraları ASCII kodunda depolanabilir.
3.9.1 EEADR
EEADR kaydı EEPROM verisinin maksimum 256 byte’ını veya FLASH’ın maksimum 8K word’ünü adresleyebilir. Program adres değeri seçilirken EEADRH kaydedicisi adresin MSB’sini yazar, EEADR kaydedicisi ise LSB’sini yazar
3.9.2 EECON1 ve EECON2 Kaydedicileri

EECON1 belleğe ulaşmak için kontrol kaydedicisidir. EECON2 fiziksel kaydedici değildir. EECON2 yalnızca bellekteki yazı dizisini okumak için kullanılır. Eğer erişim, program veya veri belleğine ulaşma olacaksa buna EEPGD denetim biti karar verir. Veri belleği temizlendiğinde, sonradan yapılan işlemler veri belleğine işlenirler. Bellek ayarlandığında ise yine sonradan yapılan işlemler belleğe işlenirler. RD ve WR kontrol bitleri sırasıyla oku-yaz işlemlerini başlatır.
Eecon1,0(RD): Okuma modu kontrol bitidir.1 olması durumunda EEPROM okuma modundadır, 0 olması durumunda ise EEPROM’dan oku modundan çıkılır.
Eecon1,1(WR):EEPROM’a data yazma işlemini kontrol eden bittir. Bilgi yazimi esnasinda 1 yapilir ve yazimin sonlandirilmasi için 0 yapilir.
Eecon1,2(WREN):EEPROM’a yazma yetkilendirme bitidir. WREN=1 olması durumunda yazım için izin verilmiştir. WREN=0 olması durumunda ise data yazımı için yetki yoktur.
Eecom1,3(WRERR):Yazım işleminde ikaz bitidir. Yazım işleminde bir sebepten dolayı erken sonlandırma var ise bunu bildiren bittir. Eğer ki bu bit 1 ise, yapmak istediğimiz veri yazma işlemi erken sonlandırılmıştır ve bir hata söz konusudur. Bu durumda watchdog timer sıfırlanır veya mikrodenetleyici resetlenerek programın başına dönülür. 0 olma durumunda ise yazım işlemi başarı ile tamamlanmış demektir.
Eecon7,(EEPGD): Program belleği/veri belleği seçim bitidir. Eğer EEPGD=1 ise program belleğine erişim yerkisi verilir,EEPGD= 0 ise veri belleğine erişim yetkisi verilir.
3.9.3 Flash Program Belleğinin Okunması
Program belleğinin yeri EEADR ve EEADRH kaydedicilere adresin 2 byte’ı yazılarak okunabilir. [ EEPGD (EECON1<7>) ve RD (EECON1<0>) kontrol bitleri ayarlandığında]
Okuma kontrol biti bir kez ayarlanıp mikrodenetleyici veriyi okumak için komut çevremini kullanacaktır.
3.9.4 Flash Program Belleğinin Yazılması
WR Kurulum biti ayarlanır ise FLASH program belleği sadece yazılabilir duruma getirilir. FLASH Belleğe yazma yeri, adresin ilk iki byte’ı EEADR ve EEADRH kaydedicilerine yazılarak ve EEPGD/RD kontrol bitleri 1 yapılarak ilk iki byte EEDATA ve EEDATH kaydedicilerine yazılarak tespit edilir.
3.9.5 Yazım Doğrulanması
EEPROM verisine yazılan değerlerin yazılması istenen değerlerle doğrulanması gerekmektedir. Bu EEPROM biriminin spesifikasyon limitine yakın uygulamalarda kullanılmalıdır. Toplam kaldırma diski , uygunluk (rahatlık) derecesini belirlemeye yardımcı olacaktır. Genel olarak EEPROM yazım başarısızlığı ”1” olarak yazılan,
fakat geriye “0” olarak okunan bitten kaynaklanmaktadır.
3.9.6 Taklit Yazılımlara Karşı Koruma
Bazı durumlarda, aygıt EEPROM veri belleğine yazmak istemeyebilir. Taklit yazılımlara karşı korunmak için, değişik mekanizmalar monte edilmiş, kurulmuştur. Yüksek güçte WREN temizlenir. Bunun yanı sıra , yüksek güç timer’ i (72 msn süreli) EEPROM yazımını önler. Yazılımı başlatan ardışık ve WREN biti ikisi birlikte ‘Brown-Out’,güç arızası veya yazılım aksamasında tesadüfi yazılımları
önlemeye devam eder.
3.9.7 Kod Koruma Süresince EEPROM Veri İşlemi
Microdenetleyici, kod korumalı durumdayken düzene sokulan verileri okuyabilir ve EEPROM verisine yazabilir. ROM aygıtlarında iki koruma biti mevcuttur. Birisi ROM program belleği diğeri ise EEPROM veri belleği içindir.
3.9 Zamanlama0 (TIMER0) Modülü ve TMR0 Kaydı
Timer0 modül, timer/sayaç aşagidaki özelliklere sahiptir.
• 8 bitlik timer/sayaç ,
• Okunabilir ve yazılabilir ,
• 8 bitlik programlanabilir prescaler.,
• İçten veya dıştan saat ayarı ,
• FFh` tan 00h` ye taşma üzeri kesme ,
• Dış saatin sınır seçimi ,
Timer modu TOCS bitinin (OPTION<5>) temizlenmesiyle seçilir. Timer modunda Timer0 modülü her bir komut sürecini uzatır. Eğer TMR0 kaydı yazılıysa, uzama takip eden 2 süreci engeller. Kullanıcı ayarlanan değeri TMR0 kaydına yazarak, bunun etrafından çalışabilir. Sayaç modu TOCS bitinin (OPTION<5>) ayarlanmasıyla seçilir.
Bu modda, TMR0, RA4/TOCK1 pininin sınırlarının herbir artışında ya da düşüşünde artacaktır. Genişleyen sınır, TO kaynak sınır seçim biti tarafından, TOSE (OPTION<4>) tarafından belirlenmektedir. TOSE bitinin temizlenmesi artan sınırları seçecektir.

Prescaler, Timer0 modülü ile Watchdog Timer arasında paylaşılmaktadır. Prescaler ataması, yazılımda PSA biti kontrolü tarafından denetlenmektedir. (OPTION<3>) PSA
bitinin temizlenmesi, prescaler’ ı Timer0 modülüne atayacaktır. Prescaler okunabilir veya yazılabilir değildir. Prescaler, Timer0 zamanlama modülüne atandığında prescaler değeri
(1:2,1:4,1:8,1:16,1:32,1:64,1:128,1:256 olmak üzere) yazılım tarafından seçilebilirdir. (1)
3.10.1 TMR0 Kesmesi
TMR0 kesmesi, TMR0 kaydı FFH`dan 00h`ye akışında üretilmektedir. Bu fazla akım TOIF bitini ( INTCON<2>) kurar (ayarlar). Kesme, aktif TOIE bitinin (INTCON<5>) temizlenmesi ile gizlenebilir. (INTCON<5>) TOIF biti, Timer0 modülü tarafından, bu kesmenin yeniden aktifleştirilmesinden önce yazılımdan silinmelidir. TMR0 kesmesi (Şekil 3.18) denetleyiciyi SLEEP` ten çıkaramaz, çünkü, SLEEP boyunca timer kapalıdır.
3.10.2 TMR0’ın Dıştan Saat İle Kullanımı
Dıştan saat girişleri TMR0 için kullanıldığında, bazı ön şartların gerçekleştirilmesi gerekir. Dıştan saat gereksinimi , içten faz saati senkronizasyonundan kaynaklanmaktadır. Bunun yanısıra, TMR0 kaydının senkronize edilmesinden sonra, fiili artmada gecikme mevcuttur.
3.10.2.1 Dıştan saat senkronizasyonu
Hiç bir prescaler kullanılmadığı taktirde , dıştan saat girişi prescaler çıkışındaki gibidir. RA4/TOCKI pininin içten faz saati ile senkronize edilmesi iç faz saatlerinin Q2 ve Q4 süreçlerindeki prescaler çıkışını örneklemek yoluyla yerine getirilir.
Bunun için , TOCKI’ nin düşük degerinin en azindan 2TOSC (arti ufak RC gecikmesi) olmasi gerekir. Prescaler kullanildiginda, diş saat girişi asenkron sayici tipi prescaler’ a bölünür ve böylece prescaler çikişi simetrik olur. Diş saatin örnekleme gereksinmelerini karşilamak için sayaç (counter) dikkate alinmalidir. Böylece prescaler degerine bölünen en azindan 4 TOSC peryot uzunluguna sahip olmalidir.

3.10.2.2 TMR0 gecikme uzatılması
Prescaler çıkışı , iç saat ile senkronize edildiği için, dış saat sınırlarının meydana gelmesindeki zamandan TMR0 modülünün fiili olarak uzatılması zamanına kadar küçük bir gecikme vardır. Şekil 3.20 dış saat sınırından Timer uzamasına kadar gecikmeyi göstermektedir.
3.10.3 Prescaler ( Bölücü)
8 Bitlik sayaç Timer0 modülünde veya Watchdog timer’ında bulunur. Prescaler dışarıdan verilen sinyali 256 ya kadar bölmeye yarar. Timer0 modülü ile watchdog timer’ı arasında karşılıklı istisna tutulan yalnızca bir tek prescaler mevcuttur. Böylece Timer0 modülüne prescaler ataması, watchdog timer’ın prescaleri olmadığı anlamına gelmektedir. PSA ve PS2 : PSO bitleri (option <3:0>) prescaler atamasını ve prescaler oranını belirlemektedir.
Timer0 modülüne yazılan bütün komutlar, timer0 modülüne atandığında prescaler’i ölçecektir. WDT ye atandığında , CLRWDT komutu watchdog timer boyunca prescaler’ i temizleyecektir. Prescaler yazılabilir veya okunabilir değildir.
3.11 Zamanlayıcı 1 (TIMER1) Modülü
Timer1 modül: Timer/sayaç aşagidaki özelliklere sahiptir.
• 16 bit timer/sayaç,
• Okunabilir ve yazılabilir,
• İçten ve dıştan saat seçimi,
• FFFFh’den 000h’a taşma üzeri kesme,

• CCP modülünden resetleme,
3.11.1 Zamanlayıcı1 (TIMER1) İşlemleri
Timer1 aşagidaki modlardan birini işletebilir.
• Zamanlayıcı olarak
• Senkronize sayacı olarak
• Asenkronize sayacı olarak
TMR1CS (T1CON<1>) biti bu modlardan hangisinin çalıştırılacağına karar verir. Zamanlayıcı modunda Timer1 her komut çevrimi artışları, sayaç modunda her harici saat girişi yükselmesini belirler. Timer1 osilatör aktifken RC1/T10SI ve RC0/T10S0/T1CKI pinleri giriş olurlar. TRISC<1:0> değeri ihmal edilir.
3.11.2 T1CON: TIMER1 Kontrol Kaydedicisi

TIMER1’deki işlemlerin kontrol edildigi ve işlemler yürütülürken bazi bilgilerin alindigi kaydedicidir.

T1con,0(TMR1ON):Timer1’ e yetki veren bittir. TMR1ON biti 1 yapıldığında Timer1 kullanılır durumdadır,0 ise kullanım dışıdır.
T1con,1(TMR1CS):Timer 1 için clock kaynağının seçildiği bittir. TMR1CS 1 ise clock kaynağı olarak RC0/T1OSO/T1CKI pininden gelen sinyalin yükselen kenarları seçilir. TMR1CS’nin 0 olması halinde ise dahili clock kaynağı kullanılır.
T1con,2(T1SYNC):Harici clock kaynağının senkron kontrolünü yapan bittir. Eğer harici kaynak ile Timer1 eşzamanlı çalışmıyorsa T1SYNC 1 seviyesinde olur. Eğer eşzamanlı bir çalışma var ise T1SYNC 0 seviyesindedir.
T1con,3(T1OSCEN): Timer1 osilatör kaynağı yetkilendirme bitidir. T1OSCEN 1 ise osilatör kaynağı etkindir, 0 ise kullanım dışıdır.
T1con,4-5(T1CKPS0,T1CKPS1):Timer1 giriş sinyalinin bölme (prescale) oraninin seçildigi bilerdir. Bu bitlerin aldigi degerlere göre bölme prescaler degeri degişmekte ve buna bagli olarak Timer1 artma frekansi degişmektedir.
11 = 1:8 Prescale değeri
10 = 1:4 Prescale değeri
01 = 1:2 Prescale değeri
00 = 1:1 Prescale değeri
3.12 Zamanlayıcı2 (TIMER2) Modülü
Timer2 modül aşagidaki özelliklere sahiptir.
• 8 bit zamanlayıcı (TMR2 kaydedici),
• 8 bit peryot kaydedici (PR2),
• Okunabilir ve yazılabilir,
• Yazılım ile programlanabilir prescaler,
• TMR2, PR2 eşlemesinde kesme,
• Saat kaymasını üretmek için TMR2 çıkışının seçimli kullanımı SSP modülü,
3.12.1 Zamanlayıcı2 (TIMER2) İşlemleri
Timer2, CCP modülünün PWM modu için PWM zaman tabanı olarak kullanılabilir. Giriş saati (Fosc/4) ‘in prescale seçeneğine sahip olur. Aşağıdaki durumlardan herhangi biri gerçekleştiğinde prescaler ve postscaler sayaçları temizlenirler.
• TMR2 kaydedicisine yazıldığında ,
• T2CON kaydedicisine yazıldığında,
• Herhangi bir aygıt hazır olduğunda ,
***T2CON yazıldığında, TMR2 temizlenemez.
3.12.2 T2CON: TIMER2 Kontrol Kaydedicisi
Timer2’deki işlemlerin kontrol edildigi ve işlemler yürütülürken bazi bilgilerin alindigi kaydedicidir.
T2con,0-1(T2CKPS0,T2CKPS1): Timer2’de prescaler’in ayarlandığı bitlerdir. Bu bitlerin aldığı değerlere göre prescaler değeri değişmektedir.
00 = Prescaler is 1
01 = Prescaler is 4
1x = Prescaler is 16
T2con,2(TMR2ON): Timer2’ e yetki veren bittir. TMR2ON biti 1 yapıldığında Timer2 kullanılır durumdadır,0 ise kullanım dışıdır.
T2con,3:6(TOUTPS3:TOUTPS0): Timer2’de postscaler ayarlarının yapıldığı bitlerdir. Bu bitlerin aldığı değerlerle timer2 değişik postscaler değerlerine ulaşmaktadır.
0000 = 1:1 Postscaler
0001 = 1:2 Postscaler


1111 = 1:16 Postscaler
3.13 CAPTURE/COMPARE/PWM(CCP) Modülleri
CCP modülleri yakalama, karşilaştirma, pals genişligi modülasyonu gibi işlemleri gerçekleştirmek üzere bazi özelliklerle donatilmişlardir. Her bir CCP modülü 16 Bitlik yakalama (capture) kaydedicisi, 16 bitlik karşilaştirma (compare) kaydedicisi veya PWM kaydedicisine sahiptir.
PIC 16F877’nin CCP modülleri olan CCP1 ve CCP2’nin çalışmaları özel tetikleyicileri dışında hemen hemen aynıdır. Bu nedenle bundan sonraki anlatımlarımız CCP1 modülü üzerinde yoğunlaştırılacaktır.

3.13.1 CCP1 Modülü
CCP modülü, düşük kismi 8 bit olan CCPR1L ,yüksek kismi 8 bit olan CCPR1H olan ve CCPR1 olarak adlandirilan bir kaydediciden oluşmaktadir. CCP1 modülünün işlemleri ise CCP1CON kaydedicisi tarafindan kontrol edilmektedir. Bu modüldeki kaydedicilerin tümü yazilabilir ve okunabilir özelliktedirler.
3.13.2 CCP1CON Kaydedicisi

Yukarıda da belirtildiği gibi bu kaydedici CCP1 modülünün yaptığı işlemleri denetler ve yetkilendirmeleri yapar.
Ccp1con,0:3(CCPxM0:CCPxM3): CCP için mod seçim bitleridir. Bu bitlerin aldığı değerlere göre CCP1 modülü capture/compare/PWM modlarına sokulmaktadır.
0000 = Capture/Compare/PWM etkin değil (CPM kullanım dışı)
0100 = Capture modu, her düşen kenarda
0101 = Capture modu, her yükselen kenarda
0110 = Capture modu,her 4. yükselen kenarda
0111 = Capture modu, every 16. yükselen kenarda
1000 = Compare modu, denklikte durumunda çıkışı 1’le(H) (CCPxIF=1)
1001 = Compare modu, denklik durumunda çıkışı 0’la (L) (CCPxIF=1)
1010 = Compare modu, denklikdurumnda yazılım kesmesi üret
1011 = Compare modu, özel tetikleme (CCPxIF=1, CCP1 TMR1’i resetler, CCP2 TMR1’i resetler ve A/D çevirme başlar.(Eger A/D çevirme modülü yetkilendirilmişse).)
11xx = PWM modu
Ccp1con,4:5(CCPxX:CCPxY): CCP modülün PWM modundaki Lsb ayarlarını gerçekleştiren bitlerdir.

3.13.3 CAPTURE (Yakalama) Modu
Capture modunda RC2/CCP1’deki bir takım olaylarla; CCPR1H:CCPR1L, TMR1’in 16 bitlik değerini yakalar ve kaydeder. RC2/CCP1’deki olaylar şu şekilde tanımlanmaktadır:
• Her düşen kenar
• Her yükselen kenar
• Her 4. yükselen kenar
• Her 16. yükselen kenar
RC2/CCP1’deki bu durumlardan birisi CCPxM0:CCPxM3 bitleri sayesinde seçilir. Bir yakalama işlemi gerçekleştiginde CCP1IF (PIR1,2) kurulur ve bir kesme talebinde bulunulur.Eger yeni bir yakalama gerçekleşirse CCP1R registerine yeni deger kaydedilir ve eski deger tamamiyle silinir.

3.13.3.2 CCP Prescaler
CCP’de prescaler ayarlarını gerçekleştirmek üzere, CCP1M3:CCP1M0 bitleri ayrılmıştır. CCP modülü kullanım dışı ise veya CCP modülü capture modunda kullanılmıyorsa prescaler sayıcısı temizlenmiş vaziyette durur. Bu herhangi bir resetleme durumunda prescalerin temizleneceği anlamına gelir. Capture prescaler’i diğer bir kesmenin üretilmesi durumunda değişim gösterir.
3.13.4 COMPARE (Karşilaştirma) Modu
Karşilaştirma modunda 16 bitlik CCPR1 ile TMR1’in karşilikli bitleri baytlari karşilaştirilir. Eger bir eşitlik söz konusu ise RC2/CCP1’de ;
• Yüksek seviyeye (H) çekilme
• Düşük seviyeye (L) çekilme
• Değişiklik olmama.
durumlarından birisi gerçekleşir. Gerçekleşmesi istenilen durum program yardımıyla belirlenir.
RC2/CCP1 pinindeki değişme durumu CCP1M0:CCP1M0 (CCP1CON<0:3>) bitleri yardımı ile yapılmaktadır.
1000 = denklik durumunda çıkışı 1’le(H)
1001 = denklik durumunda çıkışı 0’la (L)
1010 = denklik durumnda yazılım kesmesi üret (pinde değişiklik olmaz)
Denklik durumunda daima CCP1IF biti yüksek (H) durumuna çekilmektedir.

3.13.4.1 Özel Hal Tetikleyicisi
Bu modda dahili donanım tetikleme kaynağı başka bir yerde herhangi bir işlemi başlatmak için tetikleme üretir. CCP1’in özel hal tetikleyici çıkışı TMR1 kaydedici çiftini resetler. Bu durum Timer1’de yeni bir 16 bitlik programlanma devresini başlatır.
CCP2’nin özel hal tetikleyicisi ise TMR1’i resetler ve eğer A/D modülü kullanılır vaziyette ise yeni bir A/D çevirme işlemi başlar.
3.13.5 PWM (Pals Genişlik Modülasyonu) Modu
Bu modda CCP1 pininden 10 bit çözünürlükte PWM çıkış alınır. PWM modunda işlem yapabilmek için TRISC<2> biti çıkış konumunda tutulmalıdır. Şekil 3.28’de PWM modunda gerçekleştirilen işlemlerin basit blok diyagramı verilmektedir.

3.13.5.1 PWM Süresi
Bir PWM işlemi ile verinin aktarilmasi PR2 kaydedicisinin degerine baglidir. (PR2=TMR2 prescaler degeri). PWM süresi formül 3.1 den faydalanilarak hesaplanabilir.
PWM süresi = [(PR2) + 1] . 4 . TOSC
Formül 3.1
PWM frekansı ise 1/PWM süresinden bulunabilir. TMR2’nin PR2’ye eşit olması durumunda ise, sonraki peryotta şu üç durum meydana gelir.
• TMR2 temizlenir.
• CCP1 pini yüksek seviyeye (H) çekilir.
• PWM görev saykılı CCPR1L den CCPR2H içerisine atılır.
3.13.5.2 PWM Görev Saykılı
PWM görev saykılı CCPR1L ve kaydedicisi ve CCP1CON<4:5> bitlerine bağlıdır. PWM’de ki 10 bitlik çözünürlük; CCPR1L kaydedicisinin 8 bitlik kısmının MSB, ve CCP1CON’un 4 ve 5. Bitlerinin LSB olarak kabul edilmesiyle elde edilir. Bu 10 bit çözünürlük CCPR1L:CCP1CON<5:4> şeklinde gösterilmektedir. PWM görev saykılının hesaplanmasında ise formül 3.2 kullanılabilir.
(CCPR1L:CCP1CON<5:4>) •Tosc • (TMR2 prescaler değeri)
Formül 3.2

3.14 MSSP (Asıl Eşzamanlı Seri Port) Modülü
MSSP The Master Synchronous Serial Port) modülü başka çevre birimlerle veya mikrodenetleyicilerle seri olarak haberleşmeyi saglayan bir arabirimdir. Burada bahsedilen çevre birimleri; seri EEPROM, shift register, display sürücüleri, A/D çevirici gibi birimler olabilir. MSSP modülünün iki tip çalişma modu bulunmaktadir.
• Serial Peripheral Interface (SPI)
• Inter-Integrated Circuit (I 2C)
MSSP’nin çalışma modlarına geçmeden önce bu modülün kontrolünü sağlayan kaydedicilerden bahsetmekte fayda vardır. MSSP modülünde işlemleri kontrol eden başlıca üç kaydedici; SSPSTAT,SSPCON,SSPCON2 kaydedicileridir.

3.14.1 SSPCON Kaydedicisi
Sspcon,0:3(SSPM0:SSPM3): SSP (Synchronous Serial Port) için mod seçim bitleridir. Bu bitlerin aldığı değerlere göre MSSP modülü daha önce de bahsettiğimiz modlardan birisine sokulur ve özel bir işlem için tahsis işlemi yapılır.
0000 = SPI master modu, clock = FOSC/4
0001 = SPI master modu, clock = FOSC/16
0010 = SPI master modu, clock = FOSC/64
0011 = SPI master modu, clock = TMR2 çıkışı/2
0100 = SPI slave modu, clock = SCK pin. SS pin kontrolü yetkilendirmesi.
0101 = SPI slave modu, clock = SCK pin. SS pini kullanım dışı.
0110 = I2C slave modu, 7-bit addres
0111 = I2C slave modu, 10-bit addres
1000 = I2C master modu, clock = FOSC / (4 * (SSPADD+1) )
1011 = I2C sabit kontrollü master mod
1110 = I2C sabit kontrollü master mod, başlat ve durdur kesmeleri ile birlikte 7 bit adres yetkilendirmesi
1111 = I2C sabit kontrollü master mod, başlat ve durdur kesmeleri ile birlikte 7 bit adres yetkilendirmesi
1001, 1010, 1100, 1101 = Başka işlemler için ayrilmiştir.
Sspcon,4(CKP): Clock’un polaritesini seçmek için kullanılan bittir.
SPI modunda; CKP 1 ise, yüksek seviye etkizis kabul edilir, CKP 0 ise düşük seviye etkisiz kabul edilir.
I2C slave modunda; CKP 1 ise clock yetkilendirmesi yapılır, CKP 0 ise clock düşük seviyede tutulur.
Sspcon,5(SSPEN): MSSP modülü için yetkilendirme bitidir.
SPI modında;SSPEN =1 ise seri port kullanımdadır ve SCK ,SDO, SDI ve SS uçları kullanılabilir. SSPEN =0 ise seri port işlemleri kullanım dışı bırakılır.
I2C modunda; SSPEN=1 ise seri port işlemleri etkin yapilir ve SDA ve SCL pinleri kullanilabilir duruma getirilir. SSPEN= 0 ise seri port işlemleri kullanim dişidir.
Sspcon,6(SSPOV): MSSP modülünde alma işleminde taşmalari izleyen bittir.
SPI modunda; SSPOV 1 ise, SSPBUF önceki veriyi tutarken yeni bir bayt alınır. SSPSR verisi üzerindeki taşma kaybolur. Slave modunda kullanıcı SSPBUF kaydedicisini okumak zorundadır, sadece data iletimi sırasında bu bit önemsizdir. Master modda taşma biti SSBBUF kaydedicisine yeni bir veri yazılana kadar kurulmaz. Yeni bir işlem gerçekleştirebilmek için SSPOV biti programdan temizlenmelidir. SSPOV biti 0 ise herhangi bir taşma yoktur.
I2C modunda; SSPOV 1 ise, SSPBUF önceki veriyi tutarken bir baytlık veri alınır. SSPOV biti iletim modunda önemsizdir. Alım modunda yeni bir işlem için SSPOV bitinin programdan temizlenmesi gerekir.
Sspcon,7(WCOL): Yazım çakışması bitidir. Bir nevi hata kontrolü yapar.
SPI modunda;WCOL 1 ise I2C hattı meşgul iken SSPBUF kaydedicisine veri yazılmaya kalkışılmıştır. Bu durum bir çakışmadır. WCOL 0 ise herhangi bir çakışma yoktur.

I2C modunda; Hala önceki data iletilirken SSPBUF kaydedicisine veri yazılmıştır. Bu bir çakışmadır ve WCOL bitinin programdan silinmesi gerekir. WCOL 0 ise herhangi bir çakışma yoktur.
3.14.2 SSPSTAT Kaydedicisi
Sspstat,0(BF): Tamponun doluluk durumu hakkında bilgi tutan bittir.
Alım durumunda (SPI ve I2C modunda);BF= 1 ise alım işlemi tamamlanmıştır ve SSPBUF kaydedicisi doludur. BF=0 ise alım işlemi tamamlanmamıştır ve SSPBUF boştur.
İletim durumunda ( I2C modunda); BF =1 ise veri iletimi sürmektedir ve SSPBUF kaydedicisi doludur. BF=0 ise veri iletim işlemi tamamlanmiştir ve SSPBUF kaydedicisi boştur.
Sspstat,1(UA): 10 bitlik I2C modunda adres güncelleme bitidir. UA=1 ise SSPADD kaydedicisinde gösterilen adres güncellenir. UA=0 ise güncelleme gerçekleşmez.
Sspstat,2(R/W): SPI veya I2C modunda işlem yapilirken okuma mi yoksa yazma mi yapildiginin bilgisini tutan bittir.
SPI modunda; R/W =1 ise okuma, R/W=0 ise yazma yapılıyordur.
I2C modunda;R/W=1 ise veri iletimi yapılmakta, R/W=0 ise veri iletim işi yapılmamaktadır.
Sspstat,3(S): I2C modunda başlangiç bitidir. S biti 1 yapildiginda start biti son bulur,S biti 0 yapildiginda ise start biti son bulmaz.
Sspstat,4(P): I2C modunda sonlandırma bitidir. S biti 1 yapıldığında durdurma biti son bulur,S biti 0 yapıldığında ise durdurma biti son bulmaz.
Sspstat,5(D/A): I2C modunda veri ve adres arasındaki durumları gösteren bittir. D/A=1 ise data alınmıştır yada iletilmiştir. D/A=0 ise adres yollanmıştır veya bir adres alınmıştır.
Sspstat,6(CKE):SPI clock kaynağının türünü belirlemekte kullanılan bittir.
SPI modunda; CKP=0,CKE=1 ise SCK’nın yükselen kenarında veri iletilir
SPI modunda; CKP=0,CKE=0 ise SCK’nın düşen kenarında veri iletilir
SPI modunda; CKP=1,CKE=1 ise SCK’nın düşen kenarında veri iletilir
SPI modunda; CKP=1,CKE=0 ise SCK’nın yükselen kenarında veri iletilir
I2C modunda; CKE=1 ise giriş seviyesi olarak SMBUS izlenir, CKE=0 ise I2C izlenir.
Sspstat,7(SMP): Örnekleme bitidir.
SPI master modda;SMP=1 ise giriş sinyali data çikişinin sonunda örneklenir, SMP=0 ise giriş sinyali çikiş sinyalinin orta noktasinda örneklenir.
SPI slave modda; SMP biti 0 (L) seviyesinde tutulmalıdır.
I2C modunda; SMP=1 ise standart hız için (100KHz ve 1 MHZ) slew rate kontrolü kullanım dışıdır. SMP=0 ise yüksek hız modunda kullanım için (400KHz) slew rate yetkilendirilmiştir.

3.14.3 SSPCON2 Kaydedicisi
Sspcon2,0(SEN): I2C modunda start durum ayarının yapuldığı bittir. SEN=1 ise SDA ve SCL pinlerinde start vaziyeti alınır. SEN=0 ise start durumu yetkisizlendirilir.
Sspcon2,1(RSEN): I2C modunda start durum yineleme bitidir. RSEN=1 ise SDA ve SCL pinlerinde alınan start vaziyeti tekrarlanır. RSEN=0 ise start durum yineleme kullanım dışı olur.
Sspcon2,2(PEN): I2C modunda stop (durdurma) durum yetkilendirme bitidir. PEN=1 ise SDA ce SCL pinlerinde stop vaziyeti başlatilir. PEN=0 ise stop vaziyeti kullanim dişidir.
Sspcon2,3(RCEN): I2C modunda alım yetkilendirme bitidir. RCEN=1 ise I2C modunda veri alım vaziyetine geçilir. RCEN=0 ise alım modu kullanım dışıdır.
Sspcon2,4(ACKEN): I2C modunda eşzamanli ard arda veri alimi yetkilendirme bitidir. ACKEN=1 ise SDA ve SCL pinlerinden eşzamanli ard arda veri iletimi başlatilir ve ACKDT veri biti iletilir. Bu bit donanim tarafinda otomatik olarak temizlenir.
Sspcon2,5(ACKDT): I2C modunda master alım durumunda veri kabul bitidir. ACKDT=1 ise iletilen veri kabul edilmemiştir (alınmamıştır.) .ACKDT=0 ise iletilen veri kabul edilmiştir (alınmıştır).
Sspcon2,6(ACKSTAT): I2C modunda iletim durumunda statü kabul bitidir. ACKSTAT=1 ise alınan veri kabul edilmemiştir. ACKSTAT=0 ise alınan veri kabul edilmiştir.
Sspcon2,7(GCEN): I2C modunda genel çağırma yetkilendirme bitidir. GCEN=1 ise SSPSR’den gelen çağırma adresi (0000h) alındığında kesme etkinleştirilir. GCEN=0 ise genel çağırma adresi yetkisizleştirilir.
3.14.4 SPI (Seri Çevresel Arabirim) Modu
SPI modu 8 bit uzunluğundaki verinin aynı anda eşzamanlı olarak alınmasına ve iletilmesine olanak tanır. SPI modunda haberleşme temel olarak 3 pin ile sağlanmaktadır.
• Serial Data Out (SDO)
• Serial Data In (SDI)
• Serial Clock (SCK)
Bu üç pine ek olarak slave modda işlem yapmak üzere bir dördüncü pin olarak SLAVE SELECT (SS) mevcuttur.
3.14.4.1 SPI İşlemleri
SPI modunda işlem yapabilmek için birkaç ayarin yapilmasi gerekmektedir. Bu ayarlar SSPCON<5:0> ve SSPSTAT<7:6> bitleri üzerindeki değişikliklerle yapılabilir. Bu ayarlar sayesinde SPI modunda aşağıdaki değişiklikler gerçekleştirilebilir.
• Master mod seçimi (SCK clock çıkışı)
• Slave mod seçimi (SCK clock girişi)
• Giriş verisi örnekleme evresi (sonda veya ortada)
• Clock türü (SCK nın düşenkenarı veya yükselen kenarında veri aktarma)
MSSP modülünde yapılan işlemler bir iletme/alma kaydırmalı kaydedici (SSPSR) ve bir tampon kaydedicisine bağlıdır. SSPSR verileri önce MSB biti olmak üzere içerisinde kaydırır. Data alma işlemi tamamlanana kadar SSPBUF’ta tutulan verileri SSPSR’ye yazar. İlk önce SSBUF’tan yollanan verinin 8 bitlik kısmı alınır. Sonra BF biti (SSPSTAT<0>) kontrol edilir ve kesme bayrağı SSPIF (PIR<3>) kurulur. SSPBUF registerine veri yazma durumunda iletim veya data alma işlemi olmasına bakılmadan WCOL (SSPCON<7>) biti kurulur. Yeni bir işlemin yapılabilmesi için program içerisinde bu bitin temizlenmesi gereklidir.
3.14.4.2 SPI G/Ç Yetkilendirmesi
Seri port yetkilendirmesi için öncelikle MSSP yetkilendirme biti SSPEN (SSPCON<5>) kurulmalıdır. Herhangi bir resetleme veya yeni biçimlendirme durumunda SSPEN temizlenmeli SSPCON kaydedicisi yeniden düzenlenmeli ve SSPEN tekrar kurulmalıdır. SDI, SDO, SCK ve SS’ pinlei seri port pinleridir. Bu pinlerin birer seri port elemanı olarak çalışabilmeleri için programdan bazı TRIS kaydedicilerinin ilgili bitlerinin ayarlanması gerekmektedir.
• SDI,SPI modulü tarafından otomatik olarak kontrol edilir.
• SDO için TRISC<5> temizlenmelidir.
• Master modunda SCK için TRISC<3> temizlenmelidir.
• Slave modda SCK için TRISC<3< kurulmalıdır.
• SS’ için TRISA<5> kurulmalıdır..

3.14.5 MSSP’de I2C Modu
MSSP modülünün I2C modunda master ve slave olmak iki durumda çalışma vardır. MSSP modülü I2C modülü için 7 bit ve 10 bit adresleme olanağı sunmaktadır.
SCL ve SDA pinleri giriş olarak kullanildiginda bu pinlere hatalari önlemek için filtre eklentisi yapilir. Bu filtre 100KHz ve 400 KHz arasinda işlem yapar. Bu pinler çikiş olarak kullanildiginda slew rate aygit frekansi tarafindan otomatik olarak kontrol edilir.
I2C modunda 2 pin veri iletimi için kullanılır. Bunlardan SCL clock, SDA veri ucudur. I2C modu yetkilendirildiğinde SDA ve SCL pinleri otomatik olarak kurulur. SSP modülü fonksiyonları SSPEN (SSPCON<5>) bitinin kurulması ile yetkilendirilir.
MSSP modülü içerisinde I2C modunda işlem yapabilmek için 6 adet kaydedici vardir.
• SSP Kontrol Kaydedicisi (SSPCON)
• SSP Kontrol Kaydedicisi2(SSPCON2)
• SSP Statü Kaydedicisi (SSPSTAT)
• Seri Alış/İletim Tamponu (SSPBUF)
• SSP Kaydırmalı Kaydedici (SSPSR)
• SSP Adres Kaydedicisi (SSPADD)
SSPCON kaydedicisi I2C işlemlerinin kontrol edilmesi ne olanak saglar. SSPCON’da bulunan 4 bit (SSPCON<3:0>) I2C modunda ayarlamaları yapar. Bu bitleri ayarlayarak şu seçimler yapılabilir:
• I2C slave modu (7 bit adres)
• I2C slave modu (10 bit adres)
• I2C master modu, clock=osc/4
Herhangi bir I2C modu seçildikten sonra, SCL ve SDA pinleri TRIS bitleri yardımıyla giriş olarak programlanmalıdır. SSPEN bitinin kurulmasıyla I2C modu seçilmiş olur ve SCL-SDA pinleri etkin hale gelir.
3.15 USART (Adreslenebilir Evrensel Senkronize Asenkronize Alıcı Verici) Modülü
USART modül verilerin senkron veya asenkron iletimi için kullanılan ve belli bir protokol dahilinde işlem yapan bir birimdir. Bu modül dahilinde
• Verinin seriden parelele dönüştürülmesi ve parelelden seriye dönüştürülmesi,
• Eşlik bitlerini eklemek ve bu bitleri kontrol etmek suretiyle hata bulmak,
• Başlatma ve durdurma bitlerini eklemek ve bulmak, gibi işlemler yapilabilir.
İşlevsel açıdan, USART alıcı ve verici olarak iki kısma ayrılır. Her iki yönde de veri aktarmadan önce USART denetim kaydedicisine, verinin niteliğini gösterecek bir denetim sözcüğü programlanmalıdır. Örneğin; veri bitlerinin sayısı, eşlik kullanılıp kullanılmadığı, eğer eşlik kullanılmış ise, bunun tek eşlik mi yoksa çift eşlik mi olduğu ve durdurma bitlerinin sayısı gibi. Temel olarak, başlatma biti isteğe bağlı olmayan tek bittir ve her zaman yalnızca bir başlatma biti vardır. Bir başlatma durumu için bu bitin mantıksal 0 seviyesinde olması gerekmektedir.
PIC 16F877’de USART modülünün kontrolü için TXSTA ve RCSTA kaydedicileri mevcuttur.

BU HABER İLGİNİZİ ÇEKEBİLİR  Bilgisayarların Kullanım Alanları

3.15.1 TXSTA Kaydedicisi
Txsta,0(TX9D): İletilen verinin 9. Bitini oluşturur. Bu bit bir parite biti olarak düşünülebilir.
Txsta,1(TRMT): Transmit shift register (TSR=İletim kaydırmalı kaydedicisi) durum bitidir. TRMT=1 ise TSR boştur. TRMT=0 ise TSR dolu vaziyettedir.
Txsta,2(BRGH):Yüksek baud oranı seçim bitidir. BRGH=1 ise yüksek hız, BRGH=0 ise yavaş hız seçilmiş olur.
Txsta,4(SYNC): USART modülünde mod seçim bitidir. SYNC=1 ise senkron (eşzamanli) çalişma modu, SYNC=0 ise asenkron (eşzamanli olmayan) çalişma modu seçilir.
Txsta,5(TXEN): USART modülünde iletim gerçekleştirmek için yetkilendirme bitidir. TXEN=1 ise iletim yetkisi verilir. TXEN=2 ise iletim yetkizi verilmez.
Txsta,6(TX9): 9 bitlik iletim yetkilendirme bitidir. TX9=1 ise 9 bitlik iletim seçilir. TX9=0 ise 8 bitlik iletim durumu seçilir.
Txsta,7(CSRC): Clock kaynağı seçim bitidir. USART eşzamanlı çalışma modunda iken; CSRC=1 ise master mod seçilmiş olur ve clock kaynağı dahilidir,CSRC=0 ise slave mod seçilmiştir ve clock kaynağı olarak harici kaynak kullanılır.

3.15.2 RCSTA Kaydedicisi
Rcsta,0(RX9D): Alınan verinin 9. Bitini oluşturur. Bu bit bir parite biti olarak düşünülebilir.
Rcsta,1(OERR): Bitiş süresi hata bitidir. OERR=1 ise bilgi aliminda belli bir süre içerisinde veri alinamamiştir. OERR=0 ise herhangi bir süre aşimi söz konusu degildir.
Rcsta,2(FERR):Çerçeve hata bitidir. FERR=1 ise çerçeve hatası vardır, FERR=0 ise çerçeve hatası yoktur.
Rcsta,3(ADDEN): Adres ortaya çıkarma durumunu etkinleştirme bitidir. ADDEN=1 ise adres ortaya çıkarma durumu etkinleştirilir, ilgili kesme aktif hale getirilir ve RSR<8> biti=1 olduğunda alış tamponu yüklenir. ADDEN=0 ise adres ortaya çıkarma durumu etkin değildir ve 9. bit parite biti olarak kullanılabilir.
Rcsta,4(CREN): Sürekli alış yetkilendirme bitidir. Asenkron modda CREN=1 ğise sürekli alış etkindir, CREN=0 ise sürekli veri alımı kullanım dışıdır. Senkron modda CREN=1 ise CREN biti temizlenene kadar sürekli veri alımı etkin olur, CREN=0 ise sürekli veri alımı kullanım dışıdır.
Rcsta,5(SREN): Tek veri alımı yetkilendirme bitidir. Master senkron modda SREN=1 ise tek veri alımı etkindir. Bu durumda işlem tamamlandığında bu bitin tekrar sıfırlanması gerekir. SREN=0 ise tek veri alımı kullanım dışıdır.
Rcsta,6(RX9): Veri alma durumu yetkilendirme bitidir. RX9=1 ise 9 bitlik veri alımı formatı seçilir. RX9=0 ise 8 bitlik veri alımı formatı seçilir.
Rcsta,7(SPEN): Seri port yetkilendirme bitidir. SPEN=1 ise seri port aktif yapılır. Bu durumda RC7/RX/DT ve RC6/TX/CK pinleri seri port pinleri olarak tahsis edilir. SPEN=0 ise seri port kullanım dışıdır.
3.15.3 USART Baud Oran Jeneratörü (BRG)
USART modülde clock’un frekansını belirleyen aygıttır. USART baud jeneratörü USART’ ın Asenkronize ve Senkronize modlarını desteklemektedir. BRG 8 bit’lik bir jeneratördür. Bu cihaz 8 bit’lik serbest zamanlı bir clock ile kontrol edilir. Asenk mod’da bit BRGH (TXSTA<2>) ile kontrol edilir. Senkronize mod’da ise bit BRGH istenmez. Verilen ve istenilen baud rate ve Fosc SPBRG (register) değerleri aşağıdaki formül ile ayarlanabilir ve hesaplanabilir.(6)
İstenen Baud oranı = Fosc / (64 (X + 1))
9600 = 16000000 /(64 (X + 1))
X = [25.042]?= 25
Hesaplanan Baud oranı=16000000 / (64 (25 + 1))
= 9615

Hata = (Hesaplanan Baud Oranı-İstenen Baud Oranı )
İstenen Baud Oranı
= (9615 – 9600) / 9600
= 0.16%
3.15.4 USART Asenkronize Durumu
Asenkron iletimde genellikle 8 bitlik iletim formatı kullanılmaktadır. PIC 16F877’de datalar denetleyici üzerinde bulunan osilatörden standart baud ‘un frekans oranına göre iletilir. USART gönderici ve alıcıdan alınan ve iletilen ilk bit LSB’dir. USART iletici ve kaydedici fonksiyonel olarak bağımsız fakat aynı data formatı şeklinde ve baud oranında kullanılır. Baud jeneratörü saat gibi çalışır veya x16 yada x64 lük bitlerin oranı şeklinde üretim yapar ve BRGH biti ile kontrol edilir.. (TXSTAXZ) Bu oranlar hiçbir zaman donanım tarafından desteklenmez fakat sistem içerisinde 9 bitlik veriler halinde sistemde kullanılır. Asenkronize mod’da işemi durdurmak için denetleyici uyku moduna sokulur. Asenkronize mod SYNC bitinin durumuna göre seçilir (TXSTA <4>) USART
3.15.5 USART Asenkronize İletici
USART ileticinin kalbi TSR’dir. TSR ileticiye okuma/yazma işlemleri için geregen veriler tampon tarafindan iletilir.(TXREG) TXREG kaydedicisi TSR ileticiye veri ile beraber yüklenir. Iletilecek olan veriler TSR’nin yüklenmesinden sonra TXREG kaydinin tamamlanmasi ile başlar. TXREG’de ise veri iletimi TXIF (PIR<4>) bitinin müsadesi ile olur. Yani bilgi transferi için daha önceki iletim işleminin tamamlanmiş ve tamponun boşalmiş olmasi gerekmektedir. Yeni veri iletimine başlanmadan evvel TXIF’in mutlaka temizlenmesi gerekmektedir. Bu bitin temizlenmesi ile birlikte yeni veriler TXREG’ yüklenir ve başlatma biti ile beraber veriler iletilmiş olur.

Asenkronize ileticinin kümelenmesi aşagida adim adim açiklanmiştir.
SPBRG kaydedicisi baud rate’in durumuna göre harekete geçer.
Kullanılabilir asenkronize seri bağlantılarının temizlenebilmesi için SYNC bitinin temizlenmesi ve SPEN bitinin yetkilendirilmesi gerekir.
İletim için hazır vaziyete gelinmiş ise TXIE bitinin yetkilendirilmesi gerekir.
Eğer 9 bit’lik çevirici kullanılıyorsa, kümede TX9 biti seçilmelidir.
Bu çeviricinin kullanılabilmesi için TXEN bitinin yetkilenmesi ve de TXIF bitinin kümede yer alması gerekmektedir.
Eğer 9 bitlik çeviri seçilmiş ise TXD bitine 9 bitlik veri yüklenmelidir.
TXREG kaydedicisine bilgi yüklenir ve iletim başlar.
3.16 ADC (Analog Dijital Konvertör) Modülü
PIC 16 F877’de 8 kanallı 10 bit’e kadar çevirme işlemi yapabilen bir analog-dijital çevirici (ADC) modülü bulunmaktadır.
PIC 16F877 üzerindeki ADC modülün çalışması şu şekildedir. Analog giriş örnekle ve tut kondansatörünü şarj eder. Örnekle ve tut kondansatörünün çıkışı dönüştürücünün girişine uygulanır. Dönüştürücü, ardışık yaklaştırma yoluyla bu analog düzeyin sayısal sonucunu üretir. Bu A/D dönüşümde, analog giriş sinyali 10 bitlik sayı karşılaştırma ile sonuçlanır. ADC eşsiz bir özelliğe sahiptir. İşlem yapmazken uyuma moduna geçer. Uyuma modunda ADC’nin saatinde bir iç RC osilatörü üretilmelidir. ADC Modül dört (4) kaydediciye sahiptir.
Bunlar;
A/D Yüksek sonuç kaydedicisi (ADRESH)
A/D Düşük sonuç kaydedicisi (ADRESL)
A/D Kontrol kaydedici 0 (ADCON0)
A/D Kontrol kaydedici 1 (ADCON1)
A/D çeviricinin kontrolünü ADCON0 ve ADCON1 kaydedicileri sağlamaktadır.

3.16.1 ADCON0 Kaydedicisi
Adcon,0(ADON):A/D çeviriciyi yetkilendirme bitidir. ADON=1 ise A/D çevirici açıktır ve işlem yapılabilir. durumdadır. ADON=0 ise A/D çevirici kapalıdır.
Adcon,2(GO/DONE): Eğer ADCON biti de 1 ise A/D çevirici statü biti görevini üstlenir. GO/DONE=1 ise A/D çevirici işlem yapıyor demektir. GO/DONE=0 ise A/D çevirici üzerinde herhangi bir işlem yapılmıyordur.
Adcon,3:5(CHS0:CHS2):A/D çevirici için kanal seçim bitlerini oluşturur. Bu bitlere verilecek degerlerle A/D çevirme için hangi kanalin seçilecegi belirlenir. Daha önceden de belirtildigi gibi PIC 16F877’de A/D çevirici için 8 kanal mevcuttur.
000 = kanal 0, (RA0/AN0)
001 = kanal 1, (RA1/AN1)
010 = kanal 2, (RA2/AN2)
011 = kanal 3, (RA3/AN3)
100 = kanal 4, (RA5/AN4)
101 = kanal 5, (RE0/AN5)
110 = kanal 6, (RE1/AN6)
111 = kanal 7, (RE2/AN7)
Adcon,6:7(ADCS0:ADCS1): A/D çevirici için clock frekansı seçim bitleridir. Bu bitlere verilecek değerler ile A/D çevirme işlemi esnasında kullanılacak frekans değeri bize sunulan değerler içerisinden seçilir.
00 = FOSC/2
01 = FOSC/8
10 = FOSC/32

11 = FRC (Harici bir RC osilasyon kaynağından gelen clock darbeleri kullanılır.)
3.16.2 ADCON1 Kaydedicisi
Adcon1,0:3(PCFG0:PCFG3): A/D çevirici portunun biçimini düzenlemeyi sağlayan bitlerdir. Yani A/D çevirme işleminde kullanılacak pinlerin nasıl davranacağını belirlememize olanak sağlarlar.
Adcon1,7(ADFM): A/D çevirme işlemi esnasinda meydana gelen verinin biçimini belirlemeye yarayan bittir. ADFM=1 ise ADRESH kaydedicisinin MSB kismindaki alti biti 0 kabul edilir ve A/D çevirme sonucunda elde edilen veri ADRESH’ın 2 bitlik LSB kısmına ve ADRESL’ye yazılır. ADFM=0 ise ADRESL’nin Lsb kısmındaki 6 biti 0 kabul edilir ve A/D çevirme sonucu elde edilen veri ADRESL’nin son iki bitine ve ADRESH’a yazılır.
ADRESH: ADRESL kaydedicileri A/D dönüşümün 10 bit sonucunu kapsar. A/D dönüşümü bittigi zaman, sonuç A/D sonuç kaydedicisinin içine yüklenir.
A/D Modülü biçimlendirildikten sonra, dönüştürme işlemi başlamadan önce kanal seçilmiş olmalidir. Analog giriş kanallarinda ilgili TRIS bitleri giriş için seçilmiş olmalidir.
Aşagidaki adimlar, A/D dönüşüm yapmak için takip edilmelidir.
A/D Modülü Konfigürasyonu
• Analog pinler, referans voltajları ve digital I/O konfigürasyonu (ADCON1)
• A/D giriş kanali seçimi (ADCON0)
• A/D dönüşüm saat sekimi (ADCON0)
• A/D Modülünü açma
A/D Kesme Konfigürasyonu
• ADIF bitinin temizlenmesi
• ADIE bitinin ayarlanması
• GIE bitinin ayarlanması
Gerekli zamanı bekleme işlemi
Dönüşümün başlamasi
• GO/DONE bitinin ayarlanması (ADCON0)
A/D dönüşümünün beklenmesi
A/D dönüşüm sonucunu okuma ve kaydetme
Diğer dönüşüm için 1. ve 2. kez adımları tekrarlama
3.16.3 A/D Girdileri İçin Gereksinimler
Belirlenmiş dogrulugu karşilaştirmak için A/D çeviricinin CHOLD kondansatörü giriş gerilimine şarj edilmelidir. CHOLD kondansatörü kaynak empedansi (RS) ve anahtar iç direnci (RSS) üzerinden şarj olur. Anahtar iç direnci, kaynak voltajinin degerine göre degişir. Analog kaynaklar için tavsiye edilen maksimum empedans 10 K? dur. Dönüşüm yapilmaya başlamadan önce analog giriş kanali seçilmiş olmalidir.(6)
Minimum giriş zamani hesabi;
TCAQ=TAMP+TC+TCOFF
TACQ=Minimum girdi zamanı
TAMP=Yükselteç yerleşme zamani
TC= CHOLD şarj zamani
TCOFF= Sıcaklık katsayısı
TACQ = 2 s + 16.47 s + [(50 oC – 25 oC)(0.05 s/ oC)]
18.447 s + 1.25 s
19.72 s
3.16.4 A/D Dönüşüm Saatinin Seçimi
TAD bit başina A/D dönüşüm zamani olarak tanimlanir. 10 bit A/D dönüşüm için maksimum 12 TAD gerekir. TAD seçimi için mümkün olan 4 seçenek vardir.
• 2TOSC
• 8TOSC
• 32TOSC
• Dahili RC Osilatörü
A/D Dönüşümün dogru olarak yapilmasi için , TAD minimum 1,6 S seçilmiş olmalidir.
3.16.5 Analog Port Pinlerini Yapılandırma
ADCON1 ve TRIS kaydedicileri kontrol ve işletim port pinleridir. Analog girişlerin TRU bitlerinin karşilikli olarak ayarlanmasi gerekir. TRIS biti temizlenmiş ise dijital çikiş seviyesine ( VOH veya VOL ) dönüştürme yapilmiş demektir.
3.16.6 A/D Dönüşümü
Analog pinler, analog girdiler olarak yapilandirilir. Analog referans gerilimleri VDD ve VSS dir. A/D kesmesi seçildi ve A/D dönüşüm saat frekansi (FRS) ile sola yanaşik olarak sonuçlandirildi. Dönüştürme RA/0/AN0 pinleri ile gerçekleşti.
movwf adcon0 ;
bcf pir1, adif ; A/D komut bayrak bitleri temizlendi
bsf intcon, peie ; çevresel komutlar etkin
bsf intcon, gie ; tüm komutlar etkin
bsf adcon0, go ; A/D dönüşümü başla
3.16.7 A/D Dönüşümü Sirasinda Uyuma
A/D Modül işletim sirasinda uyuma modunda olacaktir. Bunun için A/D saat kaynagi ayarlanmalidir. (ADCS1:ADCS0=11). RC saat kaynagi seçildigi zaman dönüştürme başlamadan önce A/D modül bir saat çevrimi süresi kadar bekler. Bu uyku talimatina izin verir. Dönüşümdeki tüm sayisal anahtarlama gürültüsü elemine edilmiş olur. Dönüştürme işlemi bittigi zaman GO/DONE biti temizlenir ve sonuç adres kaydedicisi içine yüklenir. A/D kesmesi etkinleştirilirse aygit uykudan uyanir. A/D kesmesi pasifleştirilirse A/D modülü kapali duruma dönse de bir süre açik kalacaktir.
3.16.8 A/D Doğruluk/Hata
Aygıt frekansı RC saatin alçak kullanımı olduğu sistemlerde tercih edilir. Yüksek frekans azaltılırken, TAD aygıt osilatörü türetilmelidir. A/D Dönüştürücü için belirtilen salt doğruluk, miktar ölçme hatası, integral hata, türevsel hata, tam skala hata, sapma hatalarının katkıları toplamını içerir. Herhangi bir kod için ideal geçişe karşı, güncel geçişten maksimum sapma olarak tanımlanır. Verilen bir analog giriş aralığı için sayısal çıkış kodu aynı olur. Bu sayısal kod analog girişten ölçülen miktar kadardır. Analogtan dijitale ölçme işleminde hata tipik olarak ½ LSB kadardır.
3.16.9 Transfer Fonksiyonu
A/D Dönüştürücünün transfer fonksiyonu. analog giriş voltaji/1024 ile bulunur.
3.17 CPU’ nun Spesifik Özellikleri
Mikrodenetleyici’yi diğer işlemcilerden ayıran şey , gerçek zaman uygulamalarının gereksinmeleri ile ilgili özel devreleridir. PIC16F877’ te sistem güvenliğini maksimize eden, dış elemanları ayırarak maliyeti minimize eden , güç tasarrufu, çalışma modu ve kod koruma gibi özellikleri taşımaktadır. Bu özellikler;
• OSC seçimi
• Reset
• Güç kaynağı reseti (POR)
• Yüksek güç timerı (PWRT)
• Osilatör başlangiç Timer i (OST)
• Kesmeler
• Watchdog Timer
• Sleep
• Kod koruma
• ID yerleşimleri
• Devre içi seri programlama
PIC16F877’ te yalnızca konfigrasyon bitleri tarafından kapatılabilen Watchdog Timer mevcuttur. Güvenliği arttırmak için bu kendi RC osilatörünü de çalıştırmaktadır. Yüksek güçte gereken esas gecikmeleri sağlayan 2 Timer mevcuttur. Bunlardan birisi Osilatör Başlangıç Timer ‘ıdır. Bu timer , kristal osilatör durgunlaşıncaya kadar çipi resette tutar. Diğer timer ise yalnızca nominal yüksek güçte 72 ms sabit gecikme üreten Yüksek Güç Timer’ ıdır. Bu güç kaynağı stabilize olurken aygıtı resette tutar. Bu iki çip üzeri Timer ile , uygulamaların çoğu hiçbir reset devrelerini gerektirmemektedir. SLEEP modu çok düşük enerjili alçak güç modunu sunmaktadır. Kullanıcı SLEEP ten çıkmak için dış reset, Watchdog Timer zaman aralığı veya kesmeleri kullanabilir. Bazı osilatör seçenekleri, kısımları uygulamaya yerleştirmek için elde edilmektedir. RC osilatör seçeneği sistem maliyetini, LP kristal seçeneği ise güç sarfiyatını düşürmektedir. Çeşitli seçenekleri seçmek için konfigürasyon bitler seti kullanılmaktadır.
3.18.1 Biçimlendirme (Konfigürasyon) Bitleri
Biçimlendirme bitleri çeşitli aygit işlevlerini seçmek için programlanabilir( ‘0’ olarak okur) yada programlamadan birakilabilir. ( ‘1’ olarak okur) Bu bitler 2007h program bellek yerleşiminde saklanir. 2007h adresi kullanici program bellek biriminin ötesindedir ve özel test/biçim bellek birimine (2000h- 3FFFh) aittir. Bu birime yalnizca programlama sürecinde erişilebilirdir.
Bit 0,1 (FOSC0,FOSC1): Osilatör seçme bitleridir. Yapılacak uygulamada hangi tür osilatör kullanılacağını tayin eder. (RC,XT,HS,LP) FOSC0 ve FOSC1 bitlerinin aldığı durumlara göre kullanılacak osilatör türleri belirlenir.

Bit 2 (WDTE): Watchdog timer’in kontrol edildiği bittir. Bu bitin 1 olması WDT’ı devreye sokarken, 0 olması ile WDT devreden çıkarılır.
Bit 3():Power up timer kontrol bitidir. Bu bitin 1 olması ile PWRT devreden çıkarılır, 0 olması ile ise PWRT devreye sokulur.
Bit 6 (BODEN): Brown out reset özelliğine ait yetkilendirme bitidir. BODEN=1 ise BOR kullanım dışı, BODEN=0 ise BOR etkindir.
Bit 7 (LVP): Düşük gerilim programlamasi için yetkilendirme bitidir. LVP=1 ise RB3/PGM pinin PGM özelligi devreye girer. LVP=0 oldugunda ise RB3 özelligi kullanilabilir.
Bit 8(CPD): Bellek EEPROM verisi kod koruması için yetkilendirme bitidir. CPD=1 ise kod koruması devre dışıdır. CPD=0 ise kod koruma etkindir ve EEPROM içerisine kayıtlı veriye bir teşebbüste bulunulamaz.
Bit 9(WRT):Flash program belleğine yazma yetkilendirme bitidir. WRT=1 ise korumasız program belleğine EECON kontrolünde veri yazılabilir. WRT=0 ise korumasız program belleğine EECON kontrolünde veri yazılamaz.
Bit 11(DEBUG): Devre üzeri seri programlama yetkilendirme bitidir. DEBUG=1 ise RB6,RB7 normal G/Ç işlemlerinde kullanilir. DEBUG=0 ise RB6, RB7 aygit içerisine program yerleştirme işleminde kullanilir.
Bit 12:13 (CP0:CP1): Yapılan uygulamanın kopyalamaya veya herhangi bir teşebbüse karşı kod koruma özelliğinin konması işlemini kontrol eden bitlerdir. Bu bitlerin aldığı farklı değerler ile farklı kod koruma seçenekleri söz konusu olmaktadır.
11 = Kod koruma kapalı
10 = 1F00h tan 1FFFh’a kadar kod koruması
01 = 1000h tan 1FFFh’a kadar kod koruması
00 = 0000h tan 1FFFh’a kadar kod koruması

BÖLÜM-4

4-PIC ASSEMBLY VE PIC 16F877 PROGRAMLAMA TEMELLERİ
4.1.Assembler ve PIC Assembly
4.1.1 Assembler
Bir text editöründe assembly kurallarına göre yazılmış olan komutları PIC’in anlayabileceği hexadecimal kodlara çeviren (derleyen) bir programdır. Microchip firmasının hazırladığı MPASM bu işi yapan assembler programıdır. Assembler’e çoğu zaman compiler (derleyici) de denir.
4.1.2 PIC Assembler
Assembly dili, bir PIC’e yaptırılması istenen işlerin belli kurallara göre yazılmış komutlar dizisidir. Assembly dili komutları İngilizce dilindeki bazı kısaltmalardan meydana gelir. Bu kısaltmalar genellikle bir komutun çalıştırılmasını ifade eden cümlenin baş harflerinden oluşur. Böylece elde edilen komut, bellekte tutulması kolay (mnemonic) bir hale getirilmiştir. Örneğin:BTFSC (Bit Test Skip if Clear): İlgili biti test et, eğer sıfırsa bir sonraki komutu atla, anlamında kullanılan İngilizce cümlenin kısaltmasıdır.
4.2 PIC Assembly Dili Yazım Kuralları
PIC assembly programlarının bilgisayar ortamında yazılabilmesi için notepad, edit gibi yazım aracılarına ihtiyaç vardır. Microchip firmasının PIC uygulamaları için özel olarak hazırlamış oduğu MPLAB programını kullanmamız halinde bu gibi yazım aracılarına ihtiyaç duyulmaz. Çünkü MPLAB içerisinde assemply PIC assembly dilinde program yazmak için text tabanlı bir yazım editörü ve ayrıca MPASM mevcuttur.
MPASM assembler programının yazılan komutları doğrun olarak algılayıp, PIC’in anlayabileceği hexadecimal kodlara dönüştürebilöesi için şu bilgilerin program içerisinde özel formatta yazılması gerekir.
• Komutların hangi PIC’e ait olduğu (PIC 16F877,PIC 16F84, PIC 16C71…vb)
• Programın bellekteki hangi adresten başlayacağı.
• Komutların ve etiketlerin neler olduğu
• Programın bitiş yeri
4.2.1 Program Yazımında Noktalı Virgül (;) Kullanımı
Baş tarafinda (;) bulunan satirlar, assembler tarafindan hexadecimal kodlara dönüştürülmez. Bu satirlar programin geliştirilmesi esnasinda hatirlatici açiklamalarin yazilmasinda kullanilir. Ayrica program bölümlerni birbirinden ayirmak için (——- veya =======) çizgileri kullanmak, programi görsel olarak daha okunur halegetirdigi gibi bu çizgiler arasina uyarilar ve açiklamalar da yazilabilir. Bu sayede programda bir hata veya sorun meydana geldiginde takip işlemi daha rahat yapilir.
4.2.2.1 Etiket
PIC belleğindeki bir adresin atandığı, hatırlamayı kolaylaştıran kısaltmalardan meydana gelen sembolik işaretlere etiket denir. Örneğin portc etiketi, PIC 16F877’nin kaydedici dosyası belleğindeki C portunun bulunduğu adresi temsil eden etikettir. Etiketler program içerisinde 1. kolana yazılır.
Portc equ h’07’ yazıldıktan sonra C portunun hangi adreste olduğunu akılda tutmaya gerek yoktur. Programın herhangi bir yerinde portc etiketi kullanıldığında,C portunun adresi olan h’07’ yazılmış gibi işlem görülür.
Birinci kolona yazılan ve adres atanmayan etiketler de kullanılabilir. Örneğin basla ve devam bu tip etiketlerdendir. Bu etiketler program akışını istenilen yere dallandırmak için kullanılırlar. Bu tip etiketlerin adresi özel kaydedici adresi gibi fiziksel bir adres değildir. Bu şekilde tanımlanan bir etikete assembler otomatik olarak adres verir. Bu adresi programcının bilmesi gerekmez.
Etiket tanımlarken uyulması gereken kurallar şunlardır.
• Etiketler birinci kolona yazılmalıdır.
• Etiketler bir harfle veya alt çizgi ( _ ) ile başlamalidir.
• Etiketler içerisinde Türkçe karakterler kullanılamaz.
• Etiketler bir asembly komutundan oluşamaz.
• Etiketlerin içerisinde alt çizgi, rakam, soru işareti bulunabilir.
• Etiketler en fazla 31 karakter uzunluğunda olabilir.
• Etiketlerde büyük/küçük harf duyarlılığı vardır. (“Devam” diye tanımlanmış bir etiketi program içerisinde “devam” yazarak kullanmak mümkün değildir.)
4.2.2.2 Atama Deyimi (EQU)
EQU deyimi PIC 16F877’nin belleğindeki bir hexadecimal adresi belirlenen bir etikete atamak için kullanılır. Aşağıda bu atama deyimine birkaç örnek gösterilmiştir.
portb equ h’06’
say1 equ h’10’
portc equ h’07’
4.2.2.3 Sabitler
PIC assembly dilinde hexadecimal,binary ve decimal sayılar birer sabittir. Sabitler movlw, sumlw, andlw gibi bazı komutların içerisinde ve atama işlemlerinde kullanılırlar. Sabitler program içerisinde kullanılırken hexadecimal olduuna dair “h” veya 0x.., binary olduğuna dair “b”, decimal olduğuna dair “d” karakterleri ile birlikte kullanılmalıdırlar.
movlw b’01000111’ ;binary sabit
sublw d’126’ ;decimal sabit
sublw h’0F’ ;hexadecimal sabit
movlw 0x0F ;hexadecimal sabit
4.2.2.4 ORG Deyimi
ORG İngilizcedeki “origin” kelimesinden gelmektedir. ORG deyimi program içerisinde iki amaç için kullanılır.
• Program komutlarının hangi adresten itibaren başladığını gösterir.
org h’00’
• PIC 16F877’nin interrupt (kesme) alt programlarının başlangıç adresini belirlemede kullanılır.
org h’04’
ı ekler.

4.2.4 Program Bölümleri
Bu kısımda programın metin belgesi olarak nasıl yazıldığı konusuna değinilecektir. Yazılan programı temel olarak 5 kısımda toplayabiliriz.
• PIC serisinin tanıtılması ve kaynak dosyanın belirtilmesi
• Kaydedici tanımlamalarının yapılması
• Bit tanımlamalarının yapılması
• Giriş ve çikiş pinlerinin belirlenmesi
• Pic’in yapacağı işlemlerin yazılması (Brogram bloğu)
4.2.4.1 Pic Serisinin Tanıtılması Ve Kaynak Dosyanın Belirtilmesi
Piyasada değişik isimlerle değişik işlemleri gerçekleştiren PIC’ler satılmaktadır. Her bir PIC’in değişik yapı ve tanımlamaları vardır. Bu tanımlamaların kayıtları ise PIC’in özellikleri göz önünde tutularak yazılmış kaynak dosyalarda tutulur. Ancak her bir seriye ait özellikleri tek tek bilme imkanımız çok azdır. Bu nedenle PIC üreten firmalar üretilen elemana ait özellik ve kaynak dosyaları hazır halde bize sunmaktadır. Bizler bu kaynak dosyalardan kullanacağımız PIC’e ait olanını alabilir ve kendimize göre değişiklikler yaparak kullanabiliriz. Ancak yapılacak değişiklikler standart özellikleri etkilememelidir. Bir kaynak dosyada temel olarak standart register tanımlamaları (W, F, STATUS, EEDATA, EEADR,PORTA,PORTB….gibi), standart bit tanımlamaları (WREN ZERO, CARRY….gibi) ve var ise kendimize ait macrolar bulunmaktadır.
Her program metninin baş tarafinda yer almasi gereken seri tanitimi ve kaynak dosya belirtme işlemi aşagidaki şekillerde gerçekleştirilebilir.
list p=16f877
#include <16f877.ınc>
Yukarıdaki tanımlamanın ilk satırında kullanılacak pic’in serisi belirtilmiştir.2. satırda ise program metninin bulunduğu klasör içerisinde aranması istenen kaynak dosya (INCLUDE dosyası) belirtilmiştir.
4.2.4.2 Kaydedici Tanımlamalarının Yapılması:
Yukarıda bize sunulan kaynak dosyaların içerisinde standart kaydedicilerin tanımlandığından söz etmiştik. Ancak çoğu çalışmada tanımlanan bu kaydediciler yetersiz kalmaktadır ve yeni RAM bölgeinden kaydediciler tanımlanması gerekmektedir. Bu durumda kullanılmak istenen kaydedici bellek bölgesinin adresi ile eşleştirilip bir isim verilerek program içerisinde belirtilebilir ve ilerleyen işlemlerde rahatlıkla kullanılabilir. Ancak bu işlem gerçekleştirilirken kaynak dosya içerisinde tanımlanan standart adresleri bilmek ve tanımlayacağımız kaydedicilerin adresleini bu adreslerin dışında seçmemiz gerekmektedir.
4.2.4.3 Bit Tanımlamalarının Yapılması
Program içerisinde programdaki işlemleri daha rahat anlamak ve yazim esnasinda hatayi azaltmak için çikiş pinlerine ve entegre içerisinde kontrolü saglayacak bitlere kolay anlaşilabilecek isimler verilebilir. Isimlendirilecek bu bitlerin ise programda belirlenmesi gerekir. Yani verilecek ismin hangi kaydedicinin hangi bitine ait oldugu programa yazilmalidir. Bu kisimda yine kaynak dosyada kullanilan bazi standart bitler karşimiza çikar. Bitleri isimlendirir iken bu standart bitleri göz önünde bulundurmak gerekir.
4.2.4.4 Giriş ve Çikiş Tanimlamalari
PIC 16F877 giriş ve çikişin yapildigi pinler PORTA, PORTB, PORTC, PORTD, PORTE pinleridir. Bu portlara ait tüm pinleri hem giriş hem de çikiş olarak kullanabiliriz. Ancak program içerisinde pinlerin hangisini giriş için hangisini çikiş için kullandigimizi belirtmek gerekir. Çikiş için tanimlanan bir pine gerilim girişi yapmak bu pinin bozulmasina neden olabilir. Bu yüzden işlemlerde kullanilmayan pinleri programda giriş olarak tanimlamak faydali olmaktadir.
4.2.4.5 PIC’in Yapacağı İşlemlerin Yazılması
PIC’in yapacağı işlemleri yazmak demek komutları bir algoritma veya akış şemasına göre programda yerlerine yazmak demektir
4.2.4.6 Pic Komutları
PIC, assembler dili adı verilen ve toplam 35 komuttan oluşan programlama diliyle programlanır. Bu komuları yazmak için basit bir editör kullanabiliriz. Bu Windows’da notpad, DOS’da edit programları olabilir. Asıl önemli olan yazdığımız bu komutları makine diline çevirmektir. Text dosyası biçiminde kaydedilmiş olan assembly dili komutlarını makine diline çeviren MPASM’nin hem DOS altında hemde windows altında çalışan versiyonu bulunmaktadır. Bu program //www.microchip.com adresinden download edilebilir. Bizim kullanacağımız MPLAB programında hem metin editörü hem de MPASM assembler programı tümleşik olarak bulunur.
İsterseniz şimdi PIC e assembler komularını görmeye başlıyalım. Başlamadan önce şunu belirtmekte fayda var. PIC kullanılan saat (clock) frekansını dörde bölüp, bu sürede komutu işler. Yani PIC’e saat darbelerini üreten Kristal veya herhangibir zamanlayıcı 4 MHz frekanslı darbeler üretiyorsa, PIC herbir komutu 1 usn (mikrosaniye) de işliyor demektir. Genelde PIC16F84 için 4 MHz lik kristaller kullanılır. Bu kısa bilgiyi verdikten sonra assembly komutlarını anlatmaya başlayabiliriz.
MPASM assembler programının yazılan komutları doğru olarak algılayıp, PIC’in anlayabileceği hex kodlarına dönüştürebilmesi için şu bilgiler program içine özel formatta yazılması gerekir;
• Komutyların hangi PIC16XX için yazıldığı,
• Programın bellekteki hangi adresten başlayacağı,
• Komutların ve etiketlerin neler olduğu,
• Programın bitiş yeri.
Şimdide kodları tek tek inceleyelim,
Kullanılan Kısaltmalar:
Kısaltma Anlamı Örnek
n Sabit değer h’20’, d’10’, b’00001100′ gibi…
f Bizim oluşturduğumuz saklayıcı
d yön (direction), değeri 0 (w) veya 1 (f)olabilir. ADDWF durum1,f ; W ile durum1’i AND işlemine tut, değeri f olduğu için durum1 saklayıcısına yaz.
S.R.E.B Status Registerinde Etkilenen Bayraklar
C Taşma,ödünç biti. En sondaki 7. bitde taşma olduğunda 1 olur.
DC Taşma, ödünç biti. 3. bitde taşma olduğunda 1 olur.
Z Zero(Sıfır) biti. Bir aritmetik veya mantıksal komutun sonucu 0 (sıfır) olduğunda=1 olur.
TO ve PD Bu bitler status reg. anlatılırken işlenecek.
ADDLW n C,DC,Z W’ ya n değeri eklenir. Sonuç W’ye yazılır.
ADDWF f,d C,CD,Z W içeriğine f saklayıcısını ekler ve sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
Örnek: ADDWF DAT_IN,W
ANDLW n Z n değeri W yazmacıyla AND’lenir Ve sonuç W yazmacına yazılır.
Örnek: ANDLW B’00000011’en alttaki iki bit hariç bütün bitleri kapatır.
ANDWF f,d Z W ve f dosyasını AND işlemine tabi tutar ve sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
Örnek: ANDWF TEMP W TEMP dosyasının içeriğini yalnız bırakarak AND fonksiyonunun sonucunu W yazmacına yerleştirir.
BCF f,b yok F adresinde bulunan dosya yazmacındaki b bitini 0 yap.
Örnek: BCF STATUS , ZERO
BSF f,b yok F adresinde bulunan dosya yazmacındaki b bitini 1 yap.
Örnek: BSF PORTA , BITO
BTSFC f,b yok F adresindeki yazmaçla b bit’ini test et ve eğer 0’sa bir sonraki komuta atla . 1’se izleyen komuta geç.
Örnek: BTFSC PORTB , SWITCH1
BTFSS f,b yok F adresindeki yazmaçta b bit’ini test et ve eğer 1’se bir sonraki komuta atla. Eğer 0’sa onu izleyen komuta geç.
Örnek: BTFSS STATUS , CARRY
CALL k yok k etiketli bir alt rutine bir çağrı yapılmıştır. W yazmacının içeriği gerektiğinde bir alt rutin içinde kullanılmak üzere transfer edilecektir.
Örnek: CALL TEMP_CONVERT.
CLRF f Z f adresindeki içeriği yazmacın sıfırlanacak şekilde temizle veya reset et
CLRW Z W yazmacının içeriğini sıfırlayacak şekilde temizle veya reset et
CLRWDT TO,PD Watchdog zamanlayıcı yazmacı sıfıra ayarlanmıştır.
COMF f,d Z F dosyasının içeriğini tersine alır ve sonucunu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
DECF f,d Z F dosyasından 1 çıkarır ve sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
DECFSZ f,d yok F dosyasını içeriğini bir azalt ve sonuç sıfırsa izleyen komutu atla,sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
GOTO k yok Program k etiket / adresine sıçrar.
INCF f,d Z F dosyasının içeriğini 1 artırır ve sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
INCFSZ f,d yok F dosyasının içeriğini 1 artır ve sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.,sonuç sıfırsa bir sonraki komutu atla.
Örnek: INCFSZ TEMP ,W GOTO LOOP GOTO END_LOOP
IORLW n Z N değeri W yazmacıyla OR’lanır Ve sonuç w yazmacıyla yazılır.
Örnek: IORLW OC4II
IORWF f,d Z W yazmacının içeriği ve f dosyasını OR işlemine tabi tutar ve sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
Örnek: IORWFCOUNT, F OR fonksiyonunun sonucunu COUNT dosyasına yerleştirir.
MOVLW n yok N değeri W’ya taşınır.
Örnek: MOVLW 36II
MOVF f,d Z F dosyasının içeriğini taşır/kopyalar ve sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
MOVWF f yok W yazmacının içeriğini f adresindeki yazmaca kopyala.
Örnek: MOVWF TEMP
NOP yok Hiçbir şey yapma
Örnek: NOP ; 1saat çevrimi harcar
RETFIE yok Bir kesmeden geri döner.
RETLW n yok W yazmacında bir n değeriyle alt rutinden geri dön.
Örnek: RTLW 20H; W yazmacında 20H ile +1 adresini çağırmaya geri döner.
Örnek: RETLW 20H; alt rutinin çağrıldığı adres +1 adresine W yazmacında 20H değerini taşıyarak geri döner
RETURN yok W yazmacının içeriğini olduğu gibi bırakarak bir alt rutinden geri döner.
RLF f,d C Tüm bit’leri birer sola kaydır veya taşı. Bit 7 taşıma bit’i de ve taşıma bit’i 0 bit’i olacaktır. Sonuç hedef d’ye yerleştirilir.
RRF f,d C Tüm bitleri birer sağa kaydır veya taşı.0 bit’i taşıma bit’i taşıma
SLEEP TO,PD PIC uyuma veya bekleme durumuna getirilmiştir. Yazmaç içerikleri dondurulmuştur ve PIC işletim akımının bir kısmını çeker. Uyuma durumundan çalışma durumuna geçerken 16C5x ailesi reset vektörüne atlar. 16Cxx ailesiyse izleyen kod hattında devam eder.
SUBLW n C,DC,Z W değeri n’den çıkarılır ve sonuç W’ ya yerleştirilir.
SUBWF f,d C,DC,Z F dosyasından W yazmacı içeriğini çıkarır ve sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
SWAPF f,d yok f saklayıcısının içerisindeki ilk dört bit ile son dört biti yer değiştirir. d’nin değerine göre sonuç W veya f saklayıcılarına yazılır.
XORLW deger Z W içeriğini deger ile birlikte XOR işlemine tabi tut. sonuç w ye yazılır.
XORWF f,d Z W içeriği ve f dosyasını XOR işlemine tabi tutar Ve sonucu hedef d’nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.

KAYNAKÇALAR:
• www.microchip.com
• www.picpro.com
• www.turkengineer.com
• www.eproje.com
• www.antrak.org.tr
• Pic programlama el kitabı (N.Gardner)
• Adım Adım Pic Microprogramlama (Y. Bodur)


Yorum yapabilmek için giriş yapmalısınız.


HIZLI YORUM YAP

Veri politikasındaki amaçlarla sınırlı ve mevzuata uygun şekilde çerez konumlandırmaktayız. Detaylar için veri politikamızı inceleyebilirsiniz.