Você está na página 1de 7

;

;
| | | | | | | | | | | |

;
_|__|__|__|__|__|__|__|__|__|__|__|_
_\\|//_
Jose

;
|
|
(| o-o |)
Martinez
;
|
www.microcontroladorespic.com
|
\ (_) /
Ortiz

;
|)
|
\_"_/

;
| TEMPORIZADOR CICLICO PROGRAMABLE |
__|U|__

;
|
|
/
\

;
|_ __ __ __ __ __ __ __ __ __ __ __ _|
/ /|
|\ \

;
| | | | | | | | | | | |
/ / |
| \ \

;
| | | | | | | | | | | |
"" |___| ""

;

;******************************
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
INCLUDE

P=16F629
<P12F629.INC>

;Procesador utilizado.

;*****************************
****************************
CBLOCK
PDel0
PDel1
tiempo_ON
tiempo_OFF
ENDC

0x20

;Inicio de
;utilizado
;utilizado
;utilizado
;utilizado

MAPA DE MEMORIA
la memoria de datos
para los retardos
para los retardos
para los retardos
para los retardos

;******************************
****************************

ZONA DE DATOS

#define Led
GPIO,5
#define Rele GPIO,4
#define Micros GPIO

;puerto utilizado pala la conexion del led


;puerto utilizado pala la conexion del Rele
;Entradas para microinterruptores GP0,1,2,3

#define
#define

bcf STATUS,RP0
bsf STATUS,RP0

Banco0
Banco1

;************************************************************************
******
;********************************** INICIO
**********************************
;************************************************************************
******
reset

org 0x00
goto inicio

;El programa comienza en la direccin 0.


;pasa a la posicion de inicio para evitar la

org 0x04

;aqui se atienden las interupciones

int.
inicio

Banco1
call
movwf

0x3ff
OSCCAL

;
;

CALIBRACION DEL
OSCILADOR INTERNO

movlw
movwf

b'001111'
TRISIO

;0=salida, 1=entrada
;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
andlw b'00001111'
addwf
PCL,F
tabla

goto

cero

;lee el valor de las entradas


;se queda con los 4 bit de menor peso

goto
goto
goto
goto
goto
goto
goto
goto
goto
goto
goto
goto
goto
goto
goto

uno
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
diez
once
doce
trece
catorce
quince

;************************************************************************
******
;****************************** CONFIGURACION
*******************************
;************************************************************************
******
cero

call
ON_10min
goto
principal
microinterruptores

;tiempo de encendido - 100%


;miro la posicion de los

uno

call
ON_9min5
call
OFF_0min5
goto
principal
microinterruptores

;tiempo de encendido - 95%


;tiempo de apagado
;miro la posicion de los

dos

call
ON_9min
call
OFF_1min
goto
principal
microinterruptores

;tiempo de encendido - 90%


;tiempo de apagado
;miro la posicion de los

tres

call
ON_8min5
call
OFF_1min5
goto
principal
microinterruptores

;tiempo de encendido - 85%


;tiempo de apagado
;miro la posicion de los

cuatro

call
ON_8min
call
OFF_2min
goto
principal
microinterruptores

;tiempo de encendido - 80%


;tiempo de apagado
;miro la posicion de los

cinco

call
ON_7min5
call
OFF_2min5
goto
principal
microinterruptores

;tiempo de encendido - 75%


;tiempo de apagado
;miro la posicion de los

seis

;tiempo de encendido - 70%


;tiempo de apagado
;miro la posicion de los

call
ON_7min
call
OFF_3min
goto
principal
microinterruptores

siete

call
ON_6min5
call
OFF_3min5
goto
principal
microinterruptores

;tiempo de encendido - 65%


;tiempo de apagado
;miro la posicion de los

ocho

call
ON_6min
call
OFF_4min
goto
principal
microinterruptores

;tiempo de encendido - 60%


;tiempo de apagado
;miro la posicion de los

