# Valor OSCCAL del PIC12F508



## jesusbarazartem (Mar 28, 2014)

Hola a todos, escribo este texto para presentarles una duda que tengo con el codigo OSCCAL del PIC12F508.

Estoy tratando de hacer un codigo sencillo de encender y apagar un LED con el pic 12F508, pero al momento de quemar el pic atraves de PICkit me da un error en el valor OSCCAL, realmente soy nuevo en el tipo de PIC, anteriormente he programado PICs16F y no me habia pasado eso!

Este es el Codigo que estoy haciendo (Super sencillo, lo que quiero es que funcione la programadora)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIST P=12F508, r=hex
include <P12F508.INC>

OUT7    EQU 0       ;GP0 QUE ES LA PATA 7

	ORG 0
	CLRWDT
	MOVLW b'11000000'
	OPTION
	MOVLW b'00001000'
	TRIS GPIO
	BCF GPIO,OUT7   ;BORRO LA SALIDA

INICIO

	BSF GPIO,OUT7  ; ENCIENDE EL LED
	BCF GPIO,OUT7  ; AGAPA EL LED		

GOTO INICIO
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Que debo agregar para que pueda quemar en el PIC??
En Proteus funciona normal, pero al momento de pasar el archivo HEX a PICkit y voy a transmitir el codigo al PIC me da ese error.

De antemano gracias por su ayuda!!


----------



## papirrin (Mar 28, 2014)

el valor osccal viene grabado de fabrica, y sirve para calibrar el oscilador, si lo perodiste o borraste, puedes ajustarlo de forma automatica con algunos programadores o armar un circuito que usa la red electrica, deja buscarlo y lo coloco aqui

mira es algo como esto:

http://picprojects.org.uk/projects/recal/recal.htm


----------



## ByAxel (Mar 28, 2014)

Hola
El PIC12F508 tiene configurado el OSCCAL de fábrica, por eso se lee primero la memoria antes de grabar algo, el valor se encuentra en la última parte de la memoria y siempre debe de estar ahí.

Pero es posible recuperar desde el PicKit, ve a Tools > OSCCAL > Auto Regenerate.

Saludos


----------



## jesusbarazartem (Mar 28, 2014)

papirrin ya ByAxel me dijo que lo podia regenerar automaticamente desde PICkit, pero ahora lo que no se es si tengo que colocar algo mas en el codigo, xq de igual forma me sigue dando error cuando voy a escribir el PIC



Cuando le doy auto regenerar valor OSCCAL me dice esto


----------



## papirrin (Mar 28, 2014)

No tengo el pickit, ni uso mucho ASM pero supongo que debes cerciorarte que si este en la memoria el valor de calibracion al grabarlo.



aaahh! si falla la recalibracion automatica debes hacerlo con un metodo manual como el circuito que puse, o comprar otro pic y apuntar el valor en un cuaderno.


----------



## jesusbarazartem (Mar 28, 2014)

jajajaja Por Suerte tengo varios PICs, pero entonces quiere decir que ya tengo 6 PICs que debo recuperar manual  , que hago para que los otros PICs no me pase lo mismo???

Seguro que no tengo que agregarle otra variable en el Codigo? lee el codigo a ver si le falta algo de eso o asi deberia funcionar.


----------



## papirrin (Mar 28, 2014)

> que hago para que los otros PICs no me pase lo mismo???



antes de grabar nada lee el pic y apunta en un cuaderno el valor del osccal, que esta en el ultimo registro de la memoria flash.









> Seguro que no tengo que agregarle otra variable en el Codigo?


segurisimo, puedes escribir ese valor que tienes perdido desde codigo en el registro, pero si no lo sabes da lo mismo


----------



## jesusbarazartem (Mar 28, 2014)

Bueno voy a intentar con otro PIC a ver y luego posteo el resultado.

Mas adelante me falta buscar la forma de recuperar los otros PICs xq no puedo perderlos!

Luego de obtener ese valor de OSCCAL que hago con el??


----------



## papirrin (Mar 28, 2014)

nada solo fijate que al grabar tu pic aparezca el valor del osccal correcto al grabar el pic en esta parte:



