Error osccal con Pic 12f629 En Proteus.

Hola, llevo dias intentando hacer funcionar un temporizador cíclico programable.
He estado leyendo al respecto sobre este pic bastante en este foro sobre como hacer la calibracion interna, y he buscado bastante informacion pero no doy con ello, y el resultado siempre es el mismo, ese error.

Cuando en proteus inicio la simulacion me tira el siguiente error constantemente:

error.png



El programa esta escrito en ASM y es el siguiente:

Código:
;******************************   CONFIGURACION    ****************************
;CP_OFF              - Codigo de proteccion programa desactivado
;CPD_OFF             - Codigo de proteccion eeprom desactivado 
;WDT_OFF             - Perro guardian desconectado 
;BODEN_OFF           - No actua el reset por bajada de tension
;PWRTE_OFF           - Reset de inicio desconectado
;MCLRE_OFF           - Reset externo desconectado, sino pierdo una entrada A5
;XT_OSC              - oscilador exterior
;INTOSC_OSC_NOCLKOUT - funcionamiento con reloj interno
;LVP_OFF             - programacion de bajo voltage desconectado,
;                      para activar el pin 4 de RB
   __CONFIG _MCLRE_OFF & _CP_OFF & _WDT_ON & _INTRC_OSC_NOCLKOUT & _PWRTE_ON        
 
      LIST    P=16F629       ;Procesador utilizado.
      INCLUDE   <P12F629.INC> 
;*****************************   MAPA DE MEMORIA   ****************************
  CBLOCK    0x20   ;Inicio de la memoria de datos
PDel0              ;utilizado para los retardos
PDel1              ;utilizado para los retardos
tiempo_ON          ;utilizado para los retardos
tiempo_OFF         ;utilizado para los retardos
   ENDC 
;******************************   ZONA DE DATOS    ****************************
 #define Led   GPIO,5         ;puerto utilizado pala la conexion del led
 #define Rele  GPIO,4         ;puerto utilizado pala la conexion del Rele
 #define Micros GPIO          ;Entradas para microinterruptores GP0,1,2,3
 #define   Banco0             bcf STATUS,RP0
 #define   Banco1             bsf STATUS,RP0   
;******************************************************************************
;**********************************  INICIO  **********************************
;******************************************************************************
                                       
reset org 0x00            ;El programa comienza en la dirección 0.
        goto  inicio        ;pasa a la posicion de inicio para evitar la int.                                                    
        org 0x04            ;aqui se atienden las interupciones
              
inicio  Banco1 
        call 0x3ff       ;       CALIBRACION DEL          
     movwf   OSCCAL      ;      OSCILADOR INTERNO             
   
        movlw b'001111'   ;0=salida, 1=entrada
        movwf TRISIO      ;lo tranfiere al puerto 
 ; instrucciones para habilitar las resistencias internas
        movlw   b'00001111'  ;habilita pull-ups
        movwf   OPTION_REG
        movlw   b'00000111'  ;para GP0,GP1,GP2
        movwf   WPU
      
        Banco0 
 
 ;instrucciones para poder utilizar GP0 y GP1 como entradas
        movlw b'00000111'  ;  desactiva el comparador 
        movwf CMCON           ; selecciona GPIO en vez de comparador
   
      clrf GPIO          ;todas las salidas puestas a 0
           

;******************************************************************************
;*******************************  PRINCIPAL ***********************************
;******************************************************************************
principal
        
        movf Micros,W           ;lee el valor de las entradas  
        andlw b'00001111'       ;se queda con los 4 bit de menor peso
        addwf     PCL,F
tabla   goto      cero
        goto      uno
        goto      dos  
        goto      tres
        goto      cuatro
        goto      cinco
        goto      seis
        goto      siete
        goto      ocho
        goto      nueve
        goto      diez
        goto      once
        goto      doce
        goto      trece
        goto      catorce
        goto      quince
;******************************************************************************
;******************************  CONFIGURACION  *******************************
;******************************************************************************
cero      call    ON_10min        ;tiempo de encendido - 100%
          goto    principal       ;miro la posicion de los microinterruptores 
uno       call    ON_9min5        ;tiempo de encendido  - 95%
          call    OFF_0min5       ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores  
dos       call    ON_9min         ;tiempo de encendido  - 90%
          call    OFF_1min        ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
tres      call    ON_8min5        ;tiempo de encendido  - 85%
          call    OFF_1min5       ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
cuatro    call    ON_8min         ;tiempo de encendido  - 80%
          call    OFF_2min        ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
cinco     call    ON_7min5        ;tiempo de encendido  - 75%
          call    OFF_2min5       ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
seis      call    ON_7min         ;tiempo de encendido  - 70%
          call    OFF_3min        ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
siete     call    ON_6min5        ;tiempo de encendido  - 65%
          call    OFF_3min5       ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
ocho      call    ON_6min         ;tiempo de encendido  - 60%
          call    OFF_4min        ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
nueve     call    ON_5min5        ;tiempo de encendido  - 55%
          call    OFF_4min5       ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
diez      call    ON_5min         ;tiempo de encendido  - 50%
          call    OFF_5min        ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
once      call    ON_4min5        ;tiempo de encendido  - 45%
          call    OFF_5min5       ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
doce      call    ON_4min         ;tiempo de encendido  - 40%
          call    OFF_6min        ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
trece     call    ON_3min         ;tiempo de encendido  - 30%
          call    OFF_7min        ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
catorce   call    ON_2min         ;tiempo de encendido  - 20%
          call    OFF_8min        ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores  
quince    call    ON_1min         ;tiempo de encendido  - 10%
          call    OFF_9min        ;tiempo de apagado 
          goto    principal       ;miro la posicion de los microinterruptores 
;******************************************************************************
;***************************      TIEMPOS ON        ***************************
;******************************************************************************
ON_10min   call     ON_30s
ON_9min5   call     ON_30s
ON_9min    call     ON_30s
ON_8min5   call     ON_30s
ON_8min    call     ON_30s
ON_7min5   call     ON_30s
ON_7min    call     ON_30s
ON_6min5   call     ON_30s
ON_6min    call     ON_30s
ON_5min5   call     ON_30s
ON_5min    call     ON_30s
ON_4min5   call     ON_30s
ON_4min    call     ON_30s
ON_3min5   call     ON_30s
ON_3min    call     ON_30s
ON_2min5   call     ON_30s
ON_2min    call     ON_30s
ON_1min5   call     ON_30s
ON_1min    call     ON_30s
ON_0min5   call     ON_30s            
           return              ; vuelvo donde se hizo la llamada
;******************************************************************************
;***************************        ON_1min         ***************************
;******************************************************************************
 
ON_30s     bsf     Rele        ;conecta el rele
           movlw   .30        ;corresponde a 30, para hacer 30 segundos          
           movwf   tiempo_ON  
s30_ON  call    ON_1seg        ; Va a esperar 1seg
        decfsz  tiempo_ON,1    ; comienza a restar. cuando sea 0 salta 1 linea
        goto    s30_ON         ; sigue restando hasta que llege a 0
 
        return                 ; vuelvo donde se hizo la llamada
;******************************************************************************
;***************************        ON_1seg         ***************************
;******************************************************************************
ON_1seg     call    ON_1s       ;repite la rutina siguiente para hacer 1seg.
ON_1s       bsf     Led         ;enciende el led
            call    DEMORA      ;249msg 
            bsf     Led         ;enciende el led
            call    DEMORA      ;249msg
     
            return              ; vuelvo donde se hizo la llamada
;******************************************************************************
;***************************      TIEMPOS OFF       ***************************
;******************************************************************************
OFF_10min   call     OFF_30s
OFF_9min5   call     OFF_30s
OFF_9min    call     OFF_30s
OFF_8min5   call     OFF_30s
OFF_8min    call     OFF_30s
OFF_7min5   call     OFF_30s
OFF_7min    call     OFF_30s
OFF_6min5   call     OFF_30s
OFF_6min    call     OFF_30s
OFF_5min5   call     OFF_30s
OFF_5min    call     OFF_30s
OFF_4min5   call     OFF_30s
OFF_4min    call     OFF_30s
OFF_3min5   call     OFF_30s
OFF_3min    call     OFF_30s
OFF_2min5   call     OFF_30s
OFF_2min    call     OFF_30s
OFF_1min5   call     OFF_30s
OFF_1min    call     OFF_30s
OFF_0min5   call     OFF_30s 
            return              ; vuelvo donde se hizo la llamada
;******************************************************************************
;***************************        OFF_30seg       ***************************
;******************************************************************************
OFF_30s    bcf     Rele       ; desconecta el rele
           movlw   0x1e       ;corresponde a 30, para hacer 30 segundos          
           movwf   tiempo_OFF  
s30_OFF   call    OFF_1seg        ; Va a esperar 1seg
          decfsz  tiempo_OFF,1    ;comienza a restar cuando sea 0 salta 1 linea
          goto    s30_OFF         ; sigue restando hasta que llege a 0
 
          return                 ; vuelvo donde se hizo la llamada
;******************************************************************************
;***************************        OFF_1min        ***************************
;******************************************************************************
OFF_1mi    bcf     Rele           ; desconecta el rele
           movlw   .60            ;corresponde a 60, para hacer 1 minuto          
           movwf   tiempo_OFF  
uno_OFF   call    OFF_1seg        ; Va a esperar 1seg
          decfsz  tiempo_OFF,1    ;comienza a restar cuando sea 0 salta 1 linea
          goto    uno_OFF         ; sigue restando hasta que llege a 0
 
          return                 ; vuelvo donde se hizo la llamada
;******************************************************************************
;***************************        OFF_1seg        ***************************
;****************************************************************************** 
OFF_1seg   call    OFF_1s      ;repite la rutina siguiente para hacer 1seg.
OFF_1s     bsf     Led         ;enciende el led
           call    DEMORA      ;249msg 
           bcf     Led         ;apaga el led
           call    DEMORA      ;249msg
     
           return              ; vuelvo donde se hizo la llamada
;******************************************************************************
;*****************           RETARDO 250ms                 ********************
;******************************************************************************  
;-------------------------------------------------------------
; Generado con PDEL ver SP  
; Descripcion: Delay 249996 ciclos
;-------------------------------------------------------------
DEMORA  movlw     .195      ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .213      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;----------------------------------------------------------------------------
         org      0x3FF       ;          OSSCAL          --------------------
         retlw    0x20        ;    VALOR DE CALIBRACION  --------------------
;----------------------------------------------------------------------------
  END

No se si se me esta escapando algo, ya que no estoy acostumbrado a ASM pero si alguien me pudiera ayudar se lo agradeceria,

Muchas Gracias.
 
Última edición por un moderador:
una pregunta el programa si te corre en proteus, pues pareciera que solo te cambia el valor de el oscilador interno para correr la simulacion
 
Atrás
Arriba