Ana içeriğe atla

KTÜ Mikroişlemciler Dersi Bütünleme Sınavı Çözümü

  Diğer bütün setlemelerin yapıldığı söylendiği için direk olarak interrupt service rutinini yazmaya başlıyabiliriz. İşlemci 4MHz hızında çalıştığından her instruction cycle'nın süresi yani periyodu T=1/F formülünden hesaplandığında T=0,25x10^-6 olduğu bulunur. 3sn lik bir bir darbe içinse 3/0,25x10^-6=12x10^6 cycle gerekmektedir. Tam emin olmamakla beraber dec ve jnz komutlarının her birinin 2 şer cycle da tamamlandığını varsayarsak bize 3 milyon cycle lazımdır.

  3.000.000=2DC6C0h ve 2DC6C0h/F000h=30 olduğuna göre 3sn uzunluğu iç içe iki döngü ile halledilebilir. Dıştaki döngü 30 kere F000 sayısını saydıran içteki döngüyü çevirecektir.


Soru 3

"altprog" ile R4,R5 ve R6 bellekleri temizlenir.


altprog    clr R4
               clr R5
               clr R6

R4 belleğinin içeriği temizlendiği için 0 olduğundan

 240h(R4)=240h olur. Bu işlem şu şekildedir

Eğer R4=01h olsaydı 240h(R4)=241h

Eğer R4=0Ah olsaydı 240h(R4)=24Ah

Eğer R4=01Fh olsaydı 240h(R4)=25Fh biçiminde devam eder.


mov.b 240h(R4),R5 komutu ile tablodaki 240h'ın belleğindeki değer R5 registerına yazılır

R5=1F

sxt komutu;  16 bitlik bir adresteki 8. biti 9 ile 16. bitler arasına yazar. Örneğin diyelim ki R8 belleğinde

R8=0000 0000 1000 0000b sayısı olsun

sxt R8 Dediğimizde R8 belleğindeki 8. bit 1 olduğu için

R8= 1111 1111 1000 0000 olur

R5=1F=0001 1111 ;7. bit 0 yani sxt komutu ile 8 ile 15. bitler arasına yalnızca 0 yazılacaktır

add R5,R6 komutu ile her yeni R5 değeri R6 belleğine toplanarak kaydedilir

inc R4 R4 ü bir arttırı

cmp #04h,R4 ise R4 ün 4 olup olmadığına bakar eğer 4 değilse jnz komutu ile tekrar etiketine geri atlayıp aradadaki işlemleri tekrarlar

  Burada dikkat edilmesi gereken 240h(R4) hesaplanırken R4=4 sonucu hesaba girmez çünkü R4=4 olduğunda cmp #04h,R4 sonucu sıfır olacak ve jnz(jump not zero, sıfır değilse atla) koşulunu karşılamıyacağı için döngünden çıkacaktır. Bu durumda hesaba alınacak bellekler 240h(R4) için 240h,241h,242h ve 243h dür

240h=1Fh=0001 1111

241h=36h=0011 0110

242h=04h=0000 0100

243h=75h=0111 0101

bütün bu sayıların 7 biti sıfır olduğundan sayıların değerinde bir değişiklik olmayacktır. Bu durumda add R5,R6 komutu sırası ile 1Fh, 36h, 04h ve 75h'ı art arda R6 registerı içinde toplayacaktı.

R6=1Fh+36h+04h+75h=CE

ikinci aşamada R6 üç kere rra komutu ile sağa kaydırılmaktadır

CE=1100 1110b

rra R6 = 0110 0111b

rra R6 = 0011 0011b

rra R6 = 0001 0001b=11h

11h R6 registerındaki nihai değerdir. Alt programdan dönerken bellekteki sayı budur.
Beğendiyseniz lütfen soldaki butona tıklayarak +1 leyin

Yorumlar

Bu blogdaki popüler yayınlar

KTU Mikroişlemciler Dersi 2013 Vize 4. Soru Çözümü

2013 S.4 P1 portundan 8 bitlik tamsayılar gelmektedir. P1 portundan interrupt geldiğinde, P1 portunun bir pinine bağlı olmaksızın, herhangi bir bitteki değişimden üretilen interrupt ile, P1 portunun 8 bitlik verisini belleğe bayt bayt kaydeden bit Interrupt servis programı yazılacaktır. Kaydedilecek veriler belleğin 0230h ile 0260h arasında kalan bölge kullanılacaktır. Bu bölgenin (buffer) sonuna gelindiğinde program bu bölgenin başından itibaren devam edecektir. Gerekli ISR’yi yazınız.

KTÜ Mikroişlemciler dersi MSP 430 Programlama eğitimi

  Geliştirmesine devam etmekte olduğum MSP430 eğitimi. Karadeniz Teknik Üniversitesi lisans öğrencilerinin sınava hazırlıklarına yardımcı olması amacı ile yazılmaktadır.

MSP430 LaunchPad ile Assembly Programalaya Giriş - Led İşlemleri

 Bu ilk programda derleyicinin işlemci içerisindeki Flash Memory'e kodumuzu yazması için ihtiyaç duyduğu komutlardan ve MSP 430 Programlama Kiti üzerindeki ledleri yakıp södürecek Assembly programını verip her bir komutun ne için kullanıldığını anlatacağım. Programlama aracı olara IAR Embedded Workbench kullanacağız. Elinizin altında olması gereken dökümanlar MSP430x2xx Family User's Guide (Bundan sonra pdf-1 olarak bahsedilecek) MSP430 G2231 datasheet (pdf-2) olacaktır. Syntax   Programlam yapılırken uyulan düzendir, aşağıdaki gibidir etiket       komut       komut_ayrıntıları Etiket : Program içerisinde ihtiyacımız olduğunda "jmp" (jump) tarzındaki atlama kodları ile program içerisinde istediğimiz bölüme erişmek amaçlı kullanacağımız mihenk taşları olarak düşünebilir. Komut : Bunlar assembly komutlarıdır. Bunların bizim işlemcimizde kullanılabilecek olanlarını komut_ayrıntıları ile birlikt...