MİKROİŞLEMCİLER

BÖLÜM 1   MİKROİŞLEMCİLER/MİKRODENETLEYİCİLER(PİC)
MİKROİŞLEMCİ       

            Merkezi işlem birimi olarak adlandırılır.( Central Processing Unit - CPU ) Bir mikroişlemci yalnız başına kullanılamaz. Çalışabilmesi için aşağıdaki bileşenlere ihtiyaç duyar.
  1. Giriş/Çıkış Ünitesi (I/O Unit)
  2. Bellek (RAM)

Şekil 1.1 Mikro İşlemci iç yapısı

Mikroişlemcileri Birbirinden Ayıran Özellikler

Kelime Uzunluğu

Mikroişlemcinin her saat darbesinde işlem yapabileceği bit sayısına kelime uzunluğu
denir.  İşlemciler bu süre zarfında komutları yorumlar veya bellekteki veriler üzerinde işlem
yapar. İşlenen veriler işlemcinin özelliğine göre 4-bit, 8-bit, 16-bit, 32-bit ve 64-bit uzunluğunda olabilir. Kelime uzunluğu veri yolu uzunluğuna eşittir. İşlemci, her saat darbesinde işleyebildiği kelime uzunlu ile tanımlanır. Intel 8086 işlemcisinin kelime uzunluğu 16-bit olduğu için 16-bitlik mikroişlemci denir. İşlemciler dört, sekiz, on altı, otuz iki ve altmış dört bit olarak sınıflandırılır.

Şekil 1.2 Çeşitli kelime uzunlukları

Eğer komutlar veya veriler küçük gruplar hâlinde işlenirse hızda azalma meydana gelir.  İşlenen veri sayısının artması aynı sürede yapılan işin miktarını artırmakta ve yapılan işin süresini azaltmaktadır.
16-bitlik bir işlemci ile 16-bitlik iki sayının toplanması, çarpılması veya karşılaştırılması bir adımda yapılırken 8-bitlik işlemcide bu işlem daha fazla adımda gerçekleştirilmektedir. Tablo 1.1’de mikroişlemciler ve kelime uzunlukları görülmektedir.

 Komut İşleme Hızı

Mikroişlemcilerin çalışması için saat sinyallerine ihtiyaç vardır. İşlemci (CPU) her saat sinyalinde bir sonraki işlem basamağına geçer. İşlemcinin hızını incelerken saat  frekansına ve komut çevrim sürelerine bakmak gerekir. Saat frekansı mikroişlemciye dışardan uygulanan ya da işlemcinin içinde bulunan osilatörün frekansıdır. Komut çevrim süresi ise herhangi bir komutun görevini tamamlayabilmesi için geçen süredir. Şekil 1.2’de komut çevrim süresi gösterilmiştir

           
Şekil 1.3 Komut çevrim süresi

Her işlemcinin komut çevrim süresi farklı sayıda saat çevrimleri ile tanımlanmaktadır. Tablo 1.2’de işlemcinin komut çevrim süreleri birbirine denk olan komutlara bakarak karşılaştırılma yapılmıştır.

Tablo 1.2 Karşılaştırmalı hız tablosu

Tabloda görüldüğü gibi, sadece saat frekansına bakarak değerlendirme yapmak yanıltıcı olabilmektedir. Saat frekansı her zaman gerçek çalışma frekansını yansıtmasa da, bir mikroişlemcinin hızını doğrudan etkilemektedir. Bir mikroişlemcinin hızını artıran temel unsurlar şöyle sıralanabilir:
           
  • CPU tasarım teknolojisi
  • Kelime uzunluğu
  • İşlemci komut kümesi çeşidi
  • Zamanlama ve kontrol düzeni
  • Kesme altyordamlarının çeşitleri
  • Bilgisayar belleğine ve giriş/çıkış aygıtlarına erişim hızı

 Adresleme Kapasitesi

Bir işlemcinin adresleme kapasitesi, adresleyebileceği veya doğrudan erişebileceği bellek alanının büyüklüğüdür. Bu büyüklük işlemcinin adres hattı sayısına bağlıdır. Bu hattın sayısı tasarlanacak sistemde kullanılabilecek bellek miktarını da belirlemektedir. Motorola 6800, Zilog Z-80, Intel 8085 ve Mostek 6502 mikroişlemcileri 16 adres hattına sahiptir. 16-bitlik adres hattına sahip bir mikroişlemcinin adres büyüklüğü 2^16 ile 65536 olacaktır. Bu miktar yaklaşık 64KB ile ifade edilir.
     
Şekil 1.4 64 KB’lık 6502 işlemcisi

Eğer çok büyük bellek gerektiren bir sistem tasarlanacaksa işlemcinin adres hattı büyük seçilmelidir. Bundan sonraki bilgiler daha çok 6502 mikroişlemci ağırlıklı olacaktır.

 Kaydedici Sayısı

Bir programcının assembly diliyle program yazımı sırasında en çok ihtiyaç duyduğu geçici bellek hücreleri kaydedicilerdir. Mikroişlemcilerde kaydediciler, genel amaçlı kaydediciler ve özel amaçlı kaydediciler olmak üzere iki grupta toplanır. Tüm mikroişlemcilerde bu gruplara dahil edebileceğimiz değişik görevlere atanmış, farklı özellikte, sayıda kaydediciler bulunur. Bu kaydediciler 8, 16, 32 ve 64-bitlik olabilir.
Kaydedicilerin sayısının programcının işinin kolaylaştırmasının yanında programın daha sade ve anlaşılır olmasını da sağlar. Her mikroişlemcinin kendine has yapısı ve kaydedici isimleri vardır. Herhangi bir mikroişlemciyi programlamaya başlamadan önce mutlaka bu kaydedicilerin isimlerinin ve ne tür işlevlere sahip olduklarının iyi bilinmesi gerekir. Şekil 1.4’te 6502 mikroişlemcisi görülmektedir.

Farklı Adresleme Modları

Bir komutun işlenmesi için gerekli verilerin bir bellek bölgesinden alınması veya bir bellek bölgesine konulması ya da bellek–kaydedici veya kaydedici–kaydedici arasında değiştirilmesi için farklı erişim yöntemleri kullanılır. Mikroişlemcinin işleyeceği bilgiye farklı erişim şekilleri, ‘adresleme yöntemleri’ olarak ifade edilir. Kısaca adresi tarif yollarıdır.
Herhangi bir bellek bölgesindeki veriye çok farklı şekillerde erişilebilmek için farklı yolların olması programcıya esneklik sağlar. Mesela, 6800 ve 8085 işlemcilerde 7’şer, Z-80 işlemcisinde 10 ve 6502 mikroişlemcisinde 13 adet adresleme modu vardır. 6502işlemcisinde temelde 51 komuta vardır. Bu komutlar 13 adresleme yoluyla birlikte 150civarına ulaşmaktadır. Bu da programcının elinde kullanabileceği çok komut demektir. Tümbu işlemcilerde esasta aynı olan adresleme modları bazılarında uygulamada değişmektedir.
Adresleme modlarını meydana getiren bazı adresleme türleri aşağıda sıralanmıştır.
  • Doğrudan adresleme
  • Dolaylı adresleme
  • Veri tanımlı adresleme
  • Kaydedici adresleme
  • Mutlak adresleme
  • Göreceli adresleme
  • İndisli adresleme
  • Akümülatör ve imalı adresleme
  •  
 İlave Edilecek Devrelerle Uyumluluk

Mikroişlemcili sisteme eklenecek devrelerin en azından işlemci hızında çalışması gerekir. Sisteme ilave edilecek bellek entegrelerinin hızları işlemci ile aynı hızda olması tercih  edilmelidir. Aynı şekilde sisteme takılan giriş çıkış birimlerinin (Şekil 1.4) hızları ve performansları mikroişlemci ile aynı veya çok yakın olmalıdır. Sisteme takılan birimlerin
hızları mikroişlemciye göre düşükse mikroişlemcinin hızı diğer elemanlardaki yavaşlıktan
dolayı düşer.



Şekil 1.5 CPU’nun giriş çıkış birimleri

Mikroişlemciyi Oluşturan Birimler ve Görevleri

Şekil 1.6  6502 Mikroişlemcisinin genel ve özel amaçlı kaydedicileri

Kaydediciler

Kaydediciler, daha önce de bahsedildiği gibi, genel ve özel amaçlı olmak üzere iki gruba ayrılır. Bunlardan başka programcıya gözükmeyen (ilgilendirmeyen) kaydediciler de vardır. (IR, DAR, MAR ve MBR gibi). Genel amaçlılara 6502 işlemcisinde; akümülatör, X indis ve Y indis kaydedicisi girmektedir. Özel amaçlılar ise, PC, SP, Bayraklar, DR gibi kaydediciler girmektedir. (Şekil 1.6) Aşağıda bunlardan bazıları anlatılacaktır.

Akümülatör

Akümülatörler (ACC ya da A olarak da tanımlanabilir), bilgisayarın aritmetik ve mantık işlemleri sırasında depo görevi yapan önemli bir kaydedicidir. Eğer kaydediciler bir sistemde sekreterya olarak düşünülürse, akümülatör bu sistemde baş sekreter olarak yerini alır.
Ara değerlerin üzerinde tutulması, sisteme gelen verinin ilk alındığı yer, belleğe veya dış dünyaya gönderilecek verilerin tutulduğu yer olarak görev yapar. Bu yüzden, işlemcinin A kaydedicisini hedefleyen komutları çoktur. Bazı işlemcilerde B kaydedicisi de yardımcı akümülatör olarak kullanılır.

