Tanju Taşçılar, 17 Mayıs 2002
doc mpl006-170502
Önceki konular izlendiğinde, bir projeyi oluşturmayı ve onu adım adım çalıştırmayı
görürüz. Burada ise işlemcinin içinde neler olup bittiğini göreceğiz. Bu konuda da önceki
konularda kullandığımız spi.asm ile ilgili projeyi kullanacağız. MPLab'ı çalıştırıp
spi projesini başlattıktan sonra aşağıdakileri izleyebilirsiniz.
Bu konuda Debug araç çubuğundaki 'Modify Window' ve 'Add New Watch Window' butonlarını
kullanacağız.
Bu butonlardan ilki olan Watch butonu ile görüntülemek istediğimiz yazmaç ve benzeri
alanların listesini oluştururuz. Bu listeye daha sonra ek yapabilir veya istediğimiz kısımları
çıkarabilir veya görüntülenmekte olanların özelliklerini değiştirebiliriz. Bu buton ile
açılan 'Watch Window' biz program içinde gezinirken sürekli olarak güncellenir. Daha önceki
konularda gördüğümüz adım adım ilerlemelerde, her adımda değişenleri gözlemleyebiliriz. Son adımda
değişen kısımlar kırmızı olarak gösterilir.
İkinci buton ise değiştirme butonudur. Bu buton yardımı ile açılan pencerede yazmaçları
görüntüleyebilir ve değiştirebiliriz. Bu pencerenin bir kullanım alanı da işlemcinin portlarına
dışarıdan uygulanan lojik seviyelerin değiştirilebilmesidir. Bu arada söylemeden geçemeyeceğim,
bu işlem aslında çok daha kolay erişilebilecek başka bir birim aracılığı ile gerçekleştirilmeliydi.
Ancak MPLab yazarları bunu değiştirme yoluna, en azından bugüne kadar, gitmediler.
İlk butona, 'Add New Watch Window' butonuna tıkladığımızda Şekil-1'deki pencere açılır. Burada
w (küçük w) değişkenini seçersek, izleme penceremize PIC'in w yazmacını eklemiş oluruz.
Tabii Add butonuna tıkladığımızda.

Şekil-1
Bu işlem sonucunda arkada açılmış olan 'Watch - 1' penceresinde Şekil-2'deki gibi w
yazmacı belirir. Burada H'FF' ile görüntülemenin hex formatında yapıldığı belirtilmektedir.
Bu format değiştirilerek binary veya decimal yapılabilir. Ayrıca çok daha farklı görüntüleme
şekilleri de bulunmaktadır.

Şekil-2
Buna ek olarak en çok görmek isteyeceğimiz port değerini izleme penceremize ekleyelim. Bunun
en kolay yolu Watch-1 penceresi aktif halde iken Insert tuşuna basmamızdır. Bu durumda Add
Watch Symbol penceresi açılır. Bu pencerede Symbol: bölümüne büyük harflerle GPIO yazalım.
Unutmayalım MPLab varsayılan olarak harf büyüklüklerine hassastır. GPIO ise büyük harflerle
tanımlanmıştır. Bu işlemden sonra bu sefer Add butonuna değil de Properties butonuna tıklayalım.
Bu durumda karşımıza Properties penceresi gelir. Bu pencerede görüntülemek istediğimiz şeyin
ne şekilde görüntüleneceğine ilişkin çeşitli seçenekler bulunmaktadır. Biz GPIO'yu binary olarak
görmek için Format bölümünde Binary seçeneğini aktif hale getirelim. Ok tuşu ile Watch-1
penceresine GPIO'yu binary olarak eklemiş oluruz. Daha başka istediğimiz değişkenleri de
ekleyebiliriz. Bundan sonra Add Watch Symbol penceresini kapatabiliriz.

Şekil-3
Bu durumda Şekil-3'teki izleme penceresini elde ederiz. Program üzerinde daha hiçbir işlem
yapmadığımız için işlemci reset konumunda bekler durumdadır. Bu konumda da GPIO'nun tamamı
giriş konumundadır. Dikkat edersek GP3 yani GPIO'nun 3. biti 1, diğerleri 0'dır. GP3 aslında
reset girişidir ve MPLab bunu öntanımlı olarak 1 kabul eder. Bütün bitler giriş olduğu için
programın varsaydığı değerler görüntülenmektedir. Yani bu durumda reset hariç bütün girişler
dışardan 0 ile sürülmektedir.
GPIO ve diğer işlemcilerde PORTx'lerin dışardan sürülmesinde MPLab girişler için dışardan
sürülmeyi, çıkışlar için ise çıkış yazmaçlarındaki değerleri geçerli kabul eder. Yani bir
port biti giriş ise bu bite karşılık gelen giriş değeri geçerlidir. Port biti çıkış ise,
MPLab'ın giriş değeri ne olursa olsun çıkış yazmacına yazılan değer geçerlidir.
Şimdi izleme penceremize A_Reg yazmacını hex, S_Reg yazmacını binary ve S_Counter
sayıcısını da decimal olarak ekleyelim. Önceki konularda yaptığımız şekilde Reset ve Run
komutlarını kullanarak Main_Loop etiketinde duralım. (Eğer Main_Loop'ta durma noktası yoksa
ekleyin.) Bu durumda simulasyon sırasında değişkenleri izleyelim.

Şekil-4
INCF A_Reg,F satırı işlendikten sonra Şekil-4, Şekil-5 haline gelir. Burada Bu satırın
işlenmesi sonucunda H'00' olan A_Reg yazmacının değerinin istenildiği gibi bir artırıldığını
ve sonucun da A_Reg yazmacına yazıldığını görürüz. A_Reg H'01' olmuştur ve bu işlem son adımda
gerçekleştirildiği için de kırmızı olarak görüntülenmektedir.

Şekil-5
Program ise Şekil-6'da görünen yere gelmiştir.

Şekil-6
Sıradaki komut satırı BCF D_Ltc, GPIO üzerinde değişiklik yapacaktır. D_Ltc, programın
başında tanımlanmıştır ve 74HC595'in latch girişine bağlıdır. GPIO'nun 0. bitidir. Şekil-5'te
görüleceği gibi bu bit 1 konumundadır. Step butonu ile bu komutu işlediğimizde bu bitin 0
olduğunu görürüz. Biz işlemlerimize devam ettikçe Watch_1 penceresindeki değerlerin uygun
olarak değiştiğini izleriz. Bu şekilde ilerleyerek tekrar CLRWDT satırına geldiğimizde duralım.
Eğer bir turu tamamladıktan sonra durmuş iseniz A_Reg yazmacının değeri hala H'01' olacaktır.
Sıradaki komut yine bu yazmacı bir artırıp yerine yazacak olan INCF A_Reg,F komutudur. Bu
durumda iken Watch_1 penceresinde A_Reg'in bulunduğu satırın başındaki bu yazmacın değeri olan
0E üzerine gelip bir kere tıklayarak cursoru buraya yerleştirelim. Bundan sonra çift tıklayalım.
Modify penceresinin açıldığını görürüz. Burada adress bölümünde 0E ve Data-Opcode bölümünde
01 değeri bulunmaktadır.

Şekil-7
Data-Opcode'daki 01 değerini EF yapalım ve Write butonuna tıklayalım. Watch_1 penceresinde
A_Reg'e karşı gelen değerin EF olduğunu görürüz. Aynı zamanda bu satır kırmızı olmuştur. Benzeri
şekilde diğer değişkenler de değiştirilebilir.

Şekil-8
Pin giriş değerlerinin değiştirilmesi.
Pin girişlerinin değiştirilmesi Modify penceresi aracılığı ile yapılırken pinlerin MPLab
tarafından kullanılan özel isimleri kullanılır. Bunlar RA0..RA7, RB0..RB7 ve benzeri şekilde
RC, RD, RE ve diğer portlar için Rpb, (p port harfi, b port biti) ve GPIO için de GP0..GP7
şeklindeki değerlerdir. Bu pin isimleri Modify penceresinde Address bölümüne yazılır.
Kullanılan harflerin hepsi büyük harf olmalıdır.