|
PIC Donanım ve Yazılım Tasarımı ( Ders ) |
|
|
|
|
Zafer Erim tarafından yazıldı
|
|
Çarşamba, 11 Ekim 2006 06:22 |
|
1. Ders PIC DONANIM VE YAZILIM TASARIMI 1.1. GİRİŞ PIC’ ler RAM, EPROM, EEPROM, PIA gibi mikroişlemci sistemlerinde bulunması gereken temel elemanları tek bir çatı altında toplayan entegrelerdir. Bütün bu elemanların tek bir entegre altında toplanması ile mikroişlemci tabanlı sistemli tabanların boyutları küçülmüş, sistem maliyetlerinde kayda değer bir azalma sağlanmış ve en önemlisi bu tip sistemlerin tasarlanması daha kolay bir hale getirilmiştir. CPU, RAM, EPROM, PIA elemanlarının birbirleri arasındaki bağlantıyı sağlayacak adres Bus, Data Bus ve Kontrol Bus sistem kartı üzerinde bulunmayacaktır. Çünkü bunların tamamı PIC üretici firma tarafından PIC entegresinin içine yerleştirilmiştir. Yukarıda sayılan önemli özelliklerinden dolayı PIC entegreleri son zamanlarda oldukça revaçta olan elektronik elemanlardır. Bu bölümde anlatılacak olan MICROCHIP firmasına ait olan 16FXX serisi PIC’ ler şu özelliklere sahiptirler. PIC içinde yapılan programı işleyen işlemci RISC mimarisine benzer bir mimari ile donatılmıştır. RISC mimarisi mikroişlemci tasarımında kullanılan ve temelde iki kısma ayrılan mimari tipinden biridir. Bunlar RISC ve CISC mimarileridir. RISC mimarisinde mikroişlemci komut seti üzerinde bulunan komutların sayısı azalmakta ve bu komutların hepsi tek bir saat darbesinde ( CYCLE ) tamamlanması sağlanmıştır.(Dallanma komutları hariç, bu komutlar iki saat darbesinde tanımlanabilmektedir.) Açıktır ki komut sayısının azalması ile mikroişlemcinin işlem kabiliyetinde bir azalma meydana gelecektir. Bu sorun, temel işlemlerin tek bir komut ile halledilmesi yerine bazı komutların ardışık olarak kullanılması ile giderilmektedir. Komut setinin daraltılması ile öğretilecek komut sayısı azalırken mikroişlemcinin programlanması biraz daha zor hale gelmektedir. Ancak deneyimli bir programcı için RISC mimarisine sahip mikroişlemcinin programlanması hiçbir sorun oluşturmayacaktır. 1.2. PIC’İN GENEL ÖZELLİKLERİ Programlama sırasında yazdığımız komutların her biri PIC üzerinde 14 bitlik bir yer kaplamaktadır. Bu 14 bitin ilk 6 biti komutu tanıtmakta geri kalan 8 bit ise kullanılan veriyi taşımaktadır. Komut taşınan kısım 6 bit olduğundan PIC’ de en fazla 64 komut bulunacağı açıktır. Örneğin 16F877 PIC entegresinde 35 adet komut bulunmaktadır. Bu entegre 20 MHz saat frekansında çalışmakta ve her bir komutu 200 ns gibi kısa bir sürede işleyebilmektedir. Üzerinde 4K EPROM program belleğine, 35 adet özel donanım register’i, 192 adet genel amaçlı registerine sahiptir. Bu entegreler teorik olarak 1.000.000.defa programlanabilmekte ve üzerinde bulunan programlan 40 yıldan daha fazla bir süre kayıpsız olarak saklayabilmektedirler. PlC’ lerin diğer mikroişlemcilere olan bir diğer üstünlükleri de entegre programlanırken entegre üzerine bir koruma kilidi konulabilme özelliğidir. (CODE PROTECTION). Bu sayede tasarlanan devre bir başka kişi tarafından öyle basit bir şekilde taklit edilemeyecektir. Belki devre aynen taklit edilecek ancak PIC içinde program kopyalanamayacağından taklit edilen devre çalışmayacaktır. Burada şu uyarıyı yapmakta fayda var. Biz kendi programımızı denerken PIC PROGRAMLAYICI da CP (CODE PROTECTION) özelliğini kapalı tutmalıyız Aksi takdirde programladığımız PIC istediğimiz biçimde çalışmaz ise PIC’i atmak zorunda kalabiliriz. 1.3. PIC NE KADAR GÜÇ HARCIYOR? PlC’ler yapılarının CMOS olmasından dolayı oldukça az güç harcamaktadırlar. Uygulamalarda kullanılan voltaj aralığı 2-6 Volt arasında değişmektedir. Kendi güçlerinin küçük olmasına karşın PlC'ler direkt LED sürme kabiliyetine sahiptir. Entegre bacaklarından dışarı akım verilerek LED sürülecek olursa çekilen akım 20 mA iken, entegre bacakları toprağa çekilerek LED sürülürse çekilen akım 25mA olacaktır. 1.4. PIC KOMUT YAPISI PIC programlamasında kullanılan komutların isimleri ve özellikleri aşağıda anlatılmıştır. Üretici firma tarafından komutlara verilen isimlerde bazı harfler özel anlamlar taşımaktadırlar. Bu harflerin anlamlarının bilinmesi ve basit birkaç İngilizce terimin öğrenilmesi ile bu komutlar kolayca akılda tutabilirler. Komutlarda geçen harfler ve anlamları: W=W registeri (akümülatör registeri) F= Herhangi bir register L= Literal (sabit) Şimdi birkaç örnek üzerinde bu harflerin komutlarındaki kullanılışını inceleyelim. • MOVLW 0x50 W registerine 0x50 sayısını yaz. Bu komutta büyük ve kalın harflerle yazılan kısmın anlamı şöyle açıklanabilir. Önce komutun çekirdeğine bakılır. Komut MOV, yani taşıma işlemi içermektedir. Önce L harfi geldiğine göre taşınacak kısım bir sabittir. Daha sonra W geldiğine göre taşınacak yer W registeridir. Böylece komut genel açıklaması şöyle yapılır. Komutun yanında verilen sabit sayı W registerine konulacaktır. • MOVWF toplam Komut çekirdeği yine MOV’dur. Yani bir değer atama işlemi yapılacaktır. Komutta bulunan diğer harflere bakılınca önce W daha sonra F harfleri görülür. Bunun anlamı şudur: W registerinin içeriğini yanda belirtilen registere (toplam ) koy. W F= Toplam • CLRF toplam Komut çekirdeği bir CLR yani silme işlemi içermektedir. Komut devamında bir F harfi görülmektedir. Bunun anlamı yanında belirtilen registerin (toplam registeri ) içeriğini sil. • SUBLW 0x05 Komut çekirdeği SUB yani bir çıkartma işlemi içermektedir. Diğer harfler sırasıyla L ve W dir. Komut açıklaması şöyle yapılır. Komut yanında belirtilen sayıdan (L harfi önce yazılmıştır) W registerini çıkart. 1.5. PIC PROGRAMLAMADA KAYNAK KODUN YAPISI PIC programlamada kaynak kod yazılırken derleyicinin bize sunduğu bazı kolaylıklardan faydalanabiliriz. PIC’in sahip olduğu özel donanım registerleri ile genel amaçlı registerler normalde registerin adresini gösteren bir sayı ile belirlenirler. (W akümülatörü hariç). Kodun içerisinde bir sürü karışık sayı yazmak yerine bu registerlere birer sembol isim verilerek kod içinde bu isimler kullanılabilir. Gerçekte derleme işlemi esnasında tanımladığım sembol isimler yerine gerçek sayısal değerler konmakta ve böylece *.HEX kodu üretilmektedir. Yazılan *.ASM kaynak dosyasında ise bizim tanımladığımız sembol isimler görülmektedir. Sembol isimler kullanarak program daha anlamlı ve daha anlaşılıır bir hale gelmektedir. 1.6. SEMBOL İSİMLER NASIL TANIMLANIR? Sembol isimler program yazımı sırasında “EQU” deyimi ile tanımlanmaktadır. Örneğin 16F877 PIC entegresinde flagların bulunduğu özel amaçlı donanım registeri PIC’ in 3 no’lu adresinde bulunmaktadır. Flagların bulunduğu registeri her kullanışımızda bu 3 değerini kullanmak zorundayız. Bütün bu register numaralarını ezberlemek yerine equ deyimi ile bu registere bir isim verilebilir. Bunu bu şekilde yapabiliriz. STATUS EQU 0x03 Bundan sonraki program kısmında bu flagları kontrol etmek için yalnızca status ismini verdiğimiz registeri kontrol ederiz. Örnek : Program sayıcı registerini PCL olarak isimlendirelim. PCL EQU 0x02 Yazılan bu equ deyimleri alt alta yazılarak bütün genel ve özel amaçlı registerler tanımlanırlar. Tablo 4.1 de görülmektedir. Tablo 4.1 Özel registerlerin PIC’e tanıtılması PCL EQU 0x02 STATUS EQU 0x03 PORTA EQU 0x05 PORTB EQU 0x06 TRISA EQU 0x85 TRISB EQU 0x86 Bu şekilde registerler isimlendirilerek program daha akılcı bir hale getirilebilir. NOT: EQU deyimi ile tanımlanmış bir register isminde büyük ve küçük harfler nasıl tanımlanmış ise tüm program boyunca aynı şekilde kullanılmalıdır. Örnek : TOPLAM equ 0x20 yazarak bir registeri tanımlayalım. Program sırasında bu tanımlanan registeri “toplam” şeklinde kullanamayız. Çünkü tanımlama sırasında büyük harfler ile tanımlama yapılmışken kod içinde küçük harfler ile “toplam” registerini kullanamayız. Tablo 4.2’ de kısaca açıklanan donanım registerlerinin isimleri istenirse programcı tarafından başka isimler altında da kullanılabilir. Ancak bundan sonraki kısımlarda bu özel amaçlı donanım registerleri yukarıda tanımlandığı gibi (orijinal isimleri ile ) kullanılacaktır. Tabloya dikkat edilirse bazı registerlerin tekrarlanmış olduğu görülmektedir. Bu ikincil registerlerin adreslerine bakılırsa bunların yüksek değerli oldukları görülür. PIC registerlerinin adreslerini iki sayfa halinde tutmaktadır. Bunlar sayfa 0 sayfa l şeklinde tanımlanmaktadır. Sayfa 0’ da bulunan registerlerin adresleri 0x80 değerinde daha düşüktür. Sayfa l’de bulunan registerlerin adresleri 0x80 ve daha üzeri olmaktadır.(Sayfa=Bank) TABLO 4.2. Bazı PIC Hardware (SFR) Registerleri TMR0 0x01 PIC zamanlayıcı interrupt registeri PCL 0x02 Program sayıcı registeri STATUS 0x03 Program durum registeri (flag registeri) FSR 0x04 PORTA 0x05 PortA PORTB 0x06 PortB PORTC 0x07 PortC PORTD 0x08 PortD PORTE 0x09 PortE PCLATH 0x0A INTCON 0x0B İnterrupt Kontrol Registeri OPTION 0x81 PCL 0x82 Program sayıcı STATUS 0x83 Durum registeri FSR 0x84 TRISA 0x85 PortA bitlerini giriş - çıkış tanımlama registeri TRISB 0x86 PortB bitlerini giriş - çıkış tanımlama registeri TRISC 0x87 PortC bitlerini giriş - çıkış tanımlama registeri TRISD 0x88 PortD bitlerini giriş - çıkış tanımlama registeri TRISE 0x89 PortE bitlerini giriş - çıkış tanımlama registeri PCLATH 0x8A INTCON 0x8B İnterrupt Kontrol Registeri EEDATA 1x0C EEPROM’a yazılacak bilginin konulacağı register EEADR 1x0D EEDATA’nın yazılacağı yeri tanımlayan register EECON1 0x8C EEPROM Kontrol registeri EECON2 0x8D EEPROM Kontrol registeri 1.7. REGİSTER İŞLEMLERİNDE SAYFA DEĞİŞİMİ Programlama esnasında genel olarak sayfa 0’da bulunan registerler kullanılmaktadır. Ancak sayfa l’de bulunan registerlere erişim istendiğinde önce PIC içindeki aktif sayfayı değiştirmek gerekmektedir. 16F877 entegresi için bu işlem sadece STATUS registerinin 5. bitini set etmek yeterlidir. Bu bit set edilerek sayfa l’e geçilir. Sayfa l registerleri ile işimiz bittiğinde STATUS registerinin 5. bitini reset ederek yeniden sayfa 0’a dönebiliriz. Şimdi bunu bir örnek üzerinde inceleyelim. Örnekte A portunu giriş olarak tanımlayan bir program parçası vardır. A portunun bitlerini tek tek bit bazında Giriş ya da Çıkış olarak tanımlayabiliriz. Bunun için sayfa l’de bulunan TRISA registeri kullanılmaktadır. BSF STATUS,5 STATUS’un 5. bitini set et yani sayfal’e geç CLRF TRISA A portunun bütün bitlerini giriş yap BCF STATUS,5 STATUS’ un 5. bitini reset et yani sayfa 0’ a dön. NOT : Alıntıdır
|
|
Son Güncelleme ( Pazar, 27 Nisan 2008 00:14 )
|