İndis Kaydedicileri

X ve Y olarak tanımlanan indis kaydedicilerinin temelde üç görevi vardır. Hesaplamalarda ara değerlerin geçici tutulmasında, program döngülerinde ve zamanlama uygulamalarında bir sayıcı olarak ve bellekte depolanmış bir dizi verinin üzerinde bir indisçi olarak kullanılmaktadır. Bazı işlemcilerde sadece tek indisçi olabilir.

Program Sayıcı (PC)

Mikroişlemcinin yürütmekte olduğu program komutlarının adres bilgisini tuttuğu özel amaçlı bir kaydedicidir. Bilindiği gibi bir programı oluşturan komutlar ve veriler normal bellekte saklıdır. Bilgisayarın çalışması sırasında hangi komutun hangi sırada kullanılacağının bilinmesi gerekir. Bu görevi program sayıcı (PC) yerine getirir. Program sayıcının bit genişliği adres yolu genişliği kadardır. Eğer işlemcinin 16-bit adres hattı var ise PC=16 bit, işlemcinin 32-bit adres hattı var ise PC=32 bit büyüklüğünde olur.

                                  

Şekil 1.7 PC’in işleme adımları

Bellekten alınan her komut kodundan sonra alınacak yeni komut kodunun adresi program sayıcıya otomatik olarak işlemci tarafından yüklenir. Komut çevrimi, PC’nin yeni adresi adresyoluna koyması ile başlar. Bunun ardından da ilgili kontrol sinyali gönderilir. Bellekten gelen her bilgiden sonra PC, kontrol devresinden aldığı işarete uyarak adres satırını 1 arttırır. (Şekil 1.7) Böylece bilgilerin bellekten işlemciye düzenli bir şekilde gelmesi sağlanır.

Durum Kaydedicisi(Status Register) (Bayraklar)

Durum kaydedicisi 8-bitlik bir kaydedicidir. Bu kaydedicinin her bir biti ayrı ayrı anlam ifade eder. Mikroişlemci içinde veya dışardan yapılan herhangi aritmetiksel, mantıksal veya kesmelerle ilgili işlemlerin sonucuna göre bu bitler değer değiştirir. Bir işlem sonucunda bu bitlerin aldığı değere göre program yön bulur. Programcı bu bitlerde oluşacakdeğerlere göre programa yön verebilir. Şekil 1.7’te 6502 mikroişlemcisine ait 1-baytlık durum kaydedicisinin bit şekli göstermektedir.

                       
Şekil 1.8 6502 bayrak kaydedicisi

Kabul edilen terminolojiye uyarak, eğer bir bayrağa karşılık olan bit 1 ise söz konusu bayrak kuruldu, eğer bit 0 ise söz konusu bayrak silindi denir.

Carry (elde bayrağı-C): Elde / borç bayrağıdır. 8-bitlik bir işlem sonucunda dokuzuncu bit ortaya çıkıyorsa elde var demektir. Bu durumda C bayrağı mantıksal 1 olur. Bu bayrak biti programcı tarafından kurulur ya da silinebilir (CLC, SEC). Ayrıca bazı komutlar tarafından test edilebilir (BCC, BCS).

Zero (sıfır bayrağı-Z): Sıfır bayrağı, aritmetik ve mantık işlemi sonucunda kaydedici içeriği sıfır ise Z = 1’e kurulur. Aksi durumda sıfırlanır (Z = 0).

Interrupt disable (kesme yetkisizleştirme bayrağı-I): Mikroişlemci normal durumda komutları işlerken bir kesme (IRQ) geldiğinde bu kesme bu bayrak biti ile engellenebilir. Eğer bu bit komutlar (SEI) mantıksal 1 yapılırsa gelen kesmeler göz önüne alınmaz. Ancak bu bayrak mantıksal 0 olduğunda kesme dikkate alınır ve kesme hizmet yordamına dalınır. Yani bu bayrak biti, normal işleyiş sırasında bir kesme geldiğinde kabul edilip edilmeyeceğini belirler. Programcı bunu komutla yapar. NMI kesmesi bu bayrak için kullanılmaz.

Decimal (ondalık bayrağı-D): Bu bayrak 1 olduğunda aritmetik işlemler BCD modunda yapılırken 0 olduğunda ikilik modta yapılır. Bu işlem eğitim ve uygulama açısında programcıya büyük kolaylıklar sağlar.

Overflow (taşma bayrağı-V): Bu bayrak aritmetik işlemlerde, eğer işlem +127 ile -128 aralığını geçiyorsa bir taşma meydana gelir ve V bayrağı 1 olur. Diğer yandan, yine benzer işlemlerde, eğer pozitif bir sayı ile negatif bir sayı üzerinde işlem yapılıyorsa ve sonuç pozitif çıkması gerekiyorken negatif çıktıysa, bu bayrak 1 olur. Taşma bayrağı işaretli sayılarla işlem yapılırken devreye girer.

Negative (negatif bayrağı-N): 8-bitlik bir işlemcide 7.bit MSB biti olarak bilinir. Eğer MSB biti bir işlem sonucunda 1 ise N bayrağı 1’e kurulur. Eğer MSB biti 0 ise kaydedicisideki değer pozitif demektir ki, N bayrağı 0 olur.
Bayraklardaki 4. bit B (Break) olarak tanımlanmış olup, program durduğunda otomatikman 1 olur. 5. bit ileride kullanılmak üzere boş (+5V) bırakılmıştır. Farklı mikroişlemcilerde birbirine benzer bayraklar olmasına rağmen faklı bayraklarda olabilir.

Yığın İşaretçisi (Stack Pointer)(SP)

RAM belleğin herhangi bir bölümü yığın olarak kullanılabilir. Yığın mikroişlemcinin kullandığı geçici bellek bölgesi olarak tanımlanır. Yığın işaretçisi, yığının adresini tutan özel amaçlı bir kaydedicidir. SP adres bilgisi göstereceği için 16-bit uzunluğundadır.
           
                       
Şekil 1.9 SP’nin işleme adımları

Bu kaydediciye programın başında yığının başlangıç adresi otomatik olarak atanır.İşlemci tarafından yığının başlangıç adresi SP’ye yüklendikten sonra artık belleğin bu bölgesi depo benzeri bir görev yürütür. Yığına veri girişi yapıldıkça yığın göstericisinin değeri de yapısına gore değişir. (Şekil 1.9).
Yığına her veri girişinde yığın göstericisinin değeri bir azalmakta, yığından her veri çekildiğin de ise yığın göstericisinin değeri otomatik olarak bir artmaktadır. Yığına gönderilen veri yığın göstericisinin işaret ettiği adresteki bellek hücresine yazılır. Yığından veri çekilirse yığın göstericisi bir önceki verinin adresine işaret edecek şekilde bir azalacaktır. Mikroişlemci işlediği ana programdan alt programa dallandığında veya bir kesme sinyali ile kesme hizmet programına dallandığında mevcut kaydedicilerin içeriklerini ve dönüş adresini saklayabilmek için otomatik olarak verileri ve adresleri yığına atar. Alt programdan veya kesme hizmet programından ana programa geri dönülmesi durumunda, ana programda kaldığı yerin adresini ve kaydedicilerdeki verileri kaybetmemiş olur.



Aritmetik ve Mantık Birimi (ALU)

Mikroişlemcinin en önemli kısmını aritmetik ve lojik birimi (ALU) oluşturur (Şekil 1.10). Bu ünite kaydediciler üzerinde toplama, çıkarma, karşılaştırma, kaydırma ve döndürme işlemleri yapar. Yapılan işlemin sonucu kaydediciler üzerinde saklanır. Bazen de yalnızca durum kodu kaydedicisini etkiler. ALU’daki bir işlem sonucunda durum kodu kaydedicisindeki bayrakların birkaçı etkilenebilir veya hiçbiri etkilenmez. Programcı için çoğu zaman ALU’da yapılan işlemin sonucunda etkilenen bayrakların durumu daha önemlidir. Gelişmiş mikroişlemcilerin içindeki ALU’lar çarpma ve bölme işlemlerini yapabilmektedir. ALU’nun işlem yapabileceği en büyük veri, mikroişlemcideki kaydedicilerin veri büyüklüğü ile sınırlıdır. 8 bitlik mimariye sahip bir mikroişlemcideki ALU en fazla 8 bitlik sayılar üzerinde işlem yapar.
                                  
                                  
Şekil 1.10 Aritmetik ve mantık birimi
ALU’nun yapabildiği işlemler iki grupta toplanır.

  • Aritmetiksel işlemler

ALU’da yapılan aritmetiksel işlemler mikroişlemcinin yapısına göre çeşitlilik gösterebilir. 8-bitlik mimariye sahip bir mikroişlemcide toplama, çıkarma, çarpma, bölme işlemleri ve ondalıklı sayılarla matematiksel işlemler yapılabilmektedir. Gelişmiş işlemcilerde büyük ondalıklı sayılarla işlem yapmak için ayrıca matematik işlemci mevcuttur.

  • Mantıksal işlemler

· Mantıksal çarpma VE işlemi
· Mantıksal toplama VEYA işlemi
· Özel VEYA, XOR işlemi
· Değil, NOT işlemi
· Karşılaştırma (=, =<, =>, <> gibi) ve kaydırma gibi işlemler bu ünitede
yapılır.
· Sağa veya sola kaydırma ve döndürme işlemleri
· İçerik artırma veya azaltma işlemleri
Bütün bu işlemler teknolojik yapısı değişik kapı ve flip-flop’lardan oluşan bir sistem tarafından yürütülmektedir.


 Kontrol Birimi

