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ü

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