Seleção de bancos de memória (migrado)

A série 16 é capaz de endereçar até 512 bytes de memória RAM (interna).
No entanto, devido às limitações arquiteturais (como largura de barramento da memória de programa), somente é possível endereçar diretamente 128 bytes de memória RAM.
Para ter acesso ao restante da memória, utilizam-se bancos de memória, que são selecionados a partir dos bits RP0 e RP1 no registrador STATUS. A organização destes bits é feita da seguinte forma:
RP0 RP1 Banco Endereço
..0.....0........0.......0x000 a 0x07F
..0.....1........1.......0x080 a 0x0FF
..1.....0........2.......0x100 a 0x17F
..1.....1........3.......0x180 a 0x1FF
Por padrão, estes bits são inicializados em 0, o que faz com que o PIC inicie no banco de memória 0.
Sempre que for necessário acessar diretamente um endereço de memória pertence a outro banco, será necessário alterar os bits RP0 e RP1.
Existem duas formas básicas de se fazer isso em assembly:
1 - Utilizando as instruções BCF e BSF para apagar/setar cada um dos bits. Exemplo:
BSF STATUS,RP0
BSF STATUS,RP1
; seleciona o banco 3
2 - Utilizando o macro comando BANKSEL, que instruirá o montador a modificar os bits RPx de acordo com o endereço da variável:
BANKSEL TESTE
; seleciona o banco de memória da variável TESTE
É isso,
No entanto, devido às limitações arquiteturais (como largura de barramento da memória de programa), somente é possível endereçar diretamente 128 bytes de memória RAM.
Para ter acesso ao restante da memória, utilizam-se bancos de memória, que são selecionados a partir dos bits RP0 e RP1 no registrador STATUS. A organização destes bits é feita da seguinte forma:
RP0 RP1 Banco Endereço
..0.....0........0.......0x000 a 0x07F
..0.....1........1.......0x080 a 0x0FF
..1.....0........2.......0x100 a 0x17F
..1.....1........3.......0x180 a 0x1FF
Por padrão, estes bits são inicializados em 0, o que faz com que o PIC inicie no banco de memória 0.
Sempre que for necessário acessar diretamente um endereço de memória pertence a outro banco, será necessário alterar os bits RP0 e RP1.
Existem duas formas básicas de se fazer isso em assembly:
1 - Utilizando as instruções BCF e BSF para apagar/setar cada um dos bits. Exemplo:
BSF STATUS,RP0
BSF STATUS,RP1
; seleciona o banco 3
2 - Utilizando o macro comando BANKSEL, que instruirá o montador a modificar os bits RPx de acordo com o endereço da variável:
BANKSEL TESTE
; seleciona o banco de memória da variável TESTE
É isso,