By_Pers
New member
- Katılım
- 13 Haz 2007
- Mesajlar
- 7
- Reaction score
- 0
- Puanları
- 0
PIC nedir?
PIC Serisi mikroişlemciler MICROCHIP firması tarafından geliştirilmiş ve üretim amacı çok fonksiyonlu logic uygulamalarının hızlı ve ucuz bir Mikroişlemci ile yazılım yoluyla karşılanmasıdır.
PIC’in kelime anlamı -PERIPHERAL INTERFACE CONTROLLER- Giriş Çıkış işlemcisidir. İlk olarak 1994 yılında 16 bitlik ve 32 bitlik büyük işlemcilerin giriş ve çıkışlarındaki yükü azaltmak ve denetlemek amacıyla çok hızlı ve ucuz bir çözüme ihtiyaç duyulduğu için geliştirilmiştir.
Çok geniş bir ürün ailesinin ilk üyesi olan PIC16C54 bu ihtiyacın ilk meyvesidir. PIC işlemcileri RISC benzeri işlemciler olarak anılır.
PIC16C54 12 Bit komut hafıza genişliği olan 8 bitlik CMOS bir işlemcidir.18 bacaklı dip kılıfta 13 I/O bacağına sahiptir ve 20 Mhz osilator hızına kadar kullanılabilir. 33 adet komut içermektedir. 512 byte program epromu ve 25 byte RAM`i bulunmaktadır. Bu hafıza kapasitesi birçok insanı güldürmüştür sanırım ama bir risc işlemci olması birçok işin bu kapasitede uygulanmasına olanak vermektedir.
PIC serisi tüm işlemciler herhangi bir ek bellek veya giriş/çıkış elemanı gerektirmeden sadece 2 adet kondansatör, 1 adet direnç ve bir kristal ile çalıştırılabilmektedir. Tek bacaktan 40 mA akım çekilebilmekte ve entegre toplamı olarak 150 mA akım akıtma kapasitesine sahiptir. Entegrenin 4 Mhz osilator frekansında çektiği akım çalışırken 2 mA stand-by durumunda ise 20uA kadardır.
PIC 16C54 ‘un mensup olduğu işlemci ailesi 12Bit core 16C5X olarak anılır. Bu gruba temel grup adı verilir. Bu ailenin üyesi diğer işlemciler PIC16C57, PIC16C58 ve dünyanın en küçük işlemcisi olarak anilan 8 bacakli PIC12C508 ve PIC 12C509’dur.
Interrupt kapasitesi ilk işlemci ailesi olan 12Bit Core 16C5X ailesinde bulunmamaktadır. Daha sonra üretilen ve Orta sınıf olarak tanınan 14Bit Core- 16CXX ailesi birçok açıdan daha yetenekli bir grup işlemcidir.
Bu ailenin temel özelliği interrupt kapasitesi ve 14 bitlik komut işleme hafızasıdır. Bu özellikler Pic’i gerçek bir işlemci olmaya ve karmaşık işlemlerde kullanılmaya yatkın hale getirmiştir. PIC16CXX ailesi en geniş ürün yelpazesine sahip ailedir. 16CXX ailesinin en önemli özellikleri seri olarak devre üstünde(ICSP) dahi programlanmasıdır. Bu özellik PIC16C5x de epey karmaşıktı , paralel programlanabiliyordu interrupt kabul edebilmesi, 33 I/O,AD Converter, USART, I2C, SPI gibi endüstri standardı giriş çıkışları kabul edecek işlemcilere ürün yelpazesinde yer vermesi.
PIC 16CXX ailesinin amatör elektronikçiler arasında en çok tanınan ve dünyada üzerinde ençok proje üretilmiş, internetin gözdesi olan bireyi PIC16C84 veya yeni adıyla PIC16F84 dur.
PIC 16F84 un bu kadar popüler olması onun çok iyi bir işlemci olmasından ziyade program belleğinin Eeprom - Elektrikle silinip yazılabilen bellek -olmasından kaynaklanmaktadır. Seri olarak dört adet kabloyla programlanması da diğer önemli avantajıdır. Bugüne kadar amatörce bir işlemciyle uğraşmış herkesin en büyük sıkıntısı eprom veya eprom tabanlı işlemcileri programladıktan sonra UltraViole ışık kaynağı ile silip tekrar programlamaktır. Bu çok zahmetli ve bir amatör için ekipman gerektiren yöntem olmustur. Evde üretilmesi zor olan özel bir programlayıcı da madalyonun diğer yüzüdür.
PIC16F84 amatörler tarafından internette en bol programlayıcısı bulunan işlemcidir herhalde. Ben şu ana kadar 50 den fazla PC ve MAC tabanlı evde yapabileceğiniz programlayıcıya rastladım. Eprom silmek diye birşey zaten söz konusu değil zira eeprom belleği programlayan programlayıcı devre 1 saniye içinde aynı belleği silebilmektedir. Bu özellik size çok hızlı ve defalarca deneyerek program geliştirme avantajını getirmektedir ki bu amatör elektronikçi için bulunmaz bir nimettir. Bu denemeleri yaparken işlemciyi devrenizden sökmeniz dahi gerekmez. Bu tip programlamaya ICSP -In Circuit Serial Programming- denmektedir.
Amatör bir elektronikçi PIC16F84 ile Program geliştirmek için aşağıdaki ekipmana ihtiyaç duyacaktır:
PIC16F84
Windows tabanlı PC
ASCII Editör (Örneğin Windows-Notepad)
MPASM Assembler
Programlayıcı/silici
Programlayıcı için yazılım
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)
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)
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) = 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) = 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 önce CNT = 0x01, Z =0
İşlemden sonra CNT = 0x00, Z =1
PIC Komutları 2
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 £ k £ 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
Kodlama : 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
(Ç)alıntıdır
PIC Serisi mikroişlemciler MICROCHIP firması tarafından geliştirilmiş ve üretim amacı çok fonksiyonlu logic uygulamalarının hızlı ve ucuz bir Mikroişlemci ile yazılım yoluyla karşılanmasıdır.
PIC’in kelime anlamı -PERIPHERAL INTERFACE CONTROLLER- Giriş Çıkış işlemcisidir. İlk olarak 1994 yılında 16 bitlik ve 32 bitlik büyük işlemcilerin giriş ve çıkışlarındaki yükü azaltmak ve denetlemek amacıyla çok hızlı ve ucuz bir çözüme ihtiyaç duyulduğu için geliştirilmiştir.
Çok geniş bir ürün ailesinin ilk üyesi olan PIC16C54 bu ihtiyacın ilk meyvesidir. PIC işlemcileri RISC benzeri işlemciler olarak anılır.
PIC16C54 12 Bit komut hafıza genişliği olan 8 bitlik CMOS bir işlemcidir.18 bacaklı dip kılıfta 13 I/O bacağına sahiptir ve 20 Mhz osilator hızına kadar kullanılabilir. 33 adet komut içermektedir. 512 byte program epromu ve 25 byte RAM`i bulunmaktadır. Bu hafıza kapasitesi birçok insanı güldürmüştür sanırım ama bir risc işlemci olması birçok işin bu kapasitede uygulanmasına olanak vermektedir.
PIC serisi tüm işlemciler herhangi bir ek bellek veya giriş/çıkış elemanı gerektirmeden sadece 2 adet kondansatör, 1 adet direnç ve bir kristal ile çalıştırılabilmektedir. Tek bacaktan 40 mA akım çekilebilmekte ve entegre toplamı olarak 150 mA akım akıtma kapasitesine sahiptir. Entegrenin 4 Mhz osilator frekansında çektiği akım çalışırken 2 mA stand-by durumunda ise 20uA kadardır.
PIC 16C54 ‘un mensup olduğu işlemci ailesi 12Bit core 16C5X olarak anılır. Bu gruba temel grup adı verilir. Bu ailenin üyesi diğer işlemciler PIC16C57, PIC16C58 ve dünyanın en küçük işlemcisi olarak anilan 8 bacakli PIC12C508 ve PIC 12C509’dur.
Interrupt kapasitesi ilk işlemci ailesi olan 12Bit Core 16C5X ailesinde bulunmamaktadır. Daha sonra üretilen ve Orta sınıf olarak tanınan 14Bit Core- 16CXX ailesi birçok açıdan daha yetenekli bir grup işlemcidir.
Bu ailenin temel özelliği interrupt kapasitesi ve 14 bitlik komut işleme hafızasıdır. Bu özellikler Pic’i gerçek bir işlemci olmaya ve karmaşık işlemlerde kullanılmaya yatkın hale getirmiştir. PIC16CXX ailesi en geniş ürün yelpazesine sahip ailedir. 16CXX ailesinin en önemli özellikleri seri olarak devre üstünde(ICSP) dahi programlanmasıdır. Bu özellik PIC16C5x de epey karmaşıktı , paralel programlanabiliyordu interrupt kabul edebilmesi, 33 I/O,AD Converter, USART, I2C, SPI gibi endüstri standardı giriş çıkışları kabul edecek işlemcilere ürün yelpazesinde yer vermesi.
PIC 16CXX ailesinin amatör elektronikçiler arasında en çok tanınan ve dünyada üzerinde ençok proje üretilmiş, internetin gözdesi olan bireyi PIC16C84 veya yeni adıyla PIC16F84 dur.
PIC 16F84 un bu kadar popüler olması onun çok iyi bir işlemci olmasından ziyade program belleğinin Eeprom - Elektrikle silinip yazılabilen bellek -olmasından kaynaklanmaktadır. Seri olarak dört adet kabloyla programlanması da diğer önemli avantajıdır. Bugüne kadar amatörce bir işlemciyle uğraşmış herkesin en büyük sıkıntısı eprom veya eprom tabanlı işlemcileri programladıktan sonra UltraViole ışık kaynağı ile silip tekrar programlamaktır. Bu çok zahmetli ve bir amatör için ekipman gerektiren yöntem olmustur. Evde üretilmesi zor olan özel bir programlayıcı da madalyonun diğer yüzüdür.
PIC16F84 amatörler tarafından internette en bol programlayıcısı bulunan işlemcidir herhalde. Ben şu ana kadar 50 den fazla PC ve MAC tabanlı evde yapabileceğiniz programlayıcıya rastladım. Eprom silmek diye birşey zaten söz konusu değil zira eeprom belleği programlayan programlayıcı devre 1 saniye içinde aynı belleği silebilmektedir. Bu özellik size çok hızlı ve defalarca deneyerek program geliştirme avantajını getirmektedir ki bu amatör elektronikçi için bulunmaz bir nimettir. Bu denemeleri yaparken işlemciyi devrenizden sökmeniz dahi gerekmez. Bu tip programlamaya ICSP -In Circuit Serial Programming- denmektedir.
Amatör bir elektronikçi PIC16F84 ile Program geliştirmek için aşağıdaki ekipmana ihtiyaç duyacaktır:
PIC16F84
Windows tabanlı PC
ASCII Editör (Örneğin Windows-Notepad)
MPASM Assembler
Programlayıcı/silici
Programlayıcı için yazılım
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)
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)
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) = 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) = 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 önce CNT = 0x01, Z =0
İşlemden sonra CNT = 0x00, Z =1
PIC Komutları 2
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 £ k £ 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
Kodlama : 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
(Ç)alıntıdır