

PIC 16F8X Komutları Ve Kullanılan Semboller...PIC Programlamaya Giriş Ve Mikrodenetleyiciler{ 16F8X }
-
PIC Programlamaya giriş ve mikrodenetleyiciler{ 16F8X }
1.GİRİŞ
Günümüzde teknolojinin ilerlemesini inceleyecek olursak; bu ilerlemede hem
araç hem de amaç olan özel bir elemanı keşfetmemiz uzun sürmez. “Nedir bu
eleman?” denildiğinde; cevap tabi ki bilgisayarlardır. Öyle ki; yaptığımız her işte
adeta elimiz ayağımız haline gelmiş olan bilgisayarlar, günlük hayatımızın ayrılmaz bir parçası haline gelmiştir. Burada bilgisayarlar denildiğinde, hepimizin aklına klavyesi ve ekranıyla PC dediğimiz bilgisayarlar gelmektedir. Halbuki çevremizde o kadar farklı “bilgisayarlar!” vardır ki, bunları dikkatli bakmadığımızda göremeyebiliriz. Örnek vermek gerekirse kolumuzdaki saatten, televizyonumuzun uzaktan kumandasına, aracımızın frenlerinden fırınımızın pişirme sistemine kadar her yerde bilgisayarlar karşımıza çıkar. Burada bilgisayar denildiğinde gerçek anlamda
“istenilen işlemler dizisini, istenilen zamanda ya da istenilen süreçte yapabilen
sistemler” içerisinde mikroişlemci bulunduran (ve hatta bazen bulunmayan)
elemanlardan söz etmekteyiz.
İşte bu şekilde hayatımızın içine girerek araç haline gelen bilgisayar sistemleri,
aynı zamanda teknolojinin geliştirilmesi durumunda bir amaçtır.
Bu şartlarda, bu sistemleri, üretim aşamasında ya da tüketim aşamasında
bilmek veya kullanabilmek günümüzde büyük önem kazanmıştır. Tüketici olarak basit
mikroişlemcili aletleri hemen hemen herkes, hatta okuma yazması olmayanlar bile (tv
uzaktan kumandaları) kullanır hale gelmiştir. Günümüzde PC bilgisayarlar da işletim
sistemlerinin geliştirilmesiyle herkes tarafından kullanılır hale getirilmeye
çalışılmaktadır.
Üretim aşamasında ise, kullanılacak malzemenin cinsine göre ince bir ayrıntı
işin içine girmektedir, ki bu ayrıntı işlemin cinsine göre mikroişlemci ya da
mikrokontrollör olarak kendini göstermektedir. Bu iki terim aslında temelde aynı
olmakla birlikte, aralarındaki farkı şöyle çarpıcı bir örnekle görmek mümkündür. Bir
televizyon uzaktan kumandası için bir mikroişlemci kullanmak demek, adeta bir cep
bilgisayarı şeklinde kumanda demektir ki buda maliyet açısından büyük külfet
demektir. Halbuki bu işi bir mikrokontrollör ile yaptığımız zaman maliyet, imalat ve
boyut açısından büyük avantajlar elde ederiz. Öyleyse bu iki elemanın farkı nedir?
Mikroişlemci dediğimiz eleman temelde bir programı icra etme yeteneğine
sahip bir elemandır; ancak bu icra işlemi için çok fazla sayıda yan aparata ihtiyaç
duyar. Bu aparatları kısaca hafızalar, osilatör elemanları, besleme elemanları, girişçıkış
elemanları şeklinde sıralamak mümkündür. Bu listedeki besleme elemanları,
zaten her türlü elektrikli devrede kullanılması gereken elemanlardır. Osilatör devresi
ise yerine göre tek bir elemanla bile yapılabilen bir devre parçasıdır. Bunları bir tarafa
bıraktığımızda, bir mikroişlemci ile iş gören bir devre yapmak istediğimizde, en çok
uğraşılacak bölüm hafıza (RAM, ROM, Adres Decoder) ve Giriş-Çıkış (PIA ve
Buffers) elemanlarıdır ki plaket üzerinde mikroişlemcinizin kaplayacağı alandan kat kat fazlasını işgal ederler.
Mikrokontrollör elemanında ise, hafıza ve giriş-çıkış bölümleri ve hatta bazı
modellerde A/D ve D/A dönüştürücü elemanları da tek chip üzerine yerleştirilmiştir.
Böylece mikrokontrollör ile işlem yapabilmek için, devreye ilave olarak sadece
besleme devresi ve osilatör devresi elemanlarını eklemek yeterli olacaktır. Böylece gerekli durumda pil ile besleme yapılırsa, kibrit kutusunun yarısı büyüklüğünde devreler üretmek ve bir çok işi yaptırmak mümkün olacaktır.
Yukarıda anlattığımız özelliklerinden dolayı günümüzde, özellikle sanayi tipi
uygulamalarda mikrokontrollörler PC ve PLC türü devrelerin yerini almaya
başlamıştır.
PIC 16F8X KOMUTLARI
KULLANILAN SEMBOLLER:
f : File register, Herhangi bir değişkenle tarif edilen bir saklayıcı adresi (0h-7Fh)
k : Sabit değer (genellikle (0-FF arasında)
d : Destination (hedef) göstergesi (Genellikle 0
ya da 1)
b : Bit belirten sayı (0-7 arası)
veya Binary sayı (b’00101111’)
h : Hexadecimal sayı (h’FF’ veya FFh)
x : Değeri önemli olmayan bit (1 ya da 0 olabilir)
[] : Duruma göre kullanılıp kullanılmaması serbest
olan seçenek
⇒ : İse veya ... işleminin sonunda
← : Değer atama
etiket : Değişken adı veya adres bildirmek için kullanılan isim
.2.KOMUTLAR VE KULLANIM ÖRNEKLERİ
ADDLW : Bir sayı ile W’nin içeriğini topla
İngilizce Yazılımı:Add Literal with W
Kullanım Şekli: ADDLW k
İşlevi: W←W+k
Etkilenen Bayraklar: C,DC,Z
Periyot:1
Örnek:
ADDLW 05h
Komuttan önce W=60h ise
Komuttan sonra W=65h olur.
ADDWF : Bir register ile W’nin içeriğini topla
İngilizce Yazılımı:Add W with File register
Kullanım Şekli:ADDWF f,d
İşlevi: W←W+f veya f←W+f
Etkilenen Bayraklar:C, DC, Z
Periyot:1
Örnek:
ADDWF SAYI,1
Komuttan önce W=60h ve SAYI=05h ise
Komuttan sonra W=60h , SAYI=65 h olur.
Örnek 2:
ADDWF SAYI,0
Komuttan önce W=60h ve SAYI=05h ise
Komuttan sonra W=65h , SAYI=05 h olur.
ANDLW : Bir sayı ile W’Yi AND işlemi yapar
İngilizce Yazılımı:And Literal with W
Kullanım Şekli: ANDLW k
İşlevi: W←W AND k
Etkilenen Bayraklar: Z
Periyot:1
Örnek:
ADDLW 05h
Komuttan önce W=67h ise
Komuttan sonra W=05h olur.
ANDWF : Bir register ile W’yi AND yapar.
İngilizce Yazılımı:And W with File register
Kullanım Şekli:ANDWF f,d
İşlevi: W←W AND f veya f←W AND f
Etkilenen Bayraklar:Z
Periyot:1
Örnek:
ADDWF SAYI,1
Komuttan önce W=6Fh ve SAYI=15h ise
Komuttan sonra W=6Fh , SAYI=05 h olur.
Örnek 2:
ADDWF SAYI,0
Komuttan önce W=65h ve SAYI=0Fh ise
Komuttan sonra W=65h , SAYI=05 h olur.
BCF : Registerin istenilen bitini 0 yap
İngilizce Yazılımı:Bit Clear f
Kullanım Şekli:BCF f,b
İşlevi: f(b) ← 0
Etkilenen Bayraklar:Yok
Periyot:1
Örnek:
BCF SAYI,3
Komuttan önce SAYI=FFh ise
Komuttan sonra SAYI=F7h olur.
BSF : Registerin istenilen bitini
İngilizce Yazılımı:Bit Set f
Kullanım Şekli:BSF f,b
İşlevi: f(b) ← 1
Etkilenen Bayraklar:Yok
Periyot:1
Örnek:
BCF SAYI,5
Komuttan önce SAYI=00h ise
Komuttan sonra SAYI=20h olur.
BTFSC : Registerin istenilen bitini test et ve bu bit 0 ise 1 konut atla
İngilizce Yazılımı:Bit Test f, Skip if Clear
Kullanım Şekli:BTFSC f,b
İşlevi: f(b) = 0 ⇒ bir komut atla
Etkilenen Bayraklar:Yok
Periyot:f(b)=1 ise 1 periyot
f(b)=0 ise 2 periyot
Örnek 1:
BTFSC SAYI,3
GOTO İŞLEM1
GOTO İŞLEM2
Komuttan önce SAYI=00h ise
Komuttan sonra işlem işlem 2 ye gider.
Örnek 2:
BTFSC SAYI,3
GOTO İŞLEM1
GOTO İŞLEM2
Komuttan önce SAYI=FFh ise
Komuttan sonra işlem işlem 1 e gider.
BTFSS : Registerin istenilen bitini test et ve bu bit 1 ise 1 konut atla
İngilizce Yazılımı:Bit Test f, Skip if Set
Kullanım Şekli:BTFSS f,b
İşlevi: f(b) = 1 ⇒ bir komut atla
Etkilenen Bayraklar:Yok
Periyot : f(b)=0 ise 1 periyot
f(b)=1 ise 2 periyot
Örnek 1:
BTFSS SAYI,3
GOTO İŞLEM1
GOTO İŞLEM2
Komuttan önce SAYI=00h ise
Komuttan sonra işlem işlem 1 e gider.
Örnek 2:
BTFSS SAYI,3
GOTO İŞLEM1
GOTO İŞLEM2
Komuttan önce SAYI=FFh ise
Komuttan sonra işlem işlem 2 ye gider.
CALL Alt program çağırma komutudur.
İngilizce Yazılımı:Call Subrutine
Kullanım Şekli:CALL Altprogram
İşlevi: TOS (Top Of Stack)← PC+1
PC← Alt Program Başlangıç Adresi
Etkilenen Bayraklar:Yok
Periyot:2
Örnek:
İŞLEM CALL TOPLAMA
DEVAM ...
...
TOPLAMA ...
Komuttan sonra İşlem TOPLAMA adresinden devam eder. Bu arada DEVAM
etiketinin adresi stact’ta tutulur.
CLRF : Registerin içeriğini 00h yap
İngilizce Yazılımı:Clear f
Kullanım Şekli:CLRF f
İşlevi: f ← 00h
Etkilenen Bayraklar:Z
Periyot:1
Örnek:
CLRF SAYI
Komuttan önce SAYI=xxh ise
Komuttan sonra SAYI=00h olur.
CLRW : Akümülatörün içeriğini 00h yap
İngilizce Yazılımı:Clear W
Kullanım Şekli:CLRW
İşlevi: W ← 00h
Etkilenen Bayraklar:Z
Periyot:1
Örnek:
CLRW
Komuttan önce W=xxh ise
Komuttan sonra W=00h olur.
CLRWDT : Watchdog timer içeriğini 00h yap
İngilizce Yazılımı:Clear Watch Dog Timer
Kullanım Şekli:CLRWDT f
İşlevi: WDT ← 00h
WDT Önbölücüsü ← 0
TO ← 1 , PD ← 1
Etkilenen Bayraklar: TO, PD
Periyot:1
Örnek:
CLRWDT
Komuttan önce WDT=xxh ise
Komuttan sonra WDT=00h olur.
İşlevde belirtilen diğer değerler atanır
COMF : Bir registerin komplementini alır
İngilizce Yazılımı:Complement f
Kullanım Şekli:COMF f,d
İşlevi: W ← (Complement) f veya
f ← (complement) f
Etkilenen Bayraklar:Z
Periyot:1
Örnek 1:
COMF SAYI,0
Komuttan önce W=07h ve SAYI= 30h ise
Komuttan sonra W=CFh ve SAYI= 30h olur.
Örnek 2:
COMF SAYI,1
Komuttan önce W=07h ve SAYI= 30h ise
Komuttan sonra W=07h ve SAYI= CFh olur.
DECF : Register içeriğini 1 azalt.
İngilizce Yazılımı:ecrement file register.
Kullanım Şekli:ECF f,d
İşlevi: W←f-1 veya f←f-1
Etkilenen Bayraklar:Z
Periyot:1
Örnek 1:
DECF SAYI,1
Komuttan önce W=6Fh ve SAYI=15h ise
Komuttan sonra W=6Fh , SAYI=14h olur.
Örnek 2:
DECF SAYI,0
Komuttan önce W=6Fh ve SAYI=15h ise
Komuttan sonra W=14h , SAYI=15h olur.
DECFSZ : Register içeriğini 1 azalt, sonuç 0 ise bir komut atla.
İngilizce Yazılımı:ecrement f, Skip if Zero
Kullanım Şekli:ECFSZ f,d
İşlevi: f←f-1 ve eğer f=0 ise 1 komut atla.
Etkilenen Bayraklar:Yok
Periyot: f≠0 ise 1 periyot
f=0 ise 2 periyot
Örnek :
MOVLW 0Fh
MOVWF SAYAC
TEKRAR DECFSZ SAYAC,1
GOTO TEKRAR
DEVAM ....
Açıklama: Sayac 0 olana dek işlem tekrar ve goto tekrar satırları arasında 15 kez
tekrarlar. Sonra sayac 0 olunca işlem devam satırından devam eder.
GOTO : Verilen adrese git.
İngilizce Yazılımı:Go to adress
Kullanım Şekli:GOTO k
İşlevi: PC←Adres(k)
Etkilenen Bayraklar : Yok
Periyot:2
Örnek :
İŞLEM1 GOTO İŞLEM2
Komuttan sonra işlem sırası, işlem2 ye gider.
INCF : Register içeriğini 1 artır.
İngilizce Yazılımı:Increment file register.
Kullanım Şekli:INCF f,d
İşlevi: W←f+1 veya f←f+1
Etkilenen Bayraklar:Z
Periyot:1
Örnek 1:
INCF SAYI,1
Komuttan önce W=6Fh ve SAYI=15h ise
Komuttan sonra W=6Fh , SAYI=16h olur.
Örnek 2:
DECF SAYI,0
Komuttan önce W=6Fh ve SAYI=15h ise
Komuttan sonra W=16h , SAYI=15h olur.
INCFSZ : Register içeriğini 1 artır, sonuç 0 isebir komut atla.
İngilizce Yazılımı:Increment f, Skip if Zero
Kullanım Şekli:INCFSZ f,d
İşlevi: f←f+1 ve eğer f=0 ise 1 komut atla.
Etkilenen Bayraklar:Yok
Periyot:f≠0 ise 1 periyot
f=0 ise 2 periyot
Örnek :
MOVLW 00h
MOVWF SAYAC
TEKRAR INCFSZ SAYAC,1
GOTO TEKRAR
DEVAM ....
Açıklama: Sayac 0 olana dek işlem tekrar ve goto tekrar satırları arasında 256 kez
tekrarlar. Sonra sayac 0 olunca işlem devam satırından devam eder.
IORLW : Bir sayı ile W’yi OR işlemi yapar
İngilizce Yazılımı:Inclusive Or Literal with W
Kullanım Şekli: IORLW k
İşlevi: W←W OR k
Etkilenen Bayraklar: Z
Periyot:1
Örnek:
ADDLW 05h
Komuttan önce W=62h ise
Komuttan sonra W=67h olur.
IORWF : Bir register ile W’yi OR yapar.
İngilizce Yazılımı:Inclusive Or W with File register
Kullanım Şekli:IORWF f,d
İşlevi: W←W OR f veya f←W OR f
Etkilenen Bayraklar:Z
Periyot:1
Örnek 1:
IORWF SAYI,1
Komuttan önce W=6Fh ve SAYI=15h ise
Komuttan sonra W=6Fh , SAYI=7F h olur.
Örnek 2:
ADDWF SAYI,0
Komuttan önce W=65h ve SAYI=0Fh ise
Komuttan sonra W=7Fh , SAYI=0F h olur.
MOVLW : Accumulatora bir sayı yükle.
İngilizce Yazılımı:Move Literal to W
Kullanım Şekli: MOVLW k
İşlevi: W←k
Etkilenen Bayraklar:Yok
Periyot:1
Örnek:
MOVLW 05h
Komuttan önce W=xxh ise
Komuttan sonra W=05h olur.
MOVF : Bir register içeriğini hedefe taşı.
İngilizce Yazılımı:Move f
Kullanım Şekli:MOVF f,d
İşlevi: W←f veya f←f
Etkilenen Bayraklar:Z
Periyot:1
Örnek:
MOVF SAYI,0
Komuttan önce W=6Fh ve SAYI=15h ise
Komuttan sonra W=15h , SAYI=15h olur.
MOVWF : W’nin içeriğini bir registere taşı.
İngilizce Yazılımı:Move w to f
Kullanım Şekli:MOVWF f
İşlevi: f←W
Etkilenen Bayraklar:Yok
Periyot:1
Örnek:
MOVWF SAYI
Komuttan önce W=6Fh ve SAYI=15h ise
Komuttan sonra W=6Fh , SAYI=6Fh olur.
NOP : İşlem yapma
İngilizce Yazılımı:No Operation
Kullanım Şekli:NOP
İşlevi: 1 periyot pekle
Etkilenen Bayraklar:Yok
Periyot:1
Örnek:
NOP
Açıklama : 1 periyot süresince bekletir.
RETFIE : Interupt altprogramından geri dön.
İngilizce Yazılımı:Return From Interrupt.
Kullanım Şekli:RETFIE
İşlevi: PC←TOS
GIE ←1 (INTCON(7)←1)
Etkilenen Bayraklar:Yok
Periyot:2
Örnek:
RETFIE:
Açıklama : İşlevde belirtilenleri yaparak interrupt alt programının çağırıldığı yerden
işlemin devam etmesini sağlar. Yani interrupt altprogramını sonlandırma komutudur.
RETLW :
Altprogramdan accumulatora bir sayı yükleyerek geri dön.
İngilizce Yazılımı:Return with Literal in W.
Kullanım Şekli:RETLW k
İşlevi: W←k ve PC←TOS
Etkilenen Bayraklar:Yok
Periyot:2
Örnek:
CALL LİSTE komutu işletilecekse ve LİSTE isimli altprogramda aşağıdaki gibi ise
W=01h ise işlem bitişinde W=11h olur ve geri döner. W=02h ise işlem bitişinde
W=12h olur ve geri döner. Bu şekilde listeden değer seçme işlemlerinde kullanılır.
LİSTE ADDWF PC
RETLW 11h
RETLW 12h
RETLW 13h
RETLW 14h
RETURN :
Altprogramdan geri dön.
İngilizce Yazılımı:Return From Subrutine.
Kullanım Şekli:RETURN
İşlevi: PC←TOS
Etkilenen Bayraklar:Yok
Periyot:2
Örnek:
RETURN
Açıklama : İşlevde belirtilenleri yaparak altprogramın çağırıldığı yerden işlemin
devam etmesini sağlar. Yani alt programı sonlandırma komutudur.
RLF : Registerin bitlerini 1 bit sola döndür.
İngilizce Yazılımı:Rotate Left f
Kullanım Şekli:RLF f,d
İşlevi:
Etkilenen Bayraklar:C
Periyot:1
Örnek 1:
RLF SAYI,1
Komuttan önce W=6Fh ve SAYI=15h C=0 ise
Komuttan sonra W=6Fh , SAYI=2Ah , C=0 olur.
İşlem 4 kez tekrarlarsa W=6Fh, SAYI=05h ve C=1 olur.
Örnek 2:
RLF SAYI,0
Komuttan önce W=6Fh ve SAYI=15h C=0 ise
Komuttan sonra W=2Ah , SAYI=15h , C=0 olur.
RRF :
Registerin bitlerini 1 bit sağa döndür.
İngilizce Yazılımı:Rotate Right f
Kullanım Şekli:RRF f,d
İşlevi:
Etkilenen Bayraklar:C
Periyot:1
Örnek 1:
RRF SAYI,1
Komuttan önce W=6Fh ve SAYI=15h , C=0 ise
Komuttan sonra W=6Fh , SAYI=0Ah , C=1 olur.
İşlem 2 kez tekrarlarsa W=6Fh, SAYI=85h ve C=0 olur.
Örnek 2:
RRF SAYI,0
Komuttan önce W=6Fh ve SAYI=15h C=0 ise
Komuttan sonra W=0Ah , SAYI=15h , C=1 olur.
SUBLW : Bir sayıdan W’nin içeriğini çıkarır.
İngilizce Yazılımı:Subtract W from Literal
Kullanım Şekli: SUBLW k
İşlevi: W←k-W
Etkilenen Bayraklar: C,DC,Z
Periyot:1
Örnek:
SUBLW 65h
Komuttan önce W=60h ise
Komuttan sonra W=05h olur.
SUBWF : Bir registerin içeriğinde W’nin içeriğini çıkarır.
İngilizce Yazılımı:Subtract W from File register
Kullanım Şekli:SUBWF f,d
İşlevi: W←f-W veya f←f-W
Etkilenen Bayraklar:C, DC, Z
Periyot:1
Örnek:
SUBWF SAYI,1
Komuttan önce W=60h ve SAYI=65h ise
Komuttan sonra W=60h , SAYI=05 h olur.
Örnek 2:
SUBWF SAYI,0
Komuttan önce W=60h ve SAYI=65h ise
Komuttan sonra W=05h , SAYI=65 h olur.
SWAPF : Bir registerin nibble’larını yer değiştir.
İngilizce Yazılımı:Swap nibbles in f
Kullanım Şekli:SWAPF f,d
İşlevi:
W(LSN)←f(MSN) ve W(MSN)←f(LSN) veya
f(LSN)←f(MSN) ve f(MSN)←f(LSN)
Etkilenen Bayraklar:Yok
Periyot:1
Örnek:
SWAPF SAYI,1
Komuttan önce W=60h ve SAYI=65h ise
Komuttan sonra W=60h , SAYI=56 h olur.
Örnek 2:
ADDWF SAYI,0
Komuttan önce W=60h ve SAYI=65h ise
Komuttan sonra W=56h , SAYI=65 h olur
XORLW : Bir sayı ile W’Yi EXOR işlemi yapar
İngilizce Yazılımı:EX-OR Literal with W
Kullanım Şekli: XORLW k
İşlevi: W←W EXOR k
Etkilenen Bayraklar: Z
Periyot:1
Örnek:
XORLW 05h
Komuttan önce W=67h ise
Komuttan sonra W=62h olur.
XORWF : Bir register ile W’yi EXOR yapar.
İngilizce Yazılımı:EX-OR W with File register
Kullanım Şekli:XORWF f,d
İşlevi: W←W EXOR f veya f←W EXOR f
Etkilenen Bayraklar:Z
Periyot:1
Örnek 1:
XORWF SAYI,1
Komuttan önce W=6Fh ve SAYI=15h ise
Komuttan sonra W=6Fh , SAYI=7Ah olur.
Örnek 2:
XORWF SAYI,0
Komuttan önce W=65h ve SAYI=15h ise
Komuttan sonra W=70h , SAYI=15 h olur.
Not: Komutlarda hedef olarak 0 şeklinde belirtildiğinde bilgi W adresine gider, 1 ile
belirtildiğinde ise ilgili registere gider. Burada 0 yerine w, 1 yerine ilgili registerin adı
yazılırsa da program aynı olur. Bu yazılımda program daha anlaşılır olur.
binary sayıların hex. karşılığını
Binary Hex.
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
-
sagolss hoja
-
bunları okuyup ta pic programlıcak adamın alnını karşlarım arkadaş
yok daha öyle bi adam bu kardarcık şeyle progralıcak
saol sanal hacı -
aynen ameleye katılıyorum :) çok karışık şeyler böyle olmaz bu iş..
En iyisi kitaptır, alacaksın bir kitap okuyacaksın. kasacaksın
paylaşım için sağol ama hoca verimli olmuyor böyle uzun yazılar..
Toplam Hit: 2810 Toplam Mesaj: 4