Kontrol birimi, sistemin tüm işleyişinden ve işlemin zamanında yapılmasından sorumludur. Kontrol birimi, bellekte program bölümünde bulunan komut kodunun alınıp getirilmesi, kodunun çözülmesi, ALU tarafından işlenmesi ve sonucun geri belleğe konulması için gerekli olan kontrol sinyalleri üretir.

Merkezi İşlemci Biriminde İletişim Yolları

Mikroişlemcide işlenmesi gereken komutları taşıyan hatlar yanında, işlenecek verileri taşıyan hatlar ve kesme işlemlerini kontrol eden sinyalleri taşıyan hatlar bulunur. İşlenecek verileri işlemciye yollamak veya işlenen verileri uygun olan birimlere aktarmak için aynı hatlardan faydalanılır. Tüm bu yollara iletişim yolları adı verilir.

                                  
Şekil 1.11 Mikroişlemcili sistemde birimler arasında iletişimi sağlayan yollar

Veri Yolu(Data Bus)

Merkezi işlem biriminden bellek ve giriş / çıkış birimlerine veri göndermede ya da bu birimlerden işlemciye veri aktarmada kullanılan hatlar, veri yolu olarak isimlendirilir. Veri yolu genişliği, mikroişlemcinin yapısı, mikroişlemci kaydedici genişliği ve kullanılan kelime
uzunluğu ile doğrudan ilişkilidir. 8-bitlik mikroişlemcilerde veri yolu 8 hattı içerirken, 16-
bitlik işlemcilerde 16 hattı içerir. Mikroişlemciye işlenmek üzere iletilen veriler veri yolu
üzerinden iletildiği ya da mikroişlemcide işlenen veriler veri yolu üzerinden ilgili birimlere
yollandığı için, veri yolunda iki yönlü iletişim mümkün olmaktadır.

                                              
Şekil 1.12 Bellek biriminden işlemciye veri yolu kullanarak veri aktarımı

Bellekte bulunan ve CPU tarafından işlenmesi istenilen veriler, veri yolu üzerinden iletilir. (Şekil 1.12) Bellekteki verilerin hatlara yerleştirilmesinde veya hatlardan gelen verilerin CPU’ya aktarılmasında, verileri kısa süre tutmak amacıyla kullanılan tamponlardan faydalanılır. Tampon olarak kaydediciler kullanılır. CPU’da işlenen verilerin harici elemanlara iletilmesinde veya harici elemanlardan gelen verilerin CPU’ya gönderilmesinde ara birim olarak giriş/çıkış (G/Ç) birimi kullanılır. CPU ile G/Ç birimi arasında veri iletiminde, veri yolundan faydalanılır. Veri yolu üzerinden G/Ç birimine gelen veriler, tamponlar kullanılarak veri yolu üzerinden klavye, monitör, yazıcı ve tarayıcı gibi birimlere
gönderilir veya bu birimlerden gelen bilgiler CPU’ya aktarılır.

                                                          
Şekil 1.13 İşlemcide işlenen verilerin, veri yolu kullanılarak G/Ç birimine iletilmesi

Adres Yolu(Adress Bus)

Verinin alınacağı (okunacağı) veya verinin gönderileceği (yazılacağı) adres bölgesini temsil eden bilgilerin taşınmasında kullanılan hatlar, adres yolu olarak isimlendirilir. Adres yolu, tek yönlüdür ve paralel iletişim sağlayacak yapıdadır.

                       
Şekil 1.14 Verilerin iletileceği bölgenin adres yolu kullanılarak tespiti

CPU’da işlenen verilerin, bellekte saklanması veya diğer elemanlara gönderilmesi gerekebilir. Bu durumda, verinin saklanacağı veya gönderileceği yerin adresi, mikroişlemci içerisindeki PC yardımı ile adres yolu üzerine yerleştirilir. Yerleştirilen bilginin temsil ettiği adres bölgesi dahili bellekte olabileceği gibi, harici bellekte de olabilir. Yerleştirilen bilginin kodu çözülerek ilgili adres bölgesi bulunur ve bulunan adres bölgesindeki veri, veri yoluna konur. Yapılan bu işlemlerin düzgün ve kontrollü olarak gerçekleştirilmesinden, zamanlama ve kontrol birimleri görevlidir.
Adres yoluna yerleştirilen bilgi, mikroişlemcinin kapasitesine ve adreslenebilecek bölge sayısına bağlı olarak değişir. Bir mikroişlemci tarafından adreslenebilecek maksimum bellek kapasitesi ‘2n’ formülü ile hesaplanabilir. ‘n’ adres hattı sayısını gösterir.
Bu durumda;
2^16 = 65536 Bayt = 64 KBayt adres bölgesi,
2^20 =1048576 Bayt = 1MBayt adres bölgesi ve
2^32 = 4 GBayt adres bölgesi adreslenebilir.

Mikroişlemci veri yolu ve adres yolu farklı sayıda hattı içerebilir. Veri yolu 8 hattan oluşan bir mikroişlemcili sistemde, adres yolu 16 hattan (16 bit) oluşabilir. Günümüz mikroişlemcilerinde sürekli veri yolları artırılırken adres yolları hattını büyük oranda korumaktadır. Adres yolları hatlarının fazla artmamasının sebebi, şu anda kullanılar adresleme kapasitesinin çok yüksek ve ileriye yönelik olmasındandır.
Kontrol Yolu(Control Bus)

Mikroişlemcili sistemde bulunan birimler arasındaki ilişkiyi düzenleyen sinyallerin iletilmesi amacıyla kullanılan hatlar kontrol yolu olarak adlandırılır. Her bir mikroişlemciye ait komut kümesi ve belirli amaçlar için kullanılan sinyallerin farklı olması sebebiyle, her mikroişlemcide farklı sayıda hattı içeren kontrol yolu bulunabilir. Kontrol yolunda bulunan
sinyaller üç farklı işlemi gerçekleştirmek için kullanılır:

Sinyal seçimi: Sistemde kullanılacak sinyallerin ve sinyallerin uygulanacağı yerin belirlenmesi işlemini gerçekleştiren sinyaller.

Yön tayini: Sistemdeki verinin ne yöne gideceğini belirleyen sinyaller (okuma veya yazma).

Zamanlama: Yapılacak işlemlerin sırasını ve zamanlamasını belirleyen sinyaller.

Kontrol yolunda bulunan hat sayısı, mikroişlemcinin bit sayısına bağımlı değildir. Kontrol yolunu oluşturan hatların mikroişlemci içersinde ağ şeklinde yayılması sebebiyle, kontrol yolu terimi yerine kontrol hatları terimi kullanılabilir. Mikroişlemcili sistemdeki birimlerin çalışması, kontrol hatları üzerinden iletilen tetikleme sinyalleri ile yönlendirilir. Mesela, bir bellekten veri okunacağı zaman, ilgili bellek entegresine aktif olmasını sağlayacak yetkilendirme (CS-Chip select) sinyali ile birlikte, okuma işlemi için gerekli uygun R/W sinyalinin uygulanması gerekir.

                                  
Şekil 1.15 Kontrol sinyallerinin kontrol yolu kullanılarak bellek birimine iletimi













Mikrodenetleyicinin Tanımı

Bir mikroişlemcili sistemi meydana getiren temel bileşenlerden mikroişlemci, bellek ve G/Ç birimlerinin, bazı özellikleri kırpılarak (azaltılarak) tek bir entegre içerisinde üretilmiş biçimine mikrodenetleyici (microcontroller) denir. Denetim teknolojisi gerektiren uygulamalarda kullanılmak üzere tasarlanmış olan mikrodenetleyiciler, mikroişlemcilere göre çok daha basit ve ucuzdur. Endüstrinin her kolunda kullanılan mikrodenetleyiciler; otomobillerde, kameralarda, cep telefonlarında, fotokopi ve çamaşır makinelerinde, televizyonlarda, oyuncak vb cihazlarda sıklıkla kullanılmaktadır.

Genel Özellikleri
·         Programlanabilir paralel giriş/çıkış
·         Programlanabilir analog giriş/çıkış
·         Seri giriş/çıkış
·         PWM- pulse width modulation
·         Interrupt ( Harici ve timer ile )
·         RAM, ROM gibi bellek üniteleri
·         Harici bellek arabirimi
·         Timer

Mikrodenetleyicilerin Sağladığı Üstünlükler

·         Mikroişlemcili sistemin tasarımı ve kullanımı mikrodenetleyicili sisteme göre daha karmaşık ve masraflıdır.
·         Mikrodenetleyicili bir sistemin çalışması için elemanın kendisi ve bir osilatör kaynağının olması yeterlidir.
·         Mikrodenetleyicilerin küçük ve ucuz olmalası, bunların tüm elektronik kontrol devrelerinde kullanılmasını sağlamaktadır.
·          
Mikrodenetleyici Çeşitleri

Günümüzde mikrodenetleyiciler, basit ve ucuz üretim maaliyetleri dolayısıyla bir çok firma tarafından üretilmektedir. Bunlardan en önemlilerine; Intel firması tarafından üretilen 8051 serisi, Motorola tarafından üretilen 68HC11 serisi ve Microchip tarafından üretilen ve kısaca PIC denilen 16X/18X serisi örnek olarak verilebilir.












Mikrodenetleyici Dış Görünüşleri

           

                                                             

Mikroişlemci ve Mikrodenetleyici Arasındaki Farklar

