Başlangıç > Dökümanlar > 15 bölüm ile Pic dersleri

15 bölüm ile Pic dersleri

PIC Ders 1

Ders 1

Günümüz dünyasinda pek çok komplike is mikroislemci (mikroprocessor)kullanilan makinalar tarafindan gerçeklestirilir. Microprocessorlar islem yapabilmek için birçok periferal hardware elemanina da gerek duyarlar. Bir bilgisayar anakartinda CPU disinda pekçok eleman daha görürüz bunlar arasinda RAM Bios I/0 ünitesi BUS birimi sayilabilir.

Mikroislemcilerle is yapmak nisbeten karmasik sistem ve bilgi gerektirir. Bilinen mikroislemciler INTEL CYRIX AMD firmalari tarafindan üretilirler.
Çevre hardware elemanlari olmayan RAM ve BUS içinde I/O ünitesi kendinden olan kompakt bir eleman olsa ve bununla periferik üniteleri kontrol etsek ne kadar da iyi olurdu…

Öyle bir eleman olmali ki kolaylikla programlanabilmeli benim verdigim komutlari bacaklarina baglanan perifer ünitelerde gerçeklestirebilmeli…

Mikrodenetleyici (Microcontroller) bu nedenle yapilmis bir elektronik devre elemanidir.

Dual -in-line kilifta 8/18/26/40 bacak bir entegreyi soketine takiyorsunuz ve pekçok çevre birimini kontrol ediyorsunuz. Burada gereken biraz bilgi bir de bilgisayar… o halde Microcontroller” Amatörler için çok gerekli ve faydali bir elemandir. Içinde giris çikis üniteleri RAM ’i BUS’i herseyi var bir de program yazdin mi bu is tamam!…

Pekçok firma Mikrocontroller üretmektedir fakat Amatörler arasinda Microchip firmasinin PIC’leri çok popülerdir.

PIC: Pripheral Interface Controller -çevre birimlerini kontrol eden ünite- demektir. RISC (Reduced Instruction Set Computer) yapisinda Flash bellekli islemcilerdir. Çesitli pic’lerin çesitli özellikleri vardir. Bellek tipleri seri analog giris çikis özellikleri bellek büyüklügü A/D konvertör özelligi vs… gibi.

PIC’lerle ilk tanismada çok popüler bir Pic olan 16F84 ile çalismaya baslayacagiz. Aşagıda 16F84 bacak baglantilari ve genel özellikleri verilmistir.

16F84 4 ve10 Mhz saat hizinda çalisan 1 Kb program flash bellekli 68 byte data bellekli 64 byte eeprom data bellekli TMR0 modüllü 4 interupt kaynakli 13 giris-çikis portlu 2-6 voltla çalisan 18 pin DIP entegredir.

Microchip firmasinin Pic leri çesitli isimler alirlar.
12C508
16F84
16F876
16F877 gibi.

Piclerin bu parça numaralari ve adlandirilmalari kelime boylarina göre verilir (Worth Lenght). C CMOS F ise Flash bellek demektir. Chip üzerinde saat hizlari 04/P 10/P gibi yazilidir. Kelime boyu registerler arasindaki veri iletisiminin kaç bit ile yapildigidir. Pic lerde kelime boyu 12-14-16 bit dir.Pic ler pic disi üniteler ile 8 bit veri transfer hizi ile iletisim kurarlar. Yani piclerde harici veri yolu 8 bittir.
16F84 kelime boyu 14 bittir. Flash bellegi sayesinde bir milyon kere yazilir ve silinir. Sonuç olarak 16F84 Amatörler için ideal bir baslangiç pic’idir.

16F84 DIP 18 bir entegredir. Bacaklar arasinda 0.1 ( 2.54 mm) inch vardir. pic genisligi 0.3 inch (7.62 mm)’dir. Toplam uzunluk yaklasik 22 mm kadardir. 16F84 orta pinlerden voltaj alir. Korumasi sayasinde ters baglandiginda problem çikmaz.

Pic 16F84’ün mimari blok diyagrami bu aşağıdadır. Burada hangi üniteler oldugu veri transfer kelime boyu bellek tipi kapasitesi diger özellikleri sematize edilmistir.

16F84 için temel çalisma semasi ise aşağıda verilmistir.

Burada 4 Mhz kristal kullanilmistir.10 Mhz ile çalisan bir 16F84’de 10 Mhz kristal kullanilacaktir. Bu temel prensipte esan olan +5 volt ile beslemek MCLR (Master Clear Reset) pinini yani 4 nolu pini 10 K ile +5 volt’a asmaktir. Kristal yerine rezonatör de kullanilabilir. Bu halde 22 pf kondansatörlere gerek kalmayacaktir. 16 nolu pin’e osc modülü de baglayabiliriz baglanti semalari ileride verilecektir. 4 nolu pin’i bir push-button ile sase ye baglarsak MCLR reset elde edilmis olur.

Bu sekilde çalisan bir 16F84’de sink akimi 25 mA source akimi ise 20 mA’dir. Bu akimlar bir çevre üniteyi sürmek için gereken akimlardir. Bu akim ile transistor sürülebilir led yakilabilir triyak-thyristor tetiklenebilir.

Bacak baglantilari ise aşagıdadır.

PIC Ders 2
Ders 2

16F84’ün çektigi akim saat hizina baglidir. Saat hizi arttikça çekilen akim artar. 4 Mhz saat hizinda çekilen akim 2 mA kadardir. Eger pic sleep modda ise bu akim 40 mikroamper’e kadar düser.
CMOS entegrelerde giris uclarini +5 Volt’a baglamak gerekir.16F84 de bir CMOS entegredir fakat burada pic içinde I/O pinleri özel sekilde baglanmislardir ve program araciligi ile giris veya çikis haline getirilir. Giris pozisyonunda bu uçlar pull-up konumundadir yani pic içinde bir sekilde +5 volta bir direnç üzerinden bagli gibidir. Burada pull-up dirençleri 50 K kadardir.

16F84’ün çalistirilmasinda en çok kullanilan yöntemler :

1-) Xtal osilatör
2-) Seramik rezonatör
3-) Osilatör Modülü

3. sikta bahsedilen osilatör modülleri sicaklik degisimlerine karsi da korunmus olduklari için çok kararli çalisirlar.

Bir 16F84’de + gerilim ile GND uçlari arasina bir adet 0.1 uf kondansatör konmasi istenmeyen bazi gerilim dalgalanmalarini önler.

16 nolu bacaktan girilen osilatör sinyali pic içinde 4’e bölünür ve frekansin 1/4’ü 15 nolu bacaktan alinabilir. Bu 4’e bölünmüs saat frekansinin karsiligi olan periyota “instruction cycle”yani komut süresi denir. Bu bir komutun islenmesi için gereken zamandir.16F84’de bu 4 Mhz de 1 mikrosaniye 10 Mhz de ise 0.4 mikrosaniyedir. Bu zaman programlama esnasinda çok önem arzeder bu komut sürelerinin toplami ile zamanlar hesaplanir.

Disaridan baglanan osilatörler ile pic daha yavas saat hizlarinda da çalistirilabilir. Bu nun için kullanilan uç RA4 /TOCKI pinidir. Burasi çikis olarak RA4 giris olarak ta TOCKI girisidir (Timer Zero Clock Input).

Kristal osilatör kullanildiginda 16F84’e 22 pf kondansatör baglanir. Seramik rezonatör için bir özellik yoktur.

16F84’ün 13 ucunu da çikis olarak kulllanabiliriz. Bu çikislar A ve B diye ikiye ayrilir A çikislari 5 adettir RA0-RA1-RA2-RA3-RA4 diye adlandirilir. B çikislari ise 8 adettir ve bunlarda RB0-RB1-RB2-RB3-RB4-RB5-RB6-RB7 diye adlandirilirlar. Bu çikislar da bir tek RA4 yani TOCKI ucu digerlerinden farklidir ve bu uç açik kollektör özelligi gösterir bu nedenle çikis olarak kullanildiginda 10 K lik bir direnç le + 5 V a asilir.

RB0 ucu giris olarak ayarlanirsa ayni zamanda “external interrupt” girisidir. Yine B port’un 4-5-6-7 çikislari (RB4-RB5-RB6-RB7) internal interrupt alma özelligindedir.

Pic power-on reset ile yani pic’e enerji verildiginde baslangiç adresinden baslar. Bu durumda tüm pull-uplar iptal edilmis olur ve pic portlari çikis pozisyonundadir. Programlama ile port çikislari giris veya çikis olarak yönlendirilir bunun için “option” register içinde de disable veya enable seçenekleri vardir. Power-on reset ile disable olan pic de tüm portlar çikistir.

Pic’i baslangiç adresinden baslatan 3 mekanizma vardir bunlar :

1-) Power-on reset
2-) MCLR reset (Master Clear Reset) kullanici tarafindan programi basa döndürmeye yarar.
3-) Watchdog timer (Iptal edilmediginde programi belli zaman araliklari ile basa döndürür.

Bu portlarin giris veya çikis olarak yönlendirilmesi TRIS register ile saglanir veya Write register vasitasi ile aktarilan komutlar yardimi ile port lar tek tek seçilebilir.

PIC Ders 3
Ders 3

Pic 16F84’de iki hafiza blok’u mevcuttur. Bunlar
1- Program memory blok
2- Data memory blok

Program memory blok 14 bit kelime boyunda ve 1 Kbyte kapasitesindedir.13 bit ile adreslenir program bus 14 bittir. Buraya program olarak yazip Pic içine attigimiz hex dosyasi bilgileri yazilir gerekirse silinir ve tekrar yazilir.

Data memory alani RAM ve EEPROM olmak üzere iki tiptir. RAM alanina programin çalismasi sirasinda islenen bilgiler yazilir. Data memory alaninda SFR ve GPR registerler bulunur.

Pic 16F84’ün en önemli registerleri sekilde görülmektedir. 68 GPR alaninda bizim tanimladigimiz:sayaç timer vs… gibi registerler yazilir.

Write Register: 16F84 içinde RAM bellek alninda görülmeyen direk ulasilmayan adresi olmayan geçici bir depolama alani vardir burasi “Write Register” dir. Bu registerler içine yazilan bilgiler baska registerlere aktarilir ve write register bu aktarma isleri için gecici aktarma alani olarak kullanilir. Aritmetik ve atama islemleri bu sayede yapilir.

Register adreslerinin bazilarini bilmek programlama islemleri için önemlidir. Inc. dosyasi kullanildiginda register tanimlari yapmaya gerek yoktur fakat temel ve en çok kullanilan registerlerin adreslerini ezbere bilmek gereklidir.

Örnegin:

PORTA EQU H’05’
PORTB EQU H’06’
STATUS EQU H’03’
TRISA EQU H’85’
TRISB EQU H’86’

Gibi registerler en temel registerlerdir programlamada ilerledikçe diger register adresleri de otomatikman bellekte kalir veya inc.dosyasi kullanimi aliskanligi ile tamamen bellekten silinir.

Asagida ileride gerekli olacak register ve onlarin bit kisaltmalari verilmistir. Programlama esnasinda register bitleri kisaltma olarak da yazilabilir. Inc. dosyalarinda bunlar tanimlanmistir.

PIC Ders 4
Ders 4

Pic programlamak için gereken temel seyler sunlardir.
1-) Pic programlamak için pic Assembly dilini bilmek ve program yazarak bunu hex dosyasi haline getirmek
2-) Pic programlayacak donanima sahip olmak bunlar bilgisayar ve gerekli yazilimlardir.

Assembler veya Compiler:

WINDOWS/notepad
MPLAB/Pfe

Gibi bir text editöründe Pic Assembly dili ile yazilmis programi derlemeye yani HEX file haline getirmeye yarayan programdir.Bu is için biz Microchip firmasinin MPLAB içinde gelen MPASM programini kullanacagiz.

Pic Assembly: Pic’in yapmasini istedigimiz islemleri pic’in anlamasi için kisa komutlardan olusturulmus bir dildir. Bu dil ile yazilan program ASM dosyasi olarak kaydedilir daha sonra MPASM ile HEX dosyasi haline getirilippic içine yazilir.

Bir pic’i programlamak için yapmamiz gerekenler sirasi ile söyledir:

