Formkankadakiler |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
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
|
|
|
k (ivedi)
|
|
k = 8-bit ivedi değer
Sadece call and GOTO komutları
13 11 10 0
|
|
|
k (ivedi)
|
|
k =11 -bit ivedi değer
|
|
|
|
|
|
|
|
Herbir PIC16 komutunun 14-bit olmak üzere 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şlemine 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 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,
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,
d=0 olduğundan W←01101101
d=1 olsaydı, KAY←01101101
|
RRF f,d
|
(Rotate Right f ) F registeri içerisindeki sayıyı bir pozisyon sağa kaydır. Registerden taşarak carry bayrağına yazılan bit, MSB’ye yazılır. Sonuç W veya f registerine yazılır.
|
İşlem
|
f <n> → d<n-1>, f <0 >→ c, c → d<7>
d= 0 ise sonuç W’ye
d=1 ise sonuç f ‘ye yazılır
|
Örnek
|
RRF Kay,1 KAY=b’10110111’ ise,

d=1 olduğundan, KAY←11011011
d=0 olsaydı, W←11011011
|
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
BTFSC PORTA,2
2 GOTO START 1
MOVLW h’FF’
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’
 
BURA BTFSS FLAG,1
YANLIŞ GOTOPROCESS_COPE
DOĞRU ….
Komuttan önce; PC= BURA’nın adresi
 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→ ( hedef ); 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’10101100’ 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
|
|
|
|
|
|
|
|
|
|
|
|
Bugün 10 ziyaretçi (19 klik) kişi burdaydı!
|
|
|
|
|
|
|
|