PIC Mimarisi – Özel Fonksiyon Yazmaçları

PIC mimarisini incelemeye ve datasheet okumaya devam ediyoruz. Şimdiye kadar mikrodenetleyicinin blok diyagramını ve bellek birimlerini gördük. Mikrodenetleyicinin çalışmasında önemli rolü olan özel fonksiyon yazmaçlarını datasheet üzerinden anlatarak devam ediyoruz. Lütfen bu yazıyı okurken bir yandan da 16F84A datasheetini açın ve takip edin. Böylelikle bir datasheeti nasıl okumanız gerektiğini öğrenmiş olacaksınız.

STATUS (DURUM) Yazmacı 

Bu yazmaç bellek ve işlemci çekirdeği ile alakalı durum bitlerini içermektedir. Aritmetik ve mantık işlemlerini yaparken sıfır ve elde (carry) bayrak bitleri bu yazmaçta bulunduğundan Assembly dilinde program yaparken sürekli ihtiyacımız olacaktır. Şimdi yazmaca kısaca bakalım ve bitlerini açıklayalım.

Datasheete baktığımızda yazmacın her bir bitinin durumuna göre işlevleri liste olarak verilmiştir. Mikrodenetleyici üzerinde birçok anahtarı bulunduran bir cihaz gibi karşımıza çıkmaktadır. Fakat anahtarları açıp kapatmak yerine bunu yazılımsal olarak yapmaktayız. Bu anahtarlar ise buradaki bitlerdir. IRP ve RP1 bitleri kullanım dışı olup “Maintain as ‘0’ ” olarak belirtilmiştir. Yani bu bitleri sıfır yapmak ve dokunmamak gereklidir. Şimdi sonraki  bit açıklaması üzerinden nasıl anlamamız gerektiğini anlatalım.

Burada “bit 5” olarak belirtilen 5 numaralı bittir. 8-bitlik mikrodenetleyici kullandığımız için yazmaçlar 8 bit olacaktır. Bu 8 bitlik yazmaçlarda 0-7 numaralı bitler olur ve her zaman sağdan itibaren sıralanır. Yani en soldaki bit 7 numalı bit (MSB) en sağdaki bit ise (LSB) 0 numaralı bittir. “bit 5” deyince RP0 olarak adlandırılmış bite geliriz. Bu biti üretici bu şekilde adlandırmıştır. Bu bitin bit konumunu (0b0010000) değil de adını (RP0) bilmek programlamada işimizi kolaylaştırabilir. Çünkü derleyicilerde başlık dosyalarında bu adlandırmalar sabit olarak tanımlanmıştır.

Burada RP0’ın yazmaç bölüm seçimi bitleri olduğu ve doğrudan adreslemede kullanıldığı yazmaktadır. 01 yaparsak Bank 1’i seçmiş oluruz 00 yaparsak ise Bank 0’ı seçmiş oluruz. Görüldüğü gibi anlaması çok zor değildir. Eğer temel bilgi öğrenilirse datasheet okumak zor olmayacaktır.

Bu durum yazmacında TO adında zaman aşımı biti bulunmaktadır. Bu bitin üzerindeki çizgi bu bitin terslenmiş (inverted) olduğunu işaret etmektedir. Normalde olumlu sonuç 1 olmakla olurken terslenmiş durumda 0 olmaktadır. Burada da 0 durumunda WDT zaman aşımının gerçekleştiği bilgisini alırız. PD biti de aynı şekilde normalde TO biti gibi 1 konumunda olup SLEEP yani uyku komutu işletildiğinde 0 konumuna gelmektedir. Bu bitler mikrodenetleyicinin durumu hakkında bilgi almamızı sağlamaktadır. Aynı bir laptopun ışıklarında olduğu gibi olsa da burada yazılımsal olarak bitleri okuruz.

Z biti “Sıfır” biti olup ALU’nun yaptığı işlemlere göre sıfır sonucu elde edildiğinde “1” konumuna gelmektedir. Bu sıfır biti aritmetik ve mantıksal işlemlerde çok işimize yaramaktadır.

DC biti ise basamak elde biti olarak görev yapmaktadır. Bazen Half Carry olarak da adlandırılır. Yani 8 bitlik veri hücresinde dördüncü bitten itibaren taşma yaparsa 1 durumu yapmazsa 0 durumuna geçer. Borrow yani çıkarma işlemindeki ödünç için de kullanılıp ters sonuç vermektedir.

C biti ise yine elde biti olup bu sefer 8 bitlik veriye göre çalışmaktadır. Örneğin 200 ile 200’ü topladığımızda 255 sınırından taşacağı için 255 değeri üzerindeki değer yazdırılacaktır. 255 değeri ise Carry bitinde belirtilip elde olarak bize gelmektedir. Bunu ikilik sayı aritmetiğinde daha rahat görebiliriz.

