PIC, assembler dili adı verilen ve toplam 35 komuttan oluşan programlama diliyle programlanır.
Bu komuları yazmak için basit bir editör kullanabiliriz. Bu Windows'da notpad, DOS'da edit programları olabilir. Asıl önemli olan yazdığımız bu komutları makine diline çevirmektir. Text dosyası biçiminde kaydedilmiş olan assembly dili komutlarını makine diline çeviren MPASM'nin hem DOS altında hemde windows altında çalışan versiyonu bulunmaktadır. Bu program http://www.microchip.com adresinden download edilebilir. Bizim kullanacağımız MPLAB programında hem metin editörü hem de MPASM assembler programı tümleşik olarak bulunur. İsterseniz şimdi PIC e assembler komularını görmeye başlıyalım.
Başlamadan önce şunu belirtmekte fayda var.
PIC kullanılan saat (clock) frekansını dörde bölüp, bu sürede komutu işler. Yani PIC'e saat darbelerini üreten Kristal veya herhangibir zamanlayıcı 4 MHz frekanslı darbeler üretiyorsa, PIC herbir komutu 1 usn (mikrosaniye) de işliyor demektir. Genelde PIC16F84 için 4 MHz lik kristaller kullanılır. Bu kısa bilgiyi verdikten sonra assembly komutlarını anlatmaya başlayabiliriz. MPASM assembler programının yazılan komutları doğru olarak algılayıp,
PIC'in anlayabileceği hex kodlarına dönüştürebilmesi için şu bilgiler program içine özel formatta yazılması gerekir;
Komutyların hangi PIC16XX için yazıldığı, Programın bellekteki hangi adresten başlayacağı, Komutların ve etiketlerin neler olduğu,
Programın bitiş yeri. Şimdide kodları tek tek inceleyelim,
Kullanılan Kısaltmalar:
Kısaltma Anlamı Örnek n Sabit değer h'20', d'10', b'00001100' gibi... f Bizim oluşturduğumuz saklayıcı d yön (direction), değeri 0 (w) veya 1 (f)olabilir. ADDWF durum1,f ; W ile durum1'i AND işlemine tut, değeri f olduğu için durum1 saklayıcısına yaz. S.R.E.B Status Registerinde Etkilenen Bayraklar C Taşma,ödünç biti. En sondaki 7. bitde taşma olduğunda 1 olur. DC Taşma, ödünç biti. 3. bitde taşma olduğunda 1 olur. Z Zero(Sıfır) biti. Bir aritmetik veya mantıksal komutun sonucu 0 (sıfır) olduğunda=1 olur. TO ve PD Bu bitler status reg. anlatılırken işlenecek.
Komut S.R.E.B Anlamı ADDLW n C,DC,Z W' ya n değeri eklenir. Sonuç W'ye yazılır. ADDWF f,d C,CD,Z W içeriğine f saklayıcısını ekler ve sonucu hedef d'nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
Örnek: ADDWF DAT_IN,W
ANDLW n Z n değeri W yazmacıyla AND'lenir Ve sonuç W yazmacına yazılır.
Örnek: ANDLW B'00000011'en alttaki iki bit hariç bütün bitleri kapatır.
ANDWF f,d Z W ve f dosyasını AND işlemine tabi tutar ve sonucu hedef d'nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
Örnek: ANDWF TEMP W TEMP dosyasının içeriğini yalnız bırakarak AND fonksiyonunun sonucunu W yazmacına yerleştirir.
BCF f,b yok F adresinde bulunan dosya yazmacındaki b bitini 0 yap.
Örnek: BCF STATUS , ZERO
BSF f,b yok F adresinde bulunan dosya yazmacındaki b bitini 1 yap.
Örnek: BSF PORTA , BITO
BTSFC f,b yok F adresindeki yazmaçla b bit'ini test et ve eğer 0'sa bir sonraki komuta atla . 1'se izleyen komuta geç.
Örnek: BTFSC PORTB , SWITCH1
BTFSS f,b yok F adresindeki yazmaçta b bit'ini test et ve eğer 1'se bir sonraki komuta atla. Eğer 0'sa onu izleyen komuta geç.
Örnek: BTFSS STATUS , CARRY
CALL k yok k etiketli bir alt rutine bir çağrı yapılmıştır. W yazmacının içeriği gerektiğinde bir alt rutin içinde kullanılmak üzere transfer edilecektir.
Örnek: CALL TEMP_CONVERT.
CLRF f Z f adresindeki içeriği yazmacın sıfırlanacak şekilde temizle veya reset et
CLRW Z W yazmacının içeriğini sıfırlayacak şekilde temizle veya reset et
CLRWDT TO,PD Watchdog zamanlayıcı yazmacı sıfıra ayarlanmıştır.
COMF f,d Z F dosyasının içeriğini tersine alır ve sonucunu hedef d'nin değerine
bağlı olarak W veya f saklayıcısına yerleştirilir. DECF f,d Z F dosyasından 1 çıkarır ve sonucu hedef d'nin değerine bağlı olarak W veya
f saklayıcısına yerleştirilir. DECFSZ f,d yok F dosyasını içeriğini bir azalt ve sonuç sıfırsa izleyen komutu atla,
sonucu hedef d'nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir. GOTO k yok Program k etiket / adresine sıçrar.
INCF f,d Z F dosyasının içeriğini 1 artırır ve sonucu hedef d'nin değerine bağlı
olarak W veya f saklayıcısına yerleştirilir. INCFSZ f,d yok F dosyasının içeriğini 1 artır ve sonucu hedef d'nin değerine bağlı
olarak W veya f saklayıcısına yerleştirilir.,sonuç sıfırsa bir sonraki komutu atla. IORLW n Z N değeri W yazmacıyla OR'lanır Ve sonuç w yazmacıyla yazılır.
Örnek:" IORLW h'C4' "
IORWF f,d Z W yazmacının içeriği ve f dosyasını OR işlemine tabi tutar ve sonucu hedef d'nin değerine bağlı olarak W veya f saklayıcısına yerleştirilir.
Örnek: "IORWF COUNT, F" fonksiyonunun sonucunu COUNT dosyasına yerleştirir.
MOVLW n yok N değeri W'ya taşınır.
Örnek: MOVLW 36II
MOVF f,d Z F dosyasının içeriğini taşır/kopyalar ve sonucu hedef d'nin değerine bağlı olarak
W veya f saklayıcısına yerleştirilir. MOVWF f yok W yazmacının içeriğini f adresindeki yazmaca kopyala.
Örnek: MOVWF TEMP
NOP yok Hiçbir şey yapma
Örnek: NOP ; 1saat çevrimi harcar
RETFIE yok Bir kesmeden geri döner.
RETLW n yok W yazmacında bir n değeriyle alt rutinden geri dön.
Örnek: RTLW 20H; W yazmacında 20H ile +1 adresini çağırmaya geri döner.
Örnek: RETLW 20H; alt rutinin çağrıldığı adres +1 adresine W yazmacında 20H değerini taşıyarak geri döner
RETURN yok W yazmacının içeriğini olduğu gibi bırakarak bir alt rutinden geri döner.
RLF f,d C Tüm bit'leri birer sola kaydır veya taşı.
Bit 7 taşıma bit'i de ve taşıma bit'i 0 bit'i olacaktır. Sonuç hedef d'ye yerleştirilir. RRF f,d C Tüm bitleri birer sağa kaydır veya taşı.
0 bit'i taşıma bit'i taşıma SLEEP TO,PD PIC uyuma veya bekleme durumuna getirilmiştir.
Yazmaç içerikleri dondurulmuştur ve PIC işletim akımının bir kısmını çeker. Uyuma durumundan çalışma durumuna geçerken 16C5x ailesi reset vektörüne atlar. 16Cxx ailesiyse izleyen kod hattında devam eder. SUBLW n C,DC,Z W değeri n'den çıkarılır ve sonuç W' ya yerleştirilir.
SUBWF f,d C,DC,Z F dosyasından W yazmacı içeriğini çıkarır ve sonucu hedef d'nin değerine
bağlı olarak W veya f saklayıcısına yerleştirilir. SWAPF f,d yok f saklayıcısının içerisindeki ilk dört bit ile son dört biti yer değiştirir.
d'nin değerine göre sonuç W veya f saklayıcılarına yazılır. XORLW deger Z W içeriğini deger ile birlikte XOR işlemine tabi tut.
sonuç w ye yazılır.
XORWF f,d Z W içeriği ve f dosyasını XOR işlemine
GERİ DÖNMEK İÇİN tıklayınız...
DEVAMI İÇİN tıklayınız...