Buenas,
nada conectar el pic vi que el valor de la última posición era '0C20'. Ahora lo intento poner manualmente en la opción de "Set Manually" y me se me quita el error de OSCCAL INVALID y el valor de la última posición me aparece 'C20'. Hasta ahí correcto. El problema viene cuando cargo el .hex ya que se me borra nuevamente el valor del OSCCAL y pasa a ser FFF.
He ido a probar la solución de indicarlo con el #ORG pero admito que no se cómo ponerlo en el código ni donde. He probado con #ORG 0x2C0 antes el bucle void pero me da fallo en compilación.
Muestro el cuerpo de mi código por si me podeis indicar dónde y cómo escribirlo.
#include<16f526.h>
#device ADC=16 //Los puertos analógicos ahora son digitales (datos=16bits)
#fuses INTRC_IO, NOMCLR, NOWDT //Master Clear pin used for I/O
#use delay(internal=4000000)
//Definimos los pines y cómo los llamaremos a lo largo del programa
#define verde1 PIN_B0
#define rojo1 PIN_B2
#define verde2 PIN_C0
#define rojo2 PIN_C2
void main(){
//Configuración de periféricos
setup_timer_0(RTCC_INTERNAL); //Reloj interno
setup_comparator(NC_NC_NC_NC); //Anular comparadores
//int pulsar;
for (;;) {
}
}
Tienes que hacerlo al revés. Primero abre el hex y luego ponle el valor en Set manually.
Es que eso es como los fuses. No puedes configurarlos en el propio pickit2 o 3, etc antes de importar el fichero hex, si no, cuando importas el hex todo se solapa por lo que hay en el hex.
Como el hex viene con esa posición a 0xff pues se sobreescribe.
Lo del #org tienes que conocer la última posición de flash de tu micro, donde se graba el osccal.
Hazlo mejor con la directiva #ROM, colocada después de los fuses de esta forma:
#ROM int8 0xfffe= {0xcc}
Sustituye el valor 0xcc por tu osccal. y el 0xfffe por la dirección del ultimo byte de tu flash.
Así ese valor irá al pickit directamente asignado desde la compilación y no debería darte mas problemas.
Saludos.