1. Bu site çerez kullanmaktadır. Siteyi kullanmaya devam etmeniz halinde çerez kullanımı ile ilgili site koşullarını kabul etmiş sayılırsınız. Daha Fazlasını Öğren.
  2. Forum İllegal Uyarısı Forum kuralları gereği forumda video ve illagal paylaşım yapmak yasaktır.Program Arşivimizde ise kısıtlanmış sürüm yada dağıtımı serbest olan (trial - freeware) yazılımlar yayınlayınız..Aksi takdirde mesajlarınız silinecektir..

PIC Komutları

Konusu 'Pic Uygulama Ve Devreleri' forumundadır ve guclusat tarafından 22 Ekim 2011 başlatılmıştır.

  1. guclusat
    Offline

    guclusat Tanınmış Üye Süper Moderatör

    Katılım:
    14 Haziran 2009
    Mesajlar:
    9.754
    Ödül Puanları:
    48
    PIC meraklılarını uzunca bir süre beklettim. Yoğun bir çalışma temposunun ardından (henüz bitmemiş olsa da) bir şeyler hazırlamak için vakit bulabildim. Artık pic programlamaya hazırlanacağız. Pic programlamak için assembly, basic, C dilleri geliştirilmiştir. Biz ücretsiz olması nedeniyle pic assembly dili üzerinde duracağız ve MPLab yazılım geliştirme ortamını tanıyacağız. Daha önce de belirttiğimiz gibi PIC ailesinden PIC16F84 mikro denetleyicisinin 35 adet assembly komutu vardır. Şimdi bu komutlara, biraz detaylı olarak göz atalım.




    ADDLW Literal ile W'yu topla
    Yazılış : ADDLW k
    İşleçler: 0 £ k £ 255
    İşlem: (W) + k → (W)
    Etkilenen Yazmaçlar : C, DC, Z
    Kodlama : 11 111x kkkk kkkk
    Tanım : W yazmacının içeriği sekiz bitlik k literali ile toplanır, sonuc W yazmacına yerleştirilir.
    Word: 1
    Saat Çevrimi (Cycle) : 1
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"k" literalini oku[/TD]
    [TD]İşlemi yap[/TD]
    [TD]W'ye yaz[/TD]
    [/TR]
    [/TABLE]

    Örnek : ADDLW 0x15
    İşlemden önce W = 0x10
    İşlemden sonra W = 0x25




    ADDWF W ve f'i Topla
    Yazılış : ADDWF f,d
    İşleçler: 0 £ f £ 127, d Î [0,1]
    İşlem: (W) + (f) → (destination)
    Etkilenen Yazmaçlar : C, DC, Z
    Kodlama : 00 0111 dfff ffff
    Tanım : W yazmacının içeriğiyle "f" yazmacının içeriğini topla. Eğer "d" 0 ise sonucu W 'ye, 1 ise "f" yazmacına yaz.
    Word: 1
    Saat Çevrimi (Cycle) : 1
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"f" yazmacını oku[/TD]
    [TD]İşlemi yap[/TD]
    [TD]Sanucu hedefe yaz[/TD]
    [/TR]
    [/TABLE]

    Örnek : ADDWF FSR, 0
    İşlemden önce W = 0x17 FSR = 0xC2
    İşlemden sonra W =0xD9 FSR = 0xC2




    ANDLW Literal ile W'yi mantıksal VE
    Yazılış : ANDLW k
    İşleçler: 0 £ k £ 255
    İşlem: (W) .AND. (k) → (W)
    Etkilenen Yazmaçlar : Z
    Kodlama : 11 1001 kkkk kkkk
    Tanım : W yazmacı ile sekiz bitlik "k" literaline VE işlemi uygulanır. Sonuç W'ye yazılır.
    Word: 1
    Saat Çevrimi (Cycle) : 1
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"k" literalini oku[/TD]
    [TD]İşlemi yap[/TD]
    [TD]W'ye yaz[/TD]
    [/TR]
    [/TABLE]

    Örnek : ANDLW 0x5F
    İşlemden önce W =0xA3
    İşlemden sonra W = 0x03




    ANDWF W ile "f"'e mantıksal VE işlemi uygula
    Yazılış : ANDWF f,d
    İşleçler: 0 £ f £ 127, d Î [0,1]
    İşlem: (W) .AND. (f) → (destination)
    Etkilenen Yazmaçlar : Z
    Kodlama : 00 0101 dfff ffff
    Tanım : W yazmacı ile "f" yazmacına VE işlemi uygula. Eğer "d" 0 ise sonucu W 'ye, 1 ise "f" yazmacına yaz.
    Word: 1
    Saat Çevrimi (Cycle) : 1
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"f" yazmacını oku[/TD]
    [TD]İşlemi yap[/TD]
    [TD]Sonucu yaz[/TD]
    [/TR]
    [/TABLE]

    Örnek : ANDWF FSR, 1
    İşlemden önce W = 0x17, FSR = 0xC2
    İşlemden sonra W = 0x17, FSR = 0x02




    BCF f'in bir bitini sil (sıfırla)
    Yazılış : BCF f,b
    İşleçler: 0 £ f £ 127, 0 £ b £ 7
    İşlem: 0 → (f)
    Etkilenen Yazmaçlar : yok
    Kodlama : 01 00bb bfff ffff
    Tanım : "f" yazmacının "b" biti sıfırlanır.
    Word: 1
    Saat Çevrimi (Cycle) : 1
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"f" yazmacını oku[/TD]
    [TD]İşlemi yap[/TD]
    [TD]"f" yazmacına yaz[/TD]
    [/TR]
    [/TABLE]

    Örnek : BCF FLAG_REG, 7
    İşlemden önce FLAG_REG = 0xC7
    İşlemden sonra FLAG_REG = 0x47




    BSF f'in bir bitini kur (1 yap)
    Yazılış : BSF f,b
    İşleçler: 0 £ f £ 127, 0 £ b £ 7
    İşlem: 1 -rarr; (f)
    Etkilenen Yazmaçlar : Yok
    Kodlama : 01 01bb bfff ffff
    Tanım : "f" yazmacının "b" biti 1 yapılır.
    Word: 1
    Saat Çevrimi (Cycle) : 1
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"f" yazmacını oku[/TD]
    [TD]İşlemi yap[/TD]
    [TD]"f" yazmacına yaz[/TD]
    [/TR]
    [/TABLE]

    Örnek : BSF FLAG_REG, 7
    İşlemden önce FLAG_REG = 0x0A
    İşlemden sonra FLAG_REG = 0x8A




    BTFSC "f" yazmacının "b" bitini kontrol et, 0 ise atla
    Yazılış : BTFSC f,b
    İşleçler: 0 £ f £ 127, 0 £ b £ 7
    İşlem: eğer (f) = 0 ise bir sonraki komutu atla
    Etkilenen Yazmaçlar : Yok
    Kodlama : 01 10bb bfff ffff
    Tanım : Eğer "f" yazmacının "b" biti 1 ise sıradaki komut işletilir, 0 ise bir sonraki komut atlanır ve yerine NOP işletilir ve 2 çevrimli komut olur.
    Word: 1
    Saat Çevrimi (Cycle) : 1 (2)
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"f" yazmacını oku[/TD]
    [TD]İşlemi yap[/TD]
    [TD]İşlem yapılmaz[/TD]
    [/TR]
    [/TABLE]

    Eğer atlama yapılmışsa 2. çevrimde ;

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]İşlem yapılmaz[/TD]
    [TD]İşlem yapılmaz[/TD]
    [TD]İşlem yapılmaz[/TD]
    [TD]İşlem yapılmaz[/TD]
    [/TR]
    [/TABLE]





    BTFSS "f" yazmacının "b" bitini kontrol et, 1 ise atla
    Yazılış : BTFSS f,b
    İşleçler: 0 £ f £ 127, 0 £ b £ 7
    İşlem: eğer (f) = 1 ise bir sonraki komutu atla
    Etkilenen Yazmaçlar : Yok
    Kodlama : 01 11bb bfff ffff
    Tanım : Eğer "f" yazmacının "b" biti 0 ise sıradaki komut işletilir, 1 ise bir sonraki komut atlanır ve yerine NOP işletilir ve 2 çevrimli komut olur.
    Word: 1
    Saat Çevrimi (Cycle) : 1 (2)
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"f" yazmacını oku[/TD]
    [TD]İşlemi yap[/TD]
    [TD]İşlem yapılmaz[/TD]
    [/TR]
    [/TABLE]

    Eğer atlama yapılmışsa 2. çevrimde ;

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]İşlem yapılmaz[/TD]
    [TD]İşlem yapılmaz[/TD]
    [TD]İşlem yapılmaz[/TD]
    [TD]İşlem yapılmaz[/TD]
    [/TR]
    [/TABLE]





    CALL Altrutin çağır
    Yazılış : CALL k
    İşleçler: 0 £ k £ 2047
    İşlem: (PC)+ 1 → TOS, k → PC<10:0>, (PCLATH<4:3>) ® PC<12:11>
    Etkilenen Yazmaçlar : Yok
    Kodlama : 10 0kkk kkkk kkkk
    Tanım : Bir altrutin çağırır. Önce dönüş adresi (PC+1) yığın (stack) hafızaya kaydedilir. 11 bitlik adres PC<10:0>'a yüklenir. PC'nin üst bitleri PCLATCH'den yüklenir. CALL 2 çevrimlik bir komuttur.
    Word: 1
    Saat Çevrimi (Cycle) : 2
    Q çevrimi (Q Cycle Activity) :
    1. çevrim;

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"k" literalini oku
    PC'yi yığına kaydet[/TD]
    [TD]Veriyi işle[/TD]
    [TD]PC'ye yaz[/TD]
    [/TR]
    [/TABLE]

    2. çevrim;

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]İşlem yapılmaz[/TD]
    [TD]İşlem yapılmaz[/TD]
    [TD]İşlem yapılmaz[/TD]
    [TD]İşlem yapılmaz[/TD]
    [/TR]
    [/TABLE]





    CLRF f'in içeriğini temizle (0 yap)
    Yazılış : CLRF f
    İşleçler: 0 £ f £ 127
    İşlem: 00h → (f), 1 → Z
    Etkilenen Yazmaçlar : Z
    Kodlama : 00 0001 1fff ffff
    Tanım : "f" yazmacının içeriği temizlenir(0) ve "Z" biti kurulur(1).
    Word: 1
    Saat Çevrimi (Cycle) : 1
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"f" yazmacını oku[/TD]
    [TD]Veriyi işle[/TD]
    [TD]"f" yazmacına yaz[/TD]
    [/TR]
    [/TABLE]

    Örnek : CLRWDT
    İşlemden önce WDT counter = ?
    İşlemden sonra WDT counter = 0x00,
    WDT prescaler= 0, TO =1, PD =1




    COMF "f" in tümleyenini al
    Yazılış : COMF f,d
    İşleçler: 0 £ f £ 127, d Î [0,1]
    İşlem: (f) → (destination)
    Etkilenen Yazmaçlar : Z
    Kodlama : 00 1001 dfff ffff
    Tanım : "f" yazmacının içeriğinin tümleyeni alınır. Eğer d 0 ise, sonuc "w", 1 ise "f" yazmacına yazılır.
    Word: 1
    Saat Çevrimi (Cycle) : 1
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"f" yazmacını oku[/TD]
    [TD]Veriyi işle[/TD]
    [TD]Hedefe yaz[/TD]
    [/TR]
    [/TABLE]

    Örnek : COMF REG1,0
    İşlemden önce REG1 = 0x13
    İşlemden sonra REG1 = 0x13




    DECF "f" yazmacının içeriğini 1 azalt
    Yazılış : DECF f,d
    İşleçler: 0 £ f £ 127, d Î [0,1]
    İşlem: (f) - 1 → (destination)
    Etkilenen Yazmaçlar : Z
    Kodlama : 00 0011 dfff ffff
    Tanım : "f" yazmacının içeriğini bir(1) azalt. Eğer d 0 ise, sonuc "w", 1 ise "f" yazmacına yazılır.
    Word: 1
    Saat Çevrimi (Cycle) : 1
    Q çevrimi (Q Cycle Activity) :

    [TABLE="width: 426, align: center"]
    [TR]
    [TD]Q1[/TD]
    [TD]Q2[/TD]
    [TD]Q3[/TD]
    [TD]Q4[/TD]
    [/TR]
    [TR]
    [TD]Kod çöz[/TD]
    [TD]"f" yazmacını oku[/TD]
    [TD]Veriyi işle[/TD]
    [TD]Hedefe yaz[/TD]
    [/TR]
    [/TABLE]

    Örnek : DECF CNT, 1
    İşlemden önce CNT = 0x01, Z =0
    İşlemden sonra CNT = 0x00, Z =1
     

Sayfayı Paylaş