PIC Programlamaya Giriş
Hacettepe Robot Topluluğu
PIC Assembly Dersleri
1. Ders: PIC Programlamaya Giriş
HUNRobotX - PIC Assembly Dersleri
1. Ders: PIC Programlamaya Giriş
Yazan: Kutluhan Akman, Düzenleyen: Canol Gökel - 4 Haziran 2007
Mikroişlemci Nedir?
Mikroişlemci, ön belleğine yazılan programı işleterek istenilen çıkışlara yönlendiren birimdir.
Sayısal bilgisayarlar üç temel kısımdan (mikroişlemci, giriş/çıkış birimleri ve bellek) ve bunlara
ek olarak bazı destek devrelerden oluşur. Her bir temel kısım en basitten en karmaşığa kadar
çeşitlilik gösterir.
Mikroişlemci/Merkezi Đşlem Birimi (Central Proccesing Unit - CPU): Sistemin kalbidir. Birim
hesapları yapmak ve verileri idare etmek için 4, 8, 16, 32, 64 bitlik veri formatında çalışır, belki
gelecekte bu sayı çok artacaktır.
Giriş/Çıkış Birimi (Input/Output): Sayısal, analog ve özel fonksiyonlardan oluşur.
Mikroişlemcinin dış dünya ile ilişkisini sağlar. Mikroişlemciye verilen ve işlemlerden alınan
veriler bu birim üzerinden sağlanır.
Bellek: Mikroişlemcinin işleyeceği komutlar ve veriler belleklerde tutulur. Bilginin işlenmesi
sırasında ortaya çıkan ara değerler ve sonuçları da mutlaka belleklerde tutulmak zorundadur.
Mikrodenetleyici Nedir?
Mikrodenetleyici; mikroişlemci, giriş/çıkış birimleri ve bellekten oluşan bir entegredir.
Mikrodenetleyiciler bir yazılım olmadan hiçbir işe yaramayan bir plastik, metal ve temizlenmiş
kum yığınıdır. Kendisini kontrol eden bir yazılım olduğunda ise neredeyse sınırsız bir
uygulamaya sahiptir.
Mikrodenetleyicinin Avantajları
Mikrodenetleyicilerin mikroişlemcilere olan avantajları oldukça fazladır. Örneğin mikroişlemcili
bir sistem yapıldığında mikroişlemcinin yanısıra bellekler (RAM, ROM veya EPROM), giriş/çıkış
birimi ve buna benzer birçok sistem kullanılmaktadır. Bu karışık sistemin hem tasarlanması ve
yapımı zordur hem de maliyeti daha yüksektir. Mikrodenetleyicilerde bir sistemin
çalıştırılabilmesi için yalnızca bir mikrodenetleyici ve osilatör devresi yeterli gelmektedir.
Sistemde gerekli olan ön bellek ve G/Ç birimi mikrodenetleyici içinde bir yonga halindedir.
Assembly Dili Nedir?
Assembly, sadece 1'lerden ve 0'lardan oluşan makine dillerinin insanlar tarafından daha anlaşılır
hale getirilmesi ihtiyacından doğmuş bir programlama dilidir. Örneğin bir mikroişlemcinin bir
1. Ders: PIC Programlamaya Giriş
veriyi bir yerden başka bir yere taşıması için kullanılan 10011101 diye bir komut olduğunu
düşünelim. Đşte Assembly dilinin yaptığı iş bu komutu Đngilizce taşımak anlamına gelen "move"
eylemine ithafen MOV şekline dönüştürmektir. Yani programınızı yazarken siz 10011101 yerine
MOV yazarsınız, daha sonra Assembly derleyicisi bunu otomatik olarak 10011101 sayısal
ifadesine dönüştürür. Bu tür kelimeleri akılda tutmak sayısal ifadeleri akılda tutmaktan daha kolay
olduğundan hem kolay ve hızlı bir yazım sağlanır hem de önceden yazılmış olan programların
okunup anlaşılması kolaylaşır.
Assembly, programlama dillerinin en ilkelidir de diyebiliriz ama programlama dillerinde ilkellik
demek temellik demektir, bu da herhangi bir programlama dilinde yapmanız mümkün olmayan
şeyleri de bu dille yapabilmeniz anlamına gelir. Assembly dili mikroişlemcilerin asıl dili olan 0 ve
1'lerden oluşan dile en yakın dildir. Diğer dillerde yazdığımız programlar öncelikle Assembly
diline derlenirler (0 ve 1'lere) daha sonra makineye (işlemciye, denetleyiciye, bilgisayara)
iletilirler. Yani diğer dillerdeki herhangi bir komut kesinlikle Assembly dili kullanılarak
oluşturulabilir. Assembly dili, bu anlamda diğer dillerin yapı taşıdır, yani Assembly ile
yazılamayacak program yoktur ama diğer programlama dilleri ile yazılamayacak program çeşitleri
mutlaka mevcuttur. Tabii ki bu diğer diller gereksiz manasında anlaşılmamalıdır.
Eğer kapsamı küçük bir donanım için bir program yazıyorsak Assembly kullanarak çok daha
verimli programlar elde edebiliriz. Özellikle işlem kapasitesi küçük bir işlemci kullanıyorsak bir
önceki cümle geçerliliğini arttırır (pipelining ve paralel işleme desteklemeyen işlemciler). PIC
16F84 mikrodenetleyicisi de kapasitesi az olan bir denetleyici sayılır. Fakat geniş kapasiteli bir
işlemci veya denetleyici kullanıyorsak programımızı diğer dillerle yazıp sadece özel özen
gerektiren yerlerde Assembly kullanmak bizi daha verimli sonuçlara ulaştırabilir.
PIC Çeşitleri
Günümüzde Microchip firması, standart ürettiği PIC ailelerinin dışında birçok özelleşmiş PIC
aileleri de üretmektedir. Mesela USB veri alışveriş yongasının dahili olarak bulunduğu PIC'lerden
tutun da RF iletişim için özelleşmiş PIC'lere kadar birçok değişik özellikte PIC üretilmektedir.
Standart PIC aileleri ise kaç bitlik komutlardan oluştuklarına (merkezi işlem biriminin dahili
olarak kaç bitlik veri yoluna sahip olduğuna) göre isimlendirilirler. Mesela bu komutlar
16(C/F)5xx serisi işlemcilerde 12 bit, 16(C/F)XX işlemcilerde 14 bittir.
PIC programcıları program kodlarını yazarken bir komutun kaç bitlik kelime boyundan oluştuğu
ile pek fazla ilgilenmezler. Seçilen bir çipi programlarken uyulması gereken kuralların ve o çiple
ilgili özelliklerin bilinmesi yeterlidir. Bu özellikler PIC'in bellek miktarı, G/Ç portu sayısı, A/D
dönüştürücüye sahip olup olmadığı, kesme (interrupt) fonksiyonlarının bulunup bulunmadığı,
bellek tipinin ne olduğu (Flash, EPROM, EEPROM vb.) gibi bilgilerdir.
HUNRobotX - PIC Assembly Dersleri
Neden PIC?
PIC, kaynaklarına en kolay ulaşılabilen ve amatör çalışmalar için fiyatı oldukça uygun olan bir
işlemcidir. Hatta profesyonel çalışmalarda bile kullanılabilecek kadar güvenilir kod korumasına
sahiptir. Mesela 16F84 tipi bir işlemci flash program hafızasına sahiptir, 1 milyondan fazla kere
silinip tekrar programlanabilmesine ve diğer birçok gelişmiş özelliğine karşın fiyatı sadece 4-5
YTL civarındadır.
Nasıl Programlanır?
PIC'i programlamak için öncelikle yazdığımız programı HEX koduna (0 ve 1'lerden oluşan
makine dilinin 16'lık sayı sisteminde yazılmış hali) çeviren derleyiciye ihtiyacımız vardır. Eğer
programı yazmak için Assembly dilini kullanıyorsak herhangi bir Ascii karakter koduna göre
çalışan program kullanmamız yeterlidir. Bu programlara örnek olarak Windows altında Notepad
veya Linux altında Gedit, KWrite gibi programlar verilebilir. Yazdığımız programı derleyici ile
derledikten sonra (Assembly dili için Mpasm adlı program kullanılır) PIC'i programlayacak olan
elektronik devrenin (programlayıcı) bilgisayar arayüzü çalıştırılır. Programcının bilgisayar
arayüzüne derlenen dosya'nın yani HEX dosyasının yeri gösterilir. Artık programlama işlemi
yapılabilir. Sonuç olarak bir PIC'i programlamak için; program(.asm), derlenmiş program(.hex),
programcı arayüzü ve programcı devresi gerekir.
PIC kullanarak bir program veya çalışan bir devre yaparken izlenecek adımlar şunlardır:
1) Ne yapacağımızı tasarlamalı ve tam olarak tanımlamalıyız,
2) Donanım tasarımını tam olarak bitirmeliyiz,
3) Yapacağımız programla ilgili akış diagramı çıkartmalıyız,
4) Assembly programını bir Ascii editör programına yazmalıyız ve uzantısını .asm olarak
kaydetmeliyiz,
5) Mpasm programını kullanarak bunu derlemeliyiz,
6) Programlayıcı elektronik devre yardımı ile HEX dosyasını PIC'in içine yüklemeliyiz.
Not: Buradaki bilgilerden çok daha geniş kapsamlısını internetten bulabilirsiniz. Data sheet'ten
okuduktan sonra deneme yanılma ile uygulama yapmak en güzel öğrenme yoludur.
Bağlantılar
http://robot.ee.hacettepe.edu.tr/
http://www.microchip.com/