Použití bank u PIC18 - BSR registr, instrukce s 12b adresou

Jsou u PIC18 stále banky na RAM?
BSR registr to má, podle obrázků v datasheetu to m paměť rozdělenou taky.
Zatím co jsem pochroupal datasheet, tak jsem pochopil že instrukce MOVFF umí pracovat s úplnou 12b adresou na BSR nepotřebuje.

Jak to teda je?

Konkrétně jsem koukal na PIC18F23K22

:arrow_right: administrator: přejmenováno z "Banky u PIC18?"

https://forum.mcontrollers.com/t/16f877a-mi-jiz-nestaci-s-cim-pokracovat-vykonnejsi-model/1253/3

Neměla by taková věc jít snadno vyzkoušet? Když se o to zajímáš, tak píšeš v asm a tam si můžeš proměnnou umístit na libovolné místo. Tak ji dej dál a zkus k ní přístup.

S tím máš pravdu :open_mouth: Odkudkoliv kamkoliv.

Já jsem to zkoušel, normálně mi klasické instrukce movwf zapíše v pohodě do nastavovacích registrů který mají adresu někde od 0xFFF vejš, a do reg. umístěném na adrese 0x100 ne…

Když před napíšu BANKSEL TRISA, tak se mi do BSR zapíše 0x0F
U reg POKUS na adrese 0x100, mi banksel zapíše do BSR 0x01

Nicméně i bez banksel se mi do trisu zapíše pomocí MOVWF TRISA co chci.
POKUS nez určení banky nezapíšu.

Tady mi není jasná ta odlišnost.

BANK 15 je přistupná odkudkoliv. Z BANK 0 aspoň co vím určitě.

Honza3: Aha, tak to lecos vysvětluje. V tom případě mi to je už jasné. Z datasheetu jsem to nějak nepochopil/nevyčetl/přehlídl (nehodící se škrtněte :smiley: )

Díky moc.

Přehlídl :blush: , kapitola 5.3. :smiley:

Tak mi to nedalo. Jedná se sice o PIC18F4620, ale bude to podobné. BANK 15 je přístupná celá z BANK 0, ale z BANK 1 - 14 je sice taky přístupná, ale ne všechny registry. PORTy a TRISy jsou přístupné z každé banky, ale nastavovací registry, např. nastavení I2C, nebo zápis do TMRxL/H pouze z BANK 0 nebo 15.

To jen aby Billy Bob Bean nemusel študovat datasheet :smiley::D:D :open_mouth: :open_mouth:

Já ho študoval, ale blbě, teď jsem se na to kouknul a už to tam vidím. Asi nějaká tmavá chvilka včera.

The Access Bank consists of the first 96 bytes of memory (00h-5Fh) in Bank 0 and the last 160 bytes of memory (60h-FFh) in Block 15.

Dobrý den, je to sice již starší vlákno, ale snad se ještě někdo najde …
S výše uvedeným zřejmě souvisí pojem Access Bank a Access RAM. Můžete mi prosím někdo vysvětlit, o co jde? Tuším, že právě díky existenci Access Bank není zapotřebí používat BSR a banky přepínat “ručně”. Nějak mi ale uniká, jak to funguje.
Díky za ochotu.
Vl.

Teď dělám s PIC18F46K22 a ten má taky 15 bank, z toho 0 a 15 jsou si přístupné navzájem,ale jen BANK 0 do adresy 0x5F a 15 od 0x60.
Co je v bance 0 od adresy 0x60 už bez banksel nepřepíšeš do banky 15 kromě movff reg1,reg2.
Používej registry FSRx jednoduše instrukcí lfsr x,register a nebo pseudoinstrukci banksel register

A jednu radu nakonec. Nepoužívej BSR ale banksel

#DEFINE		LCD_PORT	PORTD

..
..

..
..

	banksel	0			; banka 0
	banksel	LCD_PORT		; banka 15
	movlb	LCD_PORT		; BANKA 3!!!!!

Honzo, díky, ale já jsem se ptal na něco jiného - nerozumím vlastnímu principu Access Bank, jak to prostě funguje nebo proč a k čemu tam vlastně je. Vl.

Access RAM - Přístupná banka s banky 0 je banka 15 od adresy 0x60. Banka 15 pod 0x5F není v RAM. Jsem ti to napsal.

Použití je k tomu, že jsi v bance 0 tak nemusíš při zápisu do SFR se přepínat do banky 15. Opačně to ale nefunguje.
accessram.bmp (61.8 KB)

Jasně, chápu - díky!

Vl.