PIC Assembly Komutlarının Açıklamaları

PIC Assembly Komutlarının Yazılışı

PIC 16f877’nin toplam 35 tane komutu vardır. Bu komutların yazılış biçimini dört grupta toplayabiliriz.
          • Byte yönlendirmeli komutlar
          • Bit yönlendirmeli komutlar
          • Sabit işleyen komutlar
          • Kontrol komutları
Komutların yazılış biçimlerini açıklarken bazı tanımlama harfleri kullanacağız. Öncelikle bu harflerin anlamlarını vermekte fayda vardır.
          f=File register (Kaydedici)
          d=destination (gönderilen yer)
              d=0→w kaydedicisi (akümülatör)
              d=1→f kaydedicisi
          k=sabit veya adres etiketi
          b=bit tanımlayıcı
          b=binary sayıları belirleyen harf
          d=decimal sayıları belirten harf
          h=hexadecimal sayıları belirten harf

 

 

PIC Assembly Komutlarının Açıklamaları

      ADDWF f,d:Akümülatördeki herhangi bir veri ile f kaydedicisindeki veriyi mantıksal olarak toplar ve sonucu d’nin değeri f ise kaydediciye w ise akümülatöre kaydeder.
      İşlem: (w)+(f) → → → → d
      Örnek:addwf porta,f
            İşlemden önce:W=00110011 PORTA:00010101
            İşlemden sonra:W=00110011 PORTA:01001000


      ANDWF f,d:Akümülatördeki veri ile f kaydedicisindeki veriyi ve (AND) işlemine sokar ve sonucu d’nin değeri f ise kaydediciye w ise akümülatöre kaydeder.
            İşlem: (w).AND.(f) → → → → d
      Örnek:andwf portb,w
            İşlemden önce: W=00110011 PORTB=00000011
            İşlemden sonra: W=00000011 PORTB=00000011


      CLRF f:f kaydedicisinin içeriğini siler (sıfırlar).
           İşlem: f=0
      Örnek:clrf portb
           İşlemden önce: PORTB=00000011
           İşlemden sonra: PORTB=00000000


      CLRW:Akümülatördeki verileri siler.
           İşlem: W=0
      Örnek: clrw
           İşlemden önce: W=11110001
           İşlemden sonra: W=00000000


      COMF f,d:f kaydedicisinde yer alan verinin tümleyenini (complementini) alır ve d’nin aldığı değere göre sonuç akümülatöre veya f kaydedilir.                    İşlem: f =d
      Örnek: comf portb,w
           İşlemden önce: W=01010101 PORTB=00101010
           İşlemden sonra: W=11010101 PORTB=00101010


      DECF f,d: f kaydedicisindeki veriden 1 azaltır ve d’nin aldığı değere göre sonucu akümülatöre veya f kaydedicisine kaydeder.
           İşlem: f-1=d            
      Örnek
: decf pcl,w
           İşlemden önce: PCL=10001111 W=11010101
           İşlemden sonra: PCL=10001111 W=10001110


      DECFSZ f,d: f ile belirtilen kaydedicideki değeri 1 azaltır ve sonucu d değerinin aldığı değere göre f veya akümülatöre kaydeder. Daha sonra sayıcı değerinin 0 olup olmadığına bakılır. Eğer değer 0 ise bir alttaki satır atlanır. Eğer 0 değil ise bir alttaki satır okunur.
     Örnek:        devam         decfsz say1,f
                                            goto devam
                                            end
            Yukarıdaki program parçasında say1’in değeri 1 azaltılır. Eğer say1’in değeri 0 olmuş ise program sonlanır. Eğer 0 değilse program devam etiketinin olduğu satıra gelir.


      INCF f,d=f kaydedicisindeki veriye 1 ekler ve d’nin aldığı değere göre sonucu akümülatöre veya f kaydeder.
           İşlem: f+1=d
Örnek: incf pcl,f
           İşlemden önce:pcl=01110000 W=10001110
           İşlemden sonra:pcl=01110001 W=10001110


      INCFSZ f,d: f ile belirtilen kaydedicideki değeri 1 arttırır ve sonucu d değerinin aldığı değere göre f veya akümülatöre kaydeder. Daha sonra sayıcı değerinin 0 olup olmadığına bakılır. Eğer değer 0 ise bir alttaki satır atlanır. Eğer 0 değil ise bir alttaki satır okunur.
      Örnek:devam   incfsz say1,f
                              goto devam
                              end
      Yukarıdaki program parçasında say1’in değeri 1 arttırılır. Eğer say1’in değeri 0 olmuş ise program sonlanır. Eğer 0 değilse program devam etiketinin olduğu satıra gelir.


      IORWF f,d: Akümülatördeki bilgi ile f kaydedicisindeki veriyi veya (OR) işlemine sokar ve d’nin aldığı değere göre sonucu akümülatöre veya f kaydedicisine kaydeder.
           İşlem: (w).OR.(f) → d
      Örnek: iorwf porta,w
           İşlemden önce: W=10001110 PORTA=01010101
           İşlemden sonra: W=11011111 PORTA=01010101


      MOVF f,d: f kaydedicisinde yer alan veriyi akümülatöre taşır. Burada d değeri her nekadar f değerini de alabiliyor gibi gözükse de d=w olmalıdır.            İşlem: (f) → → → →(w)
      Örnek: movf porta,w
           İşlemden önce: W=00000000 PORTA=01010101
           İşlemden sonra: W=01010101 PORTA=01010101


      MOVWF: Akümülatörde bulunan veriyi f kaydedicisine taşır.
           İşlem: (w) → → → → (f)
      Örnek:movwf portb
           İşlemden önce:W=01010101 PORTB=00000111
           İşlemden sonra: W=01010101 PORTB=01010101


      NOP: Bu komutun bulunduğu satıra gelindiğinde hiçbir işlem yapılmaz.1µs’lik bir beklemeden sonra program kaldığı yerden devam eder. Bu komut genellikle zaman gecikmesi istenen yerlerde bir döngü ile birlikte kullanılır


      RLF f,d: f kaydedicisindeki veriyi sola kaydırma işlemini yapar. Çarpma işlemini yapan döngülerde oldukça çok kullanılmaktadırlar. Aslında bir dijital veriyi 1 kere sola kaydırmak demek sayıyı 2 ile çarpmak demektir. Sayıyı n defa sola kaydırmak demek ise sayıyı 2n ile çarpmak demektir. Kaydırma işleminden sonra kaydedicinin değeri d’nin değerine göre kaydediciye ya da akümülatöre atılır.
      Örnek:rlf status,f
           İşlemden önce: STATUS=01110010
           İşlemden sonra: STATUS=11100100


      RRF f,d: f kaydedicisindeki veriyi sağa kaydırma işlemini yapar. Bölme işlemini yapan döngülerde oldukça çok kullanılmaktadırlar. Aslında bir dijital bilgiyi 1 kere sağa kaydırmak demek sayıyı 2’ye bölmek demektir. Sayıyı n defa sağa kaydırmak demek ise sayıyı 2 n’e bölmek demektir. . Kaydırma işleminden sonra kaydedicinin değeri d’nin değerine göre kaydediciye ya da akümülatöre atılır.
      Örnek:rrf portb,f
           İşlemden önce: PORTB=01010101
           İşlemden sonra: PORTB=00101010


      SUBWF f,d: f kaydedicisinde bulunan veriden akümülatörde bulunan veriyi mantıksal çıkarma işlemine tabi tutar. Sonucu d değerine göre f kaydedicisine veya akümülatöre kaydeder.
           İşlem: (f) –(w) → → → → d
      Örnek: subwf reg1,f
           İşlemden önce:REG1 = 00000011 W = 00000010 C = ? Z = ?
           İşlemden sonra:REG1 = 00000001 W = 00000010 C = 1;
           sonuç pozitif Z = 0

      Örnek: : subwf reg1,f
           İşlemden önce:REG1 = 00000010 W = 00000010 C = ? Z = ?
           İşlemden sonra:REG1 = 00000000 W = 00000010 C = 1;
           sonuç 0 Z = 1

      Örnek: : subwf reg1,f
           İşlemden sonra:REG1 = 00000001 W = 00000010 C = ? Z = ?
           İşlemden sonra:REG1 = 11111111 W = 00000010 C = 0;
           sonuç negatif Z= 0


      SWAPF f,d:f kaydedicisinde bulunan veride 4’er bitlik bloklar halinde yer değiştirme yapar. Yani f kaydedicisinin ilk 4 biti düşük son 4 biti yüksek bitler olarak isimlendirilirse; bu komut ile yüksek bit ile düşük bitler yer değiştirir. Elde edilen sonuç ise d değerine bağlı olarak f kaydedicisine ya da akümülatöre kaydedilir.
     Örnek:swapf say1,w
           İşlemden önce:SAY1=01010011 W=11010111
           İşlemden sonra:SAY1=01010011 W=00110101


      XORWF f,d: Akümülatördeki veri ile f kaydedicisindeki veriyi özel veya (EXCLUSİVE-OR) işlemine sokar ve d’nin aldığı değere göre sonucu akümülatöre veya f kaydedicisine kaydeder.
           İşlem: (w).EXOR.(f) → → → →d
      Örnek: xorwf status,f
           İşlemden önce: W=10111111 STATUS=11100100
           İşlemden sonra: W=10111111 STATUS=01011011


      BCF f,b:f kaydedicisinin b. bitini temizler (sıfırlar)
           İşlem: f,b=0 0≤b≤7
     Örnek: bcf porta,0
           İşlemden önce: PORTA=01110101
           İşlemden sonra:PORTB=01110100


      BSF f,b: f kaydedicisinin b. bitini 1 yapan komuttur.
           İşlem: f, b=1  0≤b≤7
     Örnek: bsf portc,4
           İşlemden önce: PORTC=0110000
           İşlemden sonra:PORTC=0111000


      BTFSC f,b:f kaydedicisinin b. bitine göre işlem gerçekleştiren komuttur. İstenen bitin sonucu 1 ise bir alt satırdan işlemlere devam edilir. Eğer sonuç 0 ise bir alttaki satır atlanır.
           İşlem: f,b=0 alttaki satırı atla
      Örnek:    addlw b’11111110’
                     btfsc carry
                     bcf status,3
                     andwf porta,w

           İşlemden önce:W=00000011 CARRY=0 STATUS=01110100 PORTA=01001000
           İşlemden sonra:W=00000000 CARRY=0 STATUS=01110000 PORTA=01001000
      Yukarıdaki program parçasında öncelikle akümülatöre 11111110 sabit sayısı eklendi. Bu aşamada akümülatöre 00000001 sayısı yerleşti ve CARRY bitine 1 sayısı yerleşti. Bu durumda işlem BCF STATUS,3 satırından devam etti. Eğer ki toplama sonucu CARRY biti 0 olsa idi işlem ANDWF PORTA,W satırından devam edecek idi.


      BTFSS f,b:f kaydedicisinin b. bitine göre işlem gerçekleştiren komuttur. İstenen bitin sonucu 0 ise bir alt satırdan işlemlere devam edilir. Eğer sonuç 1 ise bir alttaki satır atlanır.
           İşlem: f,b=1 alttaki satırı atla
      Örnek:   btfss buton1
                     addlw 00001111
                     bsf porta,2
          
           İşlemden önce:W=00000000 BUTON1=0 PORTA=01001000
           İşlemden sonra:W=00000000 BUTON1=0 PORTA=01001010



Yukarıdaki program parçasında BUTON1 biti işlem kolaylaştırmak için daha önceden tanımlanmış olması gereken bir bilgidir. Eğer ki BUTON1 1 ise PORTA’ nın 2. Biti 1 yapılacaktır, 0 ise önce akümülatöre 0nce 00001111 sabiti yüklenecek daha sonra PORTA’nın 2. Biti 1 yapılacaktır. (Yukarıda yaptığımız işlemler BUTON1’in 1 konumu içindir.)


      ADDLW k:Herhangi bir sabit ile akümülatördeki veriyi toplayıp akümülatöre kaydeden komuttur.
           İşlem:(w)+k → → → → w 0≤k ≤255
      Örnek:addlw b’00110110’
           İşlemden önce: W=00111101
           İşlemden sonra: W=01110011
      Eğer ki toplama işlemi sonucunda bir taşma oluşmuş ise bu CARRY bitine kaydedilir.


      ANDLW k: Herhangi bir sabit ile akümülatördekiveriyiand (ve) işlemine sokan komuttur.
           İşlem: (w).AND.k → → → →(w) 0≤k ≤255
      Örnek:andlw b’00111011’
           İşlemden önce: W=01110011
           İşlemden sonra:W=00110011


      CALL k: k ile belirtilen etiketli satıra gider ve return komutunu görene kadar işlemleri gerçekleştirir. Return komutunu gördüğü anda ise call k satırının bir altındaki satıra dönüş yapılır. k yerine herhangi bir bilgiyi içeren sayı yazabileceğimiz gibi etiket ismi olabilecek bir kelime de yazabiliriz.


      CLRWDT:Watchdog Timer’ın sıfırlandığı komuttur. Watchdog Timer genellikle frekans bölme işlemlerinde kullanılır ve her yeni bölme işleminin başında sıfırlama yapılması gerekmektedir.


      GOTO k:CALL’ ın yaptığı işleme benzer bir işlem yapar. Yani k ile belirtilen satıra gider ve işlemlere devam eder. Ancak return ve retlw gibi sonlandırma komutları yoktur.
      Örnek: başla     btfsc portb,3
                                goto topla
                                goto bitir
                   topla      addlw b’00001111’
                   bitir        end

           İşlemden önce:PORTB=00000111 W=00000001
           İşlemden sonra: PORTB=00000111 W=00010000


      IORLW k: Akümülatördeki veri ile k sabit sayısını veya (OR) işlemine sokar ve sonucu akümülatöre kaydeder.
           İşlem: (w).OR.(k) → → → → w
      Örnek: iorlw b’11001010’
           İşlemden önce: W=10100000
           İşlemden sonra: W=11101010


      MOVLW k: k ile belirtilen bir sabit sayıyı akümülatöre atar.
           İşlem: k → → → → w
      Örnek: movlw b’10011010’
           İşlemden sonra:W=10011010


      RETFIE: Çağırılan bir kesmeden çıkmayı sağlar.
           İşlem: TOS → → → → PC 1 → → → → GIE
     Örnek:retfie
           Kesmeden çıktıktan sonra PC = TOS GIE = 1


      RETLW k:Bu komut return’a benzer bir işlem yapar. Yani call ile çağırılan işlemin sonunda akümülatöre k gibi bir sabiti yükler ve program call’ın bulunduğu satırın bir alt satırına dallanır.


      RETURN:Bu komut call ile çağırılan işlemin sonlandırılmasında kullanılır ve program bu satırı okuduğunda işlem call’ın bulunduğu satırın bir alt satırına dallanır.Bu işlem yapılır iken akümülatördeki bilgide hiçbir değişiklik olmaz.


      SLEEP: Pic’ in uyku modunda çekilen akım 1µA’den daha da azdır. Herhangi bir işlem yapılmadığı istendik durumlarda pic bu modda çalıştırılarak az akım çekilmesi sağlanabilir.


      SUBLW k:k gibi bir sabiti akümülatördeki veriden çıkarır, sonucu akümülatöre kaydeder.
           İşlem: (w)-(k) → → → → w
      Örnek: sublw b’00000101’
           İşlemden önce: W=10100101
           İşlemden sonra: W=10100000


      XORLW k:Akümülatördeki veri ile k sabit sayısını özel veya (EX-OR)işlemine sokar ve sonucu akümülatöre kaydeder.
           İşlem: (w).EXOR.(k) → → → → w
      Örnek:xorlw b’00011010’
           İşlemden önce:W=10111111
           İşlemden sonra:W=10100101

  2017 © Copyright | mikroislemcim.com - Yücel AY