pero el error ese que te aparece en el pickit de 0x00000 generalemete aparece cuando esta dañado el pic o hay algo mal conectado. verifica eso.


----------



## jesusbarazartem (Mar 28, 2014)

No, cuando leo el PIC no me sale ningun tipo de codigo, considero que es que no tiene ninguna programacion entonces no tiene nada que mostrar!

Me dice valor invalido

Ahhhhhhhh ok ok listo ya lo tengo!!!



Ahora..... incerto el PIC, Exporto el archivo HEX y le doy grabar a ver?


----------



## papirrin (Mar 28, 2014)

mira estuve viendo el datasheet, y no se si en asm debes escribir ese valor en el registro 05h o lo coloca por default como en basic o en C, por las dudas hazlo desde tu codigo.


----------



## jesusbarazartem (Mar 28, 2014)

Podrias hacer un ejemplo de como escribirias el codigo? sigo sin resolver, me da el mismo error!!


----------



## papirrin (Mar 28, 2014)

no se mucho asm jajajaja

pero a ver... yo intentaria asi:

BCF          03h,5           ; Ve al banco 0
MOVLW        348Ch             ; Pon valor del Osscal que esta en el flash por ejemplo 348C
MOVWF        05h             ; Mueve valor oscal a registro oscall


----------



## jesusbarazartem (Mar 28, 2014)

jajaja bueno el intento vale, creo que entonces quedaria algo asi:
LIST P=12F508, r=hex
include <P12F508.INC>

OUT7 EQU 0 ;GP0 QUE ES LA PATA 7

ORG 0
CLRWDT
MOVLW b'11000000'
OPTION
MOVLW b'00001000'
TRIS GPIO
BCF GPIO,OUT7 ;BORRO LA SALIDA

BCF 03h,5 ; Ve al banco 0
MOVLW 348Ch ; Pon Osscall
MOVWF 05h ; Mueve valor oscal a registro oscall

INICIO

BSF GPIO,OUT7 ; ENCIENDE EL LED
BCF GPIO,OUT7 ; AGAPA EL LED

GOTO INICIO
END


----------



## papirrin (Mar 28, 2014)

si mas o menos pero el 348c solo lo puse como ejemplo, debe ser el que tiene el pic, que no se cual sea, y estaba viendo que el 12f508 solo tiene un banco asi que podria omitirse el bcf 03h,5 pero bueno debe funcionar.

si te sigue marcando error pon una imagen del error.


----------



## jesusbarazartem (Mar 28, 2014)

Osea, ahi deberia ir es el valor del Oscilador?


----------



## papirrin (Mar 28, 2014)

si, el que te dije que leyeras del ultimo registro de la memoria flash


----------



## jesusbarazartem (Mar 28, 2014)

Lo que puedo hacer es probar con el valor que sale en el link que adjuntastes ateriormente, algo asi:

CALL 3FFH ; VALOR DE OSCILADOR
MOVWF OSCCAL ; PARA CALIBRAR

Y listo con eso deberia funcionar, vamos a ver...


----------



## papirrin (Mar 28, 2014)

si pero no es 3ffh porque el 12f508 no llega hasta alla la memoria,  creo que seria 1fh

y deberias ver si en el archivo inc dice algo como:

osccal equ 05h

por eso te puse,como te puse el codigo. se entiende?




```
LIST P=12F508, r=hex
include <P12F508.INC>

VOSC equ 1fh

OUT7 EQU 0 ;GP0 QUE ES LA PATA 7

ORG 0
CLRWDT
MOVLW b'11000000'
OPTION
MOVLW b'00001000'
TRIS GPIO
BCF GPIO,OUT7 ;BORRO LA SALIDA

MOVF VOSC,0 ; Pon Osscall
MOVWF OSCCAL ; Mueve valor oscal a registro oscall

INICIO

BSF GPIO,OUT7 ; ENCIENDE EL LED
BCF GPIO,OUT7 ; AGAPA EL LED

GOTO INICIO
END
```

no seria asi? lo que quiero es apuntar VOSC al registro 1fh


----------



## jesusbarazartem (Mar 28, 2014)

Eso podria funcionar, pero ahora lo mejor de todo es que me esta dando este error:

no me deja exportar archivos nada, no se que fue lo que hice!!

Por los momentos tengo que dejar la oficina, pero seguire posteando los resultados

Gracias por la ayuda y tu tiempo en escribir y tratar de ayudarme, acepta la solicitud y te estare informando de los resultados.

Saludos


----------



## D@rkbytes (Mar 28, 2014)

El procedimiento para recuperar el valor de fábrica de OSCCAL es igual al que se trató por aquí: *Consulta de osccal del 12f629*

Solo que en los 12F508 se encuentra en la dirección 0x1FF y en el 12F509 en la dirección 0x3FF
También existe una locación reservada para un backup de los bits de OSCCAL: 12F508 = 0x204 y 12F509 = 0x404
El programador no borra esas direcciones, pero se pueden borrar por accidente.
Cuando eso sucede, se puede leer esa dirección y obtener el valor de fábrica el cual deberá ser escrito nuevamente en la última dirección de memoria RAM del PIC.

En los PIC12F6XX lo que se encuentra en la última dirección es un RETLW 0xXX
Dónde 0xXX es el valor de calibración para el registro OSCCAL.
Al leer esa dirección se mira algo como esto 3430 (34 = RETLW y 30 el valor para OSCCAL)

En los PIC12F508/509 la lectura encontrada es un MOVLW 0xXX
Aquí se verá algo así por ejemplo: 0C30 (0C = MOVLW y 30 el valor para OSCCAL)

Dirección de Backup de OSCCAL en PIC12F508


Lectura de un PIC12F508 en la dirección 0x1FF


Esta herramienta que yo escribí puede recuperar un valor muy  cercano al valor de fábrica para OSCCAL
*OSCCAL Recovery Tool*

Sin embargo no escribí el programa para un PIC12F508, el cual adjunto aquí en este post.
Este programa funciona a través del puerto serial, pero también se puede hacer uso de un conversor de USB a puerto serial RS-232 como lo es el chip *FT232RL *

Conexión con FT232RL


Usando el programa para recuperar el valor de fábrica para el oscilador.


Así es como obtengo el valor de fábrica para OSCCAL y es el que se vuelve a escribir en la dirección 0x1FF

Nota: aquí se mira un RETLW ya que el programa fue escrito para los PIC12F6XX, pero lo que importa es el valor encontrado, en este caso la lectura correcta de en medio (48 = 0x30)

Suerte.​


----------



## papirrin (Mar 28, 2014)

aaa ok ahora entiendo 

entonces seria asi:

```
LIST P=12F508, r=hex
include <P12F508.INC>


OUT7 EQU 0 ;GP0 QUE ES LA PATA 7

ORG 0

CALL 1FFH  
MOVWF OSCCAL 

CLRWDT
MOVLW b'11000000'
OPTION
MOVLW b'00001000'
TRIS GPIO
BCF GPIO,OUT7 ;BORRO LA SALIDA


INICIO

BSF GPIO,OUT7 ; ENCIENDE EL LED
BCF GPIO,OUT7 ; AGAPA EL LED

GOTO INICIO
END
```

andaba caliente,caliente


----------



## ByAxel (Mar 28, 2014)

wow el tema creció bastante...
Respecto al mensaje ( SE2-USB no tiene Sistema Operativo ), indica que al PIC del grabador se le ha estropeado el firmware... ( motivos = ni idea ) pero se soluciona desde el PicKit con la opción ( Tools > Download Operating System ), es neceario un archivo *.hex que seguramente está en la carpeta de instalación, cargan el archivo y se va a restaurar el grabador.


----------



## D@rkbytes (Mar 29, 2014)

papirrin dijo:


> aaa ok ahora entiendo
> andaba caliente, caliente


Yo diría que tibio, tibio. 

Así sería el código para recuperar el valor de OSCCAL y hacer parpadear un LED con el PIC12F508

