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.
- Giriş/Çıkış
Ünitesi (I/O Unit)
- 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.
16F877’de 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.
- Yazılımda
kullanılacak olan her fonksiyon için ilgili başlık dosyası programın başına
ilave edilmelidir.
- Her C
programı main() fonksiyonunu içermelidir.
- Program
içinde kullanılacak olan değişkenler ve sabitler mutlaka tanımlanmalıdır.
- Satırın
sonuna , ;işareti konmalıdır.
- Her
bloğun ve fonksiyonun başlangıcı ve bitişi sırasıyla { ve } sembolleridir.
- 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. - Açıklama
operatörü /* */ ,// sembolleridir.
- Program
açıklamalarını program yazıldıkça yapılmalı. Bu unutulmaması gereken çok
önemli husustur.
- 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;
- Sabitlerin bütün harflerini büyük
harfle yazın. Örneğin:
#define PI 3.14;
const int AYLAR=12;
- 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);
}
}
- 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) );
- 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ğ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
|
||||||||||||
|
(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