he progresado algo mas pero ya me he atascado del todo, he creado unos contadores para que haga 4 ciclos de encendido y apagado, pero no se que pasa que se encienden la primera vez y ya no se apagan.
lo he probado en proteus.
si quito los contadores el progama enciende luces y las apaga segun los tiempos establecidos, pero si los dejo se encienden una vez y no se vuelven a apagar
este es el codigo:
list p=16f627 ; Declaración del procesador
include p16f627.inc ;
__config 0x3F38 ; Declaración de la configuración
PDel0 equ 20
PDel1 equ 21
PDel2 equ 22
PDel0150 equ 23
PDel1150 equ 24
PDel2150 equ 25
contador150 equ 26
contador20 equ 27
contador10 equ 28
org 0x00
goto Inicio
Inicio movlw 0x07 ;desabilitar comparadores anlogico
movwf CMCON ;
bsf STATUS,RP0 ;banco 1
BSF PCON, OSCF ;oscilador a 4mhz
clrf PORTB ;puerto b salida
movlw 0x03 ;puerto a a0-marcha y a1-pausa como entrada
movwf PORTA
bcf STATUS,RP0 ;banco 0
movlw 0x00 ;limpiamos puerto b
movwf PORTB ;
Encendido btfsc PORTA,0 ;si se presiona encendido salta a la rutina anti rebote
goto Encendido
Antirrebotes
btfss PORTA,0 ;si la pulsacion es fiable salta a la siguiente instruccion
goto Antirrebotes
call DEMORA ;5 SEGUNDOS;;temporizamos 5 segundos y activamoslas dos salidas
movlw 0x00 ;reseteamos contador 150
movwf contador150
serie150 movlw 0x03 ;
movwf PORTB ;enciendo salida 0-diana y 1-luz verde
call DEMORA150 ;2 SEGUNDOS
movlw 0x00 ;APAGO LAS SALIDAs
movwf PORTB ;
goto cuenta150 ; para hacer las 4 repeticiones
;goto Encendido
;rutina de 20
;--------------------------------------------------------------
serie20 movlw 0x00 ;reseteamos contador 20
movwf contador20
serie20sinreset movlw 0x03 ;
movwf PORTB ;enciendo salida 0-diana y 1-luz verde
call DEMORA150 ;2 SEGUNDOS
movlw 0x00 ;APAGO LAS SALIDAs
movwf PORTB ;
goto cuenta20 ;para hacer las 4 repeticiones
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 10/10/2009 Hs 11:25:25
; Descripcion: Delay 5000000 ciclos
;-------------------------------------------------------------
DEMORA movlw .165 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .41 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .147 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
return ; 2+2 Fin.
;-------------------------------------------------------------
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 10/10/2009 Hs 11:13:59
; Descripcion: Delay 2000000 ciclos
;-------------------------------------------------------------
DEMORA150 movlw .167 ; 1 set numero de repeticion (C)
movwf PDel0150 ; 1 |
PLoop0150 movlw .41 ; 1 set numero de repeticion (B)
movwf PDel1150 ; 1 |
PLoop1150 movlw .72 ; 1 set numero de repeticion (A)
movwf PDel2150 ; 1 |
PLoop2150 clrwdt ; 1 clear watchdog
decfsz PDel2150, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2150 ; 2 no, loop
decfsz PDel1150, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1150 ; 2 no, loop
decfsz PDel0150, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0150 ; 2 no, loop
PDelL1150 goto PDelL2150 ; 2 ciclos delay
PDelL2150 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------
;------------------------------------------------------------
;contador de series
cuenta150
incf contador150,f
movf 0x04,w
subwf contador150,w ;restas 15 al contador
btfss STATUS,Z ; verificas si la operacion dio 0
goto serie150 ; si no vuelve a siguiente serie
yaen150son4 goto serie20
cuenta20
incf contador150,f
movf 0x04,w
subwf contador150,w ;restas 15 al contador
btfss STATUS,Z ; verificas si la operacion dio 0
goto serie20sinreset ; si no vuelve a siguiente serie
yaen20son4 goto Encendido
;------------------------------------------------------------
goto Encendido
end