Bir mikroişlemci görevini yerine getirebilmesi için mutlaka, verilerin saklanacağı bellek birimine, dış dünyadan veri alış-verişinin düzenli yapılmasını sağlayan giriş/çıkış birimine ihtiyaç duyar. Bunlar bir mikroişlemcili sistemde ayrı ayrı birimler (entegreler) şeklinde yerini alır. Bundan dolayı mikroişlemcili sistemlere çok-entegreli sistemler denilir. (Şekil 1.17) Bilgisayar gibi mikroişlemcili sistemlere verilen bir örnekte, bir bilgisayarın bir çamaşır makinesinde veya cep telefonunda kullanılması elbette mümkün olmayacaktır. Bilgisayar aynı anda milyonlarca işi yapabildiğinden ve çok yer kapladığından böyle yerlerde kullanılması mantıklı olmaz ve maliyetli olur. Bundan dolayı, sistemi meydana getiren elemanların birçok özelliklerinden feragat edilerek ve bir entegrede birleştirilerek, mikroişlemcilerin yeni türevleri oluşturulmuştur.

                                  
Şekil 1.17  Mikroişlemcili sisteminin temel bileşenlerinin blok diyagramı

Mikrodenetleyicilerde tüm bu birimler (işlemci, bellek ve G/Ç, bunlara ADC ve DAC gibi sinyal dönüştürücü elemanlarda eklenebilmektedir) bir arada bulunmaktadır. Bundan dolayı mikrodenetleyiciler tek-entegreli sistemler olarak anılır (Şekil 1.18).

                                   

Şekil 1.18 Mikrodenetleyici sisteminin temel bileşenlerinin blok diyagramı
Mikrodenetleyici tüm birimlerin birarada tek bir entegrede olması işlem hızına ve performansa doğrudan yansımaktadır.

PIC (Perihepral Interface Controller)

PIC bir mikrodenetleyicidir. PIC ile harici bir cihaz sürülebilir. Port çıkışları gerekli akım değerini sağlayabildiğinden LED, displey, röle  gibi cihazları başka arabirim kullanmadan sürebilir. Tüm bu özellikleri ile PIC çok yaygın kullanım alanına kavuşmuştur.
Kullanılacağı sistemin durumuna uygun nitelikte bir PIC’in seçilmesi maliyet ve devre karmaşıklığı bakımından önemlidir.
Mikrodenetleyici ’ler (MCU)  bir çeşit MİB (CPU ) olarak görülebilirler. MCU’lar  MİB’ den daha yavaş ve daha az bellek adresleme yeteneğine sahiptirler, fakat gerçek zamanlı kontrol problemlerinin gerçeklenmesi için tasarlanmış  olduklarından hem daha ucuz  hem de kullanımları daha kolaydır. MİB ile MCU arasındaki en önemli fark kullanımları için gerekli olan harici donanımlardır. MCU hemen hemen her zaman, bir kristal veya osilatör dışında hiçbir harici donanıma ihtiyaç duymaz. CPU ise harici parçalar kullanılmadan hiçbir iş yapamaz. Örneğin paralel iletişim arbirimi, seri iletişim arabirimi, bellek gibi pekçok ek donanıma ihtiyaç duyar.    
Bazı standart MİB’ler sahip oldukları hız ve komut kümeleri ile MCU paketleri içerisinde bulunabilirler. Bu şekilde CPU çok daha kullanışlı ve ek özelliklere sahip bir MCU olarak kullanılabilir.
Mikrodenetleyicinin dört temel özelliği vardır.
·         Hız
·         Bit uzunluğu
·         Bellek kapasitesi
·         Mikrodenetleyicilerde bulunabilecek temel özellikler

Hızı belirleyen, kullanılan saat işaretinin frekansıdır. Mikrodenetleyiciler için bu hız farklılık gösterir ve işlemcilerin kullanım hızlarının da farklı olmasına neden olur. Karmaşık komut kümesine sahip bilgisayarlarda,  (Complex  Instruction  Set Computers (CISC)) bir komutun işlenmesi için gerekli olan saat çevrimi her komut için farklılık gösterir. Bazı komutlar bir saat çevriminde tamamlanırken, bazı komutlar ise düzinelerle ifade edilebilecek saat çevrimleri sonunda tamamlanabilmektedir. Bu nedenle CISC mimarisine sahip bilgisayarların ne kadar hızlı olduklarını söylemek pek kolay değildir. RISC (Reduced Instuction Set Computers) mimarisine sahip bilgisayarlar daha az ve daha basit işlemler gerçekleştirebilen komut kümesine sahiptir. Genellikle bu komutlar bir veya birkaç saat çevriminde gerçekleşebilir. Bir CISC komutunun gerçeklenebilmesi için çok sayıda RISC komutunun kullanılması gerekebilir.
Bit uzunluğu Mikrodenetleyicinin bir adımda işleyebileceği bit sayısı ile belirlenir. Mikrodenetleyiciler 4,8,16,32 bit uzunluklu olarak imal edilirler, fakat günümüzde hala en fazla kullanılanları 8 bitliktir. Kişisel bilgisayarlarda bellek MB ile ölçülürken mikrodenetleyicilerin ROM boyutları KB i ile ölçülmektedir. RAM değerleri birkaç yüz byte civarlarındadır.  Mikrobilgisayarlarda bellek Von Neuman mimarisine göre organize edilmektedir. Yani bütün program ve veriler aynı bellekte tutulmaktadır. Bunun aksine pekçok Mikrodenetleyicilerin bellek organizasyonunda Harvard mimarisi temel alınmaktadır. Bu mimaride ise program ayrı bir bellekte tutulurken veriler ve geçici değişkenler ayrı bir bellekte tutulurlar. Bu sadece fonksiyonel bir ayrım değildir,  aynı zamanda işlemcinin ayrı belleklere daha verimli olarak erişimini de sağlar.
  
Kişisel bilgisayarlar programlarını manyetik hard disklerinde, disketlerde ya da optik CD-ROM‘larda saklarlar. Bu programların çalıştırılması gerektiğinde programlar bulundukları ortamdan RAM’a aktarılarak burada çalıştırılırlar. Mikrodenetleyiciler ise programlarını farklı tipte belleklerde saklarlar. Uygulanan gerilim kesildiğinde programın kaybolduğu ve düzenli olarak yenilenmesi (refresh) gereken DRAM ler yerine Mikrodenetleyiciler program kodlarını kalıcı bir bellekte tutarlar.

ROM(Salt okunur bellek)
Salt Okunur Bellek (Read Only Memory-ROM) içerisinde bulunan verilerin okunmasına izin veren fakat verilerin değiştirilmesine izin vermeyen bir bellek türüdür. Salt okunur belleklerin programlanması özel tekniklerle gerçekleştirilir. Bu tür bellekler genellikle arabalarda, mikrodalga fırınlarda, çamaşır makinalarında vs. kullanılan Mikrodenetleyici sistemlerinde yer alırlar.

OTP Rom(One Time Programable Rom)
Bir defa programlanabilen bu tür ROM’lar programlama işinin üretici firma yerine müşteri tarafından yapılmasına olanak sağlar. Özel programlama donanımı ile, programcı kodunu bir defaya mahsus olmak üzere ROM’a yükler.
           
EPROM
Silinebilir/Programlanabilir ROM (Erasable/Programmable ROM) kullanıcıya ROM’u silip tekrar programlama olanağı sunar. Silme işlemi ultraviole ışığı ile 5 dakika ile yarım saat arasında bir süre zarfında gerçekleştirilir.

EEPROM
Elektriksel olarak silinebilir PROM’un (Elecrically-Erasable PROM) kullanımı daha kolaydır çünkü programlama ve silme işlemleri aynı anda ve yavaş bir ultaviole ışığı ile silme süreci olmadan yapılabilir. EPROM ve EEPROM belirli bir programlama kapasitesine sahiptir. Yaklaşık olarak 1000 defa programlama yapılabilmektedir.


FLASH
Flash belleklerde bir çeşit EEPROM’dur. EEPROM’un programlanması için özel bir programlama cihazına ihtiyaç duyulur. Flash bellekler ise kullanıldığı devreden ayrılmadan ve  lojik-seviye gerilimi kullanılarak programlanabilirler. Yaklaşık olarak 1000 defa programlama yapılabilmektedir. Flash belleğine yazmak, okumaktan çok daha fazla zaman aldığından dolayı Flash bellekleri RAM olarak kullanılamazlar.

SRAM
Statik RAM(SRAM) de dinamik RAM(DRAM) gibi kalıcı olmayan bir bellek türüdür. SRAM sahip olduğu bilgiyi gerilim kaynağı var olduğu sürece kaybetmez. Hatta küçük bir pil ile içersindeki bilgiyi yıllarca muhafaza edebilir. DRAM ise SRAM de olduğu gibi bir gerilim kaynağına ve bunun yanında bilgileri muhafaza etmek için sabit bir saat işaretine ihtiyaç duyar. Pek çok Mikrodenetleyici bir dahili SRAM’e sahiptir. Hatta bazıları harici olarak SRAM eklenmesine olanak sağlarlar. 

 Mikrodenetleyicilerde bulunabilecek temel özellikler

