BANK1 BANK2 olayını bir türlü anlayamadım

Başlatan kostebek, 22 Ocak 2008, 20:35:25

kostebek

Merhaba arkadaşlar daha önce Freescale MCU08 model işlemcilerini programlamıştım. Şimdi PIC 'e geçiyim dedim.

ASM ile kodlamaya başlıyorum ama BANK1 BANK0 muhabbetini bir türlü anlayamadım. nerelerde kullanıyoruz. Kullanma sebebimiz nedir? neyi temsil ediyor.

Teşekkür ederim bu arada ilginiz için Ayrıca bir program yazdım örnek
;====led_yak_son===22.01.2008======
;======Erhan Harmankaya============
	LIST P=16F628A
	INCLUDE "P16F628A.INC"
	__CONFIG  _INTRC_OSC_NOCLKOUT &_WDT_OFF &_PWRTE_ON &_MCLRE_ON  &_BODEN_OFF &_LVP_OFF &_DATA_CP_OFF &_CP_OFF
;==================================

		ORG h'00'
TANIMLAMALAR
		CLRF PORTB
		BANKSEL TRISA
		MOVLW h'FF'
		MOVWF TRISA
		CLRF TRISB
		BANKSEL PORTA
BASLA
		BTFSC PORTA, 1
		GOTO BASLA
		BSF PORTB, 0
TEST_RA2
		BTFSC PORTA, 2
		GOTO TEST_RA2
		BCF PORTB, 0
		GOTO BASLA
		END
;===================================



derlediğimde  HEX dosyasını oluşturuyor ama bir hata veriyor. Şu şekilde:

Sizce Problem nedir. Sonuçta SUCCEED  yazıyor ama anlama veremedim.

Teşekkürler...
Alıntı YapClean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F628A "led_yak_son.asm" /l"led_yak_son.lst" /e"led_yak_son.err"
Message[302] C:\USERS\KOSTEBEK\DESKTOP\LED_YAK_SO\LED_YAK_SON.ASM 13 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\USERS\KOSTEBEK\DESKTOP\LED_YAK_SO\LED_YAK_SON.ASM 14 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Loaded C:\Users\kostebek\Desktop\led_yak_so\led_yak_son.COD
BUILD SUCCEEDED: Tue Jan 22 20:26:45 2008

murbay

PORT'ların giriş yada çıkış tanımlamaları için TRIS kayıtçılarına gerekli bilgilerin yüklenmesi gerekir. Giriş için 1, çıkış için 0. Örneğin porta'nın 2. bitini çıkış olarak atamak için TRISA kayıtçısına Binary olarak b'00000100' bilgisi yüklemeliyiz. PIC'in belleğinin 2 adet ram modülünden(bank) oluştuğunu düşünün. Bu modüllerin ilki bank0, ikincisi bank1'dir. TRIS kaydedicisi Bank1'dedir. PORTA ve PORTB ise Bank0 dadır. Bu nedenle TRIS kaydedicisine ulaşmak için BSF STATUS,5 komutu ile Bank1'e geceriz atamamızı yaptıktan sonra BCF STATUS, 5 komutu ile Bank0'a geçeriz. Status kayıtçısınının 5. ve 6. bitleri bank seçme bitleridir.

Programı birde böyle dene
TANIMLAMALAR
     CLRF PORTB
     BSF STATUS,5
     MOVLW h'FF'
     MOVWF TRISA
     CLRF TRISB
     BCF STATUS,5
BASLA
     BTFSC PORTA, 1
     GOTO BASLA
     BSF PORTB, 0
TEST_RA2
     BTFSC PORTA, 2
     GOTO TEST_RA2
     BCF PORTB, 0
     GOTO BASLA
     END
Açıklayıcı olun, gizemli yazmak maharet değildir...

ete

Elinizde 2 adet hafıza entegresi olduğunu düşünün ve bunların aynı adreslerde bilgi alıp verdiğini varsayın. Her bir entegreyi kullanabilmenin yolu o entegreye ait enable bacağıdır. Yani hangisini aktif yaparsanız ona ait adresleri kullanabilirsiniz.
İşte bank seçme bunun gibi bir olaydır. Bank seçerek aslında chip seçmiş olursunuz.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

setas

herhangi bir problem yok. assembler mesaj veriyor işlem yaptığın adrese
geç diye zaten sende banksel direktifiyle gerekli adreslemeyi yapmışsın.
16 serisinde böyle angaryalar var.

MURSEL

daha önce 0,1 ,2,3, kullandım pic in ram alamında komutla erişilen alan
pic normalde ilk olarak bank 0kullanıyor
ihtiyac duyarsanan 1 kullamırsın

cenkishan

pic mimarisinde bank 0 ve bank 1vardır.bank1 de pic te kullandıgın giris cıkıs portlarını ayarlarsın.bsf status,5  (banksel komutu ilede yapılabilir daha kolay geliyor)bank1 gectin buton okursun mesala portb 5. portundan  ilk once program basında o portb 5. portunu ayarlarsın.port giris cıkıs ayarı bittimi bank sıfıra donersin bunu sadece programın basında bir kez yaparsın.sonra register bankına gecip registerleri istedigin gibi kullanabilirsin.bazen yaptıgım olur port azlıgından  aynı portu giris cıkıs olarak ta kullanabilirsin.buna su an girme kafan daha cok karısmasın.
Bir bit olsam dolaşsam C de byte byte

kostebek

arkadaşlar çok güzel anlatmışsınız ya. Gerçekten teşekkür ederim. Cevaplarınız için :)

Eren Eraslan

valla işin içinden çıkamamıştım şu bankların sağolun varolun :D
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

Pyrodigy

Alıntı yapılan: kostebek - 22 Ocak 2008, 20:35:25
derlediğimde  HEX dosyasını oluşturuyor ama bir hata veriyor. Şu şekilde:
Sizce Problem nedir. Sonuçta SUCCEED  yazıyor ama anlama veremedim.
Teşekkürler...
Derlerken çıkan 302 aslında bir hata kodu değil uyarı mesajıdır. Uyardığı adres satırında kullandığın Macro için doğru adreste olup olmadığı konusunda seni uyarır. Eğer bu uyarıları görmek istemiyorsan(benim gibi) başlangıç tanımlamalarına şunu yazabilirsin.
errorlevel -302		;suppress "not in bank 0" message

örnek ;
list p=16f877A		;list directive to define processor
#include <p16f877A.inc>	;processor specific definitions
errorlevel -302		;suppress "not in bank 0" message

gibi..
Persistance is the name of the game in this business....

taneryilmaz

Alıntı yapılan: ete - 22 Ocak 2008, 21:16:17
Elinizde 2 adet hafıza entegresi olduğunu düşünün ve bunların aynı adreslerde bilgi alıp verdiğini varsayın. Her bir entegreyi kullanabilmenin yolu o entegreye ait enable bacağıdır. Yani hangisini aktif yaparsanız ona ait adresleri kullanabilirsiniz.
İşte bank seçme bunun gibi bir olaydır. Bank seçerek aslında chip seçmiş olursunuz.


Çok zama bende takılıyordum bu hafıza örneği çok açıklayıcı olmuş teşekkürler