```
list    p=12f508
    include    p12f508.inc
    __config    _IntRC_OSC & _WDT_OFF & _MCLRE_OFF

    cblock    0x07
    cnt1,cnt2,cnt3
    endc

    org    0x1FF                ; Vector de reset
    org    0x00                ; Inicio del código

inicio
    movwf    OSCCAL            ; Recuperar el valor de OSCCAL
    movlw    b'11111110'        ; GP0 como salida
    tris    GPIO            


programa
    bsf        GPIO,0            ; Enciende LED
    call    retardo_500ms    ; Retardo de 500ms
    bcf        GPIO,0            ; Apaga LED
    call    retardo_500ms    ; Retardo de 500ms
    goto    programa        ; Bucle infinito a programa

retardo_500ms
;499994 ciclos
    movlw    0x03
    movwf    cnt1
    movlw    0x18
    movwf    cnt2
    movlw    0x02
    movwf    cnt3
retardo_500ms_0
    decfsz    cnt1,f
    goto    $+2
    decfsz    cnt2,f
    goto    $+2
    decfsz    cnt3,f
    goto    retardo_500ms_0
;2 ciclos
    goto    $+1
;4 cicles (incluyendo call)
    retlw    0x00
    end
```
Si te fijas, la forma de leer el valor de OSCCAL es diferente para este PIC.

Saludos.


----------



## papirrin (Mar 29, 2014)

porque esto:


```
org    0x1FF                ; Vector de reset
    goto    inicio
    org    0x00
    goto    config_port

inicio
    movwf    OSCCAL            ; Recuperar el valor de OSCCAL

config_port
    movlw    b'11111110'        ; GP0 como salida
    tris    GPIO
```

no puede ser asi:

```
org    0x1FF                ; Vector de reset
      movwf    OSCCAL            ; Recuperar el valor de OSCCAL
      org    0x00
      movlw    b'11111110'        ; GP0 como salida
      tris    GPIO
```


----------



## D@rkbytes (Mar 29, 2014)

papirrin dijo:


> ¿No puede ser asi?:
> 
> ```
> org    0x1FF                ; Vector de reset
> ...


Actualicé el código mientras escribías porque equivoqué los vectores de inicialización.
No he probado de la forma que mencionas, pero haré una prueba.

En este documento se explican con más detalle datos sobre OSCCAL: *Memory Programming Specification*
También se puede encontrar parte del código que puse en el archivo 12F508TEMP.ASM
Este archivo se encuentra en la carpeta *Code* dentro de las carpetas de instalación de MPLAB
Por ejemplo: C:\Archivos de programa\Microchip\MPASM Suite\Template\Code



Ya realicé la prueba y no funciona de esa forma.
Se escribe por código la dirección 0x1FF con 0x0025
Entonces cuando el programador (WinPic800 el que uso) lee esa dirección, pregunta si se desea sobre escribir el valor 0xXXXX de OSCCAL por el valor 0x0025
Obviamente eso no es lo que queremos, por lo tanto queda descartado y se realiza como mencioné anteriormente.

Saludos.


----------



## jesusbarazartem (Mar 31, 2014)

Ok amigos durante el fin de semana resolvi el problema del Sistema operativo, tal cual como dice ByAxel, y el problema del error con el valor OSCCAL era que la fuente de alimentacion no era suficiente debido a que el Jumper para pasar la informacion a los pines del ZIP estaba mal colocado, le di la vuelta y empezo a funcionar, lo malo es que ahora que ya pude pasar la informacion al PIC cuando lo monto en el protoboard no hace nada, temo que sea por que se halla perdido el valor de OSCCAL, probare con esos que me dicen!

Por otro lado en PROTEUS me esta dando este error:

eso me paso luego de tratar de corregir el porque en el protoboard no hacia nada!

anteriormente estaba funcionando normal, pero ahora no me deja probar el codigo que tenia para el encendido del LED, ya reinicie, cree otra vez el codigo, cree otra vez un nuevo diseño en proteus y nada, no puedo ver la simulacion!


----------



## papirrin (Mar 31, 2014)

no se si sea el caso, eso pasa cuando simulas un pic en proteus pero generas el hex de otro pic. verifica que estes compilando el 12f508


----------



## jesusbarazartem (Abr 4, 2014)

Los problemas para este PIC no han parado para mi.

Al momento de grabar el PIC con el programa PICkit2 hago el procedimiento debido, pero cuando lo monto en el tablero de prueba no tiene nada.

Al parecer tengo un problema al momento de crear el archivo .hex, en efecto.
Verifiqué que cuando estuviera compilando lo estuviera haciendo con la librería correcta correspondiente al PIC12F508 y todo está bien, *porque* realmente cuando paso el código a Proteus tengo que variar las características del PIC *porque* en Proteus no tengo la librería de ese PIC, lo cambio por el 12C508A que me dijeron que es el mismo, pero lo cómico de todo es que *ahí *funciona perfecto, hace todo lo que realmente quiero hacer.

Pero vuelvo a MPLAB cambio la librería y exporto el archivo hex y creo q*ue* *ahí* todo se disuelve, no he podido grabar bien y PIC que funcione!


----------



## papirrin (Abr 4, 2014)

mira compila y graba el codigo de darkbytes.

osea este:

```
list    p=12f508
    include    p12f508.inc
    __config    _IntRC_OSC & _WDT_OFF & _MCLRE_OFF

    cblock    0x07
    cnt1,cnt2,cnt3
    endc

    org    0x1FF                ; Vector de reset
    org    0x00                ; Inicio del código

inicio
    movwf    OSCCAL            ; Recuperar el valor de OSCCAL
    movlw    b'11111110'        ; GP0 como salida
    tris    GPIO            


programa
    bsf        GPIO,0            ; Enciende LED
    call    retardo_500ms    ; Retardo de 500ms
    bcf        GPIO,0            ; Apaga LED
    call    retardo_500ms    ; Retardo de 500ms
    goto    programa        ; Bucle infinito a programa

retardo_500ms
;499994 ciclos
    movlw    0x03
    movwf    cnt1
    movlw    0x18
    movwf    cnt2
    movlw    0x02
    movwf    cnt3
retardo_500ms_0
    decfsz    cnt1,f
    goto    $+2
    decfsz    cnt2,f
    goto    $+2
    decfsz    cnt3,f
    goto    retardo_500ms_0
;2 ciclos
    goto    $+1
;4 cicles (incluyendo call)
    retlw    0x00
    end
```

y verifica que en la direccion que te hemos dicho y redicho este el valor del osccal, si sigue sin funcionar es que es otra cosa.


----------



## jesusbarazartem (Abr 4, 2014)

Ahora si funciona. Este es el código que yo hice:


```
LIST P=12F508, r=hex
include <P12F508.INC>

__config    _IntRC_OSC & _WDT_OFF & _MCLRE_OFF

PATA6    EQU 1            ;GP1 QUE ES LA PATA 6
PATA7    EQU 0           ;GP0 QUE ES LA PATA 7
TIEMPO1  EQU 0X0C
TIEMPO2  EQU 0X0D

    ORG 0X1FF            ;VECTOR DE RESET
    ORG 0X00            ;INICIO DEL CODIGO
    MOVWF OSCCAL
    MOVLW b'11100000'    ;los 0 representan las patas que son de salida y los 1 las patas que se utilizaran de entrada
    TRIS GPIO

    BCF GPIO,PATA7         ;BORRO LA SALIDA
    BCF GPIO,PATA6

INICIO

    BSF GPIO,PATA7      ;ENCIENDE EL LED
    CALL RETARDO    
        
    BCF GPIO,PATA7      ;AGAPA EL LED
    CALL RETARDO            
    
    BSF GPIO,PATA6
    CALL RETARDO

    BCF GPIO,PATA6
    CALL RETARDO

GOTO INICIO
;----------------------------
RETARDO
    MOVLW D'255'
    MOVFW TIEMPO1
    MOVFW TIEMPO2
DECREMENTO
    DECFSZ TIEMPO1
    GOTO DECREMENTO
    DECFSZ TIEMPO2
    GOTO DECREMENTO

    RETURN
