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ü

A4 Tech Oscar X7 the system cannot locate the object specified Hatasının Çözümü

KTU Mikroişlemciler Dersi 2014 Vize Çözümleri