MSP430 ile Assembly Uygulamaları

launchpad_logo

Merhaba,

Bu konuda MSP430F5529 ile Assembly ile bazı uygulamalar yapacağız. Bunlar genel olarak çok yapılmak istenen ram bölgesindeki en büyük ve en küçük sayının bulunması, 32 bitlik sayıların toplama işlemi, ram bölgesindeki bazı sayıları ram in farklı bir bölgesine taşımak gibi uygulamalar olacaklardır. Daha fazla konuyu uzatmadan örneklerimize geçelim. Yapılacak tüm uygulamalarda R5 registeri indexli adresleme için kullanılmıştır. İlk olarak en basit örnek olan ram bölgesindeki 16 adet sayının farklı bir bölgeye taşınmasından başlayalım. Bu uygulamada 2400h ile 2410h adresleri arasındaki 16 adet 8 bitlik sayıyı 16 bitlik gruplar halinde başka bir yere kopyalayacağız.

Bu yazılımdaki “incd” komutunu “inc” ile değiştirirsek kopyalama işlemini 8 bit olarak yapar. Ancak bu durumda “cmp” komutut ile yaptığımız kıyaslamayı #20h a göre yapmalıyız. Çünkü kıyaslamamız gereken 32 sayı olmuştur.

Şimdi RAM bölgesindeki en küçük ve en büyük sayıyı bulma uygulamlası yapalım. Ram bölgesinde 2400h ile 2410h arasındaki sayılar için arama işlemini gerçekleştirelim. Burada iki register belirledik. Bir tanesi R6, diğeri R7. Bulduğumuz en küçük sayıyı R6 registerine, en büyük sayıyı ise R7 registerine yazacağız. Ancak burada ufak bir detay olarak küçük sayıyı bulmak için negatif sayılarda arama yapacağız. Çünkü pozitif bir sayıdan negatif bir sayıyı çıkartırsanız daha büyük pozitif bir sayı bulursunuz ki bu da yanlış değer elde etmenize sebep olur. Bu yüzden de negatif sayı için kıyaslama yapılacaksa ayrı bir yerde yapmamız gerekli.

Burada kullanılan “tst” komutu parametre olarak aldığı sayıyı bir teste tabi tutar. Bu test sonucunda eğer negatif bir sayı ise negatif bayrağını setler. Bu yüzden MSP430 için bir sayının negatif olup olmadığını anlamadaki kolay yöntemlerden biridir. Sıraki örneğimizde 1′ den 5000′ e kadar olan sayıların toplamını ele alacağız. Bildiğiniz üzere MSP430′ daki register’ ler 16 bitlik ve 1′ den 5000′ e kadar olan sayıların toplamı 16 bitlik adres bölgesinde taşmaya sebep olacaktır. Bu taşan değeride düzgün şekilde bir yerde saklamazsak toplama işleminden yanlış sonuç elde ederiz.

Bu yazılım sonunda ram bölgesindeki iki kısma bakmalıyız. 2400h ve 2402h değerlerine. Toplamın sonucunda elde edeceğimiz sayılar şu şekilde olacaktır. 00BE, C5E4 bu sayıyı 10′ luk tabana çevirirsek 12 502 500 sayısını elde ederiz ki bu sayı ardışık sayıların toplamı formülü ile elde edilen sayıdır. (5000 * 5001 / 2 = 12 502 500) Bir sonraki uygulamada iki adet 32 bitlik sayıyı toplayalım.

32 bitlik sayıların toplanmasında önce 16 bitlik LSB kısmı sonra diğer 16 bitlik MSB kısmı elde ile toplanır. Elde ile toplamadaki amaç LSB kısmından gelen eldeyi de toplama dahil edebilmek. Böylece toplama işlemini doğru yapmış oluruz. Ayrıca MSB’ lerin toplamından gelen eldeyi de farklı bir yerde toplamak gerekir.

Değerlerin düzgün görünmesi için msp430f5529 için olabildiğince alt alta getirmeye çalıştım. Burada son olarak dikkat edilmesi gereken son eldeyi toplayacağımız ram bölgesini başta sıfırlamamız gerekir. Sıfırlamazsak toplama sonucumuzu yanlış elde ederiz.

Bu konuda vereceğim örnekler bu kadardı.

İyi çalışmalar dilerim…

 

Add a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir