129 Sayfalık PiC öğreniyorum Kitabı =Tavsiye= pdf

Klavyeah

Üye
Katılım
28 Ağu 2006
Mesajlar
269
Puanları
1
Yaş
39
product-box.jpg



MiKROişLEMCi NEDiR?

Günümüzde kullanılan bilgisayarların özelliklerinden bahsedilirken duyduğunuz 80386, 80486, Pentium-ll,
Pentium-lll birer mikroişlemcidir (Microprocessor). Mikroişlemciler bilgisayar programlarının yapmak istediği tüm işlemleri
yerine getirdiği için, çoğu zaman merkezi işlem ünitesi (CPU- Central Processing Unit) olarak da adlandırılır. PC adını
verdiğimiz kişisel bilgisayarlarda kullanıldığı gibi, bilgisayarla kontrol edilen sanayi tezgahlarında ve ev aygıtlarında da
kullanılabilmektedir. Bir mikroişlemci işlevini yerine getirebilmesi için aşağıdaki yardımcı elemanlara ihtiyaç duyar. Bunlar:

1. Input (Giriş) ünitesi.
2. Output (çıkış) ünitesi.
3. Memory (Bellek) ünitesi.
Bu üniteler CPU chip'inin dışında, bilgisayarın ana kartı üzerinde bir yerde farklı chip'lerden veya elektronik
elemanlardan oluşur. Aralarındaki iletişimi ise veri yolu (Data bus), adres yolu (Address bus) denilen iletim hatları yapar.
Intel, Cyrix, AMD, Motorola mikroişlemci üreticilerden birkaçıdır, Günümüzde mikroişlemciler genellikle PC
adını verdiğimiz kişisel bilgisayarlarda kullanılmaktadır.

MiKRODENETLEYiCi NEDiR?

Bir bilgisayar içerisinde bulunması gereken temel bileşenlerden RAM, I/O ünitesinin tek bir chip içerisinde
üretilmiş biçimine mikrodenetleyici (Microcontroller) denir. Bilgisayar teknolojisi gerektiren uygulamalarda kullanılmak
üzere tasarlanmış olan mikrodenetleyiciler, mikroişlemcilere göre çok daha basit ve ucuzdur. Günümüz mikrodenetleyicileri
otomobillerde, kameralarda, cep telefonlarında, fax-modem cihazlarında, fotokopi, radyo, TV, bazı oyuncaklar gibi
sayılamayacak kadar pek çok alanda kullanılmaktadır.
Günümüz mikrodenetleyicileri birçok chip üreticisi tarafından üretilmektedir. Her firma ürettiği chip'e farklı isimler
vermektedir. örneğin Microchip firması ürettiklerine PIC adını verirken, Intel'in ürettiği ve 1980'lerin başında piyasaya
sürdüğü 8051, bazen MCS-51 olarak da adlandırılır.
Neden Mikroişlemci Değil de Mikrodenetleyici Kullanılıyor?
Mikro işlemci ile kontrol edilecek bir sistemi kurmak için en azından şu üniteler bulunmalıdır; CPU, RAM, I/O ve
bu ünitelerin arasındaki veri alış verişini kurmak için DATA BUS (data yolu) gerekmektedir. Elbette bu üniteleri
yerleştirmek için baskılı devreyi de unutmamak gerekmektedir. Mikrodenetleyici ile kontrol edilecek sistemde ise yukarıda
saydığımız ünitelerin yerine geçecek tek bir chip (Mikrodenetleyici) ve bir de devre kartı kullanmak yetecektir. Tek chip
kullanarak elektronik çözümler üretmenin maliyetinin daha düşük olacağı kesindir. Ayrıca da kullanım ve programlama
kolaylığı da ikinci bir avantajıdır. işte yukarda saydığımız nedenlerden dolayı son zamanlarda bilgisayar kontrolü gerektiren
elektronik uygulamalarda mikrodenetleyici kullanmaya eğilimin artmasının haklılığını ortaya koyuyor.


MiKRODENETLEYiCiLER HAKKINDA GENEL BiLGiLER


Neredeyse her mikroişlemci (CPU) üreticisinin ürettiği birkaç mikrodenetleyicisi bulunmaktadır. Bu
denetleyicilerin mimarileri arasında çok küçük farklar olmasına rağmen aşağı yukarı aynı işlemleri yapabilmektedirler. Her
firma ürettiği chip'e bir isim ve özelliklerini birbirinden ayırmak için de parça numarası vermektedir. örneğin Microchip
ürettiklerine PIC adını, parça numarası olarak da 12C508, 16C84, 16F84, 16C711 gibi kodlamalar verir. Intel ise ürettiği
mikrodenetleyicilere MCS-51 ailesi adını vermektedir. Genel olarak bu adla anılan mikrodenetleyici ailesinde farklı
özellikleri bulunan ürünleri birbirinden ayırt etmek için parça numarası olarak da 8031AH, 8051AH, 8751AHP, 8052AH,
80C51FA gibi kodlamalar kullanılmaktadır.
Bir uygulamaya başlamadan önce hangi firmanın ürünü kullanılacağına, daha sonra da hangi numaralı denetleyicinin
kullanılacağına karar vermek gerekir. Bunun için mikrodenetleyici gerektiren uygulamada hangi özelliklerin olması gerektiği
önceden bilinmesi gereklidir. Aşağıda bu özellikler sıralanmıştır:
• Programlanabilir dijital paralel giriş/çıkış.
• Programlanabilir analog giriş/çıkış.
• Seri giriş/çıkış ( senkron, asenkron ve cihaz denetimi gibi).
• Motor veya servo kontrol için pals sinyali çıkışı.
• Harici giriş vasıtasıyla kesme.
• Timer vasıtasıyla ile kesme.
• Harici bellek arabirimi.
• Harici bus arabirimi (PC ISA gibi).
• Dahili bellek tipi seçenekleri(ROM, EPROM, PROM ve EEPROM).
• Dahili RAM seçeneği.
• Kayan nokta hesaplaması.
Daha da ayrıntıya girecek olursak bu listede sıralanacak özellikler uzayıp gidecektir. şimdi de bizim bu kitapta ele
aldığımız Microchip'in ürünü olan PIC'i neden seçtiğimize değinelim. Microchip, 8-bit'lik mikrodenetleyici ve EEPROM
üreten bir Amerikan şirketidir. Arizona eyaletinde iki, Tayland ve Tayvan'da da birer tane olmak üzere toplam dört fabrika ile
kendi alanında dünyada söz sahibi olan bir chip üreticisidir.
Neden PIC?
Bilgisayar denetimi gerektiren bir uygulamayı geliştirirken seçilecek mikrodenetleyicinin ilk olarak tüm isteklerinizi
yerine getirip getirmeyeceğine, daha sonra da maliyetinin düşüklüğüne bakmalısınız. Ayrıca, yapacağınız uygulamanın
devresini kurmadan önce seçtiğiniz mikrodenetleyicinin desteklediği bir yazılım üzerinde simülasyonunu yapıp
yapamayacağınızı da dikkate almalısınız.
Yukarda saydığımız özellikleri göz önüne aldığımızda Microchip'in ürettiği PIC'leri kullanmak en akılcı bir yol olduğunu
görülmektedir. işte, bu kitapta PIC'leri ele alınmamızın nedenlerini şöyle sıralayabiliriz.
• Yazılımın Microchip'ten veya internetten parasız olarak elde edilebilmesi.
• çok geniş bir kullanıcı kitlesinin bulunması.
• PIC'lerin çok kolaylıkla ve ucuz olarak elde edilebilmesi.
• Elektronikle hobi olarak uğraşanların bile kullanabildikleri basit elemanları kullanarak yapılan donanımla
programlanabilmesi.
• çok basit reset, clock sinyali ve güç devreleri gerektirmeleri.
PIC, adını ingilizce'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 ışık sensörü gibi 1/0 elemanların denetimini çok hızlı
olarak yapabilecek şekilde dizayn edilmiş bir chip'tir. RISC mimarisi adı verilen bir yöntem kullanılarak üretildiklerinden bir
PIC'i programlamak için kullanılacak olan komutlar oldukça basit ve sayı olarak da azdır. 1980'lerin başından itibaren
uygulanan bir tasarım yöntemi olan RISC (Reduced Instruction Set Computer) mimarisindeki temel düşünce, daha basit ve
daha az komut kullanılmasıdır. örneğin PIC16F84 microdenetleyicisi toplam 35 komut kullanılarak programlanabilmektedir.


Neden PIC16F84?


Bu kitapta programlanması ve örnek uygulamaları verilen PlC'in 16F84 serisi olmasının en önemli nedeni: PIC16F84
(veya PIC16F84A) mikrodenetleyicisinin program belleğinin flash teknolojisi ile üretilmiş olmasıdır.
Flash memory teknolojisi ile üretilen bir belleğe yüklenen program, chip'e uygulanan enerji kesilse bile silinmez. Yine
bu tip bir belleğe istenirse yeniden yazılabilir. Flash bellekler bu özellikleri ile EEPROM bellekler ile aynı görünmektedirler.
Gerçekten de Flash ile EEPROM bellek aynı şeylerdir. Ancak bazı üreticiler tarafından EEPROM belleğe Flash ROM da
denilmektedir.
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 memory'si 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 programı bellekten
silmek için en azından 10-15 dk beklemek zorunda kalınacaktır. işte PIC16F84'ün bu özelliği mikrodenetleyici kullanmaya
yeni başlayanlar için ideal bir seçenektir.
PIC16F84'ü seçmemizin ikinci nedeni de, programlama donanımının çok ucuz ve kullanışlı olması ve hatta çoğu
meraklı elektronik kullanıcı tarafından bile üretilebilmesidir. Kitabın Ekler bölümünde adresini verdiğimiz firmanın ürettiği
programlayıcı donanımı ve yazılımı ödemeli olarak istenebilmesi Türkiye'deki kullanıcılar için çok büyük bir avantajdır.
PIC16F84'ü programlamak için öğrendiğiniz her şeyi diğer PIC 16/17 mikrodenetleyicilerinin uygulamalarında da
'kullanabilmeniz, yapılan seçimin doğruluğunu göstermektedir.

PIC PROGRAMLAMAK içiN NELERE iHTiYACINIZ VAR?

PIC 16/17 mikrodenetleyicilerin programlamasını ve uygulamalarda nasıl kullanılacağını öğrenmek için neleri bilmek
ve nelere sahip olunması gerekenler aşağıda sıralanmıştır:
• IBM uyumlu bir bilgisayara sahip olmak ve temel kullanımları bilmek.
• Bir metin editörünü kullanmasını bilmek.
• Bir assembler programına sahip olmak.
• PIC programlayıcı donanımına sahip olmak.
• PIC programlayıcı yazılımı.
• PIC
• Programlanmış PIC'i denemek için breadboard, güç kaynağı ve elektronik elemanlar.
• Programlanmış bir PIC'i deneme kartı.
IBM Uyumlu Bilgisayar
Assembly program kodlarını kolayca yazabilmek, doğru ve hızlı bir şekilde PIC'in program belleğine gönderebilmek
için bilgisayara ihtiyaç vardır. Bir metin editörü kullanarak yazılan program kodları, derlendikten sonra PIC'e gönderilmesi
gerekir. Program kodlarının PIC'e yazdırma işlemi paralel veya seri porta bağlanan bir elektronik devre aracılığı ile yapılır.
Bu işleri yapabilmek için bilgisayarın temel kullanım fonksiyonlarını bilmeniz gerekir. Aşağıda bilmeniz gereken bazı temel
işlemleri ve sahip olmanız gereken minimum konfigürasyonu veriyoruz:
• DOS ya da VVINDOVVS işletim sistemi bildiğinizi, bu işletim sistemi. komutlarıyla klasör oluşturma, dosya
kopyalama ve silme, listeleme gibi işlemleri yapabildiğinizi.
• Basit bir editör (EDIT, Notpad gibi) kullanabildiğinizi, bu editörde bir text dosyası oluşturup disket ya da hard
diske kaydedebildiğinizi, diskteki bir dosyayı yükleyip üzerinde düzeltmeler yapabileceğinizi,
• Minimum 80486 CPU, 4 MB RAM, 100 MB harddisk ve CD-ROM sürücüsü (Microchip'in CD'lerini
kullanabilmek için) bulunan bir PC'ye sahip olduğunuzu kabul ediyoruz.
Metin Editörü
Assembly dili komutlarını yazıp bir metin dosyası oluşturmak için EDIT veya NotPad gibi bir editörü
kullanabilmeniz gerekir. isterseniz ASM uzantılı metin dosyalarınızı yazabileceğiniz PFE editörünü de kullanabilirsiniz. Bu
editörün hem DOS hem de VVINDOVVS altında çalışan versiyonları bulunmaktadır ve PIC konusunda destek veren bir
internet sitesinden alınmıştır. Ekler bölümünde adını verdiğimiz firma da bu programı disket içerisinde sunmaktadır.
Assembler Programı
PIC Assembly dili adı verilen ve toplam 35 komuttan oluşan programlama dilini bu kitapta öğreneceksiniz. Bu
komutları basit bir editörde yazabiliyoruz. Ancak, ingilizce'deki bazı kelimelerin kısaltmasından oluşan bu dilin komutlarını
PIC'in anlayabileceği makine diline çeviren bir programa ihtiyacımız vardır. Bu programa assembler adını veriyoruz. Text
dosyası biçiminde kaydedilmiş olan assembly dili komutlarını makine diline çeviren MPASM'nin hem DOS altında hem de
WINDOWS altında çalışan versiyonu bulunmaktadır. Bu program Microchip firmasının internetteki www.microchip.com
adlı sitesinden parasız olarak download edilebileceği gibi kitabın Ekler bölümünde adresi verilen firmadan da elde
edebilirsiniz. MPASM'nin kullanımı hakkında detaylı bilgiyi 5. bölümde bulacaksınız.
Microchip bir de içerisinde hem metin editörü hem MPASM assembler programını bulunduran MPLAB programını
PIC programlayıcılarının kullanımına sunmaktadır. Bu programın bulunduğu CD-ROM yine www.microchip.com adresinden
parasız olarak istenebilir. MPLAB'ın kurulumu ve kullanılmasıyla ilgili gerekli detay bilgiyi Ekler bölümünde bulacaksınız.
Yukarıda (sağda) PIC16F84 ve PIC16C84 mikrodenetleyicileri programlayabileceğiniz, çok basit bir donanımı
bulunan programlama kartı resmi verilmiştir. Bu kartla ilgili detaylı bilgiyi Ekler bölümünde bulacaksınız.
PIC Programlayıcı Yazılımı
MPASM tarafından derlenerek makine diline dönüştürülmüş assembly programı kodlarının PIC'e yazdırılmasında
kullanılan bir programa gereksinim vardır. Programlayıcı yazılımları, PIC'i programlamak için kullanılan elektronik karta
bağımlıdır. Yani her programlayıcı yazılımı ile elinizde bulunan karta kod gönderemeyebilirsiniz. Genellikle programlama
kartı üreticileri, ürettikleri karta uygun yazılımı da birlikte sunarlar. Biz bu kitapta ProtoPIC programlama kartına gönderdiği
kodlarla PIC'ieri sorunsuz olarak programlayan P16PRO adlı yazılımı kullandık ve nasıl kullanılacağını anlattık. P16PRO'yu
Windows ortamından da çalıştırabileceğiniz için bu size büyük kolaylık sağlayacaktır.
Programlanmış PIC'i Deneme Kartı
Programladığınız PIC'i breadboard üzerinde kendi kurduğunuz devre de deneyebileceğiniz gibi şekilde görülen özel
bir deneme kartı üzerinde de deneyebilirsiniz. Başlangıç ve orta düzey PIC programlayıcılara hitap etmek üzere geliştirilen
bu kart üzerinde deneme yapmak, breadbord üzerinde devre kurmaktan çok daha kolaydır. PIC'in port çıkışlarındaki
sinyalleri izlemek amacıyla 8 tane LED, bir tane de 7 segmentli LED yerleştirilmiştir. Kart üzerindeki, butonlar,
potansiyometre ve LED'ler aracılığıyla farklı şekilde programlanan PIC'lerin kolayca denenmesini sağlanır. Bu kartın yapısı
ve kullanılması hakkında Ekler bölümünde geniş bilgi bulacaksınız.​
 
