ASM Bilmiyorum. Yarında Vizem var. 4-5.soruların cevabını biliyorum diğerlerini bulmam gerekiyor.
(http://1resimyukle.com/images/2014/11/24/51.jpg)
@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
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.
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.
Hocam birde şu sorulara bakabilirmisin? 9 ,8 ve 4.ü yaptım. Diğerlerini çözemedim.
(http://www.1resimyukle.com/images/2014/11/24/2.jpg)
2- TrisA ... h'FF'
3- Status ... carry
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.
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.
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 (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 (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
@sayment 4 ve 5 sorularını yanlış yaptın hocam.
4-) 25mA Sink - 20mA Source
5-) 14 Bit
5Doğrudur fakat 4 datasheet'den baktım. Ama 16F84A'nınkine bakmış olabilirm
Sınav bitti. Programlama sormadı. Lise seviyesinde bir sınavdı.