Página 1 de 2
probelemas com paginação PIC16f883

Enviado:
09 Out 2009 10:25
por fabio_souza
alguem sabe como mudar a paginação da memória de programa?
Estou com o seguinte problema:
Estou desenvolvendo um código em assembly, no entanto a pagian 0 da memória de progrma já encheu. Quando chamo uma rotina que está na pagina 1 o controlador se perde, ou seja, ele está buscando um endereço na pagina zero. Como faço para mudar de pagina consequentemente ir para o endereço correto na memória.

Enviado:
09 Out 2009 10:51
por Sergio38br
Vc esta usando um call ou Lcall??
[ ]'s
Sergio

Enviado:
09 Out 2009 11:44
por fabio_souza
Uso o comando call, o pic não possui lcall.

Enviado:
09 Out 2009 12:35
por diogo_18sp
enta caro amigo ja passei por este problema , vou passar uma explicaçao espere que ajude.
Quando é necessário acessar uma parte do programa que está em outra página, antes de escrever os comandos “CALL” ou “GOTO”, você precisa dizer em que página essa parte do programa está. Essa indicação é feita pelo registrador “PCLATH”. O mesmo acontece quando você quer retornar à página em que foi chamado pelo “CALL”. Primeiro indica a página, e em seguida escreve “RETURN”.
Para acessar a página 0 --> CLRF PCLATH
Para acessar a página 1 --> BSF PCLATH,3
Para acessar a página 2 --> BSF PCLATH,4
Para acessar a página 3 --> BSF PCLATH,3 / BSF PCLATH,4
Segue um exemplo:
ORG 0x0000
INICIO
.
.
.
BSF PCLATH,3
GOTO APAGA
.
.
.
ORG 0x0800
APAGA
BCF PORTC,0
CLRF PCLATH
RETURN
END

Enviado:
09 Out 2009 13:11
por vtrx
use 'DEFINES' QUE FICA FACIL;
...
#DEFINE PAG0 CLRF PCLATH
#DEFINE PAG1 BSF PCLATH,3
#DEFINE PAG2 BSF PCLATH,4
...
E assim por diante.
INICIO
...
PAG0
FAÇA ALGO
PAG1
FAÇA ALGO LÁ..
PAG0
VOLTA DENOVO
....

Enviado:
09 Out 2009 13:14
por ze
por ser novidade talvez não tenha ouvido falar ainda. Mas foi desenvolvida agora há pouco - nos anos 1970 - uma tal de linguagem C. Talvez lhe possa evitar tais infortúnios.
abç

Enviado:
09 Out 2009 13:34
por fabio_souza
lellis escreveu:por ser novidade talvez não tenha ouvido falar ainda. Mas foi desenvolvida agora há pouco - nos anos 1970 - uma tal de linguagem C. Talvez lhe possa evitar tais infortúnios.
abç
DO QUE ADIANTA USAR A LINGUAGEM C E NÃO SABER O QUE O COMPILADOR FAZ PRA VC?
E BEM PRATICO É RAPIDO E FACIL PROGRAMAR EM C PORÉM HÁ MOMENTOS QUE NÃO É POSSÍVEL....
OBRIGADO PELA DICA!!!!!!

Enviado:
09 Out 2009 13:36
por fabio_souza
VALEU vtrx PELA AJUDA
FÁBIO

Enviado:
09 Out 2009 13:37
por fabio_souza
diogo_18sp escreveu:enta caro amigo ja passei por este problema , vou passar uma explicaçao espere que ajude.
Quando é necessário acessar uma parte do programa que está em outra página, antes de escrever os comandos “CALL” ou “GOTO”, você precisa dizer em que página essa parte do programa está. Essa indicação é feita pelo registrador “PCLATH”. O mesmo acontece quando você quer retornar à página em que foi chamado pelo “CALL”. Primeiro indica a página, e em seguida escreve “RETURN”.
Para acessar a página 0 --> CLRF PCLATH
Para acessar a página 1 --> BSF PCLATH,3
Para acessar a página 2 --> BSF PCLATH,4
Para acessar a página 3 --> BSF PCLATH,3 / BSF PCLATH,4
Segue um exemplo:
ORG 0x0000
INICIO
.
.
.
BSF PCLATH,3
GOTO APAGA
.
.
.
ORG 0x0800
APAGA
BCF PORTC,0
CLRF PCLATH
RETURN
END
VALEU JÁ ESTÁ RODANDO PERFEITAMENTE!!!!!

Enviado:
09 Out 2009 14:20
por vtrx
Será que é por isso que vc acha qua não é possível usar mais de um dispositivo na linha I2C?
O Homem ja foi na lua e voltou....
Alias,mostre para mim como seria em linguagem C para ver a sua dificuldade.
Fabio,não se irrite com os comentarios,não seja mais um cara..seja 'o'cara e não use um Dual Core para piscar leds ou escrever em LCD.
tem gente aqui no forum que esta agarrado em tópicos pois não consegue implementar rotinas eficazes em C,quando leio esses tópicos fico imaginando..'po é tão facil resolver isso!..em ASM ,é claro...
Pelo menos poderia ser um código em C com rotinas em ASM,aí sim bateria palmas.
Se precisar algo em ASM manda Email.

Enviado:
09 Out 2009 15:33
por proex
fabio_souza escreveu:Uso o comando call, o pic não possui lcall.
Lcall é uma diretiva do compilador. O Mplab reconhece essa instrução e ajusta o ponteiro de programa para a referida pagina automaticamente.
Além disso, vc pode usar a diretiva Pagesel que fará a mesma coisa automaticamente.
.

Enviado:
09 Out 2009 15:48
por Andre_Cruz
Aprendi em assembler e depois C (Hitech), que permite escrever em assembler, mesclar as duas linguagens resolta em programas rapidos, consomem pouco espaço e de menor complexibilidade.
Fabio usa a diretriz do compilador PAGESEL que o proex disse e seje feliz.
Abraço

Enviado:
09 Out 2009 18:11
por diogo_18sp
a linguagem c pode ser bem mais facil do que o asm , mas digo eu programo em basic , c e asm ainda tenho preferencia em asm pois acho que consigo visualizar melhor o meu circuito por isso nao menosprezo o asm...

Enviado:
09 Out 2009 18:18
por fabim
adoro ver esses barracos..
Proximo!!

Enviado:
09 Out 2009 18:24
por vtrx
Pra vc ver fabim,bombardearam do nada o tópico,mas a verdade sempre prevalece..auauauauaauua