PIC Komutları
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) :
Q1
Q2
Q3
Q4
Kod çöz
"k" literalini oku
İşlemi yap
W'ye yaz
Ö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) :
Q1
Q2
Q3
Q4
Kod çöz
"f" yazmacını oku
İşlemi yap
Sanucu hedefe yaz
Ö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) :
Q1
Q2
Q3
Q4
Kod çöz
"k" literalini oku
İşlemi yap
W'ye yaz
Ö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) :
Q1
Q2
Q3
Q4
Kod çöz
"f" yazmacını oku
İşlemi yap
Sonucu yaz
Ö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[b]) 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) :
Q1
Q2
Q3
Q4
Kod çöz
"f" yazmacını oku
İşlemi yap
"f" yazmacına yaz
Ö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[b]) 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) :
Q1
Q2
Q3
Q4
Kod çöz
"f" yazmacını oku
İşlemi yap
"f" yazmacına yaz
Ö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[b]) = 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) :
Q1
Q2
Q3
Q4
Kod çöz
"f" yazmacını oku
İşlemi yap
İşlem yapılmaz
Eğer atlama yapılmışsa 2. çevrimde ;
Q1
Q2
Q3
Q4
İşlem yapılmaz
İşlem yapılmaz
İşlem yapılmaz
İşlem yapılmaz
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[b]) = 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) :
Q1
Q2
Q3
Q4
Kod çöz
"f" yazmacını oku
İşlemi yap
İşlem yapılmaz
Eğer atlama yapılmışsa 2. çevrimde ;
Q1
Q2
Q3
Q4
İşlem yapılmaz
İşlem yapılmaz
İşlem yapılmaz
İşlem yapılmaz
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;
Q1
Q2
Q3
Q4
Kod çöz
"k" literalini okuPC'yi yığına kaydet
Veriyi işle
PC'ye yaz
2. çevrim;
Q1
Q2
Q3
Q4
İşlem yapılmaz
İşlem yapılmaz
İşlem yapılmaz
İşlem yapılmaz
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) :
Q1
Q2
Q3
Q4
Kod çöz
"f" yazmacını oku
Veriyi işle
"f" yazmacına yaz
8 Şubat 2009 Pazar
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder