18F Ram , Bank ve Dolaylı adresleme

Başlatan camby, 31 Ocak 2012, 20:09:48

camby

18f ile access ramde bulunan 8 byte datayı oldugu gıbı bank1in başına kopyalayacağım :

1 - movff kullanmak ıstersem bank degisimini nasıl yapıyoruz ?

2 - bu veri paketini 64 kez peş peşe kopyalayacağım dolayısıyla dolaylı adresleme kullanmam gerekiyor , dolaylı adresleme kullanarak banklar arası işlem yaptıgımda yine bank değiştirmem gerekiyor mu ?

3 - incf fsr0l dedigimde , low fsr taştığında fsrh 1 artış gösteriyor mu ?

Not : hazırladıgım bu data bloklarını da program hafızasına yazmayı planlıyorum ancak o bu konunun dışında

camby

#1
Cevaplar :

1 - movff işime yaramadığından şu an için bu sorunun cevabını aramıyorum.,

2 - Dolaylı adresleme ile her bankta BSR kullanmadan işlem yapılabiliyor. Daha doğrusu FSRxH bank değiştirmeye yarıyor da denebilir.

3 - incf FSRxL , kodunun yerine yeni bir yapı var. Dolaylı adresleme ile işlem yaptıktan sonra FSR adresi otomatik olarak arttırıp azaltılabiliyor. incf FSRxL gibi bir satıra gerek kalmıyor.

Kullanımı şu şekilde : BANK1,BANK2,BANK3 'ü temizleyen kodlar :

LFSR 		FSR0, 100h 		; Bank1'in başlangıç adresini seç
NEXT 		
        CLRF 		POSTINC0 		; Clear INDF register then inc pointer
		movlw		.4			; BANK1-BANK3 temizle
		CPFSEQ		FSR0H			; Bank4'e gelindi mi ?
		
		BRA 		NEXT 			; NO, clear next


burada POSTINC0 , INDF register'ı ile aynı amaçla farklı olarak işlem yaptıktan sonra FSR içeriğini 1 arttırıyor.

movff  POSTINC0,POSTINC1

gibi bir yapı deneyerek BANK1'i BANK2'ye kopyalamaya çalıştım ancak çalışmadı , araya bir "W" koymak gerekebilir : ) .