Download as pdf or txt
Download as pdf or txt
You are on page 1of 88

Mikrodenetleyiciler

Bölüm 04: PIC 18F4550 Assembly Komut Seti

Doç.Dr. H.Erdinç Koçer


PIC Mikrodenetleyici Komut Seti
PIC 18F4550 Komut setini 4 ana kategoride inceleyeceğiz. Bu kategoriler ve kullandıkları operandlar şunlardır:
1. Byte-Oriented komutlar
• Dosya Kaydedicisi (File Register) (f ile gösterilecek)
• Sonucun yazılacağı hedef (d ile gösterilir)
• Erişilen Bellek (a ile gösterilir.)
2. Bit-Oriented komutlar
• Dosya Kaydedicisi (File Register) (f ile gösterilir)
• Sonucun yazılacağı hedef (d ile gösterilir)
• Erişilen Bellek (a ile gösterilir.)
3. Literal komutlar
• Dosya Kaydedicisine (File Register) yüklenecek sabit bir değer (k ile gösterilir)
• Sabit değeri yüklemek için istenen FSR kaydı (f ile belirtilir)
• Herhangi bir operand kullanılmayabilir
4. Kontrol komutları
• Program belleğindeki bir adres (n ile gösterilir)
• CALL ve RETURN komut modu (s ile belirtilir)
• Tabloya yazma/okuma modu (m ile belirtilir)
• Herhangi bir operand kullanılmayabilir.
PIC Mikrodenetleyici Komut Seti

• PIC mikrodenetleyicilerde 1 komut döngüsü (machine/instruction cycle), 4 osilatör periyodundan oluşur.

• Bu nedenle, 4 MHz'lik bir osilatör frekansı için normal komut yürütme süresi 1 μs'dir. Bir koşullu test doğruysa
veya bir komut sonucunda program sayacı değiştirilirse, işlem 2 komut döngüsünde gerçekleştiğinden komut
yürütme süresi 2 μs'dir.

• 2 kelimelik (2-Word) dallanma komutları (eğer doğruysa) 3 μs sürer.

• Tüm tek kelimeli (single-word) komutlar, koşullu bir test doğru olmadıkça veya komut sonucunda program
sayacı değiştirilmedikçe, tek bir komut döngüsünde yürütülür.

• Çift kelimeli (double-word) talimatlar, 2 komut döngüsünde yürütülür.


PIC 18F4550 Byte-Oriented Register Operations
Mnemonic Açıklama Function
ADDWF f,d,a W ile f ’yi topla WREG+f → dest
ADDWFC f,d,a W ile f ' yi topla Carry bitini f ' ye ekle WREG+f+C → dest
ANDWF f,d,a W ile f ’yi VE işlemine tabi tut. WREG .AND. f → dest
CLRF f,a f ’yi sıfırla. 0→f
COMF f,d,a f ’in tersini al .NOT. f → dest
CPFSEQ f,a WREG ile f ' yi karşılaştır. Eşitse alttaki komuta atla f-WREG, if f=WREG, PC+4 → PC
else PC+2 → PC
CPFSGT f,a WREG ile f ' yi karşılaştır. WREG küçükse alttaki f-WREG, if f > WREG, PC+4 → PC
komuta atla else PC+2 → PC
DECF f,d,a f ’teki sayıyı bir azalt. f-1 → dest
DECFSZ f,d,a f’teki sayıyı bir azalt, sonuç 0’sa altındaki komutu f-1 → dest, if dest=0, PC+4 → PC
atla. else PC+2 → PC
DCFSNZ f,d,a f’teki sayıyı bir azalt, sonuç 0’dan farklı ise altındaki f-1 → dest, if dest ¼ 0, PC+4 → PC
komutu atla. else PC+2 → PC
INCF f,d,a f’teki sayıyı bir arttır. f+1 → dest
INCFSZ f,d,a f’teki sayıyı bir arttırır, sonuç 0’sa altındaki komutu f+1 → dest, if dest=0, PC+4 → PC
atla. else PC+2 → PC
INFSNZ f,d,a f’teki sayıyı bir arttırır, sonuç 0’değilse altındaki f+1 → dest, if dest ¼ 0, PC+4 → PC
komutu atla. else PC+2 → PC
IORWF f,d,a W ile f’i VEYA işlemine tabi tut. WREG .OR. f → dest
MOVF f,d,a f’teki sayıyı hedefe taşı. f → dest
MOVFF f',f" f’teki sayıyı ikinci word e taşı f' → f"
MOVWF f,a W’deki sayıyı f’te hedefe taşı. WREG → f
PIC 18F4550 Byte-Oriented Register Operations
MULWF f,a f 'deki sayıyı WREG ile çarp WREG * f → PRODH:PRODL
NEGF f,a f 'yi negatif yap -f → f
RLCF f,d,a f’teki 8 biti başa Status, 0 bitini ekleyerek sola kaydır,
dokuzuncu bitteki değeri sıfırıncı bite ata.
RLNCF f,d,a f’teki 8 biti başa Status, 0 bitini ekleyerek sola kaydır

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

SETF f,a f 'yi 1 yap 0xFF → f


SUBFWB f,d,a Carry kullanarak WREG den f 'yi çıkart WREG-f-C → dest

SUBWF f,d,a W’deki sayıyı f’teki sayıdan çıkart. f-WREG → dest


SUBWFB f,d,a W’deki sayıyı f’teki sayıdan çıkart. Carry'yi değiştir. f-WREG-C → dest

SWAPF f,d,a İlk dört bitle son dört bitin yerlerini değiştir. f(3:0) → dest(7:4), f(7:4) → dest(3:0)
TSTFSZ f,a f 'yi test et 0 ise sonraki komuta atla PC+4 → PC, if f=0, else PC+2 → PC
XORWF f,d,a W ile f’i XOR işlemine tabi tut. WREG .XOR. f → dest
PIC 18F4550 Bit-Oriented Register Operations
Mnemonic Açıklama Function
BCF f,b,a f’teki bir biti sıfırla. 0 → f(b)
BSF f,b,a f’teki bir biti set et. 1 → f(b)
BTFSC f,b,a f’teki sayı 0’sa altındaki komutu atla if f(b)=0, PC+4→PC, else PC+2→PC
BTFSS f,b,a f’teki sayı 1’se altındaki komutu atla. if f(b)=1, PC+4→PC, else PC+2→PC
BTG f,b,a f deki biti tersle f(b) → f(b)
PIC 18F4550 Kontrol Komutları
Mnemonic Açıklama Function
BC n Elde (Carry) varsa n adresine gidilir. if C=1, PC+2+2*n→ PC, else PC+2→PC
BN n Sayı negatif ise n adresine gider if N=1, PC+2+2*n→PC,else PC+2→PC
BNC n Elde (Carry) yoksa n adresine gidilir. if C=0, PC+2+2*n→PC, else PC+2→PC
BNN n Sayı Negatif değilse n adresine gider if N=0, PC+2+2*n→PC, else PC+2→PC
BNOV n Taşma yoksa n adresine gidilir. if OV=0, PC+2+2*n→PC, else PC+2→PC
BNZ n Z=0 ise n adresine gidilir. if Z=0, PC+2+2*n→PC, else PC+2→PC
BOV n Taşma varsa n adresine gidilir. if OV=1, PC+2+2*n→PC, else PC+2→PC
BRA n n adresine gidilir. PC+2+2*n→ PC
BZ n Z=1 ise n adresine gidilir. if Z=1, PC+2+2*n→PC, else PC+2→PC
CALL n,s Alt programı çağır PC+4 → TOS, n → PC(20:1),
if s=1, WREG → WREGs
STATUS → STATUSs, BSR → BSRs
CLRWDT WDT’deki değeri sıfırla. 0 → WDT, 0 → WDT postscaler, 1 → TO,1 → PD
DAW WREG i desimal düzelt if WREG(3:0) >9 or DC=1, WREG(3:0)+6→WREG(3:0),
else WREG(3:0) → WREG(3:0);
if WREG(7:4) >9 or C=1, WREG(7:4)+6→WREG(7:4),
else WREG(7:4) → WREG(7:4);
PIC 18F4550 Kontrol Komutları
GOTO n Programda istenilen yere atla. n → PC(20:1)

NOP işlem yapma No Operation


işlem yapma 2word No Operation (2-word instructions)
POP Yığına AT TOS-1 → TOS
PUSH Yığından AL PC +2→ TOS
RCALL n n kadar ilerdeki komutu Göreli Çağır. PC+2 → TOS, PC+2+2*n→PC
RESET Yazılımla RESET Same as MCLR reset
RETFIE s Kesme sonunda yapılan işlemden normal programa TOS → PC, 1 → GIE/GIEH or PEIE/GIEL,
dön. if s=1, WREGs → WREG, STATUSs → STATUS,
BSRs → BSR, PCLATU/PCLATH unchngd.
RETURN s Call’la çağırılan alt programın sonu. TOS → PC, if s=1, WREGs → WREG,
STATUSs → STATUS, BSRs → BSR,
PCLATU/PCLATH are unchanged
SLEEP Uyku moduna geç. 0 → WDT, 0 → WDT postscaler, 1 → TO, 0 → PD
PIC 18F4550 Literal (Sabit Değer) Komutlar
Mnemonic Açıklama Function
ADDLW kk Verilen sabit sayıyı W’deki sayıya ekle. WREG+kk → WREG
ANDLW kk Verilen sabit sayıyla W’deki sayıyı VE işl. tab tu WREG .AND. kk → WREG
IORLW kk Verilen sabit sayıyla W’deki sayıyı VEYA işlemine tabi WREG .OR. kk → WREG
tut.
LFSR r,kk kk → FSRr
1.Word değeri 2.Word e kopyele
MOVLB k k Bank Seçme Registerine yazılır kk → BSR
MOVLW kk Verilen sabit sayıyı W’nin içine ata. kk → WREG
MULLW kk WREG i kk ile Çarp WREG * kk→ PRODH:PRODL
RETLW kk Tablolama sırasında sayı değerini W’ye ata kk → WREG
SUBLW kk W’deki sayıyı verilen sabit sayıdan çıkart. kk-WREG → WREG
XORLW kk Verilen sabit sayıyla W’deki sayıyı ÖZELVEYA işlemine WREG .XOR. kk → WREG
tabi tut
PIC 18F4550 Bellek (Memory) İşlem Komutları
Mnemonic Açıklama Function
TBLRD* Table Read Prog Mem (TBLPTR) → TABLAT
TBLRD*+ Table Read with post-increment Prog Mem (TBLPTR) → TABLAT
TBLPTR +1 → TBLPTR
TBLRD*- Table Read with post-decrement Prog Mem (TBLPTR) → TABLAT
TBLPTR -1 → TBLPTR
TBLRD+* Table Read with pre-increment TBLPTR +1 → TBLPTR
Prog Mem (TBLPTR) → TABLAT
TBLWT* Table Write TABLAT → Prog Mem(TBLPTR)
TBLWT*+ Table Write with post-increment TABLAT → Prog Mem(TBLPTR)
TBLPTR +1 → TBLPTR
TBLWT*- Table Write with post-decrement TABLAT → Prog Mem(TBLPTR)
TBLPTR -1 → TBLPTR
TBLWT+* Table Write with pre-increment TBLPTR +1 → TBLPTR
TABLAT → Prog Mem(TBLPTR)
PIC 18F4550 Genişletilmiş (Extended) Komutlar
Mnemonic Açıklama Function
ADDFSR f,k Add literal to FSR FSR(f)+k → FSR(f)
ADDULNK k Add literal to FSR2 and return FSR2+k → FSR2, (TOS) → PC
CALLW Call subroutine using WREG (PC + 2) → TOS, (W) → PCL,
(PCLATH) → PCH, (PCLATU) → PCU
MOVSF z',f" Move z' (source) to 1st word, f" (destination)2nd ((FSR2)+z') → f"
word
MOVSS z',z" Move z' (source) to 1st word, z" (destination)2nd ((FSR2)+z') → ((FSR2)+z")
word
PUSHL k Store literal at FSR2, decrement FSR2 k → (FSR2), FSR2-1 → FSR2

SUBFSR f,k Subtract literal from FSR FSR(f-k) → FSR(f)


SUBULNK k Subtract literal from FSR2 and return FSR2-k → FSR2, (TOS) → PC
Teşekkür Ederim
Bir sonraki bölümde PIC 18F4550 Timer (Zamanlayıcı) birimini inceleyeceğiz.

Doç.Dr. H.Erdinç Koçer

You might also like