Bir Mikrodenetleyici’nin pek çok farklı özelliği bulunabilir. Burada standartlaşmış bazı özellikler üzerinde durulacaktır.
USART
Asenkron Seri İletişim Arabirimi(Universal Serial Asynchronous Receiver and Transmitter: USART), standart iletişim protokollerini kullanarak işlemcinin dış birimlerle iletişimini sağlar. Bu özellik Mikrodenetleyicinin bir harici aygıt ile iletişim yapmasının gerektiği durumlarda kullanılır. Örneğin bir LCD monitör ile ya da bir başka bilgisayar ile USART üzerinden iletişim sağlanabilir. Bu şekilde bir arabirime sahip olmayan bir yongaya harici olarak SPI üzerinden bir USART eklenebilir ya da USART görevini yerine getirebilecek bir yazılım kullanılabilir.

SPI
Harici sistemlerle iletişimde USART kullanıldığı yerlerde Seri Çevre Arabirimi (Serial Peripheral Interface-SPI) diğer yongalarla iletişimde kullanılır. SPI portlarına sahip pek çok Mikrodenetleyici çeşidi vardır, USART, A/D çeviriciler, ve hatta bellek yongaları bunlardan bazılarıdır. Paralel iletişim kadar hızlı olmamasına rağmen SPI iletişiminin kullanımı kolaydır. Bütün adresleme ve veri hatlarının kullanılmasının yerine 3 ya da 4 hat ile iletişim sağlanabilir.

I2C (Inter Integrated Circuit)
Sadece iki hat kullanarak SPI ile aynı görevi yapar. I2C protokolü birden fazla aygıtın aynı anda iletişim yapabilmesine olanak sağlar. SPI da ise aynı anda sadece iki aygıt iletişim halinde bulunabilir.

CAN(Controller Area Network)
CAN, otomobillerde kullanılmak üzere tasarlanmış bir seri ağ iletişim projesidir. Farklı bir alanda SPI ve I2C ile aynı görevi yerine getirir.      

I/O Ports(Giriş/Çıkış)
Sayısal Giriş/Çıkış bütün denetleyiciler için çok önemli bir özelliktir. Bu nedenle üretici firmalar sayısal G/Ç port sayısını mümkün olduğunca artırmaya çalışmaktadırlar. Her bir G/Ç hattı için yonga üzerinde bir ayak bulunmalıdır. Örneğin 8 ayaklı bir yongada sadece birkaç tane G/Ç hattı bulunabilir. 40 ayaklı bir yongada ise genellikle dört tane 8 bitlik G/Ç hattı bulunur(toplam 32 bit G/Ç).
G/Ç hatları genellikle programlanabilirler. Programlanabilir G/Ç işlemlerinde G/Ç uçlarının, giriş mi yoksa çıkış mı olarak kullanılacağı yazılımla belirlenir. Bunun için herbir porta  ait kontrol saklayıcılarının uygun şekilde koşullanmaları gereklidir.

ANALOG GİRİŞ
Gerçek dünyadaki işaretler genellikle bilgisayarın anlayamayacağı sürekli işaretler-den oluşur. Bu nedenle fiziksel dünyadaki analog değişimlerin izlenebilmesi için Mikrodenetleyici’lerde analog dijital çeviriciler(ADC) ya da analog karşılaştırıcılar bulunur.
Eğer Mikrodenetleyicinin sağladığı ADC uygulama için yeterli değilse dışarıdan harici olarak bir ADC SPI portu üzerinden Mikrodenetleyiciye eklenebilir.

ZAMANLAYICI/SAYICI 
Zamanlayıcı Mikrodenetleyicinin dahili saat işareti ile çalışır. Bu saat işareti ölçeklenerek farklı saat işaretleri ile de kullanılabilir(1/2,1/4,1/16,….,1/256). Ayrıca taşma durumunda kesme üretmeleri için kontrol saklayıcıları kullanılarak çeşitli ayarlar yapılabilir. Zamanlayıcılar belirli aralıklarla yapılması gerekli işlerin bulunduğu uygulamalarda hayati bir önem taşırlar.
Sayıcılar da zamanlayıcılarla aynı şekilde çalışırlar fakat sayıcılarda saat işareti yerine dışarıdan gelecek bir işaret ile sayma işlemi gerçekleştirilir. Sayıcı içeriği kaç darbe alındığının belirlenmesi için yazılımla okunabilir. Çoğu Mikrodenetleyici bir ya da daha fazla zamanlayıcı/sayıcı ya sahiptir.


KESMELER (INTERRUPT)
Kesme, Mikrodenetleyicinin çalışmasını kesip özel bir program kodunun çalıştırılmasını sağlayan bir işarettir.. Kesmeler dışarıdan gelebileceği gibi içeriden de kesme alınabilir. Kesme hizmet programına ait program parçasının ilk adresi bellekte belirli bir yerde tutulur. Buna, kesme vektörü adı verilir. Kesme hizmet programları genellikle küçük bir işi yerine getirmek için kullanılırlar. Kesme alındığında kesmeye gidilmeden önce geri dönüş adresi genellikle donanımla yığında saklanır. Eğer kesme hizmet programında kullanılacak saklayıcılar varsa bunlar da yığında saklanmalıdır. Kesme hizmet programına gidildiğinde genelde kesme kendisini pasifleştirerek sürekli bir kesme alınmasını engeller. Kesme sona erdiğinde ise program kesmenin alındığı noktadan itibaren çalışacak şekilde tekrar hazır hale getirilir. Eğer saklayıcılar yığına atılmış ise doğru bir sırada geri çekilmeleri gereklidir. Kesmeden dönüşte aynı zamanda pasifleştirilmiş olan kesme tekrar etkin hale getirilir.
Kesmenin kullanılmaması halinde Mikrodenetleyici pek çok yararlı iş yapabilecekken gereksiz yere bazı olayların yoklanması ile meşgul olacaktır. Aynı zamanda yoklama yazılımla yapıldığından çok kısa süreli darbelerin kaçırılması olasılığı da vardır.


WATCHDOG TIMER
Mikrodenetleyiciler gerçek dünyada çalışan aygıtlardır. MCU da herhangi bir sebepten dolayı bir sorun olması halinde MCU bunu kendi başına aşabilmelidir. Gözetleme zamanlayıcısı etkin durumda olduğunda uygulamanın düzgün bir şekilde devam edip etmediği kontrol altında tutulur. Yazılımcı tarafından belirlenmiş süre içerisinde eğer program belirli bir noktaya ulaşmamış ise bir sorun olduğu anlaşılır ve gözetleme zamanlayıcısının süresi aşıldığı için kesme üretilir. Böylece sistem sıfırlanarak programın baştan çalışması sağlanır ve sorun çözümlenmiş olur.

W KAYITÇISI

PIC’lerin içerisinde akümülatör veye geçici depolama alanı olarak düşünebileceğimiz W registeri (mikroişlemcideki A kaydedicisine benzer işleve sahip) vardır. PIC içerisinde gerçekleşen aritmetik işlemler ve atama işlemleri bu kaydedici vasıtasıyla gerçekleştirilir.

                                  
Şekil 1.19 W kaydedicisi

Giriş/Çıkış Pinleri İle Bağlantısı

Besleme Gerilimi

PIC’in besleme gerilimleri 5 ve 14 nu.lu pinlerden yapılır. Kullanılan osilatör frekansına göre besleme gerilimi değişebilir. 4 Mhz’lik osilatör kullanılmışsa besleme gerilimi 2V - 5.5 V arasında uygulanabilir. Tüm frekanslar için en uygun besleme gerilim değeri 5 V’tur. 5 nulu uç Vdd=+5V’a, Vss ucu da şaseye bağlanır. PIC’e ilk defa enerji verildiğinde meydana gelebilecek gerilim dalgalanmalarını önlemek için Vdd ile Vss arasına dekuplaj kondansatörü bağlanmalıdır.

Şekil 1.20 PIC besleme gerilimi
Saat Uçları ve Osilatör Çeşitleri

PIC’lerde saat (clock) sinyal girişi için kullanılan iki ucu vardır. Bunlar OSC1  ve OSC2 ’dir. Bu uçlara farklı tipte osilatörlerden elde edilen saat sinyalleri uygulanır.



RC Osilatör

PIC’in denetlediği elektronik devredeki zamanlamanın hassas olmadığı durumlarda kullanılır. Belirlenen değerden % 20 sapma görülebilir.

                                  
Tablo 1.3 R-C değer aralığı  

                                                          
                                                  
Şekil 1.21 RC bağlantı şeması

XT Osilatör
Kristal veya seramikle yapılmış genel amaçlı saat osilatörüdür.

                                              
Tablo 1.3 Kristal ve seramik değer aralığı


Şekil 1.22 Kristal veya seramik bağlantı şeması





HS Osilatör
Kristal veya seramikle yapılmış yüksek hızlı saat osilatörüdür.

                                  
Tablo 1.4 Kristal ve seramik değer aralığı
  
Şekil 1.23  Kristal veya seramik bağlantı şeması


LP osilatör
Kristalle yapılmış düşük güçlü saat osilatörüdür.

                                              
Tablo 1.5 Kristal değer aralığı

Şekil 1.24 Kristal bağlantı şeması

Reset Uçları ve Reset Devresi
PIC16F84’ün reset ucu 4 nu.lu pinde bulunan MCLR ayağıdır. PIC16F84 besleme uçlarına gerilim uygulandığı anda EEPROM belleğindeki programın başlangıç adresinden itibaren çalışmaya başlar. Programın herhangi bir anında 4 nu.lu MCLR ucu 0 V yapılınca program başlangıç adresine geri döner.

                          
Şekil 1.25   reset devresi

I/O Pinleri ve Port Yapısı
Program yazılırken istenilen pin, giriş veya çıkış pini olarak atanabilir. B portunun 8 ucu PIC içerisinde pull-up yapılmış etki gösterir.Port uçlarından herhangi birisi çıkış olarak yönlendirildiğinde o uçtaki pull-up direnci otomatik olarak iptal olur.

