Makaleler / Elektronik / Mikrokontrolür Mikroişlemci / PIC16F84


Yazar: Mehmet Can
Gönderen: Elektronik   Tarih: 19-03-2002 17:21
Yorumlar: (2)   Oylar:

Yüksek Performanslı RISC CPU'nun Özellikleri:
  • Sadece 35 komut ile programlama
  • Çalışma hızı DC-10 MHz
  • 8 bit genişliğinde veriyolu
  • 36x8 genel amaçlı register(SRAM)
  • 1Kx14 EEPROM Program Hafızası
  • 64 Byte EEPROM Data Hafızası
  • Direkt/Dolaylı Adresleyebilme
  • 4 adet Kesme Fonksiyonu. (PB0,TMR0,RB Change,EEPROM Write)
  • 13 adet giriş/çıkış portu
  • 1 milyondan fazla yazma silme
  • Kolay ve ucuz programlayabilme
  • 40 yıldan fazla EEPROM'da veri tutma süresi
  • Herbir pinden 25 mA e kadar akım verebilme
  • 8 bit programlanabilir Timer
    Aşagıda PIC16F84 ün pin diyagramı verilmiştir.

  • PIC 16C84 veya F84 düşük maliyetli, yüksek performanslı, CMOS full-statik, 8 bit mikrodenetleyicidir.

    Tüm PIC 16/17 mikrodenetleyiciler RISC mimarisini kullanmaktadır. PIC16CXX mikroları birçok esas özelliklere sahiptir. 8 seviyeli, derin küme ve çoklu iç ve dış kesme kaynaklarına sahiptir. Harward Mimarisinin ayrı komut ve veri taşıyıcısıyla ayrı 8 bitlik geniş veri taşıyıcılı, 14 bitlik geniş komut kelimesine imkan vermektedir. 2 aşamalı komut hattı tüm komutların tek bir saykıl' la (çevrimle) işlenmesini sağlamaktadır. Yalnızca bazı özel komutlar 2 saykıl çekerler. Bu komutlar dallanma komutlarıdır. PIC16CXX mikrodenetleyicileri tipik olarak 2:1 oranında kod sıkıştırmasına erişmektedir ve sınıflarındaki 8 bit mikrodenetleyicilerden 2:1 oranında hız arttırılmasına olanak sağlanmaktadır. (10MHZ)

    PIC16C84 microchip' i 36 bitlik RAM belleğine, 64 bayt EEPROM belleğine ve 13 I/O pin' ine sahiptir. Bunun yanı sıra, timer ve sayaç ta mevcuttur.

    PIC16CXX ailesi dış elemanları azaltacak spesifik özelliklere sahiptir ve böylece maliyet minimuma inmekte, sistemin güvenirliği artmakta, enerji sarfiyatı azalmaktadır. Bunun yanı sıra tüm PIC ler de 4 adet osilatör seçeneği mevcuttur. Bunlarda tek pin li RC osilatör, düşük maliyet çözümünü sağlamakta (4 MHZ) , LP osilatör (Kristal veya seramik rezonatör) , enerji sarfiyatını minimize etmekte (asgari akım) (40 KHZ), XT kristal veya seramik rezonatör osilatörü standart hızlı ve HS kristal veya seramik rezonatörlü osilatör çok yüksek hıza sahiptir (20 MHZ).

    PIC mikrokontrolörlerinin en büyüközelliği sleep modu özelliğidir.. Bu mod ile PIC işlem yapılmadığı durumlarda uyuma moduna geçerek çok düşük akım çeker. (5m A). Kullanıcı bir kaç iç ve dış kesmelerle PIC' i uyuma modundan çıkarabilmektedir. Yüksek güvenilirlikli Watchdog Timer kendi bünyesindeki chip üstü RC osilatörü ile yazılımı kilitlemeye karşı korumaktadır.

    PIC16C84 (16F84) EEPROM program belleği , aynı aygıt paketinin orijinali ve üretimi için kullanılmasına olanak vermektedir. Yeniden programlanabilirliği mikroyu uygulamanın sonundan kaldırmadan kodu güncelleştirmeye izin vermektedir. Bu aygıtın kolayca erişilemediği, fakat prototipinin kod güncelleştirmesi gerekli olduğu durumlarda, bir çok uygulamanın geliştirilmesinde yararlıdır. Bunun yanı sıra bu kodun güncelleştirilmesi diğer ayrı uygulamalarda da yararlıdır.

    PIC MİKROKONTROLÖRLERİNİN İÇ YAPISI
    CPU bölgesinin kalbi ALU dur. (Aritmetic Logic Unit-Aritmetik mantık birimi) ALU, W (Working-Çalışan) adında bir yazmaç içerir. PIC, diğer mikroişlemcilerden, aritmetik ve mantık işlemleri için bir tek ana yazmaca sahip oluşuyla farklılaşır. W yazmacı 8 bit genişliğindedir ve CPU'da ki herhangi bir veriyi transfer etmek üzere kullanılır.
    Aşağıda PIC16C8X' ailesinin basitleştirilmiş iç yapısı gösterilmektedir.


    Temel PIC blok diyagramı

    CPU alanında ayrıca iki kategoriye ayırabileceğimiz Veri Yazmaç dosyaları (Data Regıster Files) bulunur. Bu veri yazmaç dosyalarından biri, I/O ve kontrol işlemlerinde kullanılırken, diğeri RAM olarak kullanılır.

    ELEKTRİKLE SİLİNEBİLEN MİKROKONTROLÖRLER
    Bu mikrolar, programının silinip yeniden yazılabilme özelliğine sahiptir ve oldukça düşük maliyetli plastik ambalajlar halinde bulunmaktadır. Aynı zamanda bu tip mikroların üretimi kadar prototipinin geliştirilmesi ve pilot programlar için kullanılmasına olanak sağlamaktadır. Bunun daha ötesindeki avantajlarından biri, bunların devre içi veya Microchip's PICSTARTÒ plus veya PROMATE II programlayıcıları tarafından silinebilmesi ve yeniden programlanabilmesidir.

    MİMARİ OLARAK İNCELENMESİ
    PIC16CXX sınıfının üstün performansı genellikle RISC mikroçiplerinde bulunan birçok mimari özelliklere sahiptir. Başlangıç olarak PIC16CXX Harward mimarisini kullanmaktadır. Harward mimarisi mikrokontrolcülerde veri akış miktarını hızlandırmak ve yazılım güvenliğini arttırmak amacıyla kullanılır. Ayrı bus' ların kullanımıyla veri ve program belleğinde hızlı bir şekilde erişim sağlanır. Böylece PIC mikrosu program belleği ve veri belleği taşıyıcılarına sahipken programların ve verilerin aynı bellekten getirilen geleneksel Von Neuman mimarisi üzerinde bant genişliği iyileştirilmektedir. Programların ve veri belleklerinin ayrılması komutların 8 bitlik geniş veri kelimesinden farklı boyutlandırılmasına olanak vermektedir. PIC16CXX mikroları tekli kelimeye imkan veren 14 bit taşıyıcı üzerinden 14 bit komutu tek bir süreçte uygulamaktadır. İki aşamalı hat komut sürecini ve yürütülmesini biraraya getirmektir. (örnek 3-1). Bunun sonucu olarak, program bölünmeleri dışında tüm komutlar tek bir süreçle yürütülmektedir (400ns 10MHZ).

    PIC 16CXX aygıtları,kayıt dosyalarına ve veri belleğine doğrudan veya dolaylı olarak yönlenebilmektedir. Program Sayacı dahil bütün özel fonksiyon kayıtları veri belleğine yerleştirilmiştir. Adres modunu kullanarak herhangi bir kaydın üstüne herhangi bir işlemin gerçekleşmesini mümkün kılan Ortogonal (simetrik) komutlarda kurulmuştur. Simetrik özelliği ve "özel optimal durumların"eksikliği PIC 16CXX ile programlamayı daha da etkin kılmaktadır. İlaveten enformasyon eğrisi önemli ölçüde azaltılmıştır. PIC16CXX mikroları 8 bitlik ALU ya ve W(working) registerine sahiptir. W registerindeki veri ile herhangi bir kayıt dosyası arasında aritmetik ve boolean fonksiyonları uygulanmaktadır.

    ALU 8 bit enindedir ve toplama, çıkarma , değiştirme ve çeşitli lojik işlemleri içerir. İki bilgili komutlarda bir bilgi tipik olarak W registeridir diğer bilgi ise dosya kaydı veya hazır sabit değerdir. Tekli komutlarda bilgi ya W kaydı ya da dosya kaydıdır. Yürütülen komutlara dayanarak ALU, STATUS kaydındaki Caryy(C), Digit Caryy(DC) ve Zero(Z) bitlerini etkileyebilmektedir. C ve DC bitleri, çıkarmalarda, nispeten çıkarma işleminde ödünç alan ve sayısal ödünç alan bit olarak işlemektedir.

    PIC16C84'ün iç yapısı


    PIC 16F84’ün pin açıklamaları

    Bacak Adı

    Bacak#

    G/Ç/Güç

    Tampon 
    Tipi

    Açıklama

    OSC1/CLKIN

    16

    G

    ST/CMOS(3)

    Kristal titreştirici (oscillator) girişi / dış 
    saat kaynağı girişi

    OSC2/CLKOUT

    15

    Ç

    -

    Kristal titreştirici çıkışı.
    RC bağlanması durumunda(4) bu bacak 
    OSC1’e bağlanan kaynağın dörtte biri 
    frekansında, yani komut işleme hızında, 
    saat çıktısı üretir

    MCLR’

    4

    G/Güç

    ST

    Sıfırlama girişi / Programlama 
    voltaj girişi. 
    Bu bacağa düşük mantık sevıyesi 
    uygulandığında aygıtı ‘reset’ler

    RA0

    RA1

    RA2

    RA3

    RA4/T0CKI

    17

    18

    1

    2

    3

    G/Ç

    G/Ç

    G/Ç

    G/Ç

    G/Ç

    TTL

    TTL

    TTL

    TTL

    ST

    PORTA iki yönlü bir giriş çıkış bağlacıdır.
     
     
     
     
     

    Bu bacak TMR0 zamanlayıcı (timer) / 
    sayıcısına (counter) saat sinyali girişi 
    olarak da kullanılabilir.


     
     

    RB0/INT

    RB1

    RB2

    RB3

    RB4

    RB5

    RB6
     

    RB7


     
     

    6

    7

    8

    9

    10

    11

    12
     

    13


     
     

    G/Ç

    G/Ç

    G/Ç

    G/Ç

    G/Ç

    G/Ç

    G/Ç
     

    G/Ç


     
     

    TTL/ST(1)

    TTL

    TTL

    TTL

    TTL

    TTL

    TTL/ST(2)
     

    TTL/ST(2)

    PORTB iki yönlü bir giriş çıkış 
    bağlacıdır. 
    Yazılım aracılığıyla bütün girişlerdeki
    ‘weak pull-up’lar devreye sokulabilir.

    Bu bacak dış kesme girişi olarak 
    ayarlanabilir.
     
     
     
     
     
     

    Değişimle kesme yaratma özelliği 
    vardır.

    Değişimle kesme yaratma özelliği 
    vardır.

    Değişimle kesme yaratma özelliği 
    vardır.
    Seri programlamada saat girişi.

    Değişimle kesme yaratma özelliği 
    vardır.
    Seri programlamada veri girişi.

    VSS

    5

    Güç

    -

    Mantık ve G/Ç bacakları için toprak 
    referansı girişi.

    VDD

    14

    Güç

    -

    Mantık ve G/Ç bacakları için pozitif 
    voltaj kaynağı girişi


    G=Giriş - = Kullanılmıyor
    Ç=Çıkış TTL = TTL tipi giriş ST=Schmitt Trigger giriş

    SAAT ÖLÇÜM ŞEMASI / KOMUT SÜRECİ
    Saat girişi (OSC1 den) içten dörde bölünmüştür ve Q1, Q2, Q3 ve Q4 olarak gelmeyen 4 kare dalga sinyali ortaya çıkar. İçten olarak, program sayacı (PC) her Q1 de bir arttırılmakta ve komutlar program belliğinde sürece sokularak Q4 sürecinde komut kaydına katılmaktadır. Komutlar Q1 ve Q4 aralığı boyunca decode edilir ve yürütülür. Saat palsi ve komut yürütme akımı şekil 2.3 de görülmektedir.


    Saat palsi ve komut yürütme akımı

    KOMUT AKIMI / BİLGİ İLETİMİ
    'Komut süreci' dört Q sürecinden oluşmaktadır. (Q1, Q2, Q3 ve Q4). Komut devri ve yürütülmesi şöyle iletilmektedir. Devir bir komut sürecini üstlenirken decode ve yürütme diğer komut sürecini üstlenmektedir. Bununla birlikte bilgi iletim nedeniyle , her bir komut etkin olarak bir süreçte yürütülür. Eğer komut program sayacının değişmesine neden olmuşsa ( örn. GOTO komutu) o zaman komutun tamamlanması için iki süreç gereklidir.( Aşağıdaki örnekte gösterilmiştir.)


    Devir süreci her Q1 de değeri bir artan program sayacı (PC) ile başlar. Yürütme sürecinde işleyen komut Q1 sürecindeki 'Komut kaydı'na gönderilir. Daha sonra bu komut Q2, Q3 ve Q4 süreçleri boyunca decode edilir ve yürütülür. Veri belleği Q2 boyunca okunur (Bilgi okunması) ve Q4 boyunca yazılır ( Yazım hedefi)

    BELLEK ORGANİZASYONU
    PIC16C84` de 2 bellek bloğu mevcuttur. Bunlar program belleği ve veri belleğidir. Her bir bellek kendi taşıyıcısına sahiptir; böylece her bir bloğa erişim aynı osilatör süreci boyunca meydana gelebilmektedir. Bunun ötesinde, veri belleği genel amaçlı RAM ve özel fonksiyon kayıtları (SFRS) olmak üzere ikiye bölünür. . SFR`ler her bir bireysel özelleşmiş modülü ele alan bölümde açıklanan özel modülleri kontrol etmek için kullanılmaktadır. Veri belleği EEPROM veri belleğini de içermektedir. Bu bellek, direkt veri belleğine planlanmamış, fakat indirekt olarak planlanmıştır; ve indirekt adres göstergeleri okumak/yazmak için EEPROM belleğinin adresini belirlemektedir. EEPROM belleği 64 bayt ve 10h-3Fh. adres enine sahiptir.

    VERİ BELLEK ORGANİZASYONU
    Veri belleği ikiye ayrılır. Birincisi özel fonksiyon kayıt alanı (SFR), diğeri ise genel amaçlı kayıt alanıdır. SFR' ler aygıtın işlemini kontrol eder. Veri belleğinin bölümleri kümelenmiştir. Bu kümeler BANK adını alırlar. Bu hem SFR alanı hem de GPR alanı içinde geçerlidir. GPR alanı genel amaçlı RAM`in 16 bayt` ından daha fazlasına olanak sağlanabilmesi için kümelenmiştir. SFR` nin kümelenmiş alanı özel fonksiyonları kontrol eden kayıtlara aittir. Kümeleme küme seçimi için kontrol bitleri gerektirmektedir. Bu kontrol bitleri STATUS kaydında yer almaktadır. Şekil 2.4 veri belleği haritası organizasyonunu göstermektedir.
    Veri belleğin tümüne ya direkt her kayıt dosyasının mutlak adreslerini kullanarak, yada, dolaylı yoldan dosya seçim kaydı (FSR) üzerinden erişilebilir. Dolaylı adresleme, veri belleğinin kümelenmiş alanına erişmek için RP1: RPO` un şimdiki değerlerini kullanmaktadır. Veri belleği genel amaçlı kayıt ve özel fonksiyon kaydını içeren iki kümeye bölünmektedir. RPO bitinin (STATUS<5>) (Yani 5. Bit RPO bitidir.) silinmesiyle BANK 0 seçilir. RPO` in kurulması BANK 1`i seçer. Her bir BANK (küme) 7Fh (128 bytes) kadar uzanır (genişler). Her bir kümenin ilk on iki yerleşimi özel fonksiyon kaydı için rezerve edilmiştir. Kalanı ise statik RAM olarak genel amaçlı kayıt yürütebilmektedir.


    Kayıt Dosyası Haritası

    GENEL AMAÇLI KAYIT DOSYASI
    Bütün aygıtlar belirli bir miktarda genel amaçlı kayıt (GPR) alanına sahiptir. Her bir GPR 8 bit enindedir ve dolaylı yada doğrudan FSR üzerinden erişilmektedir.
    BANK 1` deki GPR adresleri BANK 0`daki adreslere planlanır. Örnek olarak, 0Ch veya 8Ch adresleme yerleşimi aynı GPR` ye erişecektir

    ÖZEL FONKSİYON KAYITLARI
    Özel fonksiyon kayıtları, aygıtın işlemini kontrol etmek için CPU ve özel fonksiyonlar tarafından kullanılmaktadır. Bu kayıtlar statik RAM`lerdir.

    Register File Summary

    Resmi net görebilmek için tıklayınız

    REGİSTER'lar


    STATUS

    Bit7: IPR 0: Bank0-1
           1: Bank2-3
    Bit6-5: RP0-RP1 00:Bank0
            01:Bank1
            10:Bank2
            11:Bank3
    Bit4: TO Süre Aşım Biti
            0:WDT süre aşım işlemi yapmışsa
            1:CRWDT yada SLEEP yapılmışsa
    Bit3: PD Güç Kesme Biti
            0:SLEEP den sonra
            1:CLRWDT dan sonra
    Bit2: Z 0:Yapılan aritmetik işlemin sonucu sıfırdan farklı ise
            1: Yapılan aritmetik işlemin sonucu sıfır ise
    Bit1: DC 1: 8 bitin Düşük anlamlı ilk 4 bitinden taşma olursa
            0: Taşma olazsa (ADD komutları ile değişir)
    Bit0: C 1:8 bitten taşma olursa
            0:Taşma olmazsa(ADD komutları ile değişir)

    OPTION

    Bit7:  RBPU 0: PortB Pull-Up disable
             1: PortB Pull-Up enable
    Bit6:  INTEDG 0:PB0 düşen kenarda interrupt kabul eder.
             1:PB0 yükselen kenarda interrupt kabul eder.
    Bit5:  T0CS 0:T0CKI den gelen darbeler Clock kabul edilir
             1:Clock kaynagı XTAL in ürettigi dahili darbeler olur.
    Bit4:  T0SE (T0CS=1 ise)
             0:T0CKI den gelen darbeler yükselen kenarda clock u arttırır.
             1: T0CKI den gelen darbeler düşen kenarda clock u arttırır.
    Bit3:  PSA 0:Prescaler TMR0 için ayarlı
             1:Prescaler WDT için ayarlı
    Bit2,1,0: Prescaler set etme

    PİC 16F84 KOMUTLARI
    f: file register
    d:gönderilen yer  d=0:W register , d=1:file register
    k:sabit veya adres etiketi
    b: bit tanımlayıcı
    
    PİC 16F84 Komutlarının Açıklamaları ve Örnekleri
    
    1- #define
    
      : Uygulamalarımızda #define komutunu daha çok port bitlerine değişken isimler 
    atamada kullanacağız. Bu şekilde yazdığımız programlar da anlaşılır bir hal alacaktır.
        Örnek: 
            #define buton    porta,3    ; Bu komutla -PortA,3- yazacağımız yerlerde 
    -buton- yazmamızda aynı işi görecektir. Böylelikle programımızı kontrol ederken 
    -PortA,3- ün ne olduğunu araştırmamıza gerek kalmayacak ve bunun -buton- olduğunu 
    anlayacağız.
    2- clrf : Sonrasına yazılan portu tamamen sıfırlar.
        Örnek:
            clrf    Porta    ; A Portunu sıfırlar. Genellikle programın başına yazılmasında
                             ;fayda vardır.
    3- bsf : Portların çıkışına mantık 1 çıkışı vermeyi sağlar.
        Örnek:
            bsf    Porta,3    ; A portunun 3. bitini mantık 1 yükler.
    4- bcf : Portların çıkışlarını mantık 0 (sıfır) yapar.
        Örnek:
            bcf     Portb,5       ; B portunun 5. bitini 0 (sıfır) yapar.
    5- btfss : Program akışında portun belirtilen bitinin mantık 1 olup olmadığını kontrol 
    etmekte kullanılır. 
        Örnek: 
            main     btfss  Porta,2    ; A portunun 2. biti mantık '1' ise sonraki komutu atla.
            goto     main              ; Porta,2 mantık '0' ise -main- etiketli bölüme geri dön.
            bsf      Portb,6           ; B portunun 6. bitini çıkış mantık 1 yap.
                               
    Bu komut setinde A portu mantık 1 olana kadar sürekli 1. ve 2. satır arasında döngüye 
    girer. A portunun 2. biti mantık 1 olduğunda, program 2. satırı uygulamayıp daha sonraki 
    satırı işlemeye başlayacaktır.
    
    6- btfsc : btfss (5. komut) ile aynı özellikte, ancak mantık 0 (sıfır) seviyesini 
    kontrol eder.
    
    7- goto : Programda istenen yere gidilip işlemlerin oradan itibaren yürütülmesini sağlar.
        Örnek :
            main  bsf   Portb,4 ; B portunun 4. bitini 1 yap.
            ..... ......        ; Buraya bir geciktirme rutini (Bkz. 10. madde)yerleştirilebilir.
            bcf   Portb,4       ; B portunun 4. bitini 0 (sıfır) yap
            goto  main          ; -main- etiketli satıra gider ve işlem oradan 
                                ;sonra tekrar devam eder.
    8- equ : Bu komut PortA, PortB, ve yazmaçların adreslerinin atanmasını sağlar.
        Örnek : PortA nın PIC16F84 teki adresi 05 tir.
            porta   equ    05   ;Bu komutla PortA nın PIC içerisinde bulunduğu adresin 
                                ;05 olduğunu tanımlamış olduk.
            portb   equ    06   ; Bu komutlada PortB nin adresini tanımlamış olduk.
            .......     ....     
    9- movlw-monwf : Bu komutlarla PIC içerisinde bulunan -W- yazmacına (Değişkenine) değer 
    atanır. Programın ilerleyen aşamalarında bu değer okunup portlara atanabilir. Gerekli 
    görüldüğü yerlerde bu -W- yazmacının değeri arttırılıp-eksiltilerek değişik değerlerin 
    portlara atanmasınıda sağlarlar.
        Örnek:
              movlw    80H   ; W yazmacına 80H değeri yüklenir.
              movwf    trisb  ; W yazmacındaki 80H değeri PortB ye yüklenmiş oldu.
    10- Geciktirme rutinleri : Geciktirme rutinleri; programın işleyişi esnasında, 
    herhangibir işlemden sonra belli bir süre beklemesini istediğimiz zamanlarda 
    kullanmamız gereken zamanlayıcı alt programlarıdır.
        Örnek: Bir yürüyen ışık devresinde, her ledin yanmasından sonraki satıra geciktirme 
        rutini yerleştirmezsek ledlerin hepsini aynı anda yanıyormuş gibi görürüz. 
        Bunu önlemek için ledleri yakan her program satırından sonra bir geciktirme rutini 
        eklememiz gerekir. Aşağıda basit bir örnek göreceksiniz. Butür alt rutinler 
        genellikle programın sonuna yazılır.
           ........       ......
       ........       ...... 
               delay0     equ       0DH  ; delay1 yazmacını 0DH adresinde tanımladık.
               delay1      equ      0EH  ; delay2 yazmacı 0EH adresinde.
               delay2     equ       0FH  ; delay3 yazmacı 0FH adresinde.
               .........     .....      
               .........     .....       ; Ana programın işlediği program satırları.
             bsf        portb,1          ; Portb nin 1. bitini mantık '1' yap.
    
             call       DELAY     ; DELAY etiketli alt rutini çağır.
             ortb,1               ; Portb nin 1. bitini mantık '0' yap.
             bsf        portb,2   ; Portb nin 2. bitini '1' yap.
             call       DELAY     ; DELAY etiketli alt rutini çağır.
             bcf        portb,2   ; portb nin 2. bitini '0' yap.
             .....      ......... ; Program bu şekilde devam edebilir.
     DELAY    movlw    .4       ; W yazmacına .4 değeri atandı.
              movwf    delay0   ; W yazmacındaki .4 değeri delay0 yazmacına atandı.
     D0       movlw    .200     ; W yazmacına .200 değeri atandı.
              movwf    delay1   ; W yazmacındaki .200 değeri delay1 yazmacına atandı.
     D1       movlw    .200     ; W yazmacına .200 değeri atandı.
              movwf    delay2   ; W yazmacındaki .200 değeri delay2 yazmacına atandı.
     D2       decfsz   delay2,F ; delay2 değerini azalt. '0' olduysa sonraki komutu atla.
              goto     D2       ; D2 etiketli satıra geri dön.
              decfsz   delay1,F ; delay1 değerini  azalt '0' olduysa sonraki komutu atla.
              goto     D1       ; D1 etiketli satıra git.
              decfsz   delay0   ; delay0 değerini azalt '0' olduysa sonraki komutu atla.
              goto     D0       ; D0 etiketli satıra git.
              retlw    00       ; rutinin çağrıldığı satırın alt satırına dön. 
             Bu program grubunda önce portb nin 2. biti çıkışı '1' oluyor, ardından -call     
             DELAY- komutuyla geciktirme rutini çağrılıp çalıştırılıyor. DELAY rutininde 
             3 ayrı döngü kurulmuştur. Her döngüde -delayX- değerleri azaltılıp '0' değerine 
             kadar düşmesi sağlanmaktadır. -delayX- değerlerinin hepsi '0' değerine ulaştığında 
             program -retlw      00- komutuyla -call   DELAY- komutunun altındaki satıra geri 
             dönüp işlemlerin o satırdan itibaren işlemesini sağlamaktadır.
    11- decfsz : Sonrasına yazılan değişkenin değerini azaltıp '0' olup olmadığını kontrol eder.
          Örnek: Aşağıdaki örnek tek döngülü bir geciktirme (Bekleme) rutinidir.
    DELAY     movlw      .200       ; W yazmacına .200 değeri atandı.
              movwf      delay0     ; W yazmacındaki .200 değeri delay0 yazmacına atandı.
    D0        decfsz     delay0     ; delay0 değerini azalt '0' olduysa sonraki komutu atla.
              goto       D0         ; D0 etiketli satıra git.
              goto       x          ; -x- etiketli satıra git

    PİC PROGRAMLAMA DEVRESİ

    Bu devresini kullanmak için bilgisayarınızın seri ( RS-232 ) portunu kullanmalısınız. Pic'i programlamak için kullanacağınız IC-prog programı almak için tıklayınız.

    Yukarıdaki komutların bir uygulaması olarak 0.5sn aralıklarla yanıp sönen bir led flaşör devresi yapılmıştır.


    Verilen devrenin kodlarını almak için tıklayınız