PİC ÖZELLİKLER

PIC ÇEŞİTLERİ
PIC’LERİN GÖRÜNÜŞÜ
PIC BELLEK ÇEŞİTLERİ

PIC ÇEŞİTLERİ


Microchip ürettiği mikrodenetleyicileri 4 farklı gruba (Genellikle aile diye adlandırılır.) ayırarak isimlendirmiştir. PIC
ailelerine isim verilirken kelime boyu (VVord lenght) göz önüne alınmıştır. Şimdi kelime boyunun ne anlama geldiğine
bakalım. Microprocessor veya mikrodenetleyiciler kendi içlerindeki dahili veri saklama alanları olan registerleri arasındaki
veri alış verişini farklı sayıdaki bit'lerle yaparlar. Örneğin 8088 mikro işlemcisi chip içerisindeki veri alış verişini 16-bit ile
yaparken, Pentium işlemcileri 32-bit'lik verilerle iletişim kurarlar. Bir CPU veya MCU'nun dahili veri yolu uzunluğuna
kelime boyu denir.
Microchip PIC'leri 12/14/16 bit'lik kelime boylarında üretmektedir ve buna göre aşağıdaki aile isimlerini vermektedir.

PIC16C5XXailesi 12-bit kelime boyu,
PIC16CXXX ailesi 14-bit kelime boyu,
PIC17CXXX ailesi 16-bit kelime boyu,

PIC12CXXX ailesi 12-bit/14-bit kelime boyuna sahiptir.
Bir CPU veya MCU'nun chip dışındaki harici ünitelerle veri alışverişini kaç bit ile yapıyorsa buna veri yolu bit sayısı
denir. PIC'ler farklı kelime boylarında üretilmelerine rağmen harici veri yolu tüm PIC ailesinde 8-bit'tir. Yani bir PIC, I/O
portu aracılığı ile çevresel ünitelerle veri alışverişi yaparken 8-bit'lik veri yolu kullanır.
PIC programlayıcıları program kodlarını yazarken bir komutun kaç bit'lik bir kelime boyundan oluştuğuyla pek fazla
ilgilenmezler. Seçilen bir chip'i programlarken uyulması gereken kuralları ve o chip'le ilgili özelliklerin bilinmesi yeterlidir.

Bu özellikler PIC'in bellek miktarı, I/O portu sayısı, A/D dönüştürücüye sahip olup olmadığı, kesme (interrupt)
fonksiyonlarının bulunup bulunmadığı, bellek tipinin ne olduğu (Flash, EPROM, EEPROM vb.) gibi bilgilerdir. Bu
özelliklerin en son değişikliklerini içeren güncel ve tam bir listesine microchip'in kataloglarından ulaşmak mümkündür.

Aşağıdaki tabloda Nisan 1997 tarihine kadar üretilen PIC'lerin listesi verilmiştir. Katalogdan alınan bu tablo orijinali
bozulmadan özellikle İngilizce olarak verilmiştir. Çünkü bu gibi bilgilere ulaşmak istenildiğinde Türkçe kataloglar bulmak
mümkün değildir. Böylece katalog okurken PIC'lerle ilgili özellikleri veren İngilizce kelimeleri öğrenmeye zorlanmış
olacaksınız. Tablo içerisinde anlayamadığınız kelimelerin anlamlarını kitabın sonundaki sözlükten bulabilirsiniz.

PIC'LERIN DIŞ GÖRÜNÜŞÜ

PIC'ler çok farklı ambalajlarla piyasaya sunulmaktadırlar. Bu kitapta
program örnekleri verilen PIC16F84, 18-pinli DIP tipinde
ambalajlanmış olanıdır. Standart DIP (Dual In-Line Package) olarak
ambalajlanmış olan PIC'ler 0.3 inç genişliğindedir. Her iki tarafında
0.1 inç aralıklarla yerleştirilmiş 9 pin bulunmaktadır. PIC16F84 şekil-a
da görülmektedir. Şekil-b de ise 0.6 inç genişliğinde, her iki tarafında
0.1 inç aralıklarla yerleştirilmiş 20 pini bulunan PIC16C74
görülmektedir. Bu örneklerin dışında farklı pin sayısına sahip başka
DIP ambalajlı PIC'ler de bulunmaktadır. Geniş bilgi için Microchip'in
kataloglarına bakmanızı öneririz.

PIC BELLEK ÇEŞİTLERİ

Farklı özellikte program belleği bulunan PIC'ler microchip firması tarafından piyasaya sürülmektedir. Bunlar:
• Silinebilir ve programlanabilir bellek (Erasable PROgrammable Memory-EPROM).
• Elektriksel olarak silinebilir ve programlanabilir bellek (Electrically Erasable PROgrammable Memory-EEPROM).
FLASH bellek olarak da adlandırılır.
• Sadece okunabilir bellek (Read-Only Memory-ROM).
Her bir bellek tipinin kullanılacağı uygulamaya göre avantajları ve dezavantajları vardır. Bu avantajlar; fiyat, hız,
defalarca kullanmaya yatkınlık gibi faktörlerdir.
EPROM bellek hücrelerine elektrik sinyali uygulayarak kayıt yapılır. EPROM üzerindeki enerji kesilse bile bu program
bellekte kalır. Ancak silip yeniden başka bir program yazmak için ultra-viole ışını altında belirli bir süre tutmak gerekir. Bu
işlemler EPROM silici denilen özel aygıtlarla yapılır. EPROM bellekli PIC'ler iki farklı ambalajlı olarak bulunmaktadır:
• Seramik ambalajlı ve cam pencereli olan tip, silinebilir olan tiptir.
• Plastik ambalajlı ve penceresiz olan tipler ise silinemez (OTP) tiptir.
Seramik ambalajlı ve pencereli olan bellek içerisindeki programın silinmemesi için pencere üzerine ışık geçirmeyen bir
bant yapıştırılır. Ultra-viole ışığı ile silinmesi istenildiğinde bu pencere açılır ve silici aygıt içerisinde belirli bir süre
bekletilir. Plastik ambalajlı EPROM'lar ise programlandıktan sonra silinmesi mümkün değildir ve fiyatı silinebilen tipe göre
oldukça ucuzdur. Silinemeyen tipe OTP (One Time Programmable - Bir defa programlanabilir) olarak adlandırılır.
EEPROM belleği bulunan bir PIC içerisine program yazmak için PIC programlayıcı vasıtasıyla elektriksel sinyal
gönderilir. EEPROM üzerindeki enerji kesilse bile bu program bellekte kalır. Programı silmek veya farklı yeni bir program
yazmak istendiğinde PIC programlayıcıdan elektriksel sinyal gönderilir. Bu tip belleğe sahip olan PIC'ler genellikle
uygulama geliştirme amacıyla kullanılırlar. Microchip bu tip belleğe çoğu zaman FLASH bellek olarak da adlandırmaktadır.
Fiyatları silinemeyen tiplere göre biraz pahalıdır. Bellek erişim hızları ise EPROM ve ROM'lara göre daha yavaştır. PIC
16C84 ve PIC 16F84'ler bu tip program belleğine sahiptir.
ROM program belleğine sahip PIC'lerin programları fabrikasyon olarak yazılırlar. EPROM ve EEPROM eşdeğerlerine
nazaran fiyatları oldukça düşüktür. Ancak fiyatının düşüklüğünden dolayı gelen avantaj bazen çok pahalıya da mal olabilir.
ROM bellekli PIC programlarının fabrikasyon olarak yazılması nedeniyle PIC'in elde edilme süresi uzundur. Programda
oluşabilecek bir hatanın PIC'e program yazıldıktan sonra tespit edilmesi, eldeki tüm PIC'lerin atılmasına da neden olabilir. Bu
tip PIC'ler çok miktarda üretilecek bir ürünün maliyetini düşürmek amacıyla seçilir. Program hataları giderilemediği için
uygulama geliştirmek için uygun değildir. Microchip, ROM program bellekli PIC'lere parça numarası verirken "CR"
(PIC16CR62, PIC16CR84 gibi) harfleri kullanılır.




CMOS teknolojisi ile üretilmiş olan PIC16F84 çok az enerji harcar. Flash belleğe sahip olması nedeniyle clock
girişine uygulanan sinyal kesildiğinde registerleri içerisindeki veri aynen kalır. Clock sinyali tekrar verildiğinde PIC
içerisindeki program kaldığı yerden itibaren çalışmaya başlar. RAO-RA3 pinleri ve RBO-RB7 pinleri I/O portlandır. Bu
portlardan girilen dijital sinyaller vasıtasıyla PIC içerisinde çalışan programa veri girilmiş olur. Program verileri
değerlendirerek portları kullanmak suretiyle dış ortama dijital sinyaller gönderir. Dış ortama gönderilen bu sinyallerin akımı
yeterli olmadığı durumda yükselteç devreleri (röle, transistör v.s) ile yükseltilerek kumanda edilecek cihaza uygulanır.
Portların maksimum sink ve source akımlan aşağıda verilmiştir. Bu akımlar genellikle bir LED sürmek için yeterli
olduğundan, bu kitapta verilen uygulama devrelerinde herhangi bir yükseltme işlemi yapılmamıştır.
I/O pini
Sink akımı 25 mA
Source akımı 20 mA
Hatırlatma amacıyla sink ve source akımlarının ne olduğudan bahsedelim. Sink akımı, gerilim kaynağından çıkış
potuna doğru akan akıma, source akımı ise 1/0 pininden gnd ucuna doğru akan akıma denir.
PIC16F84'ün çektiği akım, besleme gerilimine, clock girişine uygulanan sinyalin frekansına ve l/O pinlerindeki yüke
bağlı olarak değişir. Tipik olarak 4 MHz'lik clock frekansında çektiği akım 2 mA' kadardır. Bu akım uyuma modunda (Sleep
mode) yaklaşık olarak 40 ^A' e düşer. Bilindiği gibi CMOS entegrelerdeki giriş uçları muhakkak bir yere bağlanır. Bu
nedenle kullanılmayan tüm girişler besleme geriliminin +5V luk ucuna bağlanmalıdır.
PIC16C84 ve PIC16F84 özellikleri tamamen aynısı olan PIC'lerdir. Her ikisi de FLASH belleğe sahip olmalarına
rağmen Microchip ilk ürettiği EEPROM bellekli PIC'ler "C" harfi (C harfi CMOS'dan gelmektedir.) ile tanımlarken, son
zamanlarda ürettiği EEPROM bellekli PIC'leri "F" harfi (FLASH) ile tanımlamaktadır. Bizim bu kitapta örneklerini
verdiğimiz programlar için her iki PIC de kullanılabilir. PIC16F84A ile PIC16F84 arasında da herhangi bir fark yoktur. PIC'i
tanımlayan bu harf ve rakamlardan sonra yazılan 10/P, 04/P clock girişine uygulanacak maksimum frekansı belirtir. örneğin
10 MHz'e kadar frekanslarda PIC16F84-10/P kullanılırken, 4 MHz'e kadar frekanslarda PIC16F84-04/P kullanılabilir.
BESLEME GERiLiMi
PIC'in besleme gerilimi 5 ve 14 numaralı pinlerden uygulanır. 5 numaralı Vdd ucu +5 V'a, 14 numaralı Vss ucu da
toprağa bağlanır. PIC'e ilk defa enerji verildiği anda meydana gelebilecek gerilim dalgalanmaları nedeniyle istenmeyen
arızaları önlemek amacıyla Vdd ile Vss arasına 0.1 μF lık bir dekuplaj kondansatörü bağlamak gerekir. PIC'ler CMOS
teknolojisi ile üretildiklerinden çok geniş besleme gerilimi aralığında (2 ~ 6 V) çalışmalarına rağmen 5 V luk gerilim
deneyler için ideal bir değerdir.
CLOCK UçLARI ve CLOCK OSiLATöRü çEşiTLERi
PIC belleğinde bulunan program komutlarının çalıştırılması için bir kare dalga sinyale ihtiyaç vardır. Bu sinyale clock
sinyali denilir ve Türkçe'de "klok" olarak okunur. PlC16F84'ün clock sinyal girişi için kullanılan iki ucu vardır. Bunlar
OSC1(16 pin) ve OSC2 (15.pm) uçlarıdır. Bu uçlara farklı tipte osilatörlerden elde edilen clock sinyalleri uygulanabilir.
Clock osilatör tipleri şunlarıdır:
RC - Direnç/kondansatör (Resistor/Capacitor).
XT - Kristal veya seramik resonatör (Xtal).
HS - Yüksek hızlı kristal veya seramik resonatör (High Speed ).
LP - Düşük frekanslı kristal (Low Power).
Seçilecek olan osilatör tipi PIC'in kontrol ettiği devrenin hız gereksinimine bağlı olarak seçilir. Aşağıdaki tablo hangi
osilatör tipinin hangi frekans sınırları içerisinde kullanılabileceğini gösterir.
Osilatör tipi Frekans sınırı
RC 0 – 4 MHz
LP 5 – 200 KHz
XT 100 KHz – 4 MHz
HS (-04) 4 MHz
HS (-10) 4 – 10 MHz
HS (-20) 4 – 20 MHz
PIC'e bağlanan clock osilatörünün tipi programlama esnasında PIC içerisinde bulunan konfigürasyon bitlerine
yazılmalıdır. Osilatör tipini belirten kodları (RC, XT, HS ve LP) kullanarak konfigürasyon bitlerinin nasıl yazılacağı
programlama örnekleri verilirken detaylı olarak incelenecektir.
RC clock osilatörü, PIC'in kontrol ettiği elektronik devredeki zamanlamanın çok hassas olması gerekmediği durumda
kullanılır. Belirlenen değerden yaklaşık %20 sapma gösterebilirler. Bir direnç ve kondansatörden oluşan bu osilatörün
maliyeti oldukça düşüktür. OSC1 ucundan uygulanan clock frekansı R ve C değerlerine bağlıdır. şekilde RC osilatörün clock
girişine bağlanışı ve çeşitli R, C değerlerinde elde edilen osilatör frekansları örnek olarak verilmiştir.
R C fOSC (yaklaşık)
10 K 20 pF 625 KHz
10 K 220 pF 80 KHz
10 K 0,1 μF 85 KHz
RC osilatörün PIC’e bağlantısı ve örnek R, C değerleri
OSC1 ucundan uygulanan harici clock frekansının 1/4'ü OSC2 ucunda görülür. Bu clock frekansı istenirse devrede
kullanılan diğer bir elemanı sürmek için kullanılabilir.
Kristal kontrollü clock osilatörleri zamanlamanın çok hassas olması gerektiğinde kullanılır. Bu tip clock osilatörleri
metal bir kutu görünümündedir ve şekilde görülmektedir. Bu tip osilatörlere kondansatör bağlantısı gerekmez. PIC assembly
programlama dili ile yazılan zaman geciktirme (Time delay) döngülerinde yapılacak hesaplamaları kolaylaştırmak için
genellikle 4 MHz'lik kristal clock osilatörleri kullanılması tavsiye edilir. Bu durumda harici clock frekansı (OSC1) 4'e
bölündüğünde, dahili clock frekansı 1 MHz olur (OSC2). çoğu PIC assembly komutu bir komut saykılı süresinde (dahili
clock) çalıştığından, bir komutun işlevini gerçekleştirme süresi 1 mikro saniye olur. Bu süre ise deneysel çalışmalar için
oldukça uygundur.
Kristal ve kondansatör kullanılarak yapılan osilatörler de zamanlamanın önemli olduğu yerlerde kullanılır. Kristal
osilatörlerin kullanıldığı devrelerde kristale bağlanacak kondansatörün seçimine özen göstermek gerekır. Aşağıda hangi
frekansta kaç (μF lık kondansatör kullanılacağını gösteren tablo görülmektedir.
OSiLATöR TiPi FREKANS KONDANSATöR
LP 32 KHz 33 – 68 pF
200 KHz 15 – 47 pF
100 KHz 47 – 100 pF
XT 500 KHz 20 – 68 pF
1 MHz 15 – 68 pF
2 MHz 15 – 47 pF
4 MHz 15 – 33 pF
HS 8 MHz 15 – 47 pF
20 MHz 15 – 47 pF
Seçilen kondansatör değerlerinin yukarıdaki değerlerden yüksek olması, elde edilen kare dalgaların bozuk olmasına ve PIC'in
çalışmamasına neden olur. C1 ve C2 kondansatörlerin değerleri birbirine eşit olmalıdır.
Seramik resonatörler, içerisinde kondansatörleri hazır bulunan osilatörlerdir. Fiyatları ucuz ve hassastırlar
(+/- %1.3 ). Küçük bir seramik kondansatöre benzeyen resonatörlerin üç ucu vardır. Bu uçlardan ortadaki toprağa, diğer iki
ucu da OSC1 ve OSC2 uçlarına bağlanırlar. Hangi ucun OSC1'e bağlanacağı önemli değildir, her ikisi de bağlanabilir.
RESET UçLARI VE RESET DEVRESi
PIC16F84'ün besleme uçlarına gerilim uygulandığı anda bellekteki programın başlangıç adresinden itibaren
çalışmasını sağlayan bir reset devresi vardır. Bu reset devresi PIC içerisindedir ve "Power-on-reset" denir.
MCLR ucu ise kullanıcının programı kesip, kasti olarak başlangıca döndürebilmesi için kullanılır. PIC'in 4 numaralı
MCLR ucuna uygulanan gerilim 0 V olunca programın çalışması başlangıç adresine döner. Programın ilk adresten itibaren
tekrar çalışabilmesi için reset ucuna uygulanan gerilimin +5 V olması gerekir. Bir buton aracılığı ile reset işlemini yapan
devre şekilde görülmektedir.
I/O PORTLARI
PIC16F84'ün 13 adet giriş/çıkış portu vardır. Bunlardan 5 tanesine A portu (RAO-RA4), 8 tanesine de B portu (RBORB7)
denir. 13 portun her biri giriş ya da çıkış olarak kullanılabilir. PIC içerisinde adına TRIS denilen özel bir data
yönlendirme registeri vardır. Bu register aracılığı ile portların giriş/çıkış yönlendirmesinin nasıl yapılacağı hakkında detaylı
bilgiyi programlama konusunda bulacaksınız. I/O portlarından geçebilecek 25 mA lik bir sink akımı veya 20 mA lik source
akımı LED'leri doğrudan sürebilir. Bu akımlar aynı zamanda LCD, lojik entegre ve hatta 220 V luk şehir şebekesine bağlı bir
lambayı kontrol eden triyakı bile tetiklemeye yeterlidir. çıkış akımı yetmediği durumda yükselteç devreleri kullanarak daha
yüksek akımlara kumanda etmek mümkün olabilir.
B portunun 8 ucu, PIC içerisinde dahili olarak 50 KQ luk dirençlerle pull-up yapılmış gıbı etkı gösterir. Bu durum
şekilde temsili olarak görülmektedir PIC'in içerisinde gerçekte bir pull-up direnci değil, farklı bir mantıksal devre vardır.
Bu 8 pull-up direncinin tamamı option register içerisindeki yazılım aracığıyla iptal (Disable) edilebilir veya geçerli
(Enable) kılınabilir. Port uçlarından herhangi birisi çıkış olarak yönlendirildiğinde o uçtaki pull-up direnci otomatik olarak
iptal olur. PIC'e enerji verildiğinde (Power-on-reset) ise tüm pull-up'lar iptal edilir
A portunun 4. biti, TOCKI adı verilen harici timer/counter giriş ucu ile ortaklaşa kullanılır. Bu nedenle 16F84'ün pin
görünüşü üzerinde 3 numaralı pin ucuna RA4/TOCKI yazılmıştır. RA4 ucu çıkış otarak yönlendirildiğinde açık kollektör
ozellıgınden dolayı harici olarak muhakkak bir pull-up direncine bağlanmalıdır RA4 ucundan sadece sink akımı geçebilir,
kaynak (source) akımı vermesi mümkün değildir.
PIC16F84'üN BELLEği
PIC16F84 mikrodenetleyicisinin belleği, program ve RAM belleği olmak üzere iki ayrı bellek bloğundan oluşur.
Microchip'in kataloglarında PIC denetleyicilerin RISC işlemci olarak tanıtılmasının nedeni de budur. çünkü Harvard
Mimarisi ile üretilen RISC işlemcilerde program belleği ile data belleği birbirinden aynıdır. Oysa PC'lerde kullanılan çoğu
mikroişlemci mimarisinde böyle bir ayrım yoktur. Bu da demektir ki; burada ayrıntısına girmeye gerek görmediğimiz
nedenlerden dolayı mikroişlemciler, mikrodenetleyicilere göre komut işlemede daha yavaştırlar.
Program Belleği
PIC16F84'ün 1 Kbyte'lık program belleği vardır. Her bir bellek hücresi içerisine 14 bit uzunluğundaki program
komutları saklanır. Program belleği flash (elektriksel olarak yazılıp silinebilir.) olmasına rağmen, programın çalışması
esnasında sadece okunabilir.
PIC16F84'ün program belleği içerisinde sadece assembly komutları saklanır. Bu komutlar dışında RETLW komutu ile
birlikte kullanılan sınırlı miktarda data da yüklenilebilir.
NOT: Yukarıda PIC16F84'ün program bellek haritasındaki adresler gösterilirken sol tarafta heksadesimal notasyon
kullanılmıştır. PIC programlama esnasında da bellek adresleri bu şekilde yazılır. 0xXX heksadesimal notasyonunda X'ler 0~F
arasındaki herhangi bir sayıyı, "0x" ise bu sayıların heksadesimal
olduğunu belirtir. örneğin 0x0F, heksadesimal OF sayısı demektir. 0x3FF ise 3FF heksadesimal sayısını gösterir.
PIC16F84'ün program belleğine 14 bit uzunluğunda toplam 1024 tane komut yazılabilir. Bellek haritasında son bellek
adresinin 0x3FF=1023 gösterilmesinin nedeni, adresin 0'dan başlamasındandır. Adres 1'den başlasaydı son adres
0x400=1024 olacaktı.
RAM Bellek
PIC16F84'ün 0x00~0x4F adres aralığında ayrılmış olan RAM belleği vardır. Bu bellek içerisindeki file registerleri
içerisine yerleştirilen veriler PIC CPU'sunun çalışmasını kontrol ederler. File registerlerin bellek uzunluğu 8 bit'tir. Sadece
PCLATH registeri 5 bit uzunluğundadır. File register adı verilen özel veri alanlarının dışında kalan diğer bellek alanları,
normal RAM bellek olarak kullanılırlar. Yani bu alanlarda programda içerisindeki değişkenler için kullanılır.
PIC16F84'ün RAM belleği iki sayfadan (Bank'tan) meydana gelir. Bank0'daki registerlerin adresleri 0x00~0x4F
arasında, bank1'deki registerlerin adresleri de 0x80~0xCF arasındadır. Toplam 80 tane file register olmasına rağmen
programlamaya yeni başlayanlar bank1'de 80, bank 2'de 80 olmak üzere 160 register alanı olduğunu sanırlar. Oysa, dikkat
edilirse bazı özel amaçlı registerler her iki bank'ta da görülür. örneğin PCL, STATUS, PCLATH, INTCON gibi. Ayrıca
0x0C adresinden sonra RAM (data belleği) olarak kullanılan bölgedeki veriler 0x8C adresinden itibaren
gölgelendirilmiştir(shadowed). Gölgeleme, otomatik kopyalama işlemi olarak algılandığında anlaşılması daha kolay
olacaktır. örnekle izah edecek olursak: 0x8C adresine yazılan bir veri 0x00 adresinde de görülür. işte bu sebeplerden dolayı
160 değil toplam 80 file register alanı vardır.
Bir bank'taki registeri kullanabilmek için o bank'a geçmek gerekir. Bank değiştirme işlemi programlama örnekleri
verilirken detaylı olarak işlenecektir. Yalnız burada bir şeyden daha bahsetmek gerekir. Bazı özel registerlerin her iki bank'ta
da görülmesinin nedeni, bank değiştirme işlemine gerek duyulmaksızın kullanılabilmesi içindir.
NOT: File register haritası üzerinde adresleri verilmiş olan özel registerlerin işlevini ve nasıl kullanıldığını bu aşamada
anlamaya çalışmanız yararsız olacaktır. Programlama örnekleri verilirken çok daha kolay anlayacağınız düşünceyim.
W register
PIC16F84'ün RAM bellek alanında görülmeyen bir de W registeri vardır. W register bir akümülatör veya geçici
depolama alanı olarak düşünülebilir. W registerine direkt olarak ulaşmak mümkün değildir. Ancak diğer registerlerin
içerisindeki verileri aktarırken erişmek mümkündür. Bir PIC'te gerçekleşen tüm aritmetik işlemler ve atama işlemleri için W
register kullanma zorunluluğu vardır. örneğin iki register içindeki veriler toplanmak istendiğinde, ilk olarak registerlerden
birinin içeriği W registere aktarılır. Daha sonra da diğer registerin içerisindeki veri W registeri içerindekiyle toplanır. Bu
registerin kullanım özellikleri yine programlama konusunda detaylı olarak ele alınacaktır.
PIC ASSEMBLY
ASSEMBLER NEDiR?
PIC ASSEMBLY DiLi NEDiR?
PIC ASSEMBLY DILI YAZIM KURALLARI
PIC ASSEMBLY KONUTLARININ YAZILIş BiçiMi
SAYI VE KARAKTERLERiN YAZILIş BiçiMi
PIC ASSEMBLY KOMUTLARI
4
ASSEMBLER NEDiR?
Assembler, bir text editöründe assembly dili kurallarına göre yazılmış olan komutları PIC'in anlayabileceği
hexadesimal kodlara çeviren (derleyen) bir programdır. Microchip firmasının hazırladığı MPASM bu işi yapan assembler
programıdır. Assembler'e çoğu zaman compilerde (derleyici) denilir.
PIC ASSEMBLY DiLi NEDiR?
Assembly dili, bir PIC'e yaptırılması istenen işlerin belirli kurallara göre yazılmış komutlar dizisidir. Assembly dili
komutları ingilizce dilindeki bazı kısaltmalardan meydana gelir. Bu kısaltmalar genellikle bir komutun çalışmasını ifade eden
cümlenin baş harflerinden oluşur. Böylece elde edilen komut, bellekte tutulması kolay (mnemonic) bir hale getirilmiştir.
örneğin:
BTFSC (Bit Test F Skip if Clear) - File registerdeki bit'i test et, eğer sıfırsa bir sonraki komutu atla, anlamında
kullanılan ingilizce cümlenin kısaltmasıdır.
PIC ASSEMBLY DiLi YAZIM KURALLARI
PIC assembly programlarının yazılması için kullanılan text editörlerinden l.bölümde bahsetmiştik. Bu editörler
Windows altında çalışan NOTPAD veya DOS altında çalışan EDIT en uygunlarıdır. Bunların dışında printer kontrol
komutları içermeyen ve ASCII kodunda dosya üretebilen herhangi bir editör de kullanılabilir. MPLAB kullanıldığında ayrıca
bir editör kullanmaya gerek yoktur. çünkü MPLAB'ın içinde hem bir text editörü hem de MPASM bulunmaktadır.
MPASM assembler programının yazılan komutları doğru olarak algılayıp, PIC'in anlayabileceği heksadesimal kodlara
dönüştürebilmesi için şu bilgiler program içinde özel formatta yazılması gerekir:
• Komutları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,
Basit bir örnekle bu bilgilerin program içinde nasıl yazıldığını gösterelim. Program ilk olarak PIC16F84'e B portunun
8 ucunu da çıkış olarak tanıtacak. Daha sonra bu porttaki ilk dört bitini lojik 1, sonraki dört bitini de lojik 0 yapacak. Son
olarak program sonsuz bir döngüye girecektir. Bu işlemleri yapacak olan programın akış diyagramı ve komutları aşağıdaki
gibi olacaktır.
;-----PICTEST1.ASM------------- --------------10/3/2000 -------------
LIST P=16F84
;----------------------------------------------------------------------------------
; Adres tanımlama Bloğu
STATUS EQU 0x03
PORTB EQU 0x06
TRISB EQU 0x86
;----------------------------------------------------------------------------------
ORG 0x00 ;programı 0x00’dan başlat.
;----------------------------------------------------------------------------------
; portların durumunu belirleme bloğu
START
CLRF PORTB ; port B’nin içini sıfırla
BSF STATUS,5 ; BANK1’e geç
CLRF TRISB ; port B’nin uçlarını output yap
BCF STATUS,5 ; tekrar BANK0’a geç
;----------------------------------------------------------------------------------
; program bloğu
MOVLW 0x0F ; W registerine 0x0F’i yükle
MOVWF PORTB ; W’yi port B’ye yükle
;----------------------------------------------------------------------------------
; sonlandırma bloğu
DONGU
GOTO DONGU
END
;----------------------------------------------------------------------------------
Noktalı Virgül (;)
Baş tarafına (;) konulan satır, assembler tarafından hexadesimal kodlara dönüştürülmez. Bu satırlar programın
geliştirilmesi esnasında hatırlatıcı açıklamaların yazılmasında kullanılır. örneğin CLRF ile başlayan satırda "portB'nin içini
sıfırla" cümlesi, CLRF komutunun ne iş yaptığını açıklar. Programın bölümlerini birbirinden ayırmak için (-—-—— veya
=====) çizgileri kullanmak, programı görsel olarak daha okunur hale getirdiği gibi bu çizgiler arasına uyarılar ve açıklamalar
da yazılabilir.
Girintiler ve Program Bölümleri
Text editörlerinde birbirinden farklı uzunlukta girintiler veren TAB özelliği vardır. Bu özellikten yararlanarak
assembly komutları üç kolona bölünerek yazılır. Bir assembly programı temel olarak dört bölüme ayrılır. Bunlar: Başlık,
atama, program ve sonuç bölümleridir.
Assembler, yukarıda belirtildiği gibi
komutların üç kolona bölünerek yazılmış
olduğunu varsayar. Belirtilen kolona yazılmayan bir komut olduğunda ise bunu da kabul eder. Ancak, hexadesimal kodlara
dönüştürme (Compile) esnasında hataları bir uyarı (Warning) olarak belirtir. Assembly komutları yazılırken kolonlar arasında
verilen TAB'ların uzunluğu önemli değildir. SPACE tuşu ile verilen aralık da assembler tarafından TAB olarak algılanır.
Yukarıda verdiğimiz örnek, programlamaya yeni başlayanlar için karmaşık gelebilir. Ancak, uzun ve zor programlar
yazmaya başladıktan sonra açıklamalar yapılmış, bölümlere ayrılmış pic pogramlarının daha kullanışlı olduğu görülür. çünkü
programlar bu şekilde yazıldığında daha sonraki geliştirmelere açıktır. Aradan zaman geçse bile bir programı geliştirmek için
tekrar ele aldığınızda, program içerisine yazılan açıklamalar ihtiyacınız olan hatırlatmaları yapacaktır. şimdi de verdiğimiz
aynı örneği, her iki yazım biçimi arasındaki tercihi kendiniz yapabilmeniz için bölümler arasına boşluk vermeden,
açıklamaları silerek sadece üç kolon halinde yeniden yazalım.
LIST P=16F84
STATUS EQU 0x03
PORTB EQU 0x06
TRISB EQU 0x86
ORG 0x00
START
CLRF PORTB
BSF STATUS,5
CLRF TRISB
BCF STATUS,5
MOVLW 0x0F
MOVWF PORTB
DONGU
GOTO DONGU
END
Başlık
Programın en başındaki bilgilere başlık bölümü denilir.
========== PICTEST1.ASM =====================10/03/2000======
LIST P=16F84
Başlık bölümünde program dosyasının adı ve hazırlandığı tarih, istenirse hazırlayanın adı da yazılabilir. ilk satır, bir
açıklama satırıdır ve assembler tarafından derlenmez.
LIST P=16F84 satırı, programın hangi PIC için yazıldığını belirtir. LIST bir compiler bildirisidir. Yani compiler'i yönlendiren
bir komuttur ve yegane kullanış amacı yeri burasıdır.
Başlık bölümünde ayrıca verdiğimiz örnekte kullanılmayan iNCLUDE komutu da kullanılabilir. iNCLUDE komutu
adresleri sabit olan STATUS, PORTA, PORTB, TRISA, TRISB gibi özel registerlerin "atamalar" bloğunda adreslerini her
defasında belirtme zorunluluğunu ortadan kaldırmak için kullanılan bir compiler bildirisidir. Bu bildirinin kullanılışı ilerdeki
program örneklerinde daha detaylı olarak verilecektir.
Bu kitaptaki tüm program örnekleri verilirken yukarıdaki örnekte verdiğimiz başlığa benzer bir başlık kullanılacaktır.
Etiketler
PIC belleğindeki bir adresin atandığı, hatırlamayı kolaylaştıran kısaltmalardan meydana gelen sembolik isimlere
etiket denilir. örneğin PORTB etiketi, PIC16F84'ün file register belleğindeki B portunun bulunduğu adresi temsil eden
etikettir. Etiketler program içerisinde 1. kolona yazılır.
PORTB EQU 0x06 ifadesi program içerisinde yazıldıktan sonra B portunun hangi adreste olduğunu akılda tutmaya
gerek yoktur. EQU (eşitleme) ifadesidir. Bu ifade BASIC programlama dilindeki (=), PASCAL programlama dilindeki :)=)
ifade ile aynı anlamdadır. Programın herhangi bir yerinde PORTB etiketi kullanıldığında, B portunun adresi olan 0x06
yazılmış gibi işlem görür.
Birinci kolona yazılan ve adres atanmayan etiketler de kullanılabilir. örneğin START ve DONGU bu tip etiketlerdir.
Bu etiketler program akışını istenilen bir yere dallanmasını sağlamak amacıyla kullanılır. Program akışı yukarıdan aşağıya
doğru devam ederken GOTO DONGU komutu ile, akış DONGU yazılan etikete dallandırılır. Bu etiketin adresi bir özel
register adresi gibi fiziksel bir adres değildir. Bu şekilde tanımlanan bir etikete assembler otomatik olarak bir adres atar. Bu
adresi bizim bilmemiz gerekmez.
• Etiket tanımlarken uyulması gereken kurallar şunlardır:
• Etiketler 1. kolona yazılmalıdır.
• Etiketler bir harfle veya alt çizgi( _) ile başlamalıdır.
• Etiketler içerisinde Türkçe karakterler kullanılamaz.
• Etiketler bir assembly komutundan oluşamaz.
• Etiketlerin içerisinde alt çizgi, rakam, soru işareti bulunabilir.
• Etiketler en fazla 31 karakter uzunluğunda olabilir.
• Etiketlerde büyük/küçük harf duyarlılığı vardır. ("Döngü" olarak tanımlanmış bir etiketi program içerisinde
"döngü" yazarak kullanılamaz.)
Atama deyimi (EQU)
EQU deyimi PIC16F84'ün belleğindeki bir hexadesimal adresi belirlenen bir etikete atamak için kullanılır. Aşağıda
atama deyimine birörnek gösterilmiştir.
Sabitler
PIC assembly dilinde heksadesimal sayılar birer sabittir, Sabitler MOVLW ve bazı mantıksal ve aritmetik işlem
komutlarında kullanılırlar.
ORG Deyimi
ORG ingilizcedeki "origin" kelimesinden gelmektedir. ORG deyimi iki amaç için kullanılır.
• Program komutlarının hangi adresten itibaren başladığını gösterir.
• PIC16F84'ün Interrupt alt programlarının başlangıç adresini belirlemede kullanılır.
Sonlandırma Bloğu
PIC16F84'ün duraklama (halt) komutu yoktur. Programı belirli bir yerde duraklatmak için bazen sonsuz döngü
kullanılır.
DONGU
GOTO DONGU
END
Yukarıdaki sonsuz döngüde DONGU etiketine assembler otomatik olarak bir adres verir. GOTO DONGU komutu ise
program akışını devamlı olarak aynı adrese gönderir. Bu durumda program belirlenen adreste duraklatılmış olur.
END deyimi ise program komutlarının sona erdiğini assembler'a bildirir. Her program sonunda END deyimi muhakkak
kullanılmalıdır. Aksi halde program devam derlenirken dosya sonunun belirtilmediğini belirten bir hata mesajı verecektir.
Büyük ve Küçük Harflerin Kullanımı
PIC assembler komutlarının büyük veya küçük harfle yazılması önemli değildir. istenirse büyük/küçük harf
karışımı komutlarda kullanılabilir. örneğin Movlw, movlw, MOVLW komutları arasında hiçbir fark yoktur. Ancak etiketler
büyük/küçük harf duyarlıdır. Start ile START birbirinin aynısı değildir. Herhangi bir karışıklığa neden olmaması için hep
büyük veya hep küçük harf kullanmak en iyi seçimdir.
PIC ASSEMBLY KOMUTLARININ YAZILIş BiçiMi
PIC16F84'ün toplam 35 tane komutu vardır. Bu komutların yazılış biçimini üç grupta toplayabiliriz.
1. Byte-yönlendirmeli komutlar.
2. Bit-yönlendirmeli komutlar.
3. Sabit işleyen komutlar.
4. Kontrol komutları.
Komutların yazılış biçimlerini açıklarken bazı tanımlama harfleri kullanacağız. önce bu harflerin anlamlarını
verelim:
f = File register
d = destination (gönderilen yer)
d=0→W register
d=1→file register
k = Sabit veya adres etiketi b = Bit tanımlayıcı
b = Binary sayıları belirleyen harf (örneğin b'00001111' gibi)
d = Desimal sayıları belirleyen harf (örneğin d'16' gibi)
Byte-Yönlendirmeli Komutlar
örnek: MOVF 0x03, 0 ;0x03 adresindeki file registerin içeriğini W registeri içerisine kopyalanır.
MOVF STATUS , 0 ;STATUS registerin içeriği W registere kopyalanır.
MOVF STATUS ,1 ; STATUS registerinin içeriği yine kendi içine yazılır.
NOT: Byte-yönlendirmeli komutlarda destination (gönderilecek'' yer) belirleyen d'nin yazıldığı yere 0 veya 1 yazmak
hatırlatıcı olmayabilir. MPASM bunu dikkate alarak 0 yerine w, 1 yerine f yazmaya izin verir. MPASM'nin MS-DOS
versiyonunda ise w ve f harflerinin otomatik olarak kullanılmasına izin verilmez. Bu durumda her programın tanımlama
bölümünde aşağıdaki eşitlikler yazılmalıdır.
W EQU 0
F EQU 1
Bu eşitliklerden sonra komutlarda destination belirlemek için w ve f harfleri kullanılabilir. örneğin:
INCF, w ; SAY registerinin içeriği 1 arttırıldıktan sonra sonuç W registerine yazılır.(W=SAY+1)
INCF, f ; SAY registerinin içeriği 1 arttırıldıktan sonra sonuç yine SAY registeri içine yazılır.
(SAY=SAY+1)
Bit-Yönlendirmeli Komutlar
örnek: BCF 0x03, 5 ; 0x03 adresindeki registerin 5. bitini sıfırla
BSF STATUS, BESBIT ;STATUS registerinin BESBIT etiketiyle tanımlı olan bitini "1" yapar. (Tanımlama
bloğunda BESBIT EQU 5 yazılması gerekir.)
Sabit işleyen Komutlar
örnek: MOVLW 0x2F ;W registerine 2F heksadesimal sayısını yükler.
ADDLW b’00101111’ ;W registeri içerisindeki sayıya 00101111 binary sayısını ekler.
Kontrol Komutları
örnek: GOTO DONGU ;Program akışı DONGU olarak belirlenen etikete dallanır.
CALL TIMER ; Program akışı TIMER etiketi ile belirlenen adresteki alt programa dallanır.
NOT: Program içerisinde yazılan etiketlere assembler'in otomatik olarak adres verdiğini unutmayın.
SAYI VE KARAKTERLERiN YAZILIş BiçiMi
PIC assembly komutlarında sayılar heksadesimal, binary veya desimal formda kullanılabilir. Değişik kaynaklarda
kullanılan sayı ve karakter gösteriliş biçimleriyle karşılaştığınızda bunları okuyabilmeniz için aşağıda örnekler verilmiştir.
Heksadesimal sayılar
Heksadesimal sayılar "0x", "0" veya "h" harfleriyle başlamalıdır. örneğin, STATUS registerine 03 adresini atamak
için aşağıda gösterilen yazılış biçimleri kullanılabilir.
STATUS EQU 0X03
EQU 3
EQU 03
EQU 03h
EQU h’03’ (Bu kitapta örneklerde kullanılacak biçim)
MOVLW komutu ile W registeri içerisine yüklenecek olan FF heksadesimal sabitler ise aşağıdaki gibi yazılabilir.
MOVLW 0xFF
h’FF’
Eğer FF heksadesimal sayısını aşağıdaki gibi kullanmaya kalkarsanız çalışmaz
MOVLW FP
FFh
çünkü kural olarak heksadesimal sayılar muhakkak "0" veya "h" harfi ile başlamalıdır.
Binary Sayılar
Binary sayılar b harfi ile başlamalıdır. örneğin 00001010 binary sayısını W registeri içerisine yüklemek için
aşağıdaki gibi yazılmalıdır.
MOVLW b’00001010’
ANDLM b’00001111’
Desimal sayılar
Desimal sayıların başına d harfi konularak tırnak içerisinde yazılırlar. örneğin 15 desimal sayısı W registeri
içerisine yüklemek için aşağıdaki gibi yazılmalıdır.
MOVLW d’15’
MOVLW d’255’
ASCII Karakterler
Genellikle RETLVV komutu ile birlikte kullanılan ASCII karakterler tırnak içerisine alınarak aşağıdaki gibi yazılırlar.
RETLW ‘A’
RETLW ‘T’
PIC ASSEMBLY KOMUTLARI
Yer Değiştirme veya Yükleme Komutları
Komut ve örnek ingilizce tanımı Türkçe açıklaması
MOVLW k Move Literal to W K sabit değerini W registerine yükler.
MOVLW h ‘0F'
W<-OP
MOVF f,d Move f f registerinin içeriğini W veya f’e yükler.
MOVF TEST,0
d=0 W←TEST d=1 TEST←TEST