I/O Pinleri Akım Sınırları
PIC’ler belleğinde bulunan programı çalıştırması sırasında çıkış portlarına 0 veya 1 bilgisi gönderir. Portlara 0 bilgisi gönderildiğinde çıkış portu max 25 mA’lik giriş (sink) akımı çeker. Portlara 1 bilgisi gönderildiğinde çıkış portu 25mA’lik çıkış (source) akımı verilebilir.


                                              

                                               Şekil 1.26 Sing ve source akım
I/O Port Pinlerine Kumanda Edilecek Devre Elemanlarının Bağlanması

I/O portlarından geçebilecek 25 mA’lik giriş akımı veya 25 mA’lik çıkış akımı ile led,
lcd, transistör, tristör ve triyak’lar doğrudan sürülebilir çıkış akımının yetmediği durumlarda
yükselteç devreleri kullanılmalıdır.

                                              
Şekil 1.27  I/O port pinlerine kumanda edilecek devre elemanlarının bağlanması

PIC 16F877’nin popüler piclerle karşılaştırılması

ÖZELLİK
PIC16F873
PIC16F874
PIC16F876
PIC16F877
En yüksek çalışma frekansı
20MHz
20MHz
20MHz
20MHz
FLASH Program hafızası
(14-bit words)
4K
4K
8K
8K
RAM  (bytes)
192
192
368
368
EEPROM (bytes)
128
128
256
256
I/O Ports
RA0-5 (6)
RB0-7 (8)
RC0-7 (8)
RA0-5 (6)
RB0-7 (8)
RC0-7 (8)
RD0-7 (8)
RE0-2 (3)
RA0-5 (6)
RB0-7 (8)
RC0-7 (8)
RA0-5 (6)
RB0-7 (8)
RC0-7 (8)
RD0-7 (8)
RE0-2 (3)
Zamanlayıcı(Timers)
3
3
3
3
CCP
2
2
2
2
Serial Communications
MSSP, USART
MSSP, USART
MSSP, USART
MSSP, USART
Parallel Communications
-
PSP
-
PSP
10-bit Analog-to-Digital Module
5 Channels
8 Channels
5 Channels
8 Channels
Komut Kümesi
35 Instructions
35 Instructions
35 Instructions
35 Instructions
Pins (DIP)
28 Pins
40 Pins
28 Pins
40 Pins






