hola ando programando un emulador de contro remoto para camaras reflex nikon (ml-23)
la secuencia anda bien, sin embargo la idea es que al apretar el boton envie envie las pulsaciones una sola vez, eso es lo que haria el programa en teoria, sin embargo algo falla
la ultima parte ( las ultimas 4 lineas ) mantiene el microcontrolador en un bucle hasta que se suelta el boton, de ahi vuelve a la primera parte, a esperar que se apriete de nuevo para repetir el proceso.
sin embargo al apretar, la secuencia se empieza a repetir infinitamente, y no logro encontrar la causa.
les dejo la fuente, gracias por su ayuda
ah me falto un detalle, esto no lo probe en el pic en si, sino en un simulador, no creo que sea el problema por que ha sico muy preciso con otras cosas.
esto lo hago simplemente por que todavia no tengo programador (a construir en un futuro cercano)
la secuencia anda bien, sin embargo la idea es que al apretar el boton envie envie las pulsaciones una sola vez, eso es lo que haria el programa en teoria, sin embargo algo falla
la ultima parte ( las ultimas 4 lineas ) mantiene el microcontrolador en un bucle hasta que se suelta el boton, de ahi vuelve a la primera parte, a esperar que se apriete de nuevo para repetir el proceso.
sin embargo al apretar, la secuencia se empieza a repetir infinitamente, y no logro encontrar la causa.
les dejo la fuente, gracias por su ayuda
Código:
STATUS equ 03h ; Dirección del registro STATUS
TRISA equ 85h ; Dirección del registro tri-estado para el Puerto A.
PORTA equ 05h ; Dirección del Puerto A.
PDel0 equ 08h ; direccion de un registro de proposito general
PDel1 equ 09h ; direccion de otro registro de proposito general
;****************************************************////////////////////////****************************************
bsf STATUS,5 ; cambio al banco 1
movlw 01h ; pongo 0001 en w
movwf TRISA ; pongo w en trisa
bcf STATUS,5 ; vuelvo al banco 0
pulsa btfss PORTA,0 ; si el pin o esta en estdo 1
goto pulso ; si esta en 0 (pulsado) voy a pulso
goto pulsa ; salto a este pedazo que me vuelve al inicio
;****************************************************************************
pulso bsf PORTA,1 ; prendo el led *
; *
;***************///-- espero 1999 ciclos --///****************** *
movlw .249 ; 1 set numero de repeticion
movwf PDel0 ; 1 |
PLoop0 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop0 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5
;***************///-- termina la espera --///*****************
bcf PORTA,1 ; apago el led
;***************///-- espero 27829 ciclos --///*****************
movlw .37 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop11 movlw .187 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop21 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop21 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop11 ; 2 no, loop
;***************///-- termina la espera --///*****************
bsf PORTA,1 ; prendo el led
;***************///-- espero 389 ciclos --///*****************
movlw .96 ; 1 set numero de repeticion
movwf PDel0 ; 1 |
PLoop02 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop02 ; 2 no, loop
;***************///-- termina la espera --///*****************
bcf PORTA,1 ; lo apago
;***************///-- espero 1579 ciclos --///*****************
movlw .224 ; 1 set numero de repeticion
movwf PDel0 ; 1 |
PLoop03 clrwdt ; 1 clear watchdog
PDelL13 goto PDelL23 ; 2 ciclos delay
PDelL23 clrwdt ; 1 ciclo delay
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop03 ; 2 no, loop
PDelL33 goto PDelL43 ; 2 ciclos delay
PDelL43 goto PDelL53 ; 2 ciclos delay
PDelL53 goto PDelL63 ; 2 ciclos delay
PDelL63
;***************///-- termina la espera --///*****************
bsf PORTA,1 ; lo prendo otra vez
;***************///-- espero 409 ciclos --///*****************
movlw .101 ; 1 set numero de repeticion
movwf PDel0 ; 1 |
PLoop04 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop04 ; 2 no, loop
;***************///-- termina la espera --///*****************
bcf PORTA,1 ; lo apago otra vez
;***************///-- espero 3579 ciclos --///*****************
movlw .19 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop15 movlw .46 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop25 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop25 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop15 ; 2 no, loop
PDelL15 goto PDelL25 ; 2 ciclos delay
PDelL25
;***************///-- termina la espera --///*****************
bsf PORTA,1 ; prendo el led
;***************///-- espero 399 ciclos --///*****************
DEMORA movlw .98 ; 1 set numero de repeticion
movwf PDel0 ; 1 |
PLoop06 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop0 ; 2 no, loop
PDelL16 goto PDelL26 ; 2 ciclos delay
PDelL26
;***************///-- termina la espera --///*****************
bcf PORTA,1 ; apago el led por ultima vez en la secuencia
espero btfsc PORTA,0 ; espero a que se suelte el boton para volver al inicio
goto pulsa ; sino tendria un chorrete infinito de obturaciones (lo que sucede)
goto espero
end
ah me falto un detalle, esto no lo probe en el pic en si, sino en un simulador, no creo que sea el problema por que ha sico muy preciso con otras cosas.
esto lo hago simplemente por que todavia no tengo programador (a construir en un futuro cercano)
Última edición: