User Tag List

2 sonuçtan 1 ile 2 arası
Şu an Programlama kategorisindeki Pic Ders isimli konuyu okuyorsunuz.
  1. #1
    DOLUNAY - ait Kullanıcı Resmi (Avatar)
    Üyelik tarihi
    Feb 2007
    Yaş
    45
    Mesajlar
    497
    Konular
    219
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Pic Ders

    PIC DERS
    _________



    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.

    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.


    Aşagıda 16F84 bacak baglantilari ve genel özellikleri verilmistir



    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.



    __________
    Ders2

    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.

    ____________
    Ders3

    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.



    _____________
    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 getirilip,pic 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

    http://ww1.microchip.com/downloads/e...mp740_full.zip



    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.



    Basari ile compile ettigimiz hex desyasini PIC'e atmak icin elimizde bir adet programlayici kart ve bilgisayarimizda gerekli software bulunmalidir. Bu is icin bir cok sowtware vardir. Ornegin IcProg, WiinPic, PicUp. Biz su asamada hemen hemen hicbir programlayici kartla uyumsuzluk gostermeyen PicUp programini kullanacagiz. PicUpi indirmek icin Tiklayin
    download

    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, aksi 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.

    ___________
    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 registerler,daha 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 çizgi,rakam,soru isareti bulunabilir.




    ETIKET KOMUT ADRES
    STATUS EQU H'03'
    TRISB EQU H'86'
    SAYAC1 EQU H'0D'
    START
    CLRF PORTB
    BSF STATUS,5
    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 ise,programci 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 olabilir,burada hepsi birdir.Sonuç olarak da 255 sayisinin binary karsiligi,bastaki 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 sistemidir,bu 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^1+15X16^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


    BSFFLAGS,MAX; 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österir,olmazsa 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.

    ___________
    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 STATUS,RP0
    BSF STATUS,5
    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 STATUS,RP0
    BCF STATUS,5
    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 vardir,fakat 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 bitleri,asagidaki 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.













    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 zordur,bu 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 derlerken,INCLUDE 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
    _______________
    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 STATUS,5 ;Bank 1'e gec
    CLRF TRISA ;Port A yi çıkış pozisyonuna getir
    BCF STATUS,5 ;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 aktiftir,yani 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 STATUS,5
    CLRF TRISB
    BCF STATUS,5
    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 low,sönük
    BSF STATUS,5 ;Bank 1'e gec
    CLRF TRISB ;Port B yi çıkış pozisyonuna getir
    BCF STATUS,5 ;Bank 0 'a gel
    BSF PORTB,0 ;portb nin ilk bitini high yap (lojik 1)
    BSF PORTB,1 ;portb nin 2. bitini high yap
    BSF PORTB,2 ;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.

    ________________
    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 STATUS,RP0 ; Bank 0 a geç
    BSF STATUS,RP0 ; Bank 1 e geç

    BTFSC PORTA,2 ; Porta nin 2.biti ni kontrol ederek bak,0 ise bir satir atla
    BTFSS STATUS,Z ;Status registerin 2. Bitini kontrol ( Z ) et sayet 1 ise bir satir atla


    Buraya kadar gördüklerimizi bir program yazarak deneyelim,deneme devresinde kullanacasimiz pic in RA2 -1 nolu bacak- kapisini 10 K direnç ile + 5 V a baglayip,bir 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 STATUS,5 ;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 STATUS,RP0 ;Bank 0 'a gel
    GERI BTFSC PORTA,2 ;Porta nin 2.bitini test et 0 ise atla
    GOTO GERI ;0 degil 1 ise geri etiketine dön
    BSF PORTB,4 ;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 SAYAC,F

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

    INCFSZ SAYAC,F
    GOTO TEKRAR
    BSF PORTA,0

    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 azaltarak,file veya write registere yazar.

    MOVLW D'255'
    MOVWF SAYAC
    DECF SAYAC,F


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


    DECFSZ SAYAC,F
    GOTO TEKRAR
    BSF PORTA,1

    _______________________
    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 durumunu,reset halini ve bank seçimini belirleyen bitler içerir.Status register bir komut hedefi oldugunda Z,DC,C 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 degismez,Z 1 olur sonuç ' 000DD1DD' olur,burada D =degismez anlamindadir.Durum degisikligi olmasin istendiginde ; BCF,BSF,SWAPF,MOVWF komutlari kullanilabilir,bu komutlarla STATUS register bitleri etkilenmez.



    Status registerin icerigini daha ayrintili gormek icin Tiklayin

    SUBWF : File register ve Destination ile ( F,D ) 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 olabilir,sabitten 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 ederek,programda kullaniriz.

    ...........
    ...........
    CLRF SAYAC1 ;sayac1 sifirla
    _X
    INCF SAYAC1,F ;sayac1 1 arttir ve file registere yaz
    MOVLW D'200' ;write registere 200 yaz
    SUBWF SAYAC1,W ;file registerdan, write registeri çikar
    BTFSS STATUS,2 ;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 yanar,fakat bu yine de çok kisa bir süre oldugu için göz bunu farkedemez,bu 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 SAYAC1,W ;sayac1 1 arttir ve file registere yaz
    SUBLW D'255' ;sabitten write registeri çikar
    BTFSC STATUS,0 ;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 edilir,bu 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 SAYAC1,F ;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çin,sonuç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 ederiz,100 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 ledler saga sola yanar

    list p=16f84

    include "16f84a.inc"

    CLRF PORTB
    BCF STATUS,0
    BSF STATUS,5
    CLRF TRISB
    BCF STATUS,5

    MOVLW B'00000001'
    MOVWF PORTB ;port b nin ilk bitini yak
    SOL
    CALL GECIKME ;gecikme döngüsüne gir
    RLF PORTB,F ;port b yi sola kaydir
    BTFSS PORTB,7 ;7. bit 1 ise atla
    GOTO SOL
    SAG
    CALL GECIKME
    RRF PORTB,F ;portb ye atanan degeri saga kaydir
    BTFSS PORTB,0 ;0 . bit 1 ise bir komut atla
    GOTO SAG ;0. bit 1 degilse sag etikete git
    GOTO SOL

    GECIKME

    MOVLW D'25'
    MOVWF SAYAC1

    DON1
    MOVLW D'25'
    MOVWF SAYAC2
    DON2
    MOVLW D'250'
    MOVWF SAYAC3

    DON3
    DECFSZ SAYAC3,F
    GOTO DON3
    DECFSZ SAYAC2,F
    GOTO DON2
    DECFSZ SAYAC1,F
    GOTO DON1
    RETURN
    END

    Bu programda SAYAC registerleri 16f84a inc. file içindedir.Daha evvel de söyledigimiz gibi bu file editorda açilip istenen ilaveler yapilir.Tekrar hatirlatmakta yarar olan sey ise sudur:

    INC. FILE IÇINDE YAZILAR BÜYÜK HARF ISE PROGRAMDA DA BÜYÜK,KÜÇÜK ISE KÜÇÜK OLMALIDIR.MPLAB IÇINDEKI INC FILE IÇINDE BÜYÜK HARF KULLANILDIGINDAN PROGRAM YAZIMINDA INC.FILE KULLANIYORSANIZ BÜYÜK HARF ILE PROGRAM YAZINIZ.

    Burada kullanilan ve bizim bahsetmedigimiz iki komut vardir bunlar RRF ve RLF komutlaridir.Her iki komut da F,D ile kullanilir.

    RLF : Bir file register içindeki bitleri bir sola kaydirir,en soldaki bit ne olur o da gider STATUS,0 'a yazilir,yani CARRY FLAG 'e gider.CARRY FLAG içindeki de en sag bite gider.



    CARRY 7 6 5 4 3 2 1 0
    1 0 0 0 1 1 0 0 0
    0 0 0 1 1 0 0 0 1


    RRF : Bir file register içindeki bitlerin pozisyonunu her defasinda bir saga kaydirir.Bu kez de en sag bit,yani bit 0 yerinden atilir ve gider CARRY FLAG 'e yazilir.CARRY FLAG içerigi ise en sol bite yazilir.

    7 6 5 4 3 2 1 0 CARRY
    0 0 0 1 1 0 0 0 1
    1 0 0 0 1 1 0 0 0


    COMF : F,D ile kullanilan bir komuttur,bir register içindeki bitleri ters çevirir,yani 0 lar 1 olur 1 ler ise 0 olur.

    7 6 5 4 3 2 1 0
    1 0 1 0 1 0 1 0
    0 1 0 1 0 1 0 1


    SWAPF : F,D ile kullanilir bir file register içindeki bitlerin ilk ve son dört bitinin yerini degistirir.

    7 6 5 4 3 2 1 0
    0 0 0 0 1 1 1 1
    1 1 1 1 0 0 0 0




    ;TA2FR
    ;BIR RPOGRAM DENEMESI
    ;INCF,SUBWF,CALL,RETURN KULLANILMASI
    ;ADIM ADIM PIC DENEME 3
    ;RB0 RB1 VE RB2 LED YANMASI



    LIST P=16F84
    INCLUDE "16F84A.INC"
    CLRF PORTB
    BCF STATUS,0
    BSF STATUS,5
    CLRF TRISB
    BCF STATUS,5
    BAS
    CLRF SAYAC1
    _X
    INCF SAYAC1,F
    MOVLW D'250'
    SUBWF SAYAC1,W
    BTFSS STATUS,2
    GOTO _X
    CALL GECIKME
    MOVLW B'00000111'
    MOVWF PORTB
    CALL GECIKME
    CALL GECIKME
    MOVLW B'00000000'
    MOVWF PORTB
    GOTO BAS
    GECIKME
    MOVLW D'250'
    MOVWF SAYAC2
    DON1
    MOVLW D'250'
    MOVWF SAYAC3
    DON2
    DECFSZ SAYAC3,F
    GOTO DON2
    DECFSZ SAYAC2,F
    GOTO DON1
    RETURN
    END






    --------------------------------------------------------------------------------


    ;TA2FR
    ;BIR RPOGRAM DENEMESI
    ;INCF,SUBWF,CALL,RETURN KULLANILMASI
    ;ADIM ADIM PIC DENEME 5
    ;RB0-RB1-RB2 DE LED YANMASI

    LIST P=16F84
    INCLUDE "16F84A.INC"
    CLRF PORTB
    BCF STATUS,0
    BSF STATUS,5
    CLRF TRISB
    BCF STATUS,5
    BAS
    CLRF SAYAC1
    _X
    INCF SAYAC1,F
    MOVLW D'250'
    SUBWF SAYAC1,W
    SUBWF SAYAC1,W
    BTFSS STATUS,2
    BTFSS STATUS,2
    GOTO _X
    CALL GECIKME
    CALL GECIKME
    CALL GECIKME
    CALL GECIKME
    MOVLW B'00000111'
    MOVWF PORTB
    CALL GECIKME
    CALL GECIKME
    CALL GECIKME
    CALL GECIKME
    MOVLW B'00000000'
    MOVWF PORTB
    GOTO BAS
    GECIKME
    MOVLW D'250'
    MOVWF SAYAC2
    DON1
    MOVLW D'250'
    MOVWF SAYAC3
    DON2
    DECFSZ SAYAC3,F
    GOTO DON2
    DECFSZ SAYAC2,F
    GOTO DON1
    RETURN
    END

    ___________________
    Ders 11




    UYGULAMALAR

    Bu yazimizda daha evvel gördügümüz komutlarla ilgili olarak yazilmis basit programlar verilecektir.
    Burada kullanilan RLF komutu yerine RRF komutunu koyarak tekrar deneyiniz.


    ;yanip sönen led programi
    ;PortB ledlerini sira ile yakan program
    ;sira ile yanan ledler
    ;RLF KOMUTU KULLANILMISTIR

    LIST P=16F84
    INCLUDE "P16F84A.INC"
    SAYAC1 EQU H'0C'
    SAYAC2 EQU H'0D'

    SAYAC3 EQU H'0E'

    BAS
    CLRF PORTB
    BCF STATUS, 0
    BSF STATUS,5
    CLRF TRISB
    BCF STATUS, 5
    MOVLW B'00000001'
    MOVWF PORTB ;port b nin ilk bitini yak
    TEKRAR
    CALL GECIKME ;gecikme döngüsüne gir
    RLF PORTB, F ;port b yi sola kaydir
    BTFSS STATUS, 0 ;carry flag 1 ise atla
    GOTO TEKRAR ;carry flag 1 degilse tekrara git
    GOTO BAS


    GECIKME
    MOVLW D'5'
    MOVWF SAYAC1
    DON1
    MOVLW D'250'
    MOVWF SAYAC2
    DON2
    MOVLW D'250'
    MOVWF SAYAC3
    DON3
    DECFSZ SAYAC3, F
    GOTO DON3
    DECFSZ SAYAC2, F

    GOTO DON2
    DECFSZ SAYAC1, F
    GOTO DON1
    RETURN
    END

    --------------------------------------------------------------------------------

    ;Deneme program
    ;COMF KOMUTU
    ;port b ye bagli 8 ledin yanip sönmesi (comf komutu ile)

    LIST P=16F84
    INCLUDE "P16F84A.INC"

    BAS
    CLRF PORTB ;Port b cikisleri low(sonuk)
    BSF STATUS, 5 ;Bank 1'e gec
    CLRF TRISB ;Port B yi çikis pozisyonuna getir
    BCF STATUS, 5 ;Bank 0 'a gel
    MOVLW B'11111111' ;write registere bu degeri ata
    MOVWF PORTB ;portb ye degeri uygula
    CALL GECIKME ;gecikme döngüsüne git
    COMF PORTB, F ;portb de bitleri sirayla 0 ve 1 yap
    CALL GECIKME
    GOTO BAS

    GECIKME
    MOVLW D'255'
    MOVWF SAYAC1

    DON1
    MOVLW D'255'
    MOVWF SAYAC2
    DON2
    DECFSZ SAYAC2,F
    GOTO DON2
    DECFSZ SAYAC1, F
    GOTO DON1
    RETURN
    END



    --------------------------------------------------------------------------------

    ;Deneme program
    ;SWAPF KOMUTU
    ;port b ye bagli 8 ledin sag sol 4 ledin yer degistirmesi

    LIST P=16F84
    INCLUDE "P16F84A.INC"
    SAYAC1 EQU H'0C'
    SAYAC2 EQU H'0D'


    BAS
    CLRF PORTB
    BSF STATUS,5
    CLRF TRISB
    BCF STATUS, 5
    MOVLW B'00001111'
    MOVWF PORTB ;port b nin ilk bitini yak
    CALL GECIKME ;gecikme döngüsüne git
    SWAPF PORTB, F ;portb de bitleri sirayla 0 ve 1 yap
    CALL GECIKME
    GOTO BAS

    GECIKME
    MOVLW D'255'
    MOVWF SAYAC1

    DON1
    MOVLW D'255'
    MOVWF SAYAC2
    DON2
    DECFSZ SAYAC2,F
    GOTO DON2
    DECFSZ SAYAC1, F
    GOTO DON1
    RETURN
    END

    --------------------------------------------------------------------------------

    ;döngü ile ilgili bir program denemesi
    ;karasimsek
    ;PortB ye bagli ledler saga sola yanar

    LIST P=16F84
    INCLUDE "P16F84A.INC"

    SAYAC1
    SAYAC2
    SAYAC3

    EQU
    EQU
    EQU
    H'0C'
    H'0D'
    H'0E'
    CLRF PORTB
    BCF STATUS,0
    BSF STATUS,5
    CLRF TRISB
    BCF STATUS, 5
    MOVLW B'00000001'
    MOVWF PORTB ;port b nin ilk bitini yak
    CALL GECIKME ;gecikme döngüsüne git
    RLF PORTB,F ;port b yi sola kaydÝr
    BTFSS PORTB, 7 ;7. bit 1 ise atla
    GOTO SOL
    SAG
    CALL GECIKME
    RRF PORTB,F ;port b ye atanan degerleri saga kaydir
    BTFSS PORTB, 0 ;0 . bit 1 ise bir komut atla
    GOTO SAG ;0. bit 1 deðilse sag etikete git
    GOTO SOL

    GECIKME
    MOVLW D'5'
    MOVWF SAYAC1
    DON1
    MOVLW D'250'
    MOVWF SAYAC2
    DON2
    MOVLW D'250'
    MOVWF SAYAC3
    DON3
    DECFSZ SAYAC3, F
    GOTO DON3
    DECFSZ SAYAC2, F

    GOTO DON2
    DECFSZ SAYAC1, F
    GOTO DON1
    RETURN
    END

    --------------------------------------------------------------------------------

    ;Deneme program
    ;SEVEN SEGMENT
    LIST P=16F84
    INCLUDE "P16F84A.INC"

    SAYAC1
    SAYAC2
    SAYAC3

    EQU
    EQU
    EQU
    H'0C'
    H'0D'
    H'0E'
    CLRF PORTB ;Port b cikislari low (sönük)
    BSF STATUS,5 ;Bank 1'e gec
    CLRF TRISB ;Port B yi cikis pozisyonuna getir
    BCF STATUS,5 ;Bank 0 'a gel
    BSF PORTB,0 ;RB0 daki led 'i yak

    BASLA
    MOVLW H'00'
    MOVWF SAYAC4
    DONGU
    MOVF SAYAC4,W
    ANDLW B'00001111'
    CALL _7SEG
    MOVWF PORTB
    INCF SAYAC4,F
    CALL GECIKME
    GOTO DONGU

    _7SEG
    ADDWF PCL,F
    RETLW H'3F'
    RETLW H'06'
    RETLW H'5B'
    RETLW H'4F'
    RETLW H'66'
    RETLW H'6D'
    RETLW H'7D'
    RETLW H'07'
    RETLW H'7F'
    RETLW H'6F'
    RETLW H'77'
    RETLW H'7C'
    RETLW H'39'
    RETLW H5E''
    RETLW H'79'
    RETLW H'71'
    GECIKME
    MOVLW D'5'
    MOVWF SAYAC1
    DON1
    MOVLW D'250'
    MOVWF SAYAC2
    DON2
    MOVLW D'250'
    MOVWF SAYAC3
    DON3
    DECFSZ SAYAC3, F
    GOTO DON3
    DECFSZ SAYAC2, F

    GOTO DON2
    DECFSZ SAYAC1, F
    GOTO DON1
    RETURN
    END


    son program ile ilgili komutlari ileriki yazilarimda anlatacağim.

    ______________-
    Ders 12


    Bu yazimizda döngü gecikmelerinde geçen zamanin hesaplanmasini ve diger komutlari ögrenecegiz. Tek döngü ile yeteri kadar gecikme yapilamadigi için, en az iki döngü yapmak gerekmektedir. Bir çift döngüde geçen zamani bulalim



    TOPLAM 196.608 Saykil 4 Mhz frekans için bu 196.6 milisaniye yani 0.196 saniye yaklasik 0.2 saniye eder



    Toplam 50.070.529 mikrosaniye ve yaklasik 50 saniye yaklasik 1 dakika eder.
    Demekki 3'lü döngü ile yeteri kadar zaman elde edebiliriz. Eger 4'lü bir döngü düzenlersek o zaman saatlerce sürecek bir zaman gecikmesi elde etmek mümkün olur.



  2. #2
    Forum Yöneticisi hunca - ait Kullanıcı Resmi (Avatar)
    Üyelik tarihi
    Feb 2006
    Yaş
    48
    Mesajlar
    1.417
    Konular
    722
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Emeğine sağlık DOLUNAY, çok güzel bilgiler vermişsin. Ben Elek-Elaktronik mühendisiyim. Elektronik üzerine eğitim almama rağmen Yüksek gerilim konusunda tecrübe kazandım. Bu PIC programlama ile de üniv.de az uğraşmadım..Ama o kadar uzak kaldık ki olaydan...ama eminim ilgilenen arkadaşların işine yarar

Konu Bilgileri

Users Browsing this Thread

Şu an 1 kullanıcı var. (0 üye ve 1 konuk)

Bu Konudaki Etiketler

Yetkileriniz

  • Konu Acma Yetkiniz Yok
  • Cevap Yazma Yetkiniz Yok
  • Eklenti Yükleme Yetkiniz Yok
  • Mesajınızı Değiştirme Yetkiniz Yok
  •  

SEO by vBSEO 3.6.0