15 bölüm ile Pic dersleri | TD Software © 2006-2016
> Dökümanlar	> 15 bölüm ile Pic dersleri	15 bölüm ile Pic dersleri
Öyle bir eleman olmali ki kolaylikla programlanabilmeli benim verdigim komutlari bacaklarina baglanan perifer ünitelerde gerçeklestirebilmeli…
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.
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.
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.
PIC 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 :
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 :
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
Pic 16F84’de iki hafiza blok’u mevcuttur. Bunlar
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.
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.
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
2-) Pic programlayacak donanima sahip olmak bunlar bilgisayar ve gerekli yazilimlardir.
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
3-) 16F84’ün 35 komut setini ögrenmek
6-) Compile edilip HEX haline gelmis dosyayi EASYPIC ile pic’e aktarmak.
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.
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
Program Chip : Sectiginiz Hex dosyasini PIC’e gonderir.
Verify Chip : PIC ’i kontrol ederek adreslerde sorun olup olmadigini denetler.
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.
; 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.
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
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.
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
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.
Gibi etiketler bu tip etiketlerdendir. Bir kisim adres atanan etiket de programci tarafindan yaratilir.
7-)Etiket içinde alt çizgirakamsoru isareti bulunabilir.
SAYAC1 EQU H’0D’
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.
10 lu sistemdeki bir sayiyi binary sayi sisteminde yazmak için bize kolaylik saglayan su tabloyu göz önünde tutalim.
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 :
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.
Burada 128 den baslayarak ikinin üs ’sü seklinde tüm üsleri kullanarak129 sayisini elde edelim.
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.
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.
Binary sistemde 8 basamakli 255 sayisini hexadecimal sistemde iki basamak ile elde ederiz.
1X16^2+0X16^1+0X16^0 demektir”100 “olarak yazilir.
15X16^1aaaaX16^0 burada 15. karakter F oldugu için ” 255 “decimal ” FF “Hexadecimal
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.
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
END : Program komutlarinin sona erdigini Assembler’e gösterirolmazsa derlemede hata mesaji verilir.
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
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 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.
Komutlari ile 5.bit 1 yapilir ve bank 1’e geçilir.1 yapilan 5. biti 0 yapmak için ise BCF komutunu kullaniriz.
“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 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.
PORTA çikislarini kontrol eden TRISA register bitleriasagidaki gibi ise çikislar su anlama gelir:
DEGER – – – 1 0 1 0 1
SONUÇ – – – G Ç G Ç G
PORTB çikislarini kontrol eden TRISB register bitleri asagidaki gibi ise çikislar su anlama gelir.
MOVLW B’11010101’ ; write registere degerleri yaz
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
k bir sabit veya bir etiket`i ifade eder. Sabit hexadecimal decimal binary olabilir. Bir sabit su sekilde olabilir.
BSF STATUS 5
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
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
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.
PIC 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.
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
;RA0 da led’in yanması
BSF STATUS5 ;Bank 1’e gec
BCF STATUS5 ;Bank 0 ’a gel
BSF PORTA 0 ;RA0 daki led ’i yak
· CONFIG ifadesinin yanındaki alt çizgi çift olmalıdır ‘ ___ ’
· Daha sonra yazılan ifadeler tek alt çizgili olmalıdı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.
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
;RB0 RB1 ve RB2 de led’in yanması
CLRF PORTB ;Port b çıkışlar lowsönük
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
PIC 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 .
MOVF SAYAC W ; Sayac içerigini write registere yükler
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ç
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.
SF STATUS5 ;Bank 1’e geç
MOVLW H’FF’ ;Write registere FF yükle
BCF STATUSRP0 ;Bank 0 ’a gel
GERI BTFSC PORTA2 ;Porta nin 2.bitini test et 0 ise atla
BSF PORTB4 ;Port b nin 4.bitini 1 yap(high)
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.
INCFSZ : ‘Increment file skip if zero’ file registerdeki sayiya bir ilave edip sonuc 0 ise bir satir atlar ve alt komuta geçer.
DECF : ‘ Decrement File’ Bir file registere atanmis bir sayiyi bir azaltarakfile veya write registere yazar.
DECFSZ : ‘Decrement file skip if zero’ file registerdeki sayidan bir çikarir ve sonuç 0 ise bir satir atlar.
PIC Ders 10
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.
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.
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
Bu komutlarin kullanilmasi ile flag durum degisikligini kontrol ederekprogramda kullaniriz.
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
MOVLW B’11100111’ ;write register a bu binary degeri gir
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.
INCF SAYAC1W ;sayac1 1 arttir ve file registere yaz
SUBLW D’255’ ;sabitten write registeri çikar
BTFSC STATUS0 ;C flag kontrol et
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
DECFSZ SAYAC1F ;file register de ki 255 sayisini bir azalt
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.
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.
;PortB ye bagli led
Etiketler:15, anlatımı, bölüm, dersleri, elektronik devre, instruction set computer, intel cyrix, interface controller, makinalar, pic, pic 16f84
Fatih Baysu	15/06/2013, 08:37	Hazırlayanların ellerine, beynine, emeğine sağlık çok teşekkürler ediyorum