AVR Programlama 1: Merhaba Dünya 2
Şuana kadar anlattığımız kısımda kafanızda bir şeylerin şekillenmeye başladığını düşünüyorum. Her ne kadar ilk başlarda program satırları insana anlamsız kelimeler ve semboller gibi gelse de aslında her bir parçanın bir bütünü oluşturduğunu zamanla anlayacaksınız. Eğer anlamadığınız bir nokta var ise geriye dönün ve nerede hata yaptığınızı sorgulayın. Temel elektronik ve temel seviye C programlama bilginizi gözden geçirin.
Bit Maskeleme
Bit maskeleme portlara girilen değerleri istediğimiz gibi kontrol etmeye olanak sağlar. Bunu basit bir örnek ile açıklayalım;
PORTC=0x01;
PORTC=0X04;
Burada iki farklı satır görüyoruz. İlk satırda PORTC' ye ikilik tabanda 1 değeri yazılıyor. İkinci satırda ise PORTC'ye ikilik tabanda 100 değeri yazılıyor. Buradan anlaşıldığı üzere PORTC'nin mevcut değerinin üzerine ikinci değer yazılıyor. Buda geçerli durumun değişmesine neden oluyor. ATmega328P'de bir port 8 bitten oluşur ve genellikle 8 bitin aynı anda durumunu değiştirmek istemeyiz. İşte bit maskeleme dediğimiz kavrama bu durumda ihtiyaç duyuyoruz. Basit bir VEYA işlemi ile yazacın tüm değerlerini değiştirmek yerine sadece istediğimiz biti mantık 1 seviyesine yükseltebiliriz.
PORTC = PORTC | 0X04;
Yazdığımız kod parçacığı PORTC'nin değerini ikilik tabanda 100 değeri ile VEYA işlemine tabi tutuyor ve çıkan sonucu PORTC'ye yazıyor. Bu sayede sadece istediğimiz bitin durumunu değiştirmiş oluyoruz. Bu işlemi gerçekleştirmenin birden fazla yolu vardır;
PORTC|=0x04;
PORTC|=(1<<PORTC2);
PORTC|=(1<<2);
Bitleri mantık 1 seviyesine yükseltirken yukarıdaki yolu kullandık. Mantık 0 seviyesine düşürürken daha farklı bir yaklaşım sergileyerek soruna çözüm bulacağız.
PORTC=PORTC& ~0X04;
Yapılan işlem 0x04'ün DEĞİL'ini alır. PORTC'nin değeri ile VE işlemine sokar ve değeri tekrar PORTC'ye yazar. Bu sayede istediğimiz biti mantık 0 seviyesine düşürebiliriz. Bu işlem için de farklı yaklaşımlar mevcuttur.
PORTC&=~0x04;
PORTC&=~(1<<PORTC2);
PORTC&=~(1<<2);
Yapmış olduğumuz işlemler mantıksal işlemler olup internette yada herhangi bir bilgisayar bilimleri kitabında bulunabilecek bilgilerdir. Bitwise anahtar sözcüğüyle arama yaparsanız net bilgilere ulaşabilirsiniz. Elektronik ile yakından alakadar olduğumuzu düşünürsek Morris Mano'nun Sayısal Tasarım isimli kitabı yararlı olacaktır. Ayrıca Gökhan DÖKMETAŞ'ın kişisel internet sitesinden konuyu daha detaylı inceleyebilirsiniz.
Anlatılanları test etmek için Microchip Studio'nun simülatör özelliği kullanılabilir. Bu özelliğe erişmek için Debug sekmesi altından Start Debugging and Break seçeneğine tıklanır.
![](https://static.wixstatic.com/media/ff3887_8c3371521edd41229fddd1df578ae9c3~mv2.png/v1/fill/w_980,h_446,al_c,q_90,usm_0.66_1.00_0.01,enc_auto/ff3887_8c3371521edd41229fddd1df578ae9c3~mv2.png)
Açılan pencereden Simulator seçeneği işaretlenir ve simülasyon tekrar başlatılır. Simülatör başlatıldığnda aşağıdakine benzer bir ekran karşınıza çıkacaktır.
![](https://static.wixstatic.com/media/ff3887_82832b9e44954114bb2cec308e5446d2~mv2.png/v1/fill/w_980,h_526,al_c,q_90,usm_0.66_1.00_0.01,enc_auto/ff3887_82832b9e44954114bb2cec308e5446d2~mv2.png)
Sağ taraftaki pencereden istediğiniz yazacın içerisini görüntüleyebilirsiniz. Step over seçeneği kullanılarak programın adım adım işletilmesi sağlanabilir.
![](https://static.wixstatic.com/media/ff3887_a677f08f51e949818e2e0a04b9dbb69b~mv2.png/v1/fill/w_82,h_28,al_c,q_85,enc_auto/ff3887_a677f08f51e949818e2e0a04b9dbb69b~mv2.png)
Programı adım adım işlettiğiniz zaman yazaçlardaki değişim sağ alt taraftan gözlemlenebilir. Denemelerinizi yaparken bekleme fonksiyonlarınızı kaldırmayı unutmayın. Bu fonksiyonlar işlemciyi uzun saat vuruları boyunca meşgul ettiğinden simülatörde doğru çalışmazlar. Simülatör ortamı size tam hakimiyet vermese de programlarınıza göz atmak için faydalı olabilir.
Watch1 ekranını kullanarak programa eklediğiniz değişkenlerin değerini gözlemleyebilirsiniz. Buraya yazdığınız değişken isimlerinin içerikleri bu pencerede görüntülenir. Özellikle gerçek zamanlı hata ayıklama yaparken büyük kolaylık sağlar.
İlkin niyetim G/Ç'lar ile ilgili olan kısmı ikin parça olarak yazmaktı. İhtiyaçtan dolayı bu bölümün kalan konularını üçüncü yazıda anlatma ihtiyacı hissettim. Serinin sonraki yazısında portlardan gelen verilerin nasıl okunacağını ele almaya çalışacağım.
Unutmayın, bol bol pratik yaparak anlattıklarımı pekiştirebilirsiniz.
Comments