Que tal Yuhe,
Bueno hay aqui dos problemas, el primero es que el pin GPIO.2 tiene la funcion de INTOSC/4, es decir; ese pin tiene que estar configurado como puerto, de lo contrario el pin lo que hace es sacar una señal cuadrada de 1MHz. Eso se hace forzando el bit 0 del registro OSCCAL. Pero aqui tambien esta el otro problema. El registro OSCCAL sirve para poner el reloj interno a la frecuencia correcta de 4MHz, lo que no se hace de forma automatica.
Leyendo el datasheet me di cuenta que el valor de calibracion se encuentra en la ultima dirección de memoria del micro, mediante una instruccion MOVLW XX donde ese XX es el valor de calibracion para OSCCAL. Esto significa que hay que tomar ese valor de XX para cargar el valor de calibracion. Luego tenemos que forzar el bit 0 del registro OSCCAL a que sea 0. Para lograr esto vas a tener que hacer uso del lenguaje ensamblador.
@ DEVICE MCLR_OFF
'@ DEVICE intrc_osc Esta directiva no se usa ya que el micro no tiene otras opciones de oscilador. Por lo que puede eliminarla
asm
ANDLW 0FEh ;Enmascara el bit 0; para forzarlo a que contenga un valor 0
MOVWF OSCCAL ;Carga el valor de la calibracion y habilita el puerto GPIO.2 como puerto.
endasm
ESPERA:
pause 1000
high GPIO.2
pause 1000
low gpio.2
goto esperA
Olvidaba algo, como he de suponer ya has grabado el microcontrolar varias veces, lo que significa que tal vez has borrado tambien el contenido (MOVLW XX) de la ultima direccion de programa. Esto es mas critico ya que ahora vas a tener que buscar la forma de calibrar el micro. De acuerdo con el datasheet, siempre se debe leer el micro antes de borrarlo para respaldar ese MOVLW XX de la ultima direccion. De lo contrario lo perderas.
Saludos,
Elreypic.