.
1.DVD PROGRAMLAR(WinCC,MicroWİN,Delta,Siemens)
2.DVD EĞİTİM DÖKÜMANLARI
VE VİDEOLAR
1-Hiç
kod asm,c ..vb bilmenize gerek yok 2-Akış
diyagramı ile kolayca program yazma 3-Güç bağlantısını
USB Bilgisayardan alır 4-Programlama cihazına ihtiyaç
yoktur direk Bilgisayardan oluşturduğunuz hex dosyasını
yüklüyorsunuz. 5-isterseniz
robotunuzuzun
kalbi isterseniz makinenizin beyni olur.
Ø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 ü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
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.
(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