Ir ao conteúdo
  • Cadastre-se

Memoria do PIC16F877


LEOPUENA

Posts recomendados

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 --> BCF PCLATH,3 / BCF PCLATH,4

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

Ainda estava com uma pulga atras da orelha, e como nunca desisto dei uma pesquisada e consegui entender, e encontrei outras maneiras de fazer isso.

;maneira 1 de fazer rotina de chamada distante

; pagina zero

;________________________________________________________________

lcall rotina_b; chama a rotina_b

lgoto $+3; ao retornar acerta o contador de programas automaticamente

btfsc flag,3; se não tivesse a linha anterior daria pau no programa nesta linha(porque? Só a micrhocip pode responder);

;continução do programa

.

.

.

pagina 1,2 ou 3 (A rotina pode estar em qualquer página de programa)

rotina_b;

lgoto $+3; assegura que não haverá falha ao entrar na rotina

.

.

.

lgoto $+3; saida segura da rotina

return;

;________________________________________________________________

;maneira 2

pagesel rotina_b; prepara o contador se houver necessidade de desvio

btfsc flag,3; chama a rotina condicional ao flag,3

call rotina_b; se flag,3 é um chama a rotina_b

lgoto $+3; corrige ao retornar o contador,e não causa nenhum problema

;..não houver desvio condicional

;continução do programa

.

.

;______________________________________________________________

; maneira 3

;rotina de desvio

lgoto rotina_b; chama a rotina_b em qualquer página

;continuação do programa

.

.

.

;______________________________________________________________

;maneira 4

pagesel rotina_b;

btfsc flag,3; chama a rotina condicional ao flag,3

goto rotina_b; se flag,3 é um chama a rotina_b

.

.

.

;______________________________________________________________

obs:

a proxima depois de qualqer teste de bit tipo btfss ou btfsc não deve ser

a instrução"lgoto $+3",pois ela gera 3 linhas ocultas e dará problemas no programa,pois as intruções btfss e btfsc executa a primeira ou segunda linha

após,por isso deve´se utilizar a instrução pagesel + rotina a ser chamada em página distante.

RESUMINDO:

LCALL ROTINA X

;PÁGINA 1

.

.

.

;PÁGINA 2

ROTINA X

LGOTO $+3

.

.

.

RETURN

;---------------------------------------------------------------------------------------------------

.

.

.LGOTO ROTINA Y

;PÁGINA 3

.

.

.

;PÁGINA 4

ROTINA Y

LGOTO $+3;

.

.

.

LGOTO ROTINA K; PARA QUALQUER PÁGINA;

fonte

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...