merhaba arkadaşlar hocamız 16f877 ile bir soru sordu ben mantını anlıyamadım bana yardımcı olursanız çok sevinirim.
soru şöyle,pıc 16f877 nin RAMın 20h ve 39h adresleri arasına 0 dan 15 kadar sayıları yazan sonra bu sayıları toplayıp sonucu 40h adresine yazan ASM programını yazınız.
yardımlarınız için şimdiden teşekkürler
Klasik her hocanın sorduğu dolaylı adresleme sorusu:
Eğer pic öğrenme niyetiniz varsa Dolaylı adresleme önemli bir konudur , öğrenmeniz gerekir , yok ben sadece dersten geçeyim yeter derseniz buyrun kodların bir kısımı :
Ram'de 0x20h adresinden 0x39h adresine kadar byte'lara 0'dan 25' kadar sayıları yazan program :
Kod:
clrf sayac
movlw 0x20
movwf [B]FSR[/B]
AAA movf sayac,w ; w = sayac
movwf [B]INDF[/B] ; adres(n)=w
incf sayac ; sayac = sayac + 1
incf [B]FSR[/B] ; adres(n+1)
movlw 39 ; Son adrese gelindi mi?
subwf [B]FSR[/B],w
btfss STATUS,Z
GOTO AAA
; burdan sonra toplama işlemi
hocam cevabınız için teşekkür ederim pıcı öğrenmek istiyorum ama bu konuya hiç bakmamıştım daha önce bişey daha sorabilirmiyim peki bu sayıların hepsini toplayıp nasıl 40h adresine yazıcam ?
evet aslında ileri bir konu fakat bir döngü içinde çoklu işlem yapmamızı sağlıyor.
Gördüğünüz gibi Dolayılı Adresleme FSR ve INDF yazmaçları ile yapılıyor. İşlem yapmak istediğimiz yazmacın adresini FSR'nin içine yazdıktan sonra INDF yaptığımız işlem FSR'nin içine yazılmış olan adrese yapılıyor. Daha sonra FSR'i değiştirip tekrar tekrar yapıyoruz. FSR istediğimiz değere gelince döngüden çıkılıyor.
Toplama işlemi de aynen bu şekilde olacak ilk elemanın adresi FSR'ye yüklendikten sonra içeriği W yazmacına alınıp incf FSR ile bir sonraki elemana geçilecek , w sayısı 2. elemanın üstüne eklendikten sonra döngü başına gidilecek , artık kaç kere yapılacaksa.
Nette çok kaynak var ama maalesef derli toplu kaynak hiç yok , olanlar da ingilizce kaynaklar. Birkaç assembly kitabı almanızı öneririm ve nette kaynak için de picproje.org tabiki