;-----------------------------    
END
```

El error estaba en la forma de llamar la variable OSCCAL y la declaración de __config    _IntRC_OSC & _WDT_OFF & _MCLRE_OFF, esta parte no la tenia, aunque no tiene mucho que ver, lo importante es que varié eso y funcionó!


----------



## papirrin (Abr 4, 2014)

me parece que era el MCLR,

en el circuito que armaste tenias la resistencia pullup en el mclr?, por defecto se necesita poner a menos que especificques el MCLR_off.


edito: bueno tambien el oscilador si no tenias fisicamente  el cristal tampoco deberia funcionar., entonces deberias de haber puesto el oscilador interno.


----------



## jesusbarazartem (Abr 7, 2014)

no realmente esa pata no la estoy usando, con esa funcion le estoy mandando a decir que trabaje con el oscilador interno!

por otra parte debo corregir que en el retardo el comando se tipea asi:

movlw .255
movwf tiempo1
movwf tiempo2

lo tenia movfw..


----------



## robertingenieria27 (Nov 3, 2014)

ese codigo en .asm funcionaria tambien para el 12f509? solo habria que cambiarle la numeracion en list=12f509..'''???


----------



## D@rkbytes (Nov 3, 2014)

robertingenieria27 dijo:


> ¿Ese código en .asm funcionaría también para el 12f509?
> ¿Sólo habría que cambiarle la numeracion en list=12f509..'''?


No sé a cual código te refieras, pero si son compatibles con el PIC12F509.

También tienes que cambiar el* include 12f508.inc* por *include 12f509.inc*


----------



## robertingenieria27 (Nov 3, 2014)

me refiero es al codigo en .asm para recuperar el valor de registro del osccal del 12F508, pero que tambien sirva para el 12f509


----------



## D@rkbytes (Nov 3, 2014)

Pues si, si te refieres al código del post #24, si es compatible con el PIC12F509
Mira también por aquí: Leyendo el valor Backup de OSCCAL


----------



## robertingenieria27 (Nov 4, 2014)

hice tu circuito DARKBYTES y funciono pero al leer el pic me salen 6 valores que adjunto en la imagen, cual deberia tomar? y otra cosa que no entiendo que mencionaste algo sobre el pin que enciende en el diagrama del lado derecho, en mi disposicion de pines del pic serial el BIT 4, que quieres decir con eso o que significa eso? 

otra pregunta, seria posible que funcionara este circuito conectando un adaptador USB a  serial? para poder hacer la lectura via usb.


----------



## D@rkbytes (Nov 4, 2014)

robertingenieria27 dijo:


> Hice tu circuito, D@rkbytes, y funcionó, pero al leer el pic me salen 6 valores que adjunto en la imagen, cual debería tomar?


Realiza una suma y obtén el resultado promedio.
Si la lectura correcta empieza desde 8 y termina en 48...
Entonces sumas 48 + 8 y el resultado lo divides entre 2. O sea OSCCAL = 8 + 48 / 2
El valor para OSCCAL sería 28 en decimal o 1C en hexadecimal.


robertingenieria27 dijo:


> y otra cosa que no entiendo que mencionaste algo sobre el pin que enciende en el diagrama del lado derecho, en mi disposición de pines del pic serial el BIT 4
> ¿Qué quieres decir con eso o que significa eso?


Trata de colocar citas o enlaces sobre las referencias de los posts que mencionas, o coloca el número de post, porque no sé en que post mencioné lo que dices.
Si estás preguntando sobre el LED amarillo del _Post #21_, ese LED tan sólo indica que el circuito tiene alimentación.


robertingenieria27 dijo:


> Otra pregunta. ¿Sería posible que funcionara este circuito conectando un adaptador USB a  serial para poder hacer la lectura via usb?


Sí, de hecho sobre el mismo _Post #21_, mencioné que también se puede hacer de esa forma.

Por favor, lee el tema completamente antes de realizar preguntas.

Saludos.


----------



## robertingenieria27 (Nov 4, 2014)

Gracias por la pronta respuesta, otra duda que tenia cual seria el codigo pero escrito en PBP en lenguaje basic? Y tambien si este circuito podria utilizarse claro haciendo algunas modificaciones para un pic 10f202 que usa la alimentacion en otros pines de los de la serie 12fxxx


----------



## D@rkbytes (Nov 4, 2014)

robertingenieria27 dijo:


> ¿Cual sería el código pero escrito en PBP en lenguaje basic?


Otra vez no sé a que código te refieres.
Si quieres prender y apagar un LED, usa la instrucción *Toggle*
Sobre la recuperación del valor de OSCCAL, el compilador PBP lo hace automáticamente.

En otros PIC como el 12F629, 12F675, 12C671, 12C673, etc. Existe la definición; *DEFINE* OSCCAL_1K 1

El declarar esta definición sirve para recuperar el valor de OSCCAL.


robertingenieria27 dijo:


> Y también si este circuito podría  utilizarse, claro, haciendo algunas modificaciones para un pic10f202 que  usa la alimentación en otros pines de los de la serie 12fxxx


Posiblemente sí, pero nunca he usado ese tipo de PIC.
Y en este PIC10F202, si se debe tener cuidado de apuntar el valor de OSCCAL, pues al borrar el área de datos, también se borra el valor de fábrica de OSCCAL.


			
				Datasheet del PIC10F202 dijo:
			
		

> *Note:
> Erasing the device will also erase the preprogrammed internal calibration value for the internal oscillator.
> The calibration value must be read prior to erasing the part so it can be reprogrammed correctly later*.


En el PIC12F508/509 existe una zona reservada "*BackUp*" donde se guarda el valor de OSCCAL y no hay problema si se borra, los programas para grabar el PIC leen ese registro para recuperar el valor nuevamente.


----------



## robertingenieria27 (Nov 4, 2014)

no me refiero a encender o apagar led, solo me refiero al codigo que hiciste para recuperar el valor de osccal, se que la instruccion DEFINE OSCCAL_1K 1  es para decirle al PBP que se va a hacer uso del oscilador interno no se si tambien es para recuperar el valor de calibracion. yo escribo perfectamente claro no se por que respondes con tantas "citas" de lo que escribo, solo quiero saber cual es el codigo o como se escribiria el codigo que escribiste en .asm para recuperar el valor de calibracion del oscilador interno pero en basic. no me interesa encender o apagar un led eso ya lo se hacer y otras cosas mas..



para resumir solo hazte de cuenta que tengo un pic ya sea 12f629, 12f675, 12f508, 12f509 y quiero recuperar los bits de calibracion del oscilador interno, como escribirias el codigo en PBP para la recuperacion de esos bits al igual que hiciste en .asm sin adicionarle encender o apagar un led, eso es todo...


----------



## D@rkbytes (Nov 4, 2014)

robertingenieria27 dijo:


> *N*o me refiero a encender o apagar led, s*ó*lo me refiero al c*ó*digo que hiciste para recuperar el valor de osccal*.
> S**é* que la instrucción DEFINE OSCCAL_1K 1  es para decirle al PBP que se va a hacer uso del oscilador interno*, *no s*é* si tambi*é*n es para recuperar el valor de calibraci*ó*n.
> *Y*o escribo perfectamente claro*, *no s*é* por que respondes con tantas "citas" de lo que escribo*.*
> *Só*lo quiero saber cual es el c*ó*digo o c*ó*mo se escribir*í*a el c*ó*digo que escribiste en .asm para recuperar el valor de calibraci*ó*n del oscilador interno pero en basic.
> ...


Las citas se colocan precisamente para hacer referencia a lo que uno dice.
Si las usaras, no tendría problema para saber de qué estás hablando.

También ya te mencioné que en PICBasic Pro no es necesario escribir código para recuperar el valor de OSCCAL.

Mira esa parte de un archivo *.LST sobre la compilación de un código con el PIC15F509 sin agregar nada para recuperar el valor de OSCCAL.

```
*   58                      LIST
*   59                    ; Oscillator is 4MHz
* 1564                      LIST
* 1565                        ORG    0        ; Start at 0
* 1566                    
* 1567    000- 025                    movwf    OSCCAL          ; Set oscillator calibration
* 1568    001- A03                goto    INIT        ; Finish initialization (must be in first 
* 4821                      LIST
```
Por lo tanto, sería redundante añadir código para eso, ya que el mismo compilador lo está haciendo.

Si lo quieres hacer de todas formas, tienes estas opciones.
Si ya conoces el valor de OSCCAL, entonces tan sólo escribe...
*OSCCAL = Valor*
Donde *Valor*, será el valor de fábrica para OSCCAL
Si lo desconoces y no se ha perdido, entonces puedes escribir las instrucciones en ensamblador usando *ASM* y *ENDASM* para envolver el código en ensamblador, o también puedes usar el operador *@* para definir qué lo que estás escribiendo es código en ensamblador.

Bien, pues ya te dije cómo hacerlo, también es tan fácil como prender un LED.


----------