ÖZELLİKLER
PIC16F877
PIC16F84
Çalışma hızı
DC - 20MHz
DC - 4 MHz
Program belleği
8Kx14 word Flash ROM
1Kx14 word Flash ROM
EEPROM Veri belleği
256 byte
64 byte
Kullanıcı RAM
368x8 byte
68x8 byte
Giriş/Çıkış port sayısı
33
13
Zamanlayıcı(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 I2C(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 1.2 PIC16F877’nin bacak bağlantıları


Program ve kullanıcı RAM bellek organizasyonu


PIC16F877’de üç bellek bloğu bulunmaktadır. Program ve kullanıcı veri belleği ayrı bus yapısına sahiptir ve aynı anda erişilebilir. 16F877de 13 bitlik bir program sayacı vardır ve 8Kx14 word adreslemeye yapabilir.

Şekil 1.3 Hafıza organizasyonu





16F84'ÜN BELLEĞİ

PIC 16F84'ün belleği, program ve RAM belleği olmak üzere 2 ayrı belek bloğundan oluşur.
Program Belleği: 16F84'ün 1Kbyte'lık program belleği vardır. Program belleği programın çalışması sırasında sadece okunabilir. bu bellek içerisinde assembly komutları saklanır.
RAM Bellek: 16F84 0x00 ~ 0x4F adres aralışında ayrılmış bir RAM belleğe sahiptir. Bu bellek içerisinde file registerler ve genel amaçlı registerler yer almaktadır. Bellek iki sayfadan (BANK) meydana gelir.

Bank0'daki registerlerin adresleri 0x00 ~ 0x4F arasında, bank1'deki registerlerin adresleri de 0x80 ~ 0xCF arasındadır. Bir bank'taki registeri kullanmak için o bank'a geçmek gerekir. 

 W Register:  16F84'ün RAM belleğinde görülmeyen bir de W register vardır. W registere direnk olarak ulaşılamaz. Ancak diğer registerlerin içindeki verileri aktarırken erişilebilir.
PİC16F877 Belleği






BÖLÜM 2  MIKROC PROGRAM YAPISI

C Kodlarının Temel Özellikleri
Bir C programı aşağıda verilen özellikleri mutlaka taşımalıdır.
  1. Yazılımda kullanılacak olan her fonksiyon için ilgili başlık dosyası programın başına ilave edilmelidir.
  2. Her C programı main() fonksiyonunu içermelidir.
  3. Program içinde kullanılacak olan değişkenler ve sabitler mutlaka tanımlanmalıdır.
  4. Satırın sonuna , ;işareti konmalıdır.
  5. Her bloğun ve fonksiyonun başlangıcı ve bitişi sırasıyla { ve } sembolleridir.
  6. C dilinde yazılan kodlarda küçük-büyük harf ayrımı vardır (case sensitive).
    Örneğin
    A ile a derleyici tarafından farklı değerlendirilir.
  7. Açıklama operatörü /* */ ,// sembolleridir.
Kod Yazımı için Bazı Tavsiyeler
  1. Program açıklamalarını program yazıldıkça yapılmalı. Bu unutulmaması gereken çok önemli husustur.
  2. Değişken, sabit ve fonksiyon adları anlamlı kelimelerden seçilip  uzun olmalıdır. Eğer bu isimler bir kaç kelimeden oluşacak ise, kelimeler alt çizgi ( _ ) ile ayrılmalıdır veya her kelime büyük harfle başlamalıdır. Örneğin:
 int son_alinan_bit;
 void Kesme();
 float OrtalamaDeger = 25.347;
  1. Sabitlerin bütün harflerini büyük harfle yazın. Örneğin:
 #define PI 3.14;
 const int AYLAR=12;
  1. Her alt yapıya girerken birkaç boşluk veya TAB tuşunu kullanın. Bu okunabilirliği arttıracaktır. Örneğin:
 k = 0;
 for(i=0; i<10; i++)
 {
       for(j=0; j<i; j+=2)
       {
             do{
                    if( j>1 )  k = i+j;

                    x[k] = 1.0/k;
               }while(k!=0);
       }
 }
  1. Aritmetik operatörler ve atama operatörlerinden önce ve sonra boşluk karakteri kullanın. Bu, yazılan matematiksel ifadelerin daha iyi anlaşılmasını sağlayacaktır. Örneğin:

Tf    = 2*Vo/g;
 Vy    = Vo - g*t;
 y     = Vo*t - (g*t*t)/2.0;
 z     = ( a*cos(x) + b*sin(x) )*log( fabs(y) );
  1. Program bittikten sonra tekrar tekrar programınızı inceleyerek, programınızı daha iyi şekilde yazma yollarını arayın ve aynı fonksiyonları daha kısa algoritmalarla ve/veya daha modüler şekilde elde etmeye çalışın.

DEĞİŞKENLER (VARIABLES)
Değeri programın çalışması boyunca değiştirilebilir.
Değişkenlerin Deklarasyonu
C programında bir değişkeni kullanabilmek için öncelikle onu tanımlamalıyız (declaration).
Data tipini ve değişken ismini belirtiriz.

Örnekler:
inta;                 //a adında bir tamsayı tanımladık
floatsayi;         //sayi adında bir float(kesirli sayı) tanımladık
Birden fazla aynı tipte değişken tanımlamak için:
İnt a,b,c;
Veya;
inta; intb; intc;
Değişken isimlerini verirken C'nin bir takım sıkı kurallarına uymamız gerekir. Bunlar;

1.      Değişkenlerin isimleri, alfabede bulunan karakterlerle başlamalı.

2.      İlk harf hariç diğer karakterler sayı olabilir.

3.      İçerisinde Türkçe karakterler bulunmamalıdır.

4.      C büyük ve küçük harf duyarlıdır. Yani Sayi, sayi ve SAYI hepsi ayrı değişken olarak algılanırlar.

5.      Değişkenlerin isimleri !, ?, {, ] ve boşluk gibi karakterler içeremezler. _ değişken isimlerinde kullanılabilir

6.      C'nin anahtar kelimelerini de değişken isimleri olarak kullanamayız.

7.      sayi, tamsayi1, toplam, Fark, KullaniciAdi, isim, _Adres, sinif_ortalaması, kurallara göre adlandırılmış doğru değişken isimleridir.

8.      Diğer taraftan 1.sayi, tamsayi1,, fark!, 3.sinif_ortalamasi geçersiz değişken isimleridir.

9.      Yanlış adlandırılmış değişkenleri içeren programlar derlenmez!

10.  Anahtar kelimeler C dilinde bulunan komutların isimleridir. Bunları değişken ismi olarak kullanamayız.
11.  Ayrıca alt çizgi ile başlayan değişken tanımlamadan kaçınmalıyız.

DEĞİŞKEN ALANLARI

1.      Tüm değişkenler kullanıldıkları noktadan önce tanımlanmalıdır

2.      Bir değişken global ya da lokal olabilir

3.      Global Değişken: Programın ana gövdesinde tanımlanır.

§  Tüm fonksiyonların dışında (mainde dahil)

4.      Lokal değişken: Bir fonksiyonun gövdesi içinde tanımlanır ve sadece bu fonksiyon içerisinde kullanılabilir.

§  Global değişkenler programın herhangi bir yerinde çağırılabilirler.

§  Tanımlanmasından sonra tüm fonksiyonlardan çağırılabilirler

5.      Lokal değişkenler içinde tanımlandıkları {} ile sınırlıdır. Ancak bu aralıkta kullanılabilirler

§  Bu aralık bir kod bloğu da olabilir bir fonksiyon da

§  Bir fonksiyon içinde tanımlanan değişkene diğer fonksiyonlardan ulaşılamaz













DEĞİŞKEN
BOYU
AÇIKLAMASI
DEĞER ARALIĞI
char
1
karakter veya 8 bit uzunluğunda tamsayı
signed: -128 ile 127 arasında
unsigned: 0 ile 255
short int(short)
2
16 bit uzunluğunda tamsayı
signed: -32768 to 32767unsigned: 0 to 65535
long int(long)
4
32 bit uzunluğunda tamsayı
signed: -2147483648 to 2147483647unsigned: 0 to 4294967295
İnt
4
32 bit uzunluğunda tamsayı
signed: -2147483648 to 2147483647unsigned: 0 to 4294967295
float
4
Kesirli sayı.
+/-3.4e +/-38 (~7 basamak)
double
8
Geniş ve fazla duyarlıklı kesirli sayı.
1.7e +/-308 (15 basamak)
String

1 karakterden daha uzun alfa nümerik değer tutan değişkenlerdir






·         Karakterler tek tırnak içine
·         chara='z'
·         charb='p'
·         Stringler çift tırnak içine
·         stringa= "MERHABA"
·         stringelk="ne haber?"
Int Tip
Integer = Tamsayı
·         Tamsayıları içerir. Bellekte 2 Byte tutar.
·         5 , -19 ,25000 gibi
·         Minimum   : -231     = -32768
·         Maksimum :  231-1   =  32767

 Gerçel Tipler (Float, Double)
·         Gerçel sayıları içerirler.
·         Float: Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralığında değer alır. Hassasiyet 7-8 basamaktır.
·         double :Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralığında değer alır. Hassasiyet 15-16 basamaktır.
218.1 , -5.2 , 4.0
·         Bilimsel gösterim biçimi   2.5*103  = 2.5E3                2.5*10-3  = 2.5E-3
 Char  Tip
·         Char : Karakter   : Alfanümerik karakterleri içerir.
·         '5' , '*' , 'K'
SABİTLER (CONST)
·         Veriler ya nesnelerin içerisinde ya da doğrudan sabit biçiminde bulunurlar.
·         Sabitler nesne biçiminde olmayan, programcı tarafından doğrudan girilen verilerdir.
·         Sabitlerin sayısal değerleri derleme zamanında tam olarak bilinmektedir.
·         Değişkenlerin türleri olduğu gibi sabitlerin de türleri vardır.
·         Değişkenlerin türleri daha önce gördüğümüz gibi bildirim yapılırken belirlenir.
·         Sabitlerin türlerini ise derleyici, belirli kurallar dahilinde sabitlerin yazılış biçimlerinden tespit eder.
·         CONST (sabit) : Değeri programın çalışması boyunca değiştirilemez. Kullanım biçimi
·         const tip Belirleyici=değeri;
·         const  float PI=3.14;
Tip belirtilmez ise tamsayı kabul edilir.

DİZİLER
Tip Adı  değişken [boyut];

Örneğin

    float  a[100];

Bu tanımlama ile a isimli değişkeni 100 gerçel değerin saklandığı bir diziyi gösterir. Bu 100 veriye a değişkeni ile erişilir.
Dizinin herhangi bir elemanına erişmek veya değiştirmek için kaçıncı eleman olduğunu gösterir indis bilgisini vermek gerekir. İlk elemanın indisi 0 dır.

            A[4]   dizinin 5. elemanı
            A[0]   dizinin ilk elemanı
            A[1] := 45;   dizinin 2. elemanına 45 atanır
            A[7] := A[7] + A[1];   dizinin 8. elemanına kendisi ile 2. elemanın toplamı atanır

Dizinin eleman değerler tanımlama anında yapılabilir.
int a[10] = {25, 18, 20, 0, 29, 5, 4, 8, 19, 13}

0
1
2
3
4
5
6
7
8
9
25
18
20
0
29
5
4
8
19
13

BELİRLEYİCİLER (Identifier)
Bileşenlere isim verme.  (Sabit, değişken, altprogram, etiket,  tipler (kullanıcı tanımlı)).

OPERATÖRLER (OPERATORS)

Tüm programlama dillerinde olduğu gibi operatörler yapılan işlem türüne göre çeşitlilik gösterirler
·         Aritmetik
·         Mantıksal
·         Karşılaştırma operatörleri
·                    Dört işlem için kullandığımız operatörler
·                İki sayının bölümünden kalanı veren %
·             
Operatör
İşlem
+
Toplama
-
Çıkarma
*
Çarpma
/
Bölme
%
Kalan Bulma İşlemi

Bileşik Atama Operatörleri
İfade
Eşit İfade
a += b;
a = a + b;
a -= b;
a = a –b;
a *= b;
a = a * b;
a /= b;
a = a / b;

a++
a = a + 1;
a--;
a = a –1;




İlişkisel Operatörler
==
Eşittir
!=
Eşit değildir
> 
Büyüktür
< 
Küçüktür
>=
Büyük ya da eşit
<=
Küçük ya da eşit



(8 == 4) // işlem sonucu false
(5 > 2) // işlem sonucu true
(3 != 2) // işlem sonucu true
Mantıksal Operatörler
$
AND(Ve işlemi)
|
OR(Veya işlemi)
^
ÖZEL VEYA
~
Komplement
<< 
Sola kaydırma
>> 
Sağa kaydırma


(6 >= 6) // işlem sonucu true






Mantıksal ifadelerde sonuç 1 veya 0 döner.
, Operatörü
·         İki işlemi tek hamlede yapmaya yarar:
·         a = (b=3, b+2);
·         Öncelikle b= 3 işlemi yapılır
·         daha sonra a = b + 2 işlemi yapılır
·         Sonuç olarak b’ye3 a’ya5 değerleri atanmış olur.
 printf() Fonksiyonu
Standart C kütüphanesinde bulunan printf() fonksiyonu, değişkenlerin tuttuğu değerleri, onların adreslerini veya bir mesajı ekrana belli bir düzenle (format) standart çıkışa (stdout), yani ekrana, yazdırmak için kullanılan fonksiyondur.
      ...
      int x = 12;
      printf("x in değeri %d dir", x);
      ...
Gibi kullanılır. Bu program parçasının ekran çıktısı şöyle olacaktır:
      x in değeri 12 dir
Bu örnekte printf fonksiyonuna iki parametre aktarılmıştır. Birincisi ekranda gösterilecek ve çift tırnaklar arasına yazılan ifadeler, ikincisi ise ekranda sayısal değeri gösterilmek istenen değişken (x).
*format üç kısımdan oluşmaktadır:
I. Düz metin (literal string): yazdırılmak istenen ileti.
Örneğin: printf("Ben gelmedim kavga için..."); gibi.
II. Konrol karakterleri (escape squence): değişkenlerin ve sabitlerin nasıl yazılacağını belirtmek veya imlecin alt satıra geçirilmesi gibi bazı işlemlerin gerçekleştirilmesi için kullanılır. Örneğin: printf("\tDostun evi gönlüdür...\n"); gibi.
Kontrol karakterleri
Karakter
Anlamı
\a
Ses üretir (alert)
\b
imleci bir sola kaydır (backspace)
\f
Sayfa atla. Bir sonraki sayfanın başına geç (formfeed)
\n
Bir alt satıra geç (newline)
\r
Satır başı yap (carriage return)
\t
Yatay TAB (horizontal TAB)
\v
Dikey TAB (vertical TAB)
\"
Çift tırnak karakterini ekrana yaz
\'
Tek tırnak karakterini ekrana yaz
\\
\ karakterini ekrana yaz
%%
% karakterini ekrana yaz
III. Tip karekterleri
Tip Karakteri
Anlamı
Yazdırılacak veri tipi
%c
tek bir karakter
char
%s
karakter dizisi (string)
char
%d
işaretli ondalık tamsayı
int, short
%ld
uzun işaretli ondalık tamsayı
long
%u
işaretsiz ondalık tamsayı
unsigned int, unsigned short
%lu
işaretsiz uzun tamsayı
unsigned long
%f
Gerçel sayı
float
%lf
Çift duayarlı gerçel sayı
double
Tip belirleyici (conversion specifier): % işareti ile başlar ve bir veya iki karakterden oluşur (%d gibi). Ekrana yazdırılmak istenen değişkenin tipi, % işaretinden sonra belirtilir . Örneğin: printf("x in değeri %d dir"); gibi
Tip karakterlerini kullanarak, birden çok veri tipi yazdırılabilir. Örneğin:
      ...
      int    not= 12;
      float  pi = 3.14;
      char   kr = 'A';

      printf(" not = %d , pi = %f ve kr = %c dir", not, pi, kr);
      ...
gibi.
printf() fonksiyonu esnektir. Parametreler herhangi bir C deyimi olabilir. Örneğin x ve y nin toplamı şöyle yazılabilir:
      printf("%d", x+y);
scanf() Fonksiyonu
Birçok programda ekrana verilerin bastırılmasının yanı sıra klavyeden veri okunması gerekebilir. scanf() fonksiyonu klavyeden veri okumak için kullanılan fonksiyondur. printf() gibi scanf() fonksiyonuda yukarıda verilen karakterleri kullanır. Örneğin klavyeden bir x tamsayısı okumak için:
      scanf("%d",&x);
satırını yazmak yeterli olacaktır. Burada & işareti adres operatörü olarak adlandırılır.  Klavyeden iki farklı sayı okunmak istendiğinde scanf() fonksiyonu şöyle kullanılabilir:
      scanf("%d %f",&x,&y);
veriler klavyeden
      16 1.56
Ya da
      16    1.56
veya
      16
      1.56
şekilinde girilebilir.
KARARLAR
·         Program içindeki bir karar deyimin değerine bağlı olarak programın farklı bir bölümüne bir kerelik atlayışa neden olur
·         Farklı yapılar mevcuttur:

if  yapısı

·         En basit karar ifadesidir
·         Koşul sınama sonucu doğru ise if’i takip eden ifadeler bir kez işlenir
·         Yanlış ise bu ifadeler işlenmez, if sonrasındaki kodlar işlenir

if–else yapısı
·         İki alternatif içerisinden seçim yapılır
·         Sınama sonucu doğru ise ilk ifadeler, yanlış ise else içerisindeki ifadeler işlenir.

if–elseif–elseif… -else yapısı
·       İkiden fazla alternatif olması durumunda kullanılır
Karar Yapıları
If ifadesi
if(Koşul){
ifadeler
}

·         Eğer sınama sonucu işlenecek tek ifade varsa { } kullanılması gerekli değildir.
if(Koşul)
ifade
if( x > 100)
cout<<“x 100den buyuk bir değere sahiptir. “;
if(hiz<= 60){
cout<< “Hiziniz makul değerler icerisindedir”;
cout<<“Ivmeyi hesaplamak için gecen sureyi giriniz : “;
cin >> sure;
cout<< ….
}
switch –case Yapısı
·         Switch Case deyimi işlev bakımından if deyimine çok benzemektedir.
·         Çok sayıda if işlem blokları kullandığımızda programın okunurluğu azalacak ve programı izlemek zorlaşacaktır.
·         Programımızın bir değerini birçok değerle karşılaştırmak gerektiğinde switch komutunu kullanacağız.
·         Switch seçeneği ile değişkenin durumuna göre birçok durum içerisinden bir tanesi gerçekleştirilir.
·         Switch in yaptığı iş kısaca, ifadenin değerini sırayla sabitlerle karşılaştırarak ve her satiri islemektir.
Genel yapısı:
switch( Kontrol Degiskeni )
{
case Sabit1 : komut1;
case Sabit2 : komut2;
.
.
.
default : Komutson;
}     
AMAÇ: Bir koşulun alabileceği birçok sabit değer arasından seçim yaparak gerekli işlemleri yapmaktır.
switch –case Örnek


#include<iostream.h>
main(){
inti;
cout<< " 1 ile 4 arasi bir sayi giriniz:";
cin>>i;
switch(i) {
case1 :
cout<<"1 Girdiniz";
break;
case2 :
cout<<"2 Girdiniz";
break;
case3 :
cout<<"3 Girdiniz";
break;
case4 :
cout<<"4 Girdiniz";
break;
default:
cout<<"1 ile 4 ten farkli";
}
return0;
}

Program i değişkenine bağlı olarak isliyor.
Case'lerinin aldığı değere göre kendinden sonra gelen komutları işliyorlar.
Burada daha önce görmediğimiz break komutunu gördük.
Programımızda değişkene 1 değerini verdiğimizi farz edelim. Case 1 adli satiri geçip ondan sonraki komut dizisini işleme soktuk. Bu işlemin tamamlanması için break komutu kullanılıyor.
Yazılımda break komutu goto gibi işlev görür ve derleyiciye switch komutundan çıkması için talimat verir.
Sorunu ortadan kaldırmak için her durum sonunda break deyimini eklemeliyiz.
Bir çok karşılaştırma olduğunda switch kullanımı uygun olur..
Karşılaştırmaların hiç biri olmadığı anda da ortaya default’tan sonraki satirin islenmesi kalıyor.
Aynı programın If ile yazılımı
#include<iostream.h>
main()
{
inti;
cout<< " 1 ile 4 arasibirsayigiriniz:";
cin>>i;
if(i==1)
cout<<"1 Girdiniz";
else if(i==2)
cout<<"2 Girdiniz";
else if(i==3)
cout<<"3 Girdiniz";
else if(i==4)
cout<<"4 Girdiniz";
else
cout<<"1 ile 4 ten farkli";
return0;
}
DÖNGÜLER
Döngü (loop) deyimleri, birişin belli bir koşul altında tekrar edilmesi için kullanılır. C programlama dilinde, while, do...while ve for olmak üzere üç tip döngü deyimi vardır. Diğer programlama dillerinde olduğu gibi, bu deyimlerle istenildiği kadar iç-içe döngü yapısı kullanılabilir.
WHILE DÖNGÜSÜ
Tekrarlama deyimidir. Bir küme ya da işlem while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden yapılır. Koşul olumlu olduğu sürece çevrim yinelenir. Genel yazım biçimi:
      while(koşul)
      {
       ...
        döngüdeki işlemler;       ...
      }



Örnek;

#include <stdio.h>

main()
{
   int x=0;

   while(x <= 10)
      printf("%d\n",x++);

 return 0;
}
Bu program 0…10 arasındakisayıları ekrana yazdır.
Do… While Döngüsü
Bu deyimin while deyiminden farkı, koşulun döngü sonunda sınanmasıdır. Yani koşul sınanmadan döngüye girilir ve döngü kümesi en az bir kez yürütülür. Koşul olumsuz ise döngüden sonraki satıra geçilir. Genel yazım biçimi:
      do{
         ...
         döngüdeki deyimler;
         ...
      }while(koşul);



#include <stdio.h>

main()
{
   int sayi;

   do
   {
      printf("Bir sayi girin : ");
      scanf("%d",&sayi);
      printf("iki kati       : %d\n",2*sayi);

   }while( sayi>0 );   /* koşul */

   puts("Döngü sona erdi.");

 return 0;
}
For Döngüsü
Bu deyim, diğer döngü deyimleri gibi bir kümeyi bir çok kez tekrarlamak için kullanılır. Koşul sınaması while da olduğu gibi döngüye girmeden yapılır. Bu döngü deyimin içinde diğerlerinden farklı olarak başlangıç değeri ve döngü sayacına sahip olmasıdır. Genel yazım biçimi:
      for( başlangıç ; koşul ; artım )
      {
       ...
        döngüdeki deyimler;
       ...
      }

Örnek; Faktöryel hesabı
#include <stdio.h>

int main()
{
   long  i, n, faktor;

   printf("Faktoriyeli hesaplanacak sayi girin : ");
   scanf("%ld",&n);

   faktor=1;
   for(i=1; i<=n; i++){
         faktor *= i;     /* n! = 1 x 2 x 3 x ... x n */
   }

   printf("%ld! = %ld\n", n, faktor);

 return 0;
}
Sonsuz Döngü
Bir döngü işlemini sonsuz kere tekrarlarsa bu döngü sonzuz döngü olarak adlandırılır. Böyle bir döngü için, koşul çok önemlidir. Örneğin while döngüsü için:
while(1)

{
.
.
İşlemler
.
.
          }

while(5>15)
          {
.
.
İşlemler
.
.
          }

for döngüsünde, başlangıç, koşul ve artım parametrelerinden herhangi birini kullanmak isteğe bağlıdır. Her hangi biri verilmediğinde döngünün nasıl davranacağı iyi yorumlanmalıdır. Örneğin for döngüsünün hiçbir parametresi verilmezse, döngü sonsuz çevrime girer.
for(;;)
işlemler

break Deyimi
Bir C programında, bir işlem gerçekleştirilirken, işlemin sona erdirilmesi bu deyim ile yapılır. Örneğin, döngü deyimleri içindekiler yürütülürken, çevrimin, koşuldan bağımsız kesin olarak sonlanması gerektiğinde bu deyim kullanılır.
do{
            PORTD=255;
            if(x==0) break
       }while(1);
Yukarıdaki program parçasında, do ... while döngüsündeki koşul daima olumludur. Bu durumda döngü sonsuzdur. Fakat döngü içinde if deyimindeki koşul gerçekleşirse, döngü koşuluna bakılmaksızın terkedilir. Bu işlemi sağlayan break deyimidir.

Continue Deyimi
Bir döngü içerisinde continue deyimi ile karşılaşılırsa, ondan sonra gelen deyimler atlanır ve döngü bir sonraki çevrime girer. Örneğin:
           for(x=-50;i<=50;x++)
       {
            if(x<0) continue;     /* x<0 ise alttaki satırı atla */
            printf("%d\t%f",x,sqrt(x));
       }
     Program parçasının çıktısı:
       0     0.000000
       1     1.000000
       2     1.414213
       3     1.732050
       .     .
       50    7.071067
KULLANILMAYAN DEĞİŞKEN İSİMLERİ
            Aşağıda verilen değişken isimleri mikroC derleyici tarafından kullanılır ve programımızda bu değişken isimlerini kullanmamak gerekir:


- asm
- auto
- break
- case
- char
- const
- continue
- default
- do
- double
- else
- enum
- extern
- float
- for
- goto
- if

- return
- short
- signed
- sizeof
- static
- struct
- switch
- typedef
- union
- unsigned
- void
- volatile
- while
- int
- long
- register

Hiç yorum yok:

Yorum Gönder