Devamı Ve Resimleri Ekten Temin Edebilirsiniz:


 

Ekli dosyalar

  • Pic_Ogreniyorum_Kitabi.rar
    2.8 MB · Görüntüleme: 1,396
Açıkçası step motor teknolojisini daha bugün öğrendim ve mekanik bir tasarım üzerinde çalışıyorum. Benim tasarımım yaklaşık olarak 10 kg kaldırabilecek güçte bir motorun 4 adım yaparak çalışmasını gerektiriyor. Pic programlama ile ilgili en ufak birşey bilmiyorum ve bu mekanizmayı kendim oluşturmak istiyorum. Bunun için alabileceğim hazır aksamlar var mıdır, varsa nelerdir?
 
Selamlar ben bi konuda yardım rica edecektim, şöyle bir devre düşündüm ama bir yerde takıldım; hareket sensörüm ilk hareketi algıladıktan 5 dk içinde tekrar hareket algılamaz ise pic bir led ile işaret versin. Bu konuda bir fikir verirmisiniz kısa bir programı olsa gerek. Teşekkürler.
 
Ya arkadsım ben bu pıcı nasıl ogrnıcem ya hep altş yayınlarını yayınlıyorlar okuldan ogrendıım 1 dıl var asemmbly bı tek onu bılıorum heve hevesım cok fazla hep pc eslıgınde yazdık denedık hıcccc uygulama yapmadık hıccc
 
bende bu kaynaktan çalışıyorum. PIC öğrenmek isteyenler için çok iyi bir kaynak
 
Gayet güzel bir döküman. Bende bu kaynaktan çalışıyorum. PIC ile ilgili birçok ayrıntıyı da veriyor.
 
Altas yayıncılığın bastığı serdar ÇIÇEK tarafından yazılmış olan CCS ILE PIC PROGRAMLAMA kitabı bu konudaki en iyi kitaplaran biri tavsiye ederim
 
pıc'i derleyici program olan MPLAB microchip'in sitesinde vardır. Oradan ücretsiz olarak indirebilirsiniz.
 

Forum istatistikleri

Konular
127,950
Mesajlar
913,850
Kullanıcılar
449,597
Son üye
CTure

Yeni konular

Geri
Üst