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 ü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 |
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 span> |
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 |
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 ö 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 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 |
&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
BTFSC PORTA,2 2 GOTO START 1 MOVLW h’FF’
&nb 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→ ( hede 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 |
Ö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
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 |
İş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 |
||