Burada bu bitlerin görevleri burada anlattığımız gibi uzun anlatılmayıp kısaca kendileri tanıtılmıştır. Hiç bilmeyen biri için anlaşılması zor olmaktadır. Bunun için bunları diğer bilgilerle harmanlayıp anlatacak kitapların ve eğitimin olması gereklidir. Yine de dijital elektroniği ve bilgisayar mimarisini teorik olarak iyi bilen birisi için anlaşılması zor gelmeyecektir.

OPTION (SEÇENEK) Yazmacı

Bu yazmaç Status yazmacından sonra önemli yazmaçlar arasında yer almaktadır. Bu yazmaç mikrodenetleyici hakkında çeşitli ayar verilerini barındırmaktadır. Yazmacın şemasına bakalım ve bitlerini açıklayalım.

Burada yazmacın şemasının hemen altında her bitin görevi sırayla verilmiştir. Çok ağır bir İngilizce ile uzunca yazmadığı için aslında bakıp kolayca öğrenebilme imkanımız vardır. Bu bitlerin üzerinde yazan R/W ibaresi Read/Write anlamına gelmektedir. Yani hem okunup hem yazılabilen bitler olduğunu anlarız. Bazı bitler sadece yazılabilir bazı bitler ise sadece okunabilir.  Şimdi bu bitlerin açıklamasını verelim ve ne anladığımızı anlatalım.

Aslında anlaması oldukça kolaydır. RBPU bitinin üzerindeki çizginin tersleme anlamına geldiğini söylemiştik. Yani bu bit yanlış iken doğru, doğru iken yanlıştır. Bu durumda 1 olduğu zaman PORTB’nin dahili pull-up dirençleri devre dışı bırakılmaktadır. Eğer 0 olursa etkinleştirilmiş olur. INTEDG biti ise kesme kenar seçim biti olarak görev yapmaktadır. Yani 1 olduğunda yükselen kenarda 0 olduğunda ise düşen kenarda kesmeye götürülür. Bu bizim kararımıza bırakılmıştır. TMR0 için saat kaynağı seçme bitini ise T0CS biti olarak görmekteyiz. İstenirse RA4 ayağından harici saat girişi verilebilir ya da 0 yapılarak CLKOUT yani işlemci saati ile beslenebilir. Geri kalan ayar bitlerinin ise yine zamanlayıcı ile alakalı olduğunu görüyoruz. Mikrodenetleyicinin çevre birimleri oldukça fakir olduğu için tek bir yazmaca tüm ayarlar sıkıştırılmıştır. Daha ileri seviye bir denetleyicide bu birimler için ayrı ayrı yazmaçlar yer alacaktır.

TMR0 8 bitlik bir sayaç yazmacına sahipti. Bu sayaç saat çeviriminde birer birer artar fakat nasıl artacağına dair bir ayar biti vardır. Bu da T0SE bitidir. Burada RA4 ayağına uygulanan sinyalin düşen kenarda mı yoksa yükselen kenarda mı algılanacağı bu bit vasıtasıyla seçilir.

Mikrodenetleyicinin içinde bir adet de ön derecelendirici bulunmaktadır. Bu ön derecelendirici (prescaler) WDT ya da Timer0 modülüne tayin edilebilir. WDT için 1, Timer0 için ise 0 yapmamız gereklidir. PS2 ve PS0 bitleri ise ön derelendiricinin bölme değerini belirlemeye yaramaktadır. Bunları önceki yazılarımızda ayrıntılı olarak anlattığımız için bildiğinizi varsayarak ön derecelendirici, zamanlayıcı, pull-up nedir diye anlatmıyoruz.

INTCON Yazmacı

Mikrodenetleyicilerde genellikle kesme ayarlarının olduğu özel yazmaçları görürüz. INTCON yazmacı da kesmelerin etkinleştirilmesi ve yürütülmesi ile ilgili denetim ve bayrak bitlerini içermektedir.

Burada GIE biti kesmelerin etkin veya devre dışı olmasıyla ilgili bir bittir. Bu biti bir yaptığımızda genel olarak kesmeler açık olur ve sıfır yaparsak bütün kesmeler devre dışı olur. Bu biti bir yapmamız bütün kesmeleri etkinleştirdiğimiz anlamına gelmemelidir. Biz burada kesme yürütmeyi etkinleştiririz. Şimdi hangi bitin hangi kesmeye denk geldiğini sırayla yazalım.

EEIE : EEPROM yazma tamamlandığında yürütülecek kesmenin etkinleştirme biti.

TOIE : Timer0 zamanlayıcısı taştığında yürütülecek kesmenisin etkinleştirme biti.

INTE : RB0/INT Dış kesme etkinleştirme biti

RBIE : RB Port değişiminde yürütülecek kesme etkinleştirme biti

TOIF, INTF, RBIF ise ilgili kesmelerin bayrak bitleridir. Bunlar yazılım tarafından sıfırlanmalıdır. Kesmenin yürütülüp yürütülmediğini buradan öğrenmekteyiz.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

 

 

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.