nueve

call
ON_5min5
call
OFF_4min5
goto
principal
microinterruptores

;tiempo de encendido - 55%


;tiempo de apagado
;miro la posicion de los

diez

call
ON_5min
call
OFF_5min
goto
principal
microinterruptores

;tiempo de encendido - 50%


;tiempo de apagado
;miro la posicion de los

once

call
ON_4min5
call
OFF_5min5
goto
principal
microinterruptores

;tiempo de encendido - 45%


;tiempo de apagado
;miro la posicion de los

doce

call
ON_4min
call
OFF_6min
goto
principal
microinterruptores

;tiempo de encendido - 40%


;tiempo de apagado
;miro la posicion de los

trece

call
ON_3min
call
OFF_7min
goto
principal
microinterruptores

;tiempo de encendido - 30%


;tiempo de apagado
;miro la posicion de los

catorce

call
ON_2min
call
OFF_8min
goto
principal
microinterruptores

;tiempo de encendido - 20%


;tiempo de apagado
;miro la posicion de los

quince

;tiempo de encendido - 10%


;tiempo de apagado
;miro la posicion de los

call
ON_1min
call
OFF_9min
goto
principal
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
ON_6min5
ON_6min
ON_5min5
ON_5min
ON_4min5
ON_4min
ON_3min5
ON_3min
ON_2min5
ON_2min
ON_1min5
ON_1min
ON_0min5

call
call
call
call
call
call
call
call
call
call
call
call
call
call
return

ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
ON_30s
; vuelvo donde se hizo la llamada

;************************************************************************
******
;***************************
ON_1min
***************************
;************************************************************************
******
ON_30s

s30_ON

bsf
movlw
movwf

Rele
.30
tiempo_ON

;conecta el rele
;corresponde a 30, para hacer 30 segundos

call
decfsz

ON_1seg
tiempo_ON,1

; Va a esperar 1seg
; comienza a restar. cuando sea 0 salta 1

goto

s30_ON

; sigue restando hasta que llege a 0

linea
return

; vuelvo donde se hizo la llamada

;************************************************************************
******
;***************************
ON_1seg
***************************
;************************************************************************
******
ON_1seg
1seg.
ON_1s

call

ON_1s

;repite la rutina siguiente para hacer

bsf
call
bsf
call

Led
DEMORA
Led
DEMORA

;enciende el led
;249msg
;enciende el led
;249msg

return

; vuelvo donde se hizo la llamada

;************************************************************************
******
;***************************
TIEMPOS OFF
***************************
;************************************************************************
******
OFF_10min
call
OFF_30s

OFF_9min5
OFF_9min
OFF_8min5
OFF_8min
OFF_7min5
OFF_7min
OFF_6min5
OFF_6min
OFF_5min5
OFF_5min
OFF_4min5
OFF_4min
OFF_3min5
OFF_3min
OFF_2min5
OFF_2min
OFF_1min5
OFF_1min
OFF_0min5

call
call
call
call
call
call
call
call
call
call
call
call
call
call
call
call
call
call
call
return

OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
OFF_30s
; 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
decfsz

OFF_1seg
tiempo_OFF,1

; Va a esperar 1seg
;comienza a restar cuando sea 0 salta 1

goto

s30_OFF

; sigue restando hasta que llege a 0

linea
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
decfsz

OFF_1seg
tiempo_OFF,1

; Va a esperar 1seg
;comienza a restar cuando sea 0 salta 1

goto

uno_OFF

; sigue restando hasta que llege a 0

linea
return

; vuelvo donde se hizo la llamada

;************************************************************************
******

;***************************
OFF_1seg
***************************
;************************************************************************
******
OFF_1seg
1seg.
OFF_1s

call

OFF_1s

;repite la rutina siguiente para hacer

bsf
call
bcf
call

Led
DEMORA
Led
DEMORA

;enciende el led
;249msg
;apaga el led
;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

Você também pode gostar