PIC 16F877 ile 16F877A arasındaki farklar

16f877_vs_16f877aMicrochip firmasının ürettiği PIC16F877 ve PIC16F877A mikro denetleyicileri arasında kullanım ve programlama açısından pratik bir fark yok. 16F877A, 16F877’nin iyileştirilmiş versiyonudur ve 16F877’de çalışan programlar hiçbir değişiklik yapılmadan A sürümünde de çalışır.

Yine de aralarındaki farkları bilmekte fayda var. Farkları şöyle sıralayabiliriz:

  1. A’da kullanılan EEPROM’un erişim hızı ve ömrü daha yüksek (1 Milyon silme/yazma).
  2. A’da fazladan birçift analog karşılaştırıcı daha eklenmiştir.
  3. A’ya ICSP desteği gelmiştir.
  4. A’nın ninimum çalışma voltajı 5mV azalarak 3.65v‘a düşmüştür.
  5. A’da EEPROM’a yazılırken 4-word uzunlukta bloklar halinde yazılır. (önceki tek word uzunluğundaydı)

Bunlar kabaca gözümüze çarpan farklar. Esasında 87X’den 87A’ya gelinceye kadar çok daha fazla donanımsal iyileştirme yapılmıştır ancak bunların çoğu uygulamada bir fark oluşturmayacak türdendir. Yine de tüm farkları incelemek isterseniz buraya göz atabilirsiniz.

PIC Basic’de PORTA’yı çıkış olarak kullanmak

PIC16F877 üzerinde denemeler yaparken PORTA‘yı her yazışımda sıfırlandığını gördüm. Örneğin aşağıdaki kod çalıştıktan sonra yanık kalan tek led PORTA.1‘e bağlı olandı. PORTA‘nın herhangi bir bitine yeni bir değer yazıldığında diğer tüm bitler sıfırlanıyordu. Diğer taraftan PIC16F877‘nin diğer portları aynı davranışı sergilemedi.

Device = 16f877
PortA.0 = 1
PortA.1 = 1
End

Henüz yeni olduğum PIC programlama konusunda araştırma yaparken buradaki güzel örneği gördüm. Tam da aradığım kod. PORTA‘yı çıkış olarak süren bir örnek. Kodda görebileceğiniz gibi All_Digital = True PBP direktifi ile tüm çıkışlar dijital giriş/çıkışa hazır hale getiriliyor. Bu direktif makine kodunda binde 2’lik gibi artışa neden oldu. All_Digital direktifi ile PORTA’nın sıfırlanması sorunu ortadan kalktı.

Device = 16f877
All_Digital = True
PortA.0 = 1
PortA.1 = 1
End