Çok Basit ASM Sorularım

Başlatan veliusta, 24 Kasım 2014, 04:07:24

veliusta

ASM Bilmiyorum. Yarında Vizem var. 4-5.soruların cevabını biliyorum diğerlerini bulmam gerekiyor.


CLR

@veliusta

Saat gece 4'te yazdığın için sana kıyak geçeyim, muhtemelende ihtiyacın var, öğrencilik günlerim aklıma geldi, Çok uzun zaman oldu F84 ve pic asm ile uğraşmayalı ama sorular kolay.
Gözden kaçırdığım bişey yoksa hepsi aşağıdaki gibi olacak.

1-) Programın başında (mesela 6. soruda görünüyor, bu sorular eski sorularsa hocan sormuş ama kendi de cevaplamış)
2-) TRISA
3-) STATUS registeri

6-) Sırasıyla yazıyorum
    ; işlemci olarak Pic16F84 kullanılacak
    ; pic16f84'ün registerlerini programa dahil et
    ; Program counter sıfırla
    ; BASLA etiketine dallan

7-) ; Bank1'e geç
    ; PortB'nin tümü çıkış
    ; W register = 0xFF
    ; TRISA=0xFF, PortA nın tümü giriş

8-) Buton algılama için kullanılabilir veya PORTA'nın 0. pini logic 0 oluncaya kadar bekler 

9-) MOVLW 0xDD        ; W=0xDD
    MOVWF Temp        ; Temp adında bir register kullanıyoruz ve Temp=0xDD oldu
AZALT
    DECFSZ Temp,F     ; Temp'i bir azalt 0 ise GOTO'yu atla
    GOTO AZALT          ; Temp=0 değil, AZALTA gir

10-) Soruda eksik var, SAYAC başlangıç değeri belli değil, Eğer başlangıçta 0 ise (0xDD=221 olduğundan)
       INCF SAYAC,F       ; 221*1=221
       MOVLW h'DD'       ; 221*1=221
       SUBWF  SAYAC,W ;221*1=221
       BTFSS  STAUS,Z    ;220*1+2 = 222
       GOTO  TEKRAR      ;220*2=440   

       Toplam=221*4+441=1325

11-) Dahili osc frekansı dediği için, 1Mhz için 1 cycle 1us olur, 1325us sürer 
     
Knowledge and Experience are Power

veliusta

Teşekkürler hocam, Sınavım yarın.
Yanlız 8. soru yanlış gibi. Kitapta BTFSS: Registerin istenilen bitini test et ve bu bit 1 ise 1 komut atla yazıyor. Kaynak: Mersin Ü. Microdenetleyici PDFsi.

mir_as82

Evet veliusta . 1 olunca movlw h'FF' komutu işletilir.
Yani A portunun 0.pini lojik high olunca program iki alt satıra geçer.

veliusta

Hocam birde şu sorulara bakabilirmisin? 9 ,8 ve 4.ü yaptım. Diğerlerini çözemedim.


sadogan


2- TrisA ... h'FF'
3- Status ... carry

veliusta

#6
SAYAC  EQU   H'0C'     Bu komutta  Neden 12 Sayısı var. Tüm kaynak ve örneklerde böyle. ikinci bir sayaç yapmak istediğinde   H'0D' yapıyor.

                                   EQU ne işe yarıyor.

sadogan

0C hexadecimal bir sayı onlu sayı sisteminde karşılığı 12
EQU eşitliyor.
SAYAC  EQU   H'0C'     sayaç değişkeninin adresini h'0C' ye eşitliyor
işlemcinin h'0H' adresindeki 1 byte lık ram SAYAC diye anılıyor.

sayment

#8
Assembly komutlarının hepsi İngilizce kısaltmalarından ibaret. Komutları ezberlemek yerine ne yapman gerekiyorsa o işlemin İngilizce karşılığını hatırlamak daha verimli olur.
Mesela yukarıdaki BTFSS komutu: "bit test file, skip if set" anlamına geliyor. Bu açıklamarı Microchip'in assembly derleyici kataloğundan yada mikrodenetleyicinin datasheetinden bulabilirsin. Buradan listeye ulaşabilirsin:
http://www.micro-examples.com/pics/087-PIC16-SECRET-OPCODE-instructionset.JPG

EQU komutu da "equal"dan geliyor. Denetleyicinin raminde GPR(general purpose register  - genel amaçlı kaydedici) olarak belirtilen hücrelere istediğimiz ismi vermeye yarıyor. 16F84'ün RAM yapısını da buradan görebilirsin:
http://www.electronique-radioamateur.fr/elec/composants/img/PIC-16F84A-Microchip-ram.JPG

7.Soru:
BSF    STATUS,5          ; BANK1'e geç
CLRF    TRISA    ;A portunu komple çıkışyap
MOVLW   H'FF'            ;Working Register'a hex FF değerini yükle
MOVWF   TRISB        ;B portunu komple giriş yap

5.Soru
8Bit yada 1Byte

4.Soru
İki boşluk da 25mA

1.Soru
ORG

2.Soru
1.Boşluk TRISA, 2.boşluk 0xFF

3.Soru
F register'ının 7.biti etkilenir.

6.Soru
GECIKME   MOVLW   h'FF';working registera FF(255) değerini at
   MOVWF   SAYAC; working register içeriğini(FF) SAYAC değişkenine aktar
SAY   DECFSZ   SAYAC,F; SAYAC değişkeni 0 olana kadar 1 azalt
   GOTO    SAY;SAY etiketine dön
   RETURN   ;ana programa dön


veliusta

@sayment 4 ve 5 sorularını yanlış yaptın hocam.
4-) 25mA Sink  - 20mA Source
5-) 14 Bit

sayment

5Doğrudur fakat 4 datasheet'den baktım. Ama 16F84A'nınkine bakmış olabilirm

veliusta

Sınav bitti. Programlama sormadı. Lise seviyesinde bir sınavdı.