Günümüzde
birçok mikrodenetleyici üreticisi mevcuttur ve bunlar ihtiyaç duyulan işleme
göre farklı mikro denetleyiciler üretmektedirler. Ama basite indiğimizde mikro
denetleyici mimarisinde çok az bir değişim vardır ve bu mikro denetleyiciler
yapı itibariyle hemen hemen aynıdır.
Bir
projeye başlamadan önce mikro denetleyiciyi seçerken, uygulamada kullanacağımız
mikro denetleyicinin ne tür özelliklerinin olması gerektiği iyice
kavranmalıdır. Bu tür özellikler,
1.
Kesme sayısı
2. I/O port sayısı
3. Programlanabilir dijital paralel giriş / çıkış
4. Programlanabilir analog giriş / çıkış
5. Dahili belek tipi ve kapasitesi
6. Kayan nokta hesaplaması
2. I/O port sayısı
3. Programlanabilir dijital paralel giriş / çıkış
4. Programlanabilir analog giriş / çıkış
5. Dahili belek tipi ve kapasitesi
6. Kayan nokta hesaplaması
Bu
özellikleri arttırmak mümkün. Ben sadece temel özellikleri saydım.
Bir
mikrodenetleyici genel olarak aşağıdaki birimlerden oluşur:
1.
CPU (Merkezi işlem ünitesi - central processing unit)
2. RAM (Rastgele erişimli bellek-Random Access Memory)
3. EPROM/PROM/ROM (Silinir, yazılır sadece okunur bellek-Erasable Programmable Read Only Memory)
4. I/O (Girdi/çıktı - input/output) - seri ve paralel
5. Timers (Zamanlayıcılar)
6. Interrupt controller (Kesmeler)
2. RAM (Rastgele erişimli bellek-Random Access Memory)
3. EPROM/PROM/ROM (Silinir, yazılır sadece okunur bellek-Erasable Programmable Read Only Memory)
4. I/O (Girdi/çıktı - input/output) - seri ve paralel
5. Timers (Zamanlayıcılar)
6. Interrupt controller (Kesmeler)
Mikro
denetleyiciler özel amaçlı bilgisayarlardır ve programlandıkları şeyi en iyi
şekilde yaparlar.Genel olarak özellikleri ise;
1.
Mikro denetleyiciler sadece bir iş için programlanmışlardır ve sadece ve sadece
bu programı işlerler ve kullandıkları program çipin içinde veya program
hafızası denilen yerde saklı tutulur.
2. Mikro denetleyiciler sadece 50 mW civarında güç harcarlar.
3. Mikro denetleyicilere sadece girdi yapılmaz aynı zamanda çıktı da alınabilir. LED göstergelerle, sıvı kristal göstergelerle, ikaz sesleriyle vb..
4. Mikro denetleyiciler ucuzdur. Bir çok parçadan oluşan kompleks bir devreyi kolayca küçük boyutlara ve maliyete indirmenizi sağlar.
2. Mikro denetleyiciler sadece 50 mW civarında güç harcarlar.
3. Mikro denetleyicilere sadece girdi yapılmaz aynı zamanda çıktı da alınabilir. LED göstergelerle, sıvı kristal göstergelerle, ikaz sesleriyle vb..
4. Mikro denetleyiciler ucuzdur. Bir çok parçadan oluşan kompleks bir devreyi kolayca küçük boyutlara ve maliyete indirmenizi sağlar.
PIC, adını İngilizce'deki Peripheral Interface Controller
cümlesindeki kelimelerin baş harflerinden almış olan bir mikrodenetleyicidir.
Eğer bu cümleyi Türkçe'ye çevirirsek, çevresel üniteleri denetleyici arabirim
gibi bir anlam çıkacaktır.PIC gerçekten de çevresel üniteler adı verilen
lamba,motor,role,ısı ve Işık sensörü gibi I/O elemanların denetimini çok hızlı
olarak yapabilecek şekilde dizayn edilmiş bir chip'tir.
|
Bir mikrodenetleyici ile çalışmaya başlayanlar için en uygun seçenek PIC16F84 denetleyicisidir. çünkü Flash belleğe sahip olan PIC16F84'i programlayıp ve deneylerde kullandıktan sonra, silip yeniden program yazmak PIC ile yeni çalışmaya başlayanlar için büyük kolaylıktır. Böylece işe yeni başlayanlar yaptıkları programlama hataları nedeniyle chip'i atmak zorunda kalmayacaklardır. Gerçi EPROM program belleği olan chip'lere de yeniden yazmak mümkündür ama, bu durumda bir EPROM silici cihazına ihtiyaç vardır. Bir silici cihaz bulunsa bile proramı bellekten silmek için en azından 10 - 15 dk. Beklemek zorunda kalınacaktır. ışte PIC16F84'ün bu özelliği mikrodenetleyici kullanmaya yeni başlayanlar için ideal bir seçenektir.
PIC16F84'ü kullanmanın bir diğer avantajı da, programlama donanımının çok ucuz ve kullanışlı olması ve hatta çoğu meraklı elektronik kullanıcı tarafından bile üretilebilmesidir.
Şimdi de isterseniz PIC16F84 mikro denetleyicinin özelliklerine değinelim.
Yüksek Performanslı RISC CPU özellikleri:
- Öğrenmek için yalnızca 35
tek kelime komutları
- İki dönüşümlü program
komutları haricindeki bütün komutlar tek dönüşümde (400 ns @ 10 MHz)
- İşletim hızı DC-10 MHz saat
girişi. DC-400 ns komut dönüşümü
- 14 bitlik geniş komutlar
- 8 bitlik geniş veriyolu
- 1K*14 EEPROM program hafızası
- 36*8 genel amaçlı register
(SRAM)
- 64*8 chip üstünde EEPROM
data hafızası
- 15 özel fonksiyonlu donanım
registeri · Direkt,endirekt ve bağımlı adresleme modları
- Dört kesinti kaynağı
- Harici RB0/INT pini
- TMRO zamanlayıcı taşması
- PORTB <7:4> değişim kesintisi
- Data EEPROM yazma taşması
- 1.000.000 EEPROM data
hafızası ERASE/WRITE döngüleri
- EEPROM hafıza geçerliliği
40 yıldan fazla
- 13 I/O pini ile bağımsız
komut kontrolu
- Direkt LED sürücüsü için
yüksek akımda indirme/çıkarma
- Her pin için max. 25 mA'lik
indirme
- Her pin için max. 20 mA'lik
bindirme
- TMRO: 8 bitlik
programlanabilir ön derecelendirici ile 8 bitlik zamanlayıcı/sayac
Özel Mikrokontrolör özellikleri:
- Power-on Reset (POR)
- Power-up Timer (PWRT)
- Oscillator Start-up Timer
(OST)
- Güvenli işlemler için chip
üstünde olan RC osilatör ile Watchdog Timer (WDT)
- Kod koruması
- Güç korumalı SLEEP modu
- Seçilebilir osilatör
seçenekleri
- Seri sistem içi programlama
(iki pin yolu ile)

