TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: rtt en 02 de Abril de 2014, 16:49:49

Título: Problemacon PAGESEL en 16F88 con MPLABx
Publicado por: rtt en 02 de Abril de 2014, 16:49:49
Hola a todos,
Mi problema es el siguiente. Estoy utilizando un 16F88 programándolo en asm desde MPLABx, En el proyecto tengo un fichero fuente con el contenido que pongo a continuación, y un fichero 16f88.lnk que contiene las instrucciones para el linker sacado del paquete gnupic. El código es el siguiente.

radix DEC
LIST  P=16F88
radix dec

#define max_flash 0x1000
#define prima_adresa max_flash-100 ; 100 word in size

; Code Protect Off | ? | Debug Off | ? | ? | Low voltaje programing Off | ? | MCLR Reset On | Power On retart OFF |Wadth Dog Off | Oscilador Interno RC
__CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG    _CONFIG2, _IESO_OFF & _FCMEN_OFF

ERRORLEVEL 1, -305

;0000000000000000000000000 RESET 00000000000000000000000000

   ORG     0x0000
        PAGESEL IntrareBootloader
   GOTO   IntrareBootloader

;&&&&&&&&&&&&&&&&&&&&&&&   START     &&&&&&&&&&&&&&&&&&&&&&
;----------------------  Bootloader  ----------------------

   ORG prima_adresa
   NOP
   NOP
   NOP
   NOP
   ORG prima_adresa+4

; PROGRAMA PRINCIPAL

IntrareBootloader

; Inicializacion Puerto B

BANKSEL TRISB               ; BANK 1
MOVLW   b'11010111'         ; RB2 (RX)=input, RB3 (Led)=output RB5 (TX)=output
MOVWF    TRISB

BANKSEL PORTB               ; BANK 0
MOVLW   B'00001000'        ; Activo RB3
MOVWF   PORTB

GOTO     $

La cuestión es que cuando miro desde la utilidad que visualiza la memoria de programa del pic, la instrucción del goto generada tiene una dirección de la primera página, cuando debería estar saltando a la correcta que está en la segunda página segun el PAGESEL.

¿A alguien se le ocurre que puede estar pasando?

Gracias de antemano
Título: Re: Problemacon PAGESEL en 16F88 con MPLABx
Publicado por: BrunoF en 02 de Abril de 2014, 19:35:53
La instrucción GOTO no contiene todos los bits de salto en estos micros, es por ello que haces el PAGESEL, que setea los bits más altos de la dirección a saltar. Es lo que sería un LATCH. Precargas los bits altos de la dirección mediante el PAGESEL y el GOTO carga la parte baja de la dirección. Cuando se ejecuta el salto se utilizan todos los bits mencionados para armar la dirección final de salto, pero en la instrucción GOTO no esperes ver siempre la dirección final a la cual saltará el PC finalmente.

Saludos.
Título: Re: Problemacon PAGESEL en 16F88 con MPLABx
Publicado por: rtt en 03 de Abril de 2014, 03:10:46
Contestada mi pregunta  ;-), muchas gracias.