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:
El programa esta escrito en ASM y es el siguiente:
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.
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:

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: