Pic programlamak için assembly basic C dil PIC Komutları

Pic programlamak için assembly basic C dil 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 oku
PC’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

Ö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) :

Q1 Q2 Q3 Q4
Kod çöz "f" yazmacını oku Veriyi işle Hedefe yaz

Ö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) :

Q1 Q2 Q3 Q4
Kod çöz "f" yazmacını oku Veriyi işle Hedefe yaz

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

GOTO  Koşulsuz Dallanma
Yazılış : GOTO k
İşleçler: 0
£ k £ 2047
İşlem: k
® PC<10:0> PCLATH<4:3> ® PC<12:11> d Î [0,1]
Etkilenen Yazmaçlar : YOK
Kodlama : 10 1kkk kkkk kkkk
Tanım : GOTO koşulsuz dallanma komutudur. İlk 11 bit PC<10:0>’ ye yüklenir. Yüksek bitler PCLATH<4:3>’ yüklenir. GOTO iki çevrimlik komuttur.
Word: 1
Saat Çevrimi (Cycle) : 2

Q çevrimi (Q Cycle Activity) :

 

Q1 Q2 Q3 Q4
Kod çöz "k" literalini oku İşlemi yap PC’ye yaz
İşlem Yapma İşlem Yapma İşlem Yapma İşlem Yapma

 

 

Örnek :     GOTO adres 
                İşlemden önce PC  =
                İşlemden sonra PC = adres

 

INCF f’yi bir artır
Yazılış : INCF f,d
İşleçler: 0
£ f £ 127, d Î [0,1]
İşlem: (f) + 1
® (destination)
Etkilenen Yazmaçlar : Z
Kodlama : 00 1010 dfff ffff
Tanım : "f" yazmacının içeriğini 1 artır. 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 hedefe yaz

 

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

 

INCFSZ f’yi bir artır, sonuç 0 ise atla.
Yazılış : INCFSZ f,d
İşleçler: 0
£ f £ 127, d Î [0,1]
İşlem: (f) + 1
® (destination)
Etkilenen Yazmaçlar : Yok
Kodlama : 00 1111 dfff ffff
Tanım : "f" yazmacının içeriğini eğer sonuç 0 değilse 1 artır, yoksa komutu atla. Eğer "d" 0 ise sonucu W ‘ye, 1 ise "f" yazmacına yaz.
Word: 1
Saat Çevrimi (Cycle) : 1 (2 Eğer atlama yapılırsa)

Q çevrimi (Q Cycle Activity) :

 

Q1 Q2 Q3 Q4
Kod çöz "f" yazmacını oku İşlemi yap Sonucu hedefe yaz

 

Q(2) çevrimi (Q Cycle Activity) : (Eğer sonuç "0" ise)

 

Q1 Q2 Q3 Q4
İşlem Yapma İşlem Yapma İşlem Yapma İşlem Yapma

 

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

 

IORLW W ile "k"’ ile mantıksal VEYA işlemi uygula
Yazılış : IORLW k
İşleçler: 0
£ f £ 127, d Î [0,1]
İşlem: (W) .OR. (f) ® (destination)
Etkilenen Yazmaçlar : Z
Kodlama : 00 0100 dfff ffff
Tanım : W yazmacı ile "f" yazmacına VEYA işlemi uygula.  Sonucu W ‘ye yaz.
Word: 1
Saat Çevrimi (Cycle) : 1

Q çevrimi (Q Cycle Activity) :

 

Q1 Q2 Q3 Q4
Kod çöz "k" literalini oku İşlemi yap Sonucu yaz

 

Örnek :     IORLW 0x35 
                İşlemden önce W = 0x9A, Z =  0 
                İşlemden sonra W = 0xBF, Z =  1 

 

IORWF W ile "f"’ ile mantıksal VEYA işlemi uygula
Yazılış : IORWF f,d
İşleçler: 0
£  k £ 255
İşlem: (W) .OR. k ® (W)
Etkilenen Yazmaçlar : Z
Kodlama : 11 1000 kkkk kkkk
Tanım : W yazmacı ile "k" literaline VEYA 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 :     IORWF 0x35,0
                İşlemden önce W = 0x9A, Z =  0 
                İşlemden sonra W = 0xBF, Z =  1

 

MOVF  "f" yazmacını içeriğini taşı
Yazılış : MOVF f,d
İşleçler: 0
£ f £ 127, d Î [0,1]  < BR > İşlem: (f) ® (destination)
Etkilenen Yazmaçlar : Z
Kodlama : 00 1000 dfff ffff
Tanım : "f" yazmacının içeriğini hedefe taşı.Hedef  "d"’ye bağlıdır.  Eğer "d" 0 ise sonucu W ‘ye, 1 ise "f" yazmacına taşır. 
Word: 1
Saat Çevrimi (Cycle) : 1

Q çevrimi (Q Cycle Activity) :

 

Q1 Q2 Q3 Q4
Kod çöz "f" yazmacını oku İşlemi yap Hedefe Yaz

 

Örnek :     MOVF FSR, 0 
                İşlemden sonra W = FSR’deki değer, Z =  1 

 

MOVLW  "k" literalini W’ya taşı
Yazılış : MOVLW k
İşleçler: 0 
££ 255
İşlem: k
® W
Etkilenen Yazmaçlar : Yok
Kodlama : 11 00xx kkkk kkkk
Tanım : Sekiz bitlik "k" literali "W" yazmacına yüklenir. 
Word: 1
Saat Çevrimi (Cycle) : 1

Q çevrimi (Q Cycle Activity) :

 

Q1 Q2 Q3 Q4
Kod çöz "k" literalini oku İşlemi yap "W"yazmacına Yaz

 

Örnek :     MOVLW 0x5A 
               İşlemden Sonra W = 0x5A 

 

MOVWF  W yazmacının içeriğini "f"e taşı
Yazılış : MOVWF f
İşleçler: 0
£ f £ 127  < BR > İşlem: (W) ® (f)
Etkilenen Yazmaçlar : Yok
Ko
dlama : 00 0000 1fff ffff
Tanım : "W" yazmacının içeriğini "W" yazmacına taşı. 
Word: 1
Saat Çevrimi (Cycle) : 1

Q çevrimi (Q Cycle Activity) :

 

Q1 Q2 Q3 Q4
Kod çöz "W" yazmacını oku İşlemi yap Hedefe Yaz

 

Örnek :     MOVWF OPTION_REG
                      İşlemden Önce  :
                              OPTION = 0xFF W = 0x4F 
                      İşlemden Sonra :
                              OPTION = 0x4F W = 0x4F
 

Hazırlayan İsmail Karakaya

Posted in Uncategorised.

Bir cevap yazın