1-) Bilgisayarimiza gerekli Software’i yüklemek
2-) Pic Assembly dilinin genel kurallarini ögrenmek
3-) 16F84’ün 35 komut setini ögrenmek
4-) Program yazip ASM olarak kaydetmek
5-) Programi hatasiz yazip Compile edebilmek
6-) Compile edilip HEX haline gelmis dosyayi EASYPIC ile pic’e aktarmak.

Son surum MPLAB ve MPASM yi indirmek icin asagıdaki line tıklayın
MPLAB
MPASM
PicUpi

Masaüstünden MPLAB’i tiklayarak File /new altindan yeni bir sayfa açiniz. Bu sayfaya artik pic assembly komutlarini kullanarak programinizi yazabilirsiniz. Bu programi sonu ASM olacak sekilde kaydetmeniz gerektigini tekrar söyleyelim.

Programdan çikmadan Project/Quickbuild ile dosyayi HEX haline getirebilirsiniz ve ASM dosyasi ile ayni yerde ayni isimde HEX dosyaniz açilmis olur. Bu islem sirasinda yazdiginiz program dogru ise basarili olduguna iliskin hatali ise hatali olduguna dair bir mesaj verilir.

MPLAB içinde yazip ASM olarak kaydettiginiz dosyayi Baslat\\Programlar\\Microchip\\MPLAB IDE v7.41\\MPASMWIN’i açarak ve dosyanizi “source file name” penceresinden bularak compile edebilirsiniz. Bu sirada basarili ise yesil basarisiz ise kirmizi uyari isareti verilir.

Basarisiz ise olusturulmus bulunan err dosyasini editörde açarak hatanizin nerede oldugunu görebilirsiniz.Bu is için sekilde görülen dosyalar içinde error file kisminin isaretli olmasi gerekir.

PicUpi İndirin

PicUp’i calistirdiktan sonra File menusundan Settings’e tiklayarak ayarlara giriniz. Bu kisimda programlayici kartinizibilgisayarinizin hangi protuna bagladiysaniz o portu seciniz. Bizim programlayacagimiz Pic 16F84 odlugundan pic secimi yapmaniza gerek yoktur.

Bu ufak ayarlamalari bitirdikten sonra File menusunden Open’a tiklayarak yükleyeceginiz hex dosyasini seciniz

Ekranda Loaded HEX- File… seklinde bir mesaj belirlendiyse hex dosyaniz sorunsuz demektir. Fakat Error in Hex file… Error Loading… seklindeki bir mesaj ile karsilastiysaniz File menusunden Settings’e girin “Abort an error” secenegi basindaki isareti kaldirin. Bu durumda dosyanizi yuklarken yine Error in Hex File.. mesaji cikacek fakat Loaden HEX file yazisi da belirecektir. Bu mesaj hex dosyanizin yazima hazir oldugunu gosterir.

Pic Programlayici kartiniz com portunuza takili ve üzerinde pic yerlestirilmis vaziyetteyse

Read Chip : PIC icerigini okur ve ekrana yazar
Program Chip : Sectiginiz Hex dosyasini PIC’e gonderir.
Verify Chip : PIC ’i kontrol ederek adreslerde sorun olup olmadigini denetler.
Stop : Yapilmakta olan islemi durdurur.
Erase Chip : PIC icerigini siler.

Pic Assemlby genel kurallari:
Genel kurallara geçmeden önce son olarak su konuya da dikkatinizi çekelim. Bir program yazildiktan sonra compiler’in bunu tanimasi için ASM olarak kaydedilen bu dosya compiler’in yani mpasmwin’in bulundugu direktörde olmalidir. Eger program yaziminda inc dosyasi kullanilmis ise o da burada olmalidir. Inc dosyasi program içinde yazili font ile klasör altinda bulunmalidir ksi halde compiler tarafindan taninmaz.

PROGRAM FILES / MPLAB/

Pigprog
mplab
mpasmwin
deneme.asm
deneme.hex
deneme. Err
deneme.lst
16f84.inc

gibi bir düzen ortaya çikar.

Noktali Virgül:

; bir program yazilirken derlenmeyen satirlarin basina konur bizi veya programi inceleyeni bilgilendirecek bir bilgiyi ; isaretinden sonra yazariz yine bu isaretten sonra çesitli sekiller ve süslemeler yapabiliriz.

;===========================================
; Bir deneme programidir TA2FR
;===========================================
; —————–ooooooooooooooooooo—————————

program içine bir satir yazildiktan sonra satir yanina açiklayici bilgi ( isaretinden sonra yazilir.

SAYAC EQU h’0D’ ; h’0D ’ adresinde sayac diye bir register tanimla
BSF STATUS 5 ; bank 1 ’ e geç

Buradada compiler noktali virgül den sonraki açiklamalari görmez bu sebeple buraya istedigimiz açiklamalari yazabiliriz.

PIC Ders 5
Ders 5

AKIS DIYAGRAMLARI :

Pic Assembler ile bir program yazmadan evvel pic’in hangi adimlarla programi isleyecegini planlamamiz gerekmektedir.Bu planlama islemi akis diyagramlari ile yapilir.Akis diyagrami islenecek komutlarin sirasidir.Uzun ve karmasik programlarda akis diyagramlari hangi seviyeden programin ayrilacagini ve hangi komutlari yerine getirecegini sonra tekrar nereye dönecegini göstermesi nedeni ile faydalidir. Akis diyagramlarinin kendine has sembolleri de vardir.

Bir program yazilirken 3 blok halinde yazilir.Bu bloklar:

1-) Etiket

2-) Komut ( Equate)

3-) Adres

bloklaridir.

ETIKET : Etiketler iki tiptir. Birinci tipi adres atanan etiketlerdir ikinci tipi ise adres atanmayan etiketlerdir.Tüm etiketler birinci blok ‘a yazilir. Adres atanan etiketler EQUATE komutu ile kullanilir veya INC. Dosyasi sayesinde tanimlanirlar. Bu etiketler sayesinde tanimlanan registerler program içinde tekrar tanimlamaya gerek kalmadan kullanilir

PORTB EQU 0X06

STATUS EQU 0X03

BuradaPORTB ve STATUS Etikettir. EQU komutu ile tanimlanan bu registerlerdaha sonra kullanildiginda hangi adreste oldugu otomatik olarak pic tarafindan bilinir. Bir diger etiket çesidi ise adres atanmayan etiketlerdir. Adres atanmayan etiketler pic ‘in çalismasi sirasinda dönecegi program seviyesini göstermekte kullanilir. Bu etiketler programci tarafindan yaratilirlar.

BASLA

START

DÖNGÜ

Gibi etiketler bu tip etiketlerdendir. Bir kisim adres atanan etiket de programci tarafindan yaratilir.

SAYAC

Etiketigibi etiketler bu çesit etikettir. Adres atananbu etiketlerRAM alanina yazilir.Bu etiketleri INC. Dosyasi içine ilaveederek Equate tanimlarini yapmadan INC. dosyasi ile de kulanilabiliriz.

ETIKET KURALLARI :

1-)Etiketler birinci sütüna yazilir.

2-)Etiketler de ingilizce harf karakterleri kullanilir.

3-)Assembly komutundan etiket olmaz

4-)Etiket en fazla31 karakter olabilir.

5-)Etiket ile prograk içinde kullanimi ayni karakter özellikleri göstermelidir.

6-)Etiket Harf veyaalt çizgi ile baslar.

7-)Etiket içinde alt çizgirakamsoru isareti bulunabilir.

ETIKET KOMUT ADRES
STATUS EQU H’03’
TRISB EQU H’86’
SAYAC1 EQU H’0D’
START
CLRF PORTB
BSF STATUS5
GOTO START

Burada start etiketiprogramci tarafindan yaratilmistir ve bir adresi yoktur bu etikete adres Assembler tarafindan atanir ve bunu biz bilemeyiz.

Bir program yazilirkenküçük veya büyük harf seçimi programciya kalmistir. Kullanilan karakterler etiket ve adres kisminda ayni olduktan sonra problem çikmaz. Etiket te PORTB yazip adres kisminda Portb yazamayiz. Bu anlatilanlar EQU komutu kullanildiginda ve register tanimlarinin programci tarafindan yapildiginda geçerlidir. Eger INC. Dosyasi kullanilacaksa dosya içi karakterler ile programcinin yazi karakterleri ayni olmalidir. Yani INC. dosyasi içinde bir etiket büyük harf ile yazili iseprogramci program içinde bu etiket kullanmak gerektiginde büyük harf kullanmalidir.

BINARY ve HEXADECIMAL SAYILAR :

Bilgisayar sistemlerinde sik kullanilan ikili (binary ) ve 16 li (hexadecimal ) sayi sistemlerine de kisaca göz atalim:

0 ve 1 kullanarak sayilari ifade etmek mümkün müdür ? Günlük hayatta en çok kullanilan 10 tabanina göre aritmetiktir. Burada 10 sembol ile sayilar olusturulur bunlar :

1 2 3 4 5 6 7 8 9 0 sembolleridir.Bu semboller ile ifade edilen bir çoklugu yalnizca iki sembolle veya 16 sembollü bir sistemle de ifade edebiliriz.Iki sembol söz konusu ise Binary 16 sembol söz konusu ise Hexadecimalaritmetik ten bahsedilir. Binary sistemin sembolleri

0 1

Hexadecimal sistem sembolleri ise:

0 1 2 3 4 5 6 7 8 9 A B C D E F dir.

10 lu sistemdeki bir sayiyi binary sayi sisteminde yazmak için bize kolaylik saglayan su tabloyu göz önünde tutalim.

2^0 =1

2^1 =2

2^2 =4

2^3 =8

2^4 =16

2^5 =32

2^6 =64

2^7 =128

2^8 =256

10 lu sistemdeki bir sayiyi binary ’e çevirirken busayiyi olusturan ikinin katlari seklinde yazilabilen sayilari büyükten küçüge dogru toplariz burada ikinin her üs sayisi kullanilmalidir.Bir üs seklinde ifade edilemiyorsa 0X seklinde yazilir.Örnek :

255 sayisini iki tabanina göre yazalim.

128 + 64 + 32 + 16 + 8 + 4 +2 +1 sayilarinin toplami olarak yazilir bu da:

1X2^7+1X2^6+1X2^5+1X2^4+1X2^3+1X2^2+1X2^1+1X2^0ola rak yazilabilir.

Burada dikkat edilmesi gereken nokta kimizi olarak gösterilen2 nin tüm üs lerinin sira ile kullanilma zorunlugudur bu siralama büyükten küçüge dogru olacaktir.Çarpim dan evvel olan katsayilar ikili sistemde yalniz 0 veya 1 olabilirburada hepsi birdir.Sonuç olarak da 255 sayisinin binary karsiligibastaki katsayilar yanyana konarak bulunur.

11111111 ( 8 tane 1 dir ).

ÖRNEK 2 :

129 sayisini ayni sekilde yazalim :

128 + 1 dir

Burada 128 den baslayarak ikinin üs ’sü seklinde tüm üsleri kullanarak129 sayisini elde edelim.

1X2^7 +0X2^6+0X2^5+0X2^4+0X2^3+0X2^2+0X2^1+1X2^0

Binary karsiligi” 10000001″olarakbulunur.Bu sekilde 8 bit ile 256 ya kadar olan sayilari binary olarak yazabiliriz bunun yetmedigi hallerde 12 bitle 2^12 =4096 veya 16 bitle 2^16=65536 ya kadar sayilari ifade edebiliriz.

HEXADECIMAL SISTEM :

16Sembol setinden olusan bir sistemdir.Elemanlari:

0 1 2 3 4 5 6 7 8 9 A B C D E F dir.

Burada decimal 10 sayisina A karsilik olarak gelmektedir F de 15’e karsilik olur.0 ile birlikte 16 sembol içeren bu sayi sistemi hexadecimal sayi sistemidirbu simgeler 12 li sayi sisteminde X=10 ve Sigma=11 dir.

Bir sayinin Hexadecimal karsiligini bulmak için binary de yaptigimiz islemi yapariz.

16^0=1

16^1=16

16^2=256

16^3=4096

16^4=65536

16^5=1.048.576

Binary sistemde 8 basamakli 255 sayisini hexadecimal sistemde iki basamak ile elde ederiz.

256 sayisi hexadecimal olarak

1X16^2+0X16^1+0X16^0 demektir”100 “olarak yazilir.

255 sayisi için

15X16^1aaaaX16^0 burada 15. karakter F oldugu için ” 255 “decimal ” FF “Hexadecimal

olur.

EQUATES : EQU komutu program yaziminin basinda INC. dosyasi kullanmadigimizda registerler adreslerinin tanimi için kullanilir.EQU komutu ile register’in bir sabitten olusan adresi tanimlanir veya bizim yarattigimiz bir file register için bir adres atanmasinda kullanilir.

Bir sabit veya bir isim Equ komutu ile tanimlanabilir.

MAX EQU3; 3 rakami nin adi MAX olsun-bit yönlendirmeli komutla kullanildiginda bu sabit 3.bit’e karsilik olur-.

FLAGSEQUH’09’; h’09’ da flgs diye bir file register olsun

BSFFLAGSMAX; flags registerinin 3.bitini 1 yap

SABITLER : Bir register adresini tanimlamada kullanilan bir haxadecimal sayidir.En çok MOVLW komutu ile kullanilir ve bir sabiti Write registere yazar.Sabitlerle kullanilan komutlar ileride verilecektir.Desimal sayilar da sabit olarak kullanilir.

ORG : Program baslangiç adresini göstermek için veya interrup alt program baslangicini göstermek için kullanilir.

END : Program komutlarinin sona erdigini Assembler’e gösterirolmazsa derlemede hata mesaji verilir.

SAYILAR :

Hexadecimal sayilar birkaç sekilde yazilabilir

0X06

6

06

06h

h’06’

Biz program yazarken H’FF’ seklindeki ifadeyi kullanacagiz.

Binary sayilar B ile ifade edilirler B ’11111111’ tarzinda yazilirlar.

Decimal sayilar D ile ifade edilirler D’255’ seklinde yazilirlar.

PIC Ders 6
Ders 6

Pic 16F84’ün RAM belleginin iki bank’tan ibaret oldugunu söylemistik. Bunlar Bank 0 ve Bank 1’dir degisik piclerde baska banklar da mevcuttur. Bir banktaki registerleri kullanmak için o bank’a geçmek gerekmektedir. Bank degistirmeislemleri STATUS registeri vasitasiyla yapilir.

STATUS REGISTER

Status register 8 bittir. Bu register’in 5. bitinin degistirilmesi ile 16F84 de bank degistirme islemi gerçeklestirilir.16F84’de Bank bitleri Status registerin 5. ve 6. Bitidir 6. bit 0 kalmalidir.Yalniz 5. bit’in degistirilmesi bank degistirmek için yeterlidir. Tüm reset hallerinde 5. ve 6. bit 00 olur ve Pic bank 0’da bulunur.

6. bit 0 5.bit 0 ise Bank 0
6. bit 0 5.bit 1 ise Bank 1 olur

Status register bitlerini degistirmek için kullanilan komut BSF ve BCF komutlaridir.

BSF STATUSRP0
BSF STATUS5
BSF H’03’RP0
BSF H’03’5

Komutlari ile 5.bit 1 yapilir ve bank 1’e geçilir.1 yapilan 5. biti 0 yapmak için ise BCF komutunu kullaniriz.

BCF STATUSRP0
BCF STATUS5
BCF H’03’RP0
BCF H’03’5

“STATUS RP0” “’H03’ RP0” ifadelerinde ki STATUS register adresi ve RP0 INC. Dosyasinda tanimlidir.INC dostasi kullanilmaz ise bunlar EQU komutu ile tanimlanmalidir. RP0 yerine bit degeri olan 5 kullanildiginda bunu ayrica tanimlamak gerekmez.

PORTLARIN GIRIS / ÇIKIS YAPILMASI

Portlarin giris veya çikis olarak yönlendirilmesi için TRIS registeri kullanilir. PORTA TRISA ile PORTB TRISB registeri ile yönlendirilir.TRIS registeri 8 bittir. Her bir bit bir I/O kapisina karsiliktir. PORTB nin 8 I/O kapisi vardirfakat PORTA da 5 I/O kapisi mevcuttur bu nedenle PORTA için TRIS registerinin ilk 5 bit’i kullanilir diger bitler 0 olarak kalir.

PORT A ve PORTB kapilari ya tüm olarak veya tek tek bit olarak giris çikis yapilabilir.

TRIS register bitleri :

1 ise kapi GIRIS
0 ise kapi ÇIKIS olarak yönlenir

PORTA çikislarini kontrol eden TRISA register bitleriasagidaki gibi ise çikislar su anlama gelir:

BIT 7 6 5 4 3 2 1 0
DEGER – – – 1 0 1 0 1
SONUÇ – – – G Ç G Ç G

PORTB çikislarini kontrol eden TRISB register bitleri asagidaki gibi ise çikislar su anlama gelir.

BIT 7 6 5 4 3 2 1 0
DEGER 1 1 0 1 0 1 0 1
SONUÇ Ç G Ç G Ç G Ç G

PORTA ve PORTB çikislarinin hepsini birden çikis yapmak için kullanilan komut

“CLRF” komutudur.

CLRF TRISA tüm PortA kapilarini 0 yapar sonuçta tüm kapilar çikis olur.
CLRF TRISB tüm PortB kapilarini 0 yapar sonuçta tüm kapilar çikis olur.

PORT A veya PORTB çikislarinin tümünü farkli giris veya çikis olarak yönlendirmek istersek karsilik gelen TRISA ve TRISB register bitlerinin tümüne farkli 0 veya 1 degeri vermemiz gerekir. Böylece o bitlere denk gelen kapilar giris veya çikis olarak yönlenirler. Bunun için kullanilan komutlar söyledir:

MOVLW B’11010101’ ; write registere degerleri yaz
MOVWF TRISB ; write register degerlerini trisb ye yaz

BSF
BCF

Gibi komutlar da kuillanilabilir. Bu komutlarla istenen bitleri tek tek 0 veya 1 yapabiliriz.

BSF (bit set file) TRISA veya TRISB nin ilgili bitini 1 yaparak karsilik olan A veya B port kapisini giris yapar.

BCF (bit clear file) TRISA veya TRISB nin ilgili bitini 0 yaparak karsilik olan A veya B port kapilarini çikis yapar.

BSF TRISA 0 ; trisa’nin ilk biti 1 olur ve porta ilk bit giris olur.
BCF TRISB 1 ; trisb’nin 2 biti 0 olur ve portb nin ikinci biti çikis olur.

PIC Ders 7
Ders 7

Pic 16F84 komut seti (instruction set) 35 komuttan olusmaktadir. Bu komutlar degisik sekilde siniflanabilir. Komut setini ögrenmeden önce komutlarla kullanilan bazi terimleri görelim.
k bir sabit veya bir etiket`i ifade eder. Sabit hexadecimal decimal binary olabilir. Bir sabit su sekilde olabilir.

H’FF’
B’11111111’
D’255’

k tanimladigimiz bir etiket de olabilir.

GOTO SAYAC

d desimal veya destination ifadesidir.Destination sabitin yazildigi yerdir.Write register veya file register olabilir.

d 0 = W write register
d 1 = F file register

Biz 0 ve 1 ifadeleri yerine W ve F ifadelerini kullanacagiz.INC dosyasi icinde W ve F adreslenmistir fakat bu dosya kullanilmasa bile MPASM W ve F kullanilmasina izin verir.

b binary ve bit ifadesidir.Bit oriented komutlarla kullanilir.bir desimal sayidir ve bir registerin ilglili bitini ifade eder.

BSF STATUS 5

KOMUTLAR

1 -Yalniz kullanilan komutlar
2 – k ile kullanilan komutlar
3 – f ile kullanilan komutlar
4 – f+bit ile kullanilan komutlar
5 – f+d ile kullanilan komutlar

1 – byte oriented
2 – bit oriented
3 – literal instructions
4 – control instructions

1- data tanimlayan ve yer degistiren komutlar
2 – register muhtevasini degistiren komutlar
3 – program akisini kontrol eden komutlar
4 – mikrokontrolleri kontrol eden komutlar
5 – logic komutlar
6 – aritmetik komutlar
7 – bos komut

yalniz k ile f ile f+b ile f+d
CLRW MOVLW MOVWF BCF MOVF
RETURN RETLW CLRF BSF COMF
CLRWDT ANDLW TRIS BTFSC DECF
OPTION IORLW BTFSS INCF
SLEEP XORLW RLF
RETFIE ADDLW RRF
NOP SUBLW DECFSZ
GOTO INCFSZ
CALL ANDWF
IORWF
XORWF
ADDWF
SWAPF
SUBWF

INCLUDE DOSYASI

Bir program yazilirken tüm registerleri tek tek tanimlamak oldukca zordurbu nedenle include dosyasi denilen bu tanimlarin içinde bulundugu ve assembler tarafindan taninan bir dosya kullaniriz.Assembler tarafindan taninmasi için program girisinde tanimlanir.MPLAB kullanildiginda içindeki metin editoru PFE kullanilir burada yazilan program ASM uzantili olarak kaydedilir.Bu klasörde INCLUDE dosyasi da bulunuyorsa MPASM dosyayi derlerkenINCLUDE dosyasi içindeki bilgileri okur ve derlemeyi yapar.DOS editoründe yazilan bir program içinde tanimlanan INCLUDE dosyasi ile klasör içindeki dosya fontlari birbirine uymaz ise programlamada hata gösterir.genelde de bu hata olur.halbuki MPLAB . kendi editoründe yazilan programda harf hatasi yoksa dosyayi tanir.

16F84A Include dosyasinin içine ilaveler ile kendi include dosyanizi olusturabilirsiniz ve programlarda bu dosyayi tanimlayarak hex file elde edebilirsiniz

PIC Ders 8
Ders 8

Daha önceki yazılarımızda 16F84 komut setini ve temel esasları incelemiştik artık yavaş yavaş bu komutları kullanarak program yazmaya başlayabiliriz.

Bilgisayarımıza MPLAB programını kurduktan sonra bu program içindeki PFE (programing file editor) ile programlarımızı yazıp bir klasör altına sonu ASM olacak şekilde save edeceğiz bu klasörde inc dosyasının olmasına dikkat edeceğiz daha sonra bu editor programı içinde iken project / build nod seçeneği ile ASM dosyamızı HEX haline getireceğiz bu sırada çıkan pencereden ERR dosyasını da işaretlersek bir hata yapmamız halinde bu dosyayı editorda inceleyerek hatayı bulma imkanımız olacaktır.Tüm dosyalar aynı klasör altında olacağı için zamanla bu klasörün büyümesi halinde bu dosyalar bir başka klasöre aktarılabilir.

KONFİGÜRASYON BİTLERİ

Yazdığımız program içinde konfigürasyon bitleri dediğimiz bazı komutları kullanırsak hex dosyasını pic içine attığımız programdaki bazı ayarlar otomatik olarak gerçekleşir (picprog gibi).Eğer bu komutları kullanmazsak yazma sırasında bu seçenekleri manuel olarak yapmamız gerekmektedir.

1 Code protect on – off
2 Power on reset on – off
3 Watchdog timer on – off
4 Low power osc.
5 Xtal osc.
6 High speed osc.
7 RC osc.

Bu komutlar dan son 4 tanesi osilatör tiplerini tanıtmaya yararlar. 1 komut pic içine yazılan bilginin kopyalanmamasını sağlar.

Bu komutların yazılışında etiket olarak __CONFIG komutu kullanılır. Daha sonra & ve bir space bar ile diğer komutlar yazılır.

__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_ XT_ON

;Deneme program 1
;RA0 da led’in yanması

LIST P=16F84
INCLUDE “16F84.INC”
__CONFIG _CP_ON &_WDT_ON &_LP_OSC &_PWRTE_OFF

CLRF PORTA ;Port a çıkışlara low (sönük)
BSF STATUS5 ;Bank 1’e gec
CLRF TRISA ;Port A yi çıkış pozisyonuna getir
BCF STATUS5 ;Bank 0 ’a gel
BSF PORTA 0 ;RA0 daki led ’i yak
END

· CONFIG ifadesinin yanındaki alt çizgi çift olmalıdır ‘ ___ ’
· Daha sonra yazılan ifadeler tek alt çizgili olmalıdır ‘ _ ‘
· Konfigürasyonlar arasında bir space olmalıdır
· Space den sonra & işareti kullanılmalıdır
· & işaretinden sonra ara vermeden konfigürasyon yazılır
· Picprog da PWRTE işaretli değil ise Power on reset aktiftiryani konfigürasyonda off yaparsanız programda pencere işaretli olarak açılır.

WRITE REGİSTER

Registerler arasında veri transferi yapmak için kullanılan bir registerdir ve RAM içindeki file registerlerden bağımsızdır.

MOVLW H’FF’ ; Write registere FF değeri yaz
MOVLW B’11111111’ ; Yukarıdaki ile aynı değerdir
MOVLW D’255’ ; Write registere decimal 255 sayısını yaz

Write registere yazılan bu bilgiler daha sonra bir başka registere transfer edilir.

MOVWF PORTB ; Port b nin çıkışlar high olur
MOVWF TRISB ; Port b nin kapıları giriş olur

ÖRNEK PROGRAM

;Deneme program
;RB0 RB1 ve RB2 de led’in yanması

LIST P=16F84
INCLUDE “16F84.INC”

CLRF PORTB
BSF STATUS5
CLRF TRISB
BCF STATUS5
MOVLW B’00000111’
MOVWF PORTB
END

;Deneme program
;RB0 RB1 ve RB2 de led’in yanması

LIST P=16F84

INCLUDE “16F84.INC”

CLRF PORTB ;Port b çıkışlar lowsönük
BSF STATUS5 ;Bank 1’e gec
CLRF TRISB ;Port B yi çıkış pozisyonuna getir
BCF STATUS5 ;Bank 0 ’a gel
BSF PORTB0 ;portb nin ilk bitini high yap (lojik 1)
BSF PORTB1 ;portb nin 2. bitini high yap
BSF PORTB2 ;portb nin 3. bitini high yap
END

Bitin high olması çıkışta +5 volt olması yani lojik 1 dir

Bu iki programda farklı komutlar kullanılarak aynı işlem yaptırılmaktadır.Değişik komutlar ile aynı işlemleri yaptırmak mümkündür. Bu nedenle komutları tek tek inceleyelim ve bunlarla ilgili program örnekleri yazalım.

PIC Ders 9
Ders 9

Daha önce birkaç komutun kullanimini ögrenmistik. Simdi tüm komutlari sira ile ögrenmeye çalisalim. Komutlari daha önce çesitli siniflamalara tabi tutmustuk komutlari bu siniflamalar dogrultusunda teorik olarak ögrenmektense programlar yazarak pratik ögrenmeyi tercih ettik .

CLRF : f ile yani bir file register ile kullanilan bu komut register içerigini sifirlar

CLRF PORTB ;Port b içerigini sifirlar ve b çikislari low olur
CLRF TRISA ;Tris a içerigini sifirlar ve portA kapilari çikis olur

MOVF : f ile kullanilan bu komut file register içerigini write veya file registere yükler.

MOVF SAYAC W ; Sayac içerigini write registere yükler

W=0
F = 1 olarak da kullanilabilir.

F ve bit ile kullanilan 4 adet komut vardir bunlar :

BCF : ‘ bit clear file ‘ file register ilgili bitini 0 ( low ) yapar
BSF : ‘ bit set file ‘ file register ilgili bitini 1 (high)

BTFSC : ‘bit test file skip if clear’ bu komut file register ilgili bitini test eder ve sayet 0 ise bir satir atlayarak sonraki satir komutuna gider.

BTFSS : ‘ bit test file skip if set’ bu komut file register ilgili bitini test eder ve sayet 1 ise bir satir atlayarak sonraki satir komutuna gider.

BCF STATUS 5 ; Bank 0 a geç
BSF STATUS 5 ; Bank 1 e geç

Burada 5 yerine RP0 da kullanilabilir. Keza 6 yerine RP1 kullanilabilir; çünkü 5. ve 6. Bitlerin adi RP0 ve RP1 dir bunlar inc. dosyasinda tanimlanmistir.

BCF STATUSRP0 ; Bank 0 a geç
BSF STATUSRP0 ; Bank 1 e geç

BTFSC PORTA2 ; Porta nin 2.biti ni kontrol ederek bak0 ise bir satir atla
BTFSS STATUSZ ;Status registerin 2. Bitini kontrol ( Z ) et sayet 1 ise bir satir atla

Buraya kadar gördüklerimizi bir program yazarak deneyelimdeneme devresinde kullanacasimiz pic in RA2 –1 nolu bacak- kapisini 10 K direnç ile + 5 V a baglayipbir butonla topraklayalim.RB4 – 10 nolu bacak- 1K direnç ile led baglayalim.

;Deneme program
;TA2FR
;Bu program ile 16F84 1. bacakta bagli olan butona basinca 10. bacakta
;bagli olan led yanar.

LIST P=16F84
INCLUDE “16F84.INC”
__CONFIG _CP_OFF &_WDT_OFF &_XT_OSC &_PWRTE_OFF
CLRF PORTB ;Port b çikislari low (sönük)
SF STATUS5 ;Bank 1’e geç
CLRF TRISB ;Port B yi çikis pozisyonuna getir
MOVLW H’FF’ ;Write registere FF yükle
MOVWF TRISA ;Port a kapilarini giris yap
BCF STATUSRP0 ;Bank 0 ’a gel
GERI BTFSC PORTA2 ;Porta nin 2.bitini test et 0 ise atla
GOTO GERI ;0 degil 1 ise geri etiketine dön
BSF PORTB4 ;Port b nin 4.bitini 1 yap(high)
END

F D ile kullan 4 adet komutu görelim :

INCF : ‘Increment File’ Bir file register ‘ e atanmis bir sayiyi bir arttirarak file veya write registere yazar.

MOVLW D’0’
MOVWF SAYAC
INCF SAYACF

INCFSZ : ‘Increment file skip if zero’ file registerdeki sayiya bir ilave edip sonuc 0 ise bir satir atlar ve alt komuta geçer.

INCFSZ SAYACF
GOTO TEKRAR
BSF PORTA0

Burada sayaç 0 dan basliyorsa 255 den sonra 0 a gelir ve bir satir atlar ilk komut gerçeklesir.

DECF : ‘ Decrement File’ Bir file registere atanmis bir sayiyi bir azaltarakfile veya write registere yazar.

MOVLW D’255’
MOVWF SAYAC
DECF SAYACF

DECFSZ : ‘Decrement file skip if zero’ file registerdeki sayidan bir çikarir ve sonuç 0 ise bir satir atlar.

DECFSZ SAYACF
GOTO TEKRAR
BSF PORTA1

PIC Ders 10
Ders 10

STATUS REGISTER:
Bank 0 ve Bank 1 de 03H ve 83H adreslerinde bulunan 8 bit bir register olan STATUS register bulunur. Status register aritmetik logic ünitin durumunureset halini ve bank seçimini belirleyen bitler içerir.Status register bir komut hedefi oldugunda ZDCC bitleri etkilenebilir ve daha sonra bu bitlere tekrar yazilmaz.Bu bitler duruma göre 0 veya 1 olurlar.TO ve PD bitleri yazilamaz bitlerdir.

CLRF STATUS komutu ile ilk 3 bit 0 olur TO ve PD degismezZ 1 olur sonuç ‘ 000DD1DD’ olurburada D =degismez anlamindadir.Durum degisikligi olmasin istendiginde ; BCFBSFSWAPFMOVWF komutlari kullanilabilirbu komutlarla STATUS register bitleri etkilenmez.

Status registerin icerigini daha ayrintili gormek icin Tiklayin

SUBWF : File register ve Destination ile ( FD ) kullanilir File Registerden write registeri çikarir ve sonucu file veya write registere yazar.

SUBWF = FILE REGISTER – WRITE REGISTER W veya F’e yazilir.

Sonuca göre Status register içinde bulunan Z ve C flaglarinin durumu degisir.

Sonuç Z Flag C Flag
Pozitif 0 1
0 1 1
Negatif 0 0

SUBLW : Bir sabit ile kullanilan komuttur. Bir sabitten write register içerigini çikarir ve sonucu WRITE registere yazar.

SUBLW = SABIT – WRITE REGISTER W registere yazilir

Bu sabit binary hexadecimal veya decimal olabilirsabitten daha evvel write registere yazilan degeri çikardigimizdaçikan sonuca göre Z ve C flag durumu degisir

Sonuç Z Flag C Flag
Pozitif 0 1
0 1 1
Negatif 0 0
Bu komutlarin kullanilmasi ile flag durum degisikligini kontrol ederekprogramda kullaniriz.

……………………………
……………………………
CLRF SAYAC1 ;sayac1 sifirla
_X
INCF SAYAC1F ;sayac1 1 arttir ve file registere yaz
MOVLW D’200’ ;write registere 200 yaz
SUBWF SAYAC1W ;file registerdan write registeri çikar
BTFSS STATUS2 ;z flag kontrol et
GOTO _X ;_X git
MOVLW B’11100111’ ;write register a bu binary degeri gir
MOVWF PORTB ;port b ye bu binary degeri ata
END

Bu programda 200 ‘ e kadar sayildiktan sonra port b de ki ledler yanarfakat bu yine de çok kisa bir süre oldugu için göz bunu farkedemezbu nedenle bu bir baska döngü ile kullanilabilir.Burada bu program kismi teorik bilgi için verilmistir.

Keza buna benzer olarak SUBLW de kullanilabilir.

……………………………
……………………………
CLRF SAYAC1 ; sayac1 sifirla

_X
INCF SAYAC1W ;sayac1 1 arttir ve file registere yaz
SUBLW D’255’ ;sabitten write registeri çikar
BTFSC STATUS0 ;C flag kontrol et
GOTO _X ;_X git
MOVLW B’11100111’ ;write register a bu binary degeri gir
MOVWF PORTB ;port b ye bu binary degeri ata
END

Burada Write register 256 oldugunda sonuç negatif olur ve C flag 0 olur BTFSC komutu ile bu durum tespit edilir ve program devam eder.

Pratikte yazdigimiz programlarin gözle görülebilmesi için zaman geciktirme islemini ögrenip bunu kullanmamiz gerekir.Bu nedenle döngü islemlerini ögrenmeye baslayalim.

Zaman geciktirme isleri ya donanim gecikmeleri olarak TMR0 ve WDT ile veya simdi yapacagimiz gibi yazilim döngüleri olarak yapilabilir.

16F84 de dahili komut saykili 1 Mhz dir ve bunun karsiligi 1 mikrosaniyedir.Her komutun ne kadar komut zamani kullandigi liste ile belirlenmistir.Komut seti listesinde bu zamanlar bellidir.

Bir döngü ile maksimum 766 mikrosaniye gecikme elde edilirbu da göz ile takip için yeterli degildir.

MOVLW D’255’ ;write registere 255 yükle
MOVWF SAYAC1 ;sayac1 registerine 255 i aktar
DONGU
DECFSZ SAYAC1F ;file register de ki 255 sayisini bir azalt
GOTO DONGU ;dongu etiketine git
…………………………..

Burada ilk iki komut 1 mikrosaniye DECFSC komutu ilk uygulamada bir eksittigi için 255-1 =254 defa 1 mikrosaniye yani 254 mikrosaniye komut gerçeklestiginde yani 0 oldugunda ise 2 mikrosaniye (iki komut zamani kulalnir).GOTO komutu da 254 kez 2 mikrosaniye kullandigi içinsonuçta:

1+1+254+2+ (2X254) = 766 mikrosaniye olur.Bu kadar gecikme led ile çalisilan durumlarda yeterli degildir.göz 100 msn nin üstünü algilayabildigi için böyle bir döngüyü ikinci bir sayaç tan geçirip 250
kez daha tekrarlarsak yaklasik 200 msn elde ederiz100 degil de 200 olmasi nedeni dir döngünün 2 saykillik 2 komuttan olusmasi nedeni iledir.

Program içinde döngü kullanmak pek pratik olmadigi için CALL RETURN ikilisi ile alt programlar yazilir. CALL komutu ile geçikme yapilan satira yollanir ve RETURN ile kaldigi yerden devam için geri dönülür.

CALL komutu ile program yön degistirdiginde geri dönülecek adresin yazilmasi ve saklanmasi gerekir bu saklama islemi STACK registerdir bu is otomatik olarak yapilir.

;döngü ile ilgili bir program denemesi
;karasimsek
;PortB ye bagli led

Reklamlar
  1. Fatih Baysu
    15/06/2013, 08:37

    Hazırlayanların ellerine, beynine, emeğine sağlık çok teşekkürler ediyorum

    Beğen

  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: