PIC 16 KOMUTLARI Örnek uygulamalar

Yeni Sayfa 1

PIC16 KOMUTLARI

            PIC16 komut düzeninde 3 ana komut grubu vardır:

Ø      Byte yönlendirmeli komutlar,

Ø      Bit yönlendirmeli komutları,

Ø      Sabit değer ve kontrol komutları.                            KOMUTLARIN GENEL KALIPLARI

Byte yönlendirmeli file register komut.

13                          876                     0

 

 

OPCODE

d

f(FILE#)

d = 0 ise hedef=W ; d = 1 ise hedef=f

f = 7-bit file register addres.

 

Bit-yönlendirmeli file register komut.

13                            10 9         7   6             0

 

 

OPCODE

 

b(BIT#)        f(FILE#)

f(FILE#)

 

b = 3-bit bit addres.

 f = 7-bit file register addres.

 

 

Sabit (ivedi) değer ve Kontrol işlemleri

13                        8    7                     0       

 

 

OPCODE

 

k (ivedi)

 

k = 8-bit ivedi değer

 

Sadece call and GOTO komutları

13                  11     10                              0    

 

OPCODE

 

k (ivedi)

 

k =11 -bit ivedi değer

           

Herbir PIC16 komutunun 14-bit olmak üz
ere komut çeşidini ve komutun işlemini belirleyen bir veya daha fazla operanttan oluşan bir opcode açılımı vardır. Yandaki tabloda herbir komut çeşidinin kalıbı gösterilmektedir.

            Byte-yönlendirmeli komutlarda, ‘f’ bir file registerini; ‘d’ ise hedef registerini temsil eder. d=0 ise sonuç W akümülatörüne;  d=1 ise file registerine yazılır.

            Bit yönlendirmeli komutlarda ‘b’, işleme konu olan bit alanını temsil ederken ‘f’ de bitin bulunduğu file registerini temsil eder.

            Sabit değer ve kontrol komutlarında ‘k’ 8 yada 11 bit ivedi değeri gösterir.

            Bir komut Cycle’ı 4 osilatör peryodu kadardır.

Mesela 4 MHz.’lik osilatör frekansı için normal bir komut işlemi 1 ms sürer. Tüm komutlar tek bir komut cycle da işlenir ancak şartlı bir testin doğru çıkması yada komut sonucunda program sayacı değiştiği durumlarda ikincisi NOP olmak üzere işlem süresi 2 cycle sürer.

Komut örneklerinde ‘0xHH’ yazımı ile, H bir hex. rakam olmak üzere hexadesimal sayılar gösterilir.

 

OPCODE ALAN TANIMLAMALARI

 

Alan

Tanımlama

f

file register adresi (0x00 – 0x7F)

w

Akümülatör (Working register)

b

8-bit file register içindeki bir Bitin sıra nosu address within an

k

İvedi alanı, sabit değer veya etiket

x

Keyfi değer (0 or 1). Assembler  x =0 alır.

d

İşlem sonucunun saklanacağı hedef seçimi

d =0 ise W’ye sakla,

d = 1 ise f’e sakla.. Default değeri d =1dir.

PC

Program sayacı

TO

Zaman aşımı (Time-out) biti

PD

Power-down biti


 

14 Bit PIC16 Komutları

Komut kalıbı

Açık  yazımı

Türkçe Anlamı

Süre, Cycle

işlem

Etkilenen Status bit.

BYTE- YÖNLENDİRMELİ DOSYA İŞLEMLERİ

ADDWF       f, d

Add W and f

W ile f’i topla

1

W+f→hedef

C,DC,Z

ANDWF       f, d

AND W with f

W ile f’i VE işlemine tabi tut.

1

W.AND.f→hdf.

Z

CLRF           f

Clear f

f’i sıfırla.

1

0→f,  1→Z

Z

CLRW

Clear W

W’yi sıfırla.

1

0→W,  1→Z

Z

COMF          f, d

Complement f

f’in tersini alı.

1

.NOT.f→hedef

Z

DECF            f, d

Decrement f

f’teki sayıyı bir azalt.

1

f-1→hedef

Z

DECFSZ       f, d

Decrement f, Skip if 0

f’teki sayıyı bir azalt, sonuç 0’sa altındaki komutu atla.

1(2)

f-1→hedef,

0 ise atla

 

INCF             f, d

Increment f

f’teki sayıyı bir arttır.

1

f+1→hedef

Z

INCFSZ        f, d

Increment f, Skip if 0

f’teki sayıyı bir arttırır, sonuç 0’sa altındaki komutu atla.

1(2)

f+1→hedef,

0 ise atla

 

IORWF         f, d

Inclusive OR W with f

W ile f’i VEYA işl
emine tabi tut.

1

W.OR.f→hedef

Z

MOVF          f, d

Move f

f’teki sayıyı hedefe taşı.

1

 f→hedef

Z

MOVWF      f

Move W to f

W’deki sayıyı f’te hedefe taşı.

1

W→f

 

NOP

No Operation

Bir periyod boyunca hiçbir şey yapma.

1

 

 

RLF               f, d

Rotate Left f through Carry

f’teki 8 biti başa Status,0 bitini ekleyerek sola  kaydır, dokuzuncu bitteki değeri  sıfırıncı bite ata.

1

C

RRF              f, d

Rotate Right f through Carry

f’teki 8 biti başa Status,0 bitini ekleyerek sağa  kaydır, dokuzuncu bitteki değeri sıfırıncı bite ata.

1

C

SUBWF        f, d

Subtract W from f

W’deki sayıyı f’teki sayıdan çıkart.

1

f-W→hedef

C,DC,Z

SWAPF         f, d

Swap nibbles in f

İlk dört bitle son dört bitin yerlerini değiştir.

1

f(0:3)→f(4:7)→hdf

 

XORWF       f, d

Exclusive OR W with f

W ile f’i XOR işlemine tabi tut.

1

W.OR.f→hedef

Z

BİT-YÖNLENDİRMELİ DOSYA İŞLEMLERİ

BCF               f, b

Bit Clear f

f’teki bir biti sıfırla.

1

0→f(b)

 

BSF                f, b

Bit Set f

f’teki bir biti set et.

1

1→f(b)

 

BTFSC          f, b

Bit Test f, Skip if Clear

f’teki sayı 0’sa altındaki komutu atla

1 (2)

f(b)=0 ise atla

 

BTFSS          f, b

Bit Test f , Skip if Set

f’teki sayı 1’se altındaki komutu atla.

1 (2)

f(b)=1 ise atla

 

SABİT DEĞER VE KONTROL İŞLEMLERİ

ADDLW           k

Add literal and W

Verilen sabit sayıyı W’deki sayıya ekle.

1

W+k →W

C,DC,Z

ANDLW           k

AND literal with W

Verilen sabit sayıyla W’deki sayıyı VE işl. tab tu

1

k.AND.W→hdf.

Z

CALL               k

Call subroutine

Alt programı programın içine çağır (enjekte et)

2

PC+1→TOS k→PC

 

CLRWDT

Clear Watchdog Timer

WDT’deki değeri sıfırla.

1

0→WDT

(ve prescaler)

TO,PD

GOTO             k

Go to address

Programda istenilen yere atla.

2

k→PC (9bit)

 

IORLW            k

Inclusive OR literal with W

Verilen sabit sayıyla W’deki sayıyı VEYA işlemine tabi tut.

1

k.OR.W→W

Z

MOVLW          k

Move literal to W

Verilen sabit sayıyı W’nin içine ata.

1

k→W

 

RETFIE

Return from interrupt

Kesme sonunda yapılan işlemden  normal programa dön.

2

TOS→PC, 1→GIE

 

RETLW           k

Return with literal in W

Tablolama sırasında sayı değerini W’ye ata

2

k→W, TOS→PC

 

RETURN

Return from Subroutine

Call’la çağırılan alt programın sonu.

2

TOS→PC

 

SLEEP

Go into Standby mode

Uyku moduna geç.

1

0→WDT,

osilatörü durdur

TO,PD

SUBLW           k

Subtract W from literal

W’deki sayıyı verilen sabit sayıdan çıkart.

1

k-W→W

C,DC,Z

XORLW           k

Exclusive OR literal with W

Verilen sabit sayıyla W’deki sayıyı ÖZELVEYA işlemine tabi tut

1

k.XOR.W→W

Z


 

PIC ASSEMBLY KOMUTLARININ AÇIKLAMALARI

 

 

Taşıma ve yükleme komutları

 

MOVLW  k

(Move literal to W)      k sabit sayısını W registerine (akümülatöre) yükle.

İşlem

     k→(W)

Örnek

MOVLW  0x5C, komutu çalıştıktan sonra W=0x5C olur.

       

 

MOVF      f,d

( Move f ) f registerinin içeriğini hedef alana taşı.

İşlem

( f)→ (hedef)         d=0 için hedef = W

                               d=1 için hedef = f adresi              

                               0≤ f ≤127

Örnek

MOVF       FSR,0, komut çalıştıktan sonra W=FSR registerindeki değer.

 

 

Register içeriğini değiştirme komutları

 

CLRF      f

( Clear f ) f registerinin içeriğini sil. (sıfırla)

İşlem

00h→f              0≤ f ≤127           

1→Z

Örnek

CLRF  TRISA, komutu çalıştıktan sonra , TRIS A←00000000 olur.

CLRF FLAG_REG  komuttan önce ­ FLAG_REG  =0x5A

                                  komuttan sonra  FLAG_REG =0x00              Z=1

       

 

CLRW

(Clear W)  W registerinin içeriğini sil. (sıfırla)

İşlem

00h →(W)

1→Z

Örnek

CLRW komuttan önce   W=0x4B

             komuttan sonra  W=0x00                    &n
bsp;                                Z=1

 

COMF  f,d

(Complement f  ) F registerinin içindeki sayı tersle. Yani tüm 1’ler 0, 0’lar 1 olur. Sonucu W registerine veya f registerine yükle.

İşlem

­( f )’ → (hedef)         d=0 için hedef = W

                                 d=1 için hedef = f registeri (kendi üzerinde işlem yapılır.)     

Örnek

COMF SAY,0                            SAY=00110110 ise,

                                                    d=0                     W←11001001

                                                    d=1 olsaydı,        SAY←11001001

COMF REG1,0           komuttan önce   REG1=0x13

                                    komuttan sonra  REG1=0x13

                                                                    W=0xEC olur.                                                        

 

DECF    f,d

(Decrement f ) F registerinin içeriğindeki sayıyı “1” eksilt. Registerin içeriği h’00’ ise “1” eksiltiğinde h”FF” olur. Sonuç W veya f registerine yazılır.

İşlem

( f)-1→ (hedef)                0≤ f ≤127           

Örnek

DECF  SAY,1                            SAY=h’2C’ ise          2C-1=2B

                                                   d=1                           SAY←2B

                                                   d=0        olsaydı,          W←2B 

DECF  CNT, 1             komuttan önce   CNT=0x01                         Z=0

                                     komuttan sonra  REG1=0x00                       Z=1

 

INCF    f,d

(Increment f )    F registerinin içeriğindeki sayıyı “1” artır. Registerin içeriği h”FF” ise “1”artırıldığında h’00’ olur. Sonuç W veya f registerine yazılır

İşlem

( f) +1→ (hedef)                0≤ f ≤127 

 d=0 ise, hedef (W)

 d=1 ise, hedef ( f )          

Örnek

INCF SAY,0                              SAY=h’2C’ ise          2C+1=2D

                                                    d=0                     W←2D

                                                    d=1 olsaydı,        SAY← 2D     

 INCF CNT,1               komuttan ö
nce   CNT=0xFF                         Z=0              

                                     komuttan sonra  REG1=0x00                       Z=1   

 

BCF      f,b

(Bit clear f )   F registerinin içeriğindeki sayının b.ninci bitini sıfırla.

İşlem

0→ f <b>                      0≤ f ≤127              0≤ b ≤ 7 

Örnek

BCF   PORT B,5        komuttan önce         PORT B=b’11111111’ ise,

                                    komuttan sonra        PORT B←’11011111’

BCF  FLAG_REG,7   komuttan önce         FLAG_REG=0xC7 =11000111

            komuttan sonra        FLAG_REG=0x47 =01000111

 

BSF      f,b

(Bit Set f ) F registerinin içeriğindeki sayının b.ninci bitini bir yap.

İşlem

1→ f <b>                      0≤ f ≤127              0≤ b ≤ 7 

Örnek

BSF PORT A;3                         PORT A=b’00000000’ ise,

           &n
bsp;                                      PORT A←b’00001000’

BSF  FLAG_REG,7     komuttan önce      FLAG_REG=0x0A= 00001010

                                      Komuttan sonra    FLAG_REG=0x8A=10001010

 

RLF     f,d

(Rotate left f ) F registeri içerisindeki sayıyı bir pozisyon sola kaydır. Registerden taşarak carry bayrağına yazılan bit, LSB’ye yazılır. Sonuç W veya f registerine yazılır.

İşlem

f <n> → d<n+1>,   f <7 >→ c, c  → d<0>               0≤ f ≤127 

                                                                           d=0 ise sonuç W’ye

                                                                           d=1 ise sonuç f ‘ye  yazılır.

Örnek

RLF  Kay,0         KAY=b’10110110’ ise,

 

             

 

 

 

 

Metin Kutusu:                            d=0  olduğundan W←01101101

                           d=1 olsaydı,   KAY←01101101       

 

 

&n
bsp;

 

SWAPF     f,d

(Swap nibbles in f )  F registeri içindeki ilk dört biti ile son dört biti yer değiştir. Sonuç W veya f registerine yüklenir.

İşlem

 f< 0:3>→ d<4:7>

 d< 0:3>→ f<4:7>

Örnek

SWAPF  DEG.1             DEG=b’00101111’ ise,

                                        d=1 olduğundan      DEG←11110010

                                        d=0   olsaydı,          W←11110010

SWAPF  REG.0             komuttan önce    REG=0xA5   

                                       komuttan  sonra  REG=0xA5

                                                                        W=0x5A

 

GOTO   k

(Go to adress )  Program akışı k adresine şartsız dallanır.

İşlem

k→ PC<10:0>                0≤ k ≤2048

(PCLATCH<4:3>)→ PC<12:11>   11 bitlik  k değeri PC (program sayacı)’nın <10:0> bitlerine yüklenir. PC’nin 12 ve11 bitleri PCLATCH’in 4. ve 3. bitlerinden yüklenir. Bu komut iki cycle (peryot) sürmektedir.                   

Örnek

GOTO DONGU      Program DONGU etiketinin yazıldığı yere dallanır ve buradan itibaren devam eder.

GOTO  YER   komuttan sonra   PC=YER’in adresi.

 

CALL    k

(Call subrotine )   Program akışı k etiketinin bulunduğu yerdeki alt programa dallanır.

İşlem

(PC) +1→TOS                                        0≤ k ≤2048

k→PC <10:0>

PCLATCH<4:3>→ PC<12:11>        önce dönüş adresi yığına basılır. 11 bitlik  k değeri PC (program sayacı)’nın <10:0> bitlerine yüklenir. PC’nin 12 ve11 bitleri PCLATCH’in 4. ve 3. bitlerinden yüklenir. Bu komut iki cycle (peryot) sürmektedir

Örnek

CALL TIMER, komuttan sonra program TIMER etiketinin yazıldığı alt program satırlarının başlangıcına dallanır ve buradan itibaren devam eder.

BURA    CALL   ORAYA 

komuttan önce PC=BURA’nın adresi

komuttan sonra PC=ORAYA’nın adresi,  TOS= BURA’ nın adresi 

 

RETURN

(Return from subrouitine)  Alt program komutlarının en sonuna yazılan bu  komut , program akışını ana programa geri döndürür

İşlem

TOS→ PC            TOS ( top of the stack= yığının en üstü ) çekilerek PC’ye yüklenir. Bu komut işlemesi 2 cycle sürer.

Örnek

RETURN  komuttan sonra PC=TOS

 

RETFIE

(Return from interrupt  )  İnterrupt alt programından ana programa dön.

İşlem

TOS→ PC   GIE biti (global interrupt enable)(INTCON<7>) bir yapılarak kesmeye  müsaade verilir. Bu komut iki cycle sürer.

 1→ GIE 

Örnek

RETFIE komuttan sonra  PC =TOS, GIE=1

 

RETLW    k

(Return With literal in W ) Program akışını alt programdan ana programa döndür ve W registerine k sabitini yükle.

İşlem

K→ W;TOS→PC                       0≤ k ≤255    8 bitlik k değeri W registerine  yüklenir.dönüş adresi (PC) program sayacına yüklenir.bu komutun işlenmesi iki cycle sürer.          

Örnek

RETLW  h’2F’   Alt program ana programa dön ve W’ye 2F’i yükle.

CALL TABLO;W’de tablonun başlangıç değeri bulunur.

    …………….;

   ……………..;

  ……………..;

TABLO ADDWF   PC,1;W=ofset

              RETLW     k1 ;tablo başlangıcı

              RETLW     k2;

            ..

                    .

              RETLW     k7;tablo sonu

               Komuttan önce      W=0x07

               Komuttan sonra    W=k7’nin değeri

 

BTFSC   f,b

(Bit test f, skip if clear ) F registerinin b.ninci bitini test et. Eğer bu bit “0”sa p bir sonraki komutu atla.

İşlem

Eğer (f<b>) = 0 ise atla         0≤ f ≤127        0≤ b ≤ 7

Eğer f’in b.inci biti 0’sa normalde işlenecek sıradaki komut devre dışı bırakılır. Atlama komutu yerine bir NOP komutu çalıştırılır. Bu durumda bu komut iki cycle sürer.

Örnek

BTFSC   PORTA,2                   PORTA=b’00000100’ise,→1

                                                  PORTA=b’00000000’ise,→2

Metin Kutusu:            

                                                         BTFSC    PORTA,2

                                2                           GOTO     START                          1

                                                         MOVLW  h’FF’

 

Metin Kutusu:       &nb
sp;  BURA      BTFSC     FLAG,1

        YANLIŞ    GOTO      PROCESS_COPE

         DOĞRU      ….                                              

  Komuttan önce;   PC= BURA’nın adresi

  Komuttan sonra;  Eğer FLAG<1>= 0  ise      PC = DOĞRU’nun adresi

                               Eğer FLAG<1>= 1 ise       PC = YANLIŞ’ın adresi

 

 

 

 

 

BTFSS  f,d

(Bit test f,skip if set )   f registerinin b.ninci bitini test et. Eğer bu bit “1”se  bir sonraki komutu atla.

İşlem

Eğer (f<b>) = 1 ise atla         0≤ f ≤127        0≤ b ≤ 7

F’in b.inci biti 1’ ise hem işlenmesi gereken komut atlanarak 1 NOP komutu (işlem yok ) işlenir. Bu durumda bu komut iki cycle sürer.

Örnek

BTFSS   PORTA,2                      PORTA=b’00000001’ise,→1

                                                     PORTA=b’00000000’ise,→2

 

                                                          BTFSS  PORTA,0   

                                  1                       GOTO  START                        2

                                                          MOVLW  h’FF’

 

Metin Kutusu: Metin Kutusu:

         BURA      BTFSS    FLAG,1

        YANLIŞ   GOTOPROCESS_COPE

         DOĞRU      ….                                             

 

  Komuttan önce;   PC= BURA’nın adresi

Metin Kutusu: Metin Kutusu:   Komuttan sonra;  Eğer FLAG<1>= 0  ise      PC = YANLIŞ’ın adresi

                               Eğer FLAG<1>= 1 ise       PC = DOĞRU’nun adresi

 

 

 

DECFSZ    f,d

(Decrement f, skip İf  zero )  f registerinin içeriğini bir azalt. Register içeriği sıfırsa  bir sonraki komuta atla. Sonucu W veya f registerine yükle.

İşlem

(f)-1→ ( hede
f ); eğer sonuç sıfırsa atla

                            d = 0 ise hedef = W akümülatör

                            d = 1 ise hedef = f registeri

   Eğer sonuç sıfır olursa bir sonra işlenecek olan komut atlanır. Bir NOP işlemi yapılır. Bu durumda bu komut iki cycle sürer.

Örnek

DECFSZ   SAY,1               SAY = h’1A’ ise                                   1A-1=19

                                                  d = 0    olsaydı                                W←h’19’

                                                  d =1 olduğundan                         SAY←h’19’

         BURA      DECFSZ      SAY,1

                          GOTO          DONGU

         DEVAM      ….                                             

  Komuttan önce;   PC= BURA’nın adresi,

  Komuttan sonra; SAY =SAY -1 

                            Eğer SAY = 0 ise  PC = DEVAM’ın adresi

                            Eğer SAY ≠ 0 ise  PC = BURA+1’in adresi

 

INCFSZ   f,d

(Increment f, skip İf zero) f registerinin içeriğini “1” artır. Register içerği “0”sa bir sonraki komutu atla. Sonuç W veya f registerine yüklenir.

İşlem

( f ) + 1→ ( hedef ), sonuç 0’sa atla

                            d = 0 ise hedef = W akümülatör

                            d = 1 ise hedef = f registeri

Eğer sonuç sıfır olursa bir sonra işlenecek olan komut atlanır. Bir
NOP işlemi yapılır. Bu durumda bu komut iki cycle sürer.

Örnek

INCFSZ    SAY,1         SAY=h’1A’ ise                                1A+1=1B

                                           d = 1  olduğundan                             SAY←h’1B’

                                           d = 0 olsaydı                                     W←h’1B’  

         BURA      DECFSZ      SAY,1

                          GOTO          DONGU

         DEVAM      ….                                             

  Komuttan önce;   PC= BURA’nın adresi,

  Komuttan sonra; SAY =SAY +1 

                            Eğer SAY = 0 ise  PC = DEVAM’ın adresi

                            Eğer SAY ≠ 0 ise  PC = BURA+1’in adresi

 


 

 

 


 

                            Mikro denetleyici kontrol komutları               

 

CLRWDT

(  Clear Wacthdog timer ) Wacthdog timer’ı sıfırla. Ayrıca Wacthdog timer’ın prescalar değerinide sıfırlar. Status bitlerinden TO’ ve PD’ yi “1” yapar.

İşlem

00h → WDT

    0 → WDT prescaler

    1 → TO’

    1 → PD’

Örnek

CLRWDT                  komuttan önce WDT  counter = ?

                                   komuttan sonra WDT counter = 0x00

                                                             TO’ = 0

                      PD’ = 0  

       

 

SLEEP

( Go into standby mode ) Mikrodenetleyiciyi uyuma moduna geçirerek güç harcamasını azaltır. Mikrodenetleyici uyuma modundan reset, Wacthdog timer ve TOCKI girişi vasıtasıyla çıkar.

İşlem

00h → WDT

    0 → WDT prescaler

    1 → TO’

    0 → PD’

osilatör durdurlulup uyumaya geçirilir.

 (PD)’ power down status biti sıfırlanır.

 (TO)’  time-out status biti birlenir.

 

 

                                                  Mantıksal komutlar           

 

ANDLW   k

( AND literal with W ) W registerin içeriği ile 8 bitlik k sabitine AND işlemini uygula. Sonuç W registerine yazılır.

İşlem

( W ) AND ( k ) → W     0≤ k ≤255                 Z biti etkilenir.

Örnek

 ANDLW      B’00110001’ 

        W=b’10011101’   ise                 

              b’00110001’    sabitin değeri

              b’00010001‘  AND işlemi sonucu

              W← b’00010001’

ANDLW    0x5F

 Komuttan önce W = 0xA3

Komuttan sonra W =0x03

       

 

ANDWF  f,d

(AND W with f )  W  registeri ile f register içeriğine AND işlemini uygula.

İşlem

( W ) AND ( f ) → hedef     0≤ f ≤127

d=0 ise hedef = W akümülatörü

d=1 ise hedef = f registeri                 

Örnek

ANDWF       TEST,1         

         W=b’11111111’ise,

TEST=b’11011110’    ise,

            b’11011110’ AND işlemi sonucu

 

d=0   ise         W←b’1011110’         d=1   olduğundan  TEST←b’11011110’

 

ANDWF   FSR,1

Komuttan önce W = 0x17 , FSR = 0xC2

Komuttan sonra W= 0x17 , FSR = 0x02   

 

 

IORLW  k

(Inclusive OR literal with W ) W register içeriği ile 8 bitlik k sabitine OR işlemini uygula. Sonuç W registerine yazılır.

İşlem

(W) OR (k) →(W)         0≤ k ≤255  ( 8 bit )     Z biti etkilenir.                 

Örnek

IORLW     b’00101000’  W=b’10000100’  ise,

       b’00101000’  sabitin değeri

       b’10101100’   OR sonucu

W←b’10101100’

   IORLW  0x35

Komuttan önce W = 0x9A

Komuttan sonra W = 0xBF

 

IORWF  f,d

(Inclusive OR W with f ) W register içeriği ile  f register içeriğine OR işlemi uygular. Sonuç W veya f registerine yazılır.

İşlem

(W) OR (f) →(hedef)         0≤ k ≤127                      Z biti etkilenir.

d = 0 ise hedef  = W akümülatörü

d = 1 ise hedef  = f registeri                 

Örnek

IORWF    SAY,1     W     =b’10000100’   ise,

                                 SAY =b’00101000’   ise,

                                            b’101011
00’     OR sonucu

 

                                    d=0   ise                     W←b’10101100’

                                    d=1   olduğundan     SAY←b’10101100’

IORWF  SAY,0

Komuttan önce  SAY= 0x13

                               W=0x91

Komuttan sonra  SAY= 0x13

                                 W=0x93

 

XORLW  k

(Exclusive OR literal with W ) W registerin içeriği ile 8 bitlik k sabitine XOR işlemi uygula. Sonuç W registerine yazılır.

İşlem

(W) XOR (k) →(W)         0≤ k ≤255                      Z biti etkilenir.

Örnek

XORLW     b’00101100’           W=b’11111111’   ise,

                                                          b’00101100    sabitin değeri

                                                          b’11010011’    XOR sonucu

                                                  W← b’11010011’   

XORLW  0xAF

Komuttan önce  W = 0xB5

Komuttan sonra W = 0x1A

 

XORWF  f,d

(Exclusive OR W with f) W regiter ile f register içeriğine XOR işlemini uygular.  Sonuç W veya f registerine
yazılır

İşlem

(W) XOR (f) →(hedef)         0≤ k ≤127                      Z biti etkilenir.

d = 0 ise hedef  = W akümülatör

d = 1 ise hedef  = f registeri                 

Örnek

XORWF      SAY,1     

 W        =b’00100000’    ise,

SAY     =b’00101100’    ise,

               b’00001100’   XOR sonucu   

d=0   ise                          W←  b’00001100’

d=1    olduğundan       SAY← b’00001100’

 

XORWF REG,1

Komuttan önce REG = 0xAF

                              W = 0xB5

Komuttan sonra REG = 0x1A

                              W = 0xB5

 

 

Aritmetik işlem komutları

 

ADDWF   f,d

(Add W  with f ) W regiterinin içeriğinin f registeri ile topla. Sonuç W veya f registerine yazılır.

İşlem

(W) + (f) →(hedef)         0≤ k ≤127                    C,DC,Z bitleri etkilenir.

 d = 0 ise hedef  = W akümülatörü

 d = 1 ise hedef  = f registeri                  

Örnek

ADDWF    EKLE,0                      W=h’2A’       ise,

                                                EKLE=h’31’        ise,

                                                h’2A’+h’31’=h’5B’

                                                d=1   ise            EKLE ← h’5B’

                                                d=0    olduğundan    W← h’5B’  

ADDWF   FSR,0

Komuttan önce   W = 0x17 ,  FSR = 0xC2

Komuttan sonra  W = 0xD9 , FSR =  0xC2   

       

 

ADDLW   k

(Add literal and W) W register içeriğini 8 bit k sabit değeri ile topla. Sonuç W registerine yazılır.

İşlem

(W) + (k) →(W)         0≤ k ≤255                    C,DC,Z bitleri etkilenir

Örnek

ADDLW     h’2F’                   W=h’B0’       ise,

                                                h’2F’+h’B0’=h’DF’

                                               W← h’DF’

ADDLW  0x15

Komuttan önce  W=0x10

Komuttan sonra  W=0x25

 

SUBLW  k

(Subtract W from literal ) k sabit değerinden W registerinin içeriğini çıkar. Sonuç W registerine yazılır.

İşlem

k-(W) =( W )      0≤ k ≤255                    C,DC,Z bitleri etkilenir

W akümülatörü , 8 bitlik k’dan çıkarılır. ( 2’li komplement yöntemiyle)

Örnek

SUBLW   h’90’             W=h’83’    ise,

                                        h’90’-h’83’=h’07’

                                       W← h’07’

SUBLW  0x02

Komuttan önce  W = 1, C =? olduğunda 

Komuttan sonra W = 1, C = 1 sonuç pozitiftir.

 

Yada;

Komuttan önce W = 3, C = ? olduğunda

Komuttan sonra W=FF,C = 0 sonuç negatiftir.

 

SUBWF  f,d

(Subtract W from f )  f  register içeriğinden W register içeriğini çıkar. Sonuç  W veya f registerine yazılır.

İşlem

( f )-(W) →(hedef )      0≤ k ≤127                  C,DC,Z bitleri etkilenir

d = 0 ise hedef  = W akümülatör

 d = 1 ise hedef  = f registeri                  

W registeri f registerinden ikili komplement yöntemiyle çıkarılır.

Örnek

SUBWF    SAY,1       W= h’83’    ise,

                                SAY=h’90’ ise,

                                h’90’-h’83’=h’07’

                               d=0 ise                 W← h’07’

                               d=1 olduğundan   SAY← h’07’

SUBWF  REG,1

Komuttan  önce REG1 = 0 ,W = 1, C = ? ,

Komuttan sonra REG1 =FF , W =1 , C = 0 sonuç negatif

                         Yada

Komuttan önce   REG1 = 0 ,W = 0, C = ?,

Komuttan sonra  REG1 =FF , W =0 , C = 1 sonuç pozitif

 

 

 

İşlem yapmayan komut

 

NOP

( no operation ) Bir komut saykılı süresince hiçbir işlem yapmayan bir komuttur. Bir dahili komut süresince çalışır. Bu nedenle zaman  geciktirme işlem lerinde kullanılır

       

 

 

 

 

 

 

 

Posted in Uncategorized.

Bir cevap yazın