Como Configurar el Reloj Interno del PIC12F629 en CCS

Hola a todos, mi problema es como calibrar el reloj interno del PIC12F629 en ccs ya que en asm es de la siguiente forma:

bsf STATUS,RP0
call 3FF
movwf OSCCAL //registro que calibra el reloj interno
bsf STATUS,RP0
************************
************************
ORG 0x3FF
retlw 0x20 // es el codigo que viene en cada pic12f629 varia en cada pic se
END //encuentra en la posicion de programa 3FF

Pero como se configura esto en lenguaje C en CCS ?????
antemano gracias
 
#org a ese rango no lo permite (sale error) y no tiene sentido crear una constante en ese lugar ya que al hacerlo se a sobre escribir el valor que se encuentra en esa dirección.

Lo mismo en este caso:
Código:
ORG 0x3FF
retlw 0x20
esta devolviendo el valor 0x20 y ese valor lo escribe en el registro OSCCON... por ningún lado veo que uses el contenido de la dirección 0x3FF.

Es decir que básicamente solo haces:
OSCCON = 0x20

Los registro no se pueden usar libremente, para eso hay que declarar y una forma es esta:
Código:
#byte OSCCAL = getenv("SFR:OSCCAL")

Realmente buscas más precisión ya que al configurar #FUSES INTRC_IO el PIC usa el oscilador interno a 4Mhz 1%.
O intenta usar directo asm:
Código:
void main()
{
   #asm
   bsf   STATUS,5 
   call  0x3FF
   movwf OSCCAL
   #endasm
pero te digo que crear un #org en la dirección 0x3FF no lo permite.
 
Puedes poner esto en caso de que hallas borrado el valor de calibracion o simplemente reescribirlo desde el compilador.

Código:
#rom 0x3FF = {0x3480}

Escribes directamente en el registro.

Código:
 #include <12F629.h>
#FUSES INTRC_IO,NOWDT,PUT,MCLR,BROWNOUT,NOPROTECT,NOCPD
#use delay(internal=4MHZ)
#rom 0x3FF = {0x3480}

En los pics que he tenido el valor ronda entre 70-80
 
Última edición:
Bueno en mi caso mi valor de calibracion es de 4C pero el motivo por el que se hace en asm lo siguiente:

bsf STATUS,RP0
call 3FF
movwf OSCCAL //registro que calibra el reloj interno
bsf STATUS,RP0
************************
************************
ORG 0x3FF
retlw 0x20 // es el codigo que viene en cada pic12f629 varia en cada pic se
END //encuentra en la posicion de programa 3FF

es por q en el la direccion 3FF de la flash tiene que estar en 34XX (XX calibracion) recuerda que

retlw k su codigo de operacion es de 11 01xx kkkk kkkk
3 4 k k (esto en la flash 3FF para una
correcta calibracion en mi
caso
vendria hacer
3424)
tambien OSCCAL= xx pero en ccs osea programando en C como se inserta este codigo; ya que estos PIC son muy utiles debido a su reducido tamaño.

 
Estuve revisando y :eek: sorpresa ya no te esfuerces en hacer un código para eso ya que el mismo compilador hace lo que buscas... revisé el archivo *.lst que genera al compilar y ahí está este bloque de código al inicio de todo:

Código:
0000:  MOVLW  00
0001:  MOVWF  PCLATH
0002:  GOTO   004
0003:  NOP
0004:  CALL   3FF
0005:  BSF    STATUS.RP0
0006:  MOVWF  OSCCAL
0007:  MOVLW  00
0008:  MOVWF  PCLATH
0009:  GOTO   main
:)
 
ummm si pero como inserto mi valor de calibracion de 4C en 3FF?? por qUE esa direccion en el lst no aparece.
 
Última edición por un moderador:
Atrás
Arriba