CMOS Teknolojisi:
- Düşük güç,yüksek hız CMOS
EEPROM teknolojisi
- Bütünüyle statik dizayn
- Geniş aralıklı işletme
voltajı:
- Ticari : 2.0V-6.0V
- Endüstriyel : 2.0V-6.0V
- Düşük güç tüketimi
< 2mA tipik @ 5V,4MHz
60 mA tipik @ 2V,32 kHz
26 mA tipik standby akımı @ 2V
İsterseniz şimdi PIC e assembler komularını görmeye başlıyalım. Başlamadan önce şunu belirtmekte fayda var. PIC kullanılan saat (clock) frekansını dörde bölüp, bu sürede komutu işler. Yani PIC'e saat darbelerini üreten Kristal veya herhangibir zamanlayıcı 4 MHz frekanslı darbeler üretiyorsa, PIC herbir komutu 1 usn (mikrosaniye) de işliyor demektir. Genelde PIC16F84 için 4 MHz lik kristaller kullanılır. Bu kısa bilgiyi verdikten sonra assembly komutlarını anlatmaya başlayabiliriz.
MPASM assembler programının yazılan komutları doğru olarak algılayıp, PIC'in anlayabileceği hex kodlarına dönüştürebilmesi için şu bilgiler program içine özel formatta yazılması gerekir;
- Komutyların hangi PIC16XX
için yazıldığı,
- Programın bellekteki hangi
adresten başlayacağı,
- Komutların ve etiketlerin
neler olduğu,
- Programın bitiş yeri.
Şimdide kodları tek tek inceleyelim,
Kullanılan Kısaltmalar:
|
|||
Kısaltma
|
Anlamı
|
Örnek
|
|
n
|
Sabit değer
|
h'20', d'10', b'00001100' gibi...
|
|
f
|
Bizim oluşturduğumuz saklayıcı
|
||
d
|
yön (direction), değeri 0 (w) veya 1 (f)olabilir.
|
ADDWF durum1,f ; W ile durum1'i AND işlemine tut, değeri f
olduğu için durum1 saklayıcısına yaz.
|
|
S.R.E.B
|
Status Registerinde Etkilenen Bayraklar
|
||
C
|
Taşma,ödünç biti. En sondaki 7. bitde taşma olduğunda 1
olur.
|
||
DC
|
Taşma, ödünç biti. 3. bitde taşma olduğunda 1 olur.
|
||
Z
|
Zero(Sıfır) biti. Bir aritmetik veya mantıksal komutun
sonucu 0 (sıfır) olduğunda=1 olur.
|
||
TO ve PD
|
Bu bitler status reg. anlatılırken işlenecek.
|
||
PIC Programlama
Komutları...
|
|||
Komut
|
S.R.E.B
|
Anlamı
|
ADDLW n
|
C,DC,Z
|
W' ya n değeri eklenir. Sonuç W'ye yazılır.
|
ADDWF f,d
|
C,CD,Z
|
W içeriğine f saklayıcısını ekler ve sonucu hedef d'nin
değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
Örnek:
ADDWF DAT_IN,W |
ANDLW n
|
Z
|
n değeri W yazmacıyla AND'lenir Ve sonuç W yazmacına
yazılır.
Örnek:
ANDLW B'00000011'en alttaki iki bit hariç bütün bitleri kapatır. |
ANDWF f,d
|
Z
|
W ve f dosyasını AND işlemine tabi tutar ve sonucu hedef
d'nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
Örnek:
ANDWF TEMP W TEMP dosyasının içeriğini yalnız bırakarak AND fonksiyonunun
sonucunu W yazmacına yerleştirir. |
BCF f,b
|
yok
|
F adresinde bulunan dosya yazmacındaki b bitini 0 yap.
Örnek:
BCF STATUS , ZERO |
BSF f,b
|
yok
|
F adresinde bulunan dosya yazmacındaki b bitini 1 yap.
Örnek:
BSF PORTA , BITO |
BTSFC f,b
|
yok
|
F adresindeki yazmaçla b bit'ini test et ve eğer 0'sa bir
sonraki komuta atla . 1'se izleyen komuta geç.
Örnek:
BTFSC PORTB , SWITCH1 |
BTFSS f,b
|
yok
|
F adresindeki yazmaçta b bit'ini test et ve eğer 1'se bir
sonraki komuta atla. Eğer 0'sa onu izleyen komuta geç.
Örnek:
BTFSS STATUS , CARRY |
CALL k
|
yok
|
k etiketli bir alt rutine bir çağrı yapılmıştır. W
yazmacının içeriği gerektiğinde bir alt rutin içinde kullanılmak üzere
transfer edilecektir.
Örnek:
CALL TEMP_CONVERT. |
CLRF f
|
Z
|
f adresindeki içeriği yazmacın sıfırlanacak şekilde
temizle veya reset et
|
CLRW
|
Z
|
W yazmacının içeriğini sıfırlayacak şekilde temizle veya
reset et
|
CLRWDT
|
TO,PD
|
Watchdog zamanlayıcı yazmacı sıfıra ayarlanmıştır.
|
COMF f,d
|
Z
|
F dosyasının içeriğini tersine alır ve sonucunu hedef
d'nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
|
DECF f,d
|
Z
|
F dosyasından 1 çıkarır ve sonucu hedef d'nin değerine
bağlı olarak W veya f saklayıcısına yerleştirilir.
|
DECFSZ f,d
|
yok
|
F dosyasını içeriğini bir azalt ve sonuç sıfırsa izleyen
komutu atla,sonucu hedef d'nin değerine bağlı olarak W veya f saklayıcısına
yerleştirilir.
|
GOTO k
|
yok
|
Program k etiket / adresine sıçrar.
|
INCF f,d
|
Z
|
F dosyasının içeriğini 1 artırır ve sonucu hedef d'nin
değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
|
INCFSZ f,d
|
yok
|
F dosyasının içeriğini 1 artır ve sonucu hedef d'nin
değerine bağlı olarak W veya f saklayıcısına yerleştirilir.,sonuç sıfırsa bir
sonraki komutu atla.
|
IORLW n
|
Z
|
N değeri W yazmacıyla OR'lanır Ve sonuç w yazmacıyla
yazılır.
Örnek:"
IORLW h'C4' " |
IORWF f,d
|
Z
|
W yazmacının içeriği ve f dosyasını OR işlemine tabi tutar
ve sonucu hedef d'nin değerine bağlı olarak W veya f saklayıcısına
yerleştirilir.
Örnek:
"IORWF COUNT, F" fonksiyonunun sonucunu COUNT dosyasına yerleştirir. |
MOVLW n
|
yok
|
N değeri W'ya taşınır.
Örnek:
MOVLW 36II |
MOVF f,d
|
Z
|
F dosyasının içeriğini taşır/kopyalar ve sonucu hedef
d'nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
|
MOVWF f
|
yok
|
W yazmacının içeriğini f adresindeki yazmaca kopyala.
Örnek:
MOVWF TEMP |
NOP
|
yok
|
Hiçbir şey yapma
Örnek:
NOP ; 1saat çevrimi harcar |
RETFIE
|
yok
|
Bir kesmeden geri döner.
|
RETLW n
|
yok
|
W yazmacında bir n değeriyle alt rutinden geri dön.
Örnek:
RTLW 20H; W yazmacında 20H ile +1 adresini çağırmaya geri döner. Örnek: RETLW 20H; alt rutinin çağrıldığı adres +1 adresine W yazmacında 20H değerini taşıyarak geri döner |
RETURN
|
yok
|
W yazmacının içeriğini olduğu gibi bırakarak bir alt
rutinden geri döner.
|
RLF f,d
|
C
|
Tüm bit'leri birer sola kaydır veya taşı. Bit 7 taşıma
bit'i de ve taşıma bit'i 0 bit'i olacaktır. Sonuç hedef d'ye yerleştirilir.
|
RRF f,d
|
C
|
Tüm bitleri birer sağa kaydır veya taşı.0 bit'i taşıma
bit'i taşıma
|
SLEEP
|
TO,PD
|
PIC uyuma veya bekleme durumuna getirilmiştir. Yazmaç
içerikleri dondurulmuştur ve PIC işletim akımının bir kısmını çeker. Uyuma
durumundan çalışma durumuna geçerken 16C5x ailesi reset vektörüne atlar.
16Cxx ailesiyse izleyen kod hattında devam eder.
|
SUBLW n
|
C,DC,Z
|
W değeri n'den çıkarılır ve sonuç W' ya yerleştirilir.
|
SUBWF f,d
|
C,DC,Z
|
F dosyasından W yazmacı içeriğini çıkarır ve sonucu hedef
d'nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
|
SWAPF f,d
|
yok
|
f saklayıcısının içerisindeki ilk dört bit ile son dört
biti yer değiştirir. d'nin değerine göre sonuç W veya f saklayıcılarına
yazılır.
|
XORLW deger
|
Z
|
W içeriğini deger ile birlikte XOR işlemine tabi tut.
sonuç w ye yazılır.
|
XORWF f,d
|
Z
|
W içeriği ve f dosyasını XOR işlemine tabi tutar Ve sonucu
hedef d'nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
|
Hiç yorum yok:
Yorum Gönder