PIC16F84 KOMUTLARI
PIC16F84'ün 35 komutu bulunur. Bu komutlar ve açiklamalari asagidaki tabloda görülmektedir.
f : file register
W : Work register
b : f register içerisindeki bit pozisyonu
d : Yönlendirilecek yer (d=0 ise f register, d=1 ise W register)
KOMUTLAR ve ÖRNEKLER
1- MOVLW k: k sabit degerini W registerine yükler.
Örnek : MOVLW H’FF’ : H’FF’ sabit degerini W registerine yükler. Komut öncesi W register içerigi H’00’ gibi herhangi bir deger ise komut sonrasi H’FF’ olur.
2- MOVWF f : W registerinin içerigini f registerine yükler.
Örnek : MOVLW TRISB : W register içerigi H’FF’ ise bu degeri TRISB registerine yükler.
3- MOVF f,d : f registerin içerigini W registerine veya yine f registerine yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : MOVF FSR,0 : FSR register içerigi H’A0’ ise W register içerigi de H’A0’ olur.
b) Eger d = 1 ise f registere yükler.
Örnek : MOVF FSR,1 : W register içerigi sabit kalirken FSR register içerigi H’FF’ ise bu degeri yine FSR registere yükler. d=1 durumu status registerdeki Z bayragini (flag) etkiler. Z=1 olur.
4- CLRW : W register içerigini sifirlar.
Örnek : CLRW : Komut öncesi W register içerigi H’FF’ ise komut sonrasi W register içerigi H’00’ olur.
5- CLRF f : f register içerigini sifirlar.
Örnek : CLRF PORTB : PORTB’yi sifirlar. PORTB H’00’ veya B’00000000’ olur. Bu durum ayni zamanda PIC’in B portunun çikis olarak tanimlanmasinda kullanilir.
6- SWAPF f,d : f registerdeki ilk dört bit ile son dört biti yer degistirerek sonucu W veya f registere yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : SWAP REG,0 : REG register içerigi H’F0’ ise W register içerigi de H’0F’ olur. Diger bir ifadeyle binary formda REG register içerigi B’11110000’ ise W register içerigi B’00001111’ olur. REG, yazilimci tarafindan tanimlanan özel bir register adresidir ve isim degistirilebilir.
b) Eger d = 1 ise f registere yükler.
Örnek : SWAP REG,1 : REG register içerigi H’F0’ ise komut sonrasi REG register içerigi H’0F’ olur. Binary formda REG register içerigi B’11110000’ ise komut sonrasi B’00001111’ olur.
7- ADDLW k : W registerin içerigini k sabiti ile toplayarak sonucu W registere yükler.
Örnek : ADDLW H’10’ : W register içerigi H’15’ ise komut sonrasi W register içerigi H’25’ olur.
8- ADDWF f,d : W registeri ile f registeri içerigini toplayarak sonucu W registere veya f registere yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : ADDWF FSR,0 : FSR register içerigi H’0B’ ve W register içerigi de H’11’ ise W register içerigi H’1C’ olur. FSR register içerigi ise H’0B’ olarak kalir.
b) Eger d = 1 ise f registere yükler.
Örnek : ADDWF FSR,1 : FSR register içerigi H’4F’ ve W register içerigi de H’A0’ ise FSR register içerigi H’EF’ olur. W register içerigi ise H’A0’ olarak kalir.
9- SUBLW k : k sabit degerinden W register içerigini çikarir ve sonucu W registerine yükler.
Örnek : SUBLW H’15’ : W register içerigi H’10’ ise komut sonrasi W register içerigi H’05’ olur.
10- SUBWF f,d : f register içeriginden W register içerigini çikarir ve sonucu W veya f registerine yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : SUBWF KPR,0 : KPR register içerigi H’D0’ ve W register içerigi de H’10’ ise W register içerigi H’C0’ olur. KPR register içerigi ise H’D0’ olarak kalir.
b) Eger d = 1 ise f registere yükler.
Örnek : SUBWF KPR,1 : KPR register içerigi H’7A’ ve W register içerigi de H’51’ ise KPR register içerigi H’29’ olur. W regiter içerigi ise H’51’ olarak kalir.
11- ANDLW k : W registeri içerigi ile k sabitine AND islemi uygulayarak sonucu W registerine yükler.
Örnek : ANDLW H’CF’ : W register içerigi H’1A’ ise komut sonrasi W register içerigi H’0A‘ olur.
12- ANDWF f,d : W register ile f register içerigine AND islemi uygulayarak sonucu W registerine veya f registerine yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : ANDWF KSM,0 : KSM register içerigi H’2C’ ve W register içerigi de H’12’ ise W register içerigi H’0C’ olur. KSM register içerigi ise H’2C’ olarak kalir.
b) Eger d = 1 ise f registere yükler.
Örnek : ANDWF KSM,1 : KSM register içerigi H’A3’ ve W register içerigi de H’F0’ ise KSM register içerigi H’A0’ olur. W register içerigi ise H’F0’ olarak kalir.
13- IORLW k : W registerinin içerigi ile k sabitine OR islemi uygulayarak sonucu W registerine yükler.
Örnek : IORLW H’B4’ : W register içerigi H’26’ ise komut sonrasi W register içerigi H’B6‘ olur.
14- IORWF f,d : W registeri ile f registeri içerigine OR islemi uygulayarak sonucu W registerine veya f registerine yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : IORWF MTN,0 : MTN register içerigi H’19’ ve W register içerigi de H’4D’ ise W register içerigi H’5D’ olur. MTN register içerigi ise H’19’ olarak kalir.
b) Eger d = 1 ise f registere yükler.
Örnek : IORWF MTN,1 : MTN register içerigi H’DE’ ve W register içerigi de H’AA’ ise MTN register içerigi H’FE’ olur. W register içerigi ise H’AA’ olarak kalir.
15- XORLW k : W registerinin içerigi ile k sabitine XOR islemi uygulayarak sonucu W registerine yükler.
Örnek : IORLW H’F5’ : W register içerigi H’67’ ise komut sonrasi W register içerigi H’92‘ olur.
16- XORWF f, d : W registeri ile f registeri içerigine XOR islemi uygulayarak sonucu W registerine veya f registerine yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : XORWF ENG,0 : ENG register içerigi H’C2’ ve W register içerigi de H’CF’ ise W register içerigi H’0D’ olur. ENG register içerigi ise H’C2’ olarak kalir.
b) Eger d = 1 ise f registere yükler.
Örnek : XORWF ENG,1 : ENG register içerigi H’AA’ ve W register içerigi de H’0F’ ise ENG register içerigi H’A5’ olur. W register içerigi ise H’0F’ olarak kalir.
17- INCF f,d : f registerin içerigini 1 artirarak sonucu W registere yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : INCF REG,0 : REG register içerigi H’D4’ ise komut sonrasi W register içerigi H’D5’ olur.
b) Eger d = 1 ise f registere yükler.
Örnek : INCF REG,1 : REG register içerigi H’A1’ ise komut sonrasi REG register içerigi H’A2’ olur
18- DECF f, d : f registerin içerigini 1 azaltarak sonucu W registere yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : DECF KPR,0 : KPR register içerigi H’10’ ise komut sonrasi W register içerigi H’0F’ olur.
b) Eger d = 1 ise f registere yükler.
Örnek : DECF KPR,1 : KPR register içerigi H’11’ ise komut sonrasi KPR register içerigi H’10’ olur
19- RLF f,d : f registerin içerigini bir sola kaydirarak sonucu W registere veya f registere yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : RLF MTN,0 : MTN register içerigi B’11001011’ ve C biti (Carry) = 0 ise komut sonrasi W register içerigi B’10010110’ ve C=1 olur. MTN register içerigi ise B’11001011’ olarak kalir.
b) Eger d = 1 ise f registere yükler.
Örnek : RLF MTN,1 : MTN register içerigi B’11001011’ ve C biti (Carry) = 0 ise komut sonrasi MTN register içerigi B’10010110’ ve C=1 olur.
20- RRF f,d : f registerin içerigini bir saga kaydirarak sonucu W registere veya f registere yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : RLF MTN,0 : MTN register içerigi B’11001011’ ve C biti (Carry) = 0 ise komut sonrasi W register içerigi B’01100101’ ve C=1 olur. MTN register içerigi ise B’11001011’ olarak kalir.
b) Eger d = 1 ise f registere yükler.
Örnek : RLF MTN,1 : MTN register içerigi B’11001011’ ve C biti (Carry) = 0 ise komut sonrasi MTN register içerigi B’01100101’ ve C=1 olur.
21- COMF f,d : f register içerisindeki sayiyi tersleyerek sonucu W registere veya f registere yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : COMF ENG,0 : ENG register içerigi H15’ ise komut sonrasi W register içerigi H’EA’ olur.
b) Eger d = 1 ise f registere yükler.
Örnek : COMF ENG,1 : ENG register içerigi H’F5’ ise komut sonrasi ENG register içerigi H’0A’ olur.
22- BCF f, b: f register içindeki sayinin b. bitini sifirlar.
Örnek : BCF PORTB,7 : Komut öncesi PORTB içerigiH’8A’ ise komut sonrasi H’6A‘ olur.
23- BSF f,b : f register içindeki sayinin b. bitini 1 yapar.
Örnek : BSF PORTB,5 : Komut öncesi PORTB içerigiH’4B’ ise komut sonrasi H’6A‘ olur.
24- BTFSC f,b : f registerin b. bitini test eder. Eger bu bit sifir ise program akisi bir sonraki komutu atlar.
Örnek : BTFSC PORTA,1 : PORTA’nin 1.biti sifir ise siradaki komutu atlayarak bir sonraki komutu uygular. Eger PORTA’nin 1.biti 1 ise siradaki komutu uygular.
25- BTFSS f,b : f registerin b. bitini test eder. Eger bu bit 1 ise program akisi bir sonraki komutu atlar.
Örnek : BTFSS PORTA,1 : PORTA’nin 1.biti 1 ise siradaki komutu atlayarak bir sonraki komutu uygular. Eger PORTA’nin 1.biti sifir ise siradaki komutu uygular.
26- DECFSZ f,d : f registerin içerigini 1 azaltir. Eger register içerigi sifir ise bir sonraki komutu atlayarak sonucu W registere veya f registere yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : DECFSZ REG,0 : REG = H’01’ ise, REG-1 = H’00’ olur ve register içerigi sifir oldugundan siradaki komut atlanarak bir sonraki komut isletilir ve sonuç W registerine yazilir.
b) Eger d = 1 ise f registere yükler.
Örnek : DECFSZ REG,1 : REG = H’3D’ ise, REG-1 = H’3C’ olur ve register içerigi sifir olmadigindan siradaki komut isletilerek sonuç REG registerine yazilir.
27- INCFSZ f, d : f registerin içerigini 1 artirir. Eger register içerigi sifir ise bir sonraki komutu atlayarak sonucu W registere veya f registere yükler.
a) Eger d = 0 ise W registere yükler.
Örnek : DECFSZ REG,0 : REG = H’FF’ ise, REG+1 = H’00’ olur ve register içerigi sifir oldugundan siradaki komut atlanarak bir sonraki komut isletilir ve sonuç W registerine yazilir.
b) Eger d = 1 ise f registere yükler.
Örnek : DECFSZ REG,1 : REG = H’3D’ ise, REG+1 = H’3E’ olur ve register içerigi sifir olmadigindan siradaki komut isletilerek sonuç REG registerine yazilir.
28- GOTO k : Program akisi k adresine dallanir.
Örnek : GOTO DONGU : Program akisi GOTO komutu ile siradaki komutlari atlayarak DONGU etiketine dallanir.
29- CALL k : Program akisi k etiketinin bulundugu alt programa dallanir. Bu komut alt programlara dallanmak amaciyla kullanilir.
Örnek : CALL TIMER : Program akisi CALL komutuna geldiginde devamindaki komutlari atlayarak TIMER etiketine dallanir.
30- RETURN : Program akisini ana programa döndürür. Program akisi CALL komutu ile alt programa yönlendirildiginde, alt programin sonuna yazilan RETURN komutu ana programa dönmeyi saglar. Ana program kaldigi yerden devam eder.
Örnek : RETURN :
31- RETLW k : Program akisini RETURN komutunda oldugu gibi ana programa döndürür ancak ana programa dönüs esnasinda W registerine k sabitini yükler.
Örnek : RETLW :
32- RETFIE : Program akisini Interrupt (kesme) alt programindan ana programa döndürür.
33- NOP : Zaman geciktirme islemi için kullanilir ve bir komut saykili süresince hiçbir islem yapmaz.
34- CLRWDT : Watchdog Timer’i sifirlar.
35- SLEEP : Mikrodenetleyiciyi uyuma moduna geçirir.
ASSEMBLER KOMUT DIREKTIFLERI
Assemler kontrol direktifleri, programin isletilmesinde etkisi olmayan program akisinda zaman kazanmak, kaynak kodunu kontrol etmek ve direktif vermek için istege bagli kullanilan komutlardir. Bu komutlardan sik kullanilan belli baslilari asagida verilmistir.
DEFINE : Bir komut ve degisken dizininin program içerisinde birden fazla kullanilmasi durumunda tek bir isimle ifade edilmesini
saglar.
Örnek : #DEFINE BUTON PORTA,1
Örnekte BUTON, PORTA’nin 1. biti olarak tanimlanmistir. Bu komut ile programin ilerleyen bölümünde PORTA’nin 1. biti ile ilgili islemlerde direkt olarak BUTON ismi kullanilabilir. Böylece BSF BUTON gibi bir komut satiri yazilabilir. Eger DEFINE komutu kullanilmaz ise ayni komut satirini BSF PORTA,1 olarak yazmak gerekir. Ayni komutun program içerisinde birden fazla kullanilmasi durumunda DEFINE komutu program yazimini sadelestirir.
INCLUDE : Microchip firmasi her PIC mikrodenetleyicisi için kullanilmak üzere “Header file-Baslik dosyalari” denilen dosyalar düzenlemistir. Bu dosyalar araciligiyla PIC’in RAM bellegindeki özel register adreslerinin program yazimi asamasinda bir çok defa girilmesi zorunlulugu ortadan kalkmistir. Bunun yerine INCLUDE komutu kullanarak register adresleri otomatik olarak atanabilir. INCLUDE komutu çift tirnak içerisinde yer alan bir dosya ismi olarak tanimlandiginda PIC için hazirlanmis sistem dosyalarini, eger parantez seklinde tanimlanmis ise kullanicinin sonradan gelistirdigi dosyalari içerir.
Örnek : INCLUDE “ PIC16F84.INC” veya INCLUDE
ORG : Programin PIC belleginde depolandigi adresi tanimlar. Böylece programin hangi adresten baslayacagi veya kesme alt programlarinin baslangiç adresleri belirlenebilir.
Örnek : ORG 0x00 : Programi 0x00 adresinden baslatir.
IF, ELSE, ENDIF : Bu komutlar kosullu program dallanmasi islemini yapar ve sonlandirirlar.
Örnek : Asagidaki program komut satirlarinda IF ile DONGU 3,’den küçük ise BASLA etiketine, degil ise ELSE komutu ile DONGU etiketine dallanmalar yapilmistir. ENDIF komutu ile kosullu dallanma sonlandirilmistir.
IF DONGU< 3
GOTO BASLA
ELSE
GOTO DONGU
ENDIF
EQU : PIC bellek adreslerine atama yapmak için kullanilan etiket olarak isimlendirilen komuttur.
Örnek : Asagidaki komut satiri status registerinin PIC belleginde H’03’ adresinde oldugunu tanimlar.
STATUS EQU H’03’
CONFIG : PIC kontrolünde osilatör tipi, Watchdog Timer, Power on Reset gibi kosullarin belirlenmesini saglayan komuttur. Bu komut satirindaki degiskenler PIC uygulama devresinin donanim özellikleri ve program içerigine bagli olarak degisirler. CONFIG komutunun önünde iki alt çizgi bulunur, diger degiskenlerin ise önlerinde birer alt çizgi ve aralarinda birer bosluk ile & sembolü bulunur.
Örnek : __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
Konfigürasyon satirinda PIC programlamada kullanilan kosullar asagida verilmistir. Code Protect (CP) komutlari PIC entegresinin programlanmasinin ardindan içerisindeki yazilimin okunarak kopyalanmasini önlemek için kullanilir. Watchdog Timer programi belirli zaman araliklarinda basa döndürür. Power on Reset, PIC’e enerji verilme durumunu (On/Off) kontrol eder.
_CP_ON : Kod koruma açik.
_CP_OFF : Kod koruma kapali.
_WDT_ON : Watchdog Timer açik.
_WDT_OFF : Watchdog Timer kapali.
_PWRTE_ON : Power on reset açik.
_PWRTE_OFF : Power on reset kapali.
_XT_OSC : Kristal osilatör.
_RC_OSC : RC osilatör.
_LP_OSC: Low Power osilatör.
_HS_OSC : High Speed osilatör.
Hiç yorum yok:
Yorum Gönder