Pues igual si me sirvió, miren el código me funciona bien si el sensor no sensa 1cm funciona el motor hace una secuencia con la tabla y si sensa para, le pare desactivando las interrupciones de tmr1 , ahora necesito que me ayuden quiero hacer que este apagado que no ingrese al tmr1 , que por ejemplo si paso rápidamente la mano por el sensor se produzca una secuencia de movimiento osea que cumpla la tabla de valores que es en donde da la secuencia de mov al motor , produzca una secuencia y se vuelva a apagar, estuve intentando que sense espere un seg y sense de nuevo pero no me ha estado funcionando.
list p=16f877a;Listar el microcontrolador
#include P16F877a.inc; Incluyo la libreria del micro
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
TMR0_Carga60micros EQU d'256'- d'27';
CBLOCK 0x20
Distancia ; Se expresará en centímetros.
Mov
ENDC
;........................................................
Reset org 0x00; Direccion del Reset
goto Inicio
org 0x04
goto Interrupcion
org 0x05; Comienza Inicio
Inicio
; **** Configura los puertos*******************************
BSF STATUS,RP0 ; Accede a banco 1
BCF STATUS,7 ; Aseguro que esta entre el banco 0 y 1
BCF STATUS,6 ; Aseguro que esta entre el banco 0 y 1
movlw b'00000010'; Colocamos como salidas
movwf TRISB
movlw b'00000000'
movwf TRISC
movlw b'00000000' ; Prescaler de 2 para el TMR0.
movwf OPTION_REG
BSF INTCON,GIE ; HABILITAMOS TODAS LAS INTERRUPCIONE
BSF PIE1,TMR1IE ; HABILITO LA INTERRUPCIÓN POR TIMER1
BSF INTCON, PEIE ; Habilitamos interrupción por periféricos
BCF STATUS,RP0 ; Regresa a banco 0
movlw b'00110001'
movwf T1CON
bcf PIR1,TMR1IF
clrf PORTB
clrf PORTC
; Carga al TIMER 1
bcf T1CON,TMR1ON
movlw 0x0B
movwf TMR1H
movlw 0xDC
movwf TMR1L
bsf T1CON,TMR1ON
PRINCIPAL
clrf Distancia
bsf PORTB,0
call Retardo_5micros
bcf PORTB,0
EsperaFlancoSubida
btfss PORTB,1 ; Espera el flanco de subida de la señal
goto EsperaFlancoSubida ; de salida del sensor.
movlw TMR0_Carga60micros ; Ya se ha producido el flanco de subida.
movwf TMR0 ; Carga el Timer 0.
movlw b'10100000' ; Autoriza interrupción del TMR0 (T0IE).
movwf INTCON
EsperaFlancoBajada
btfsc PORTB,1 ; Espera flanco de bajada de la señal de la salida
goto EsperaFlancoBajada
clrf INTCON ; Se ha producido el flanco de bajada. Prohíbe interrup.
call PARO
call Retardo_20ms
goto PRINCIPAL
Interrupcion
bcf INTCON,7
btfsc INTCON,2
call InterrupcionTMR0 ;Llama a las interrupciones de TMR0
btfsc PIR1,TMR1IF
call InterrupcionTMR1 ;lLama a las interrupcion de TMR1
goto EndInt
InterrupcionTMR0
movlw .1 ; Se utiliza instrucción "addwf", en lugar de "incf"
addwf Distancia,1 ; para posicionar flag de Carry.
bcf INTCON,2
retfie
InterrupcionTMR1
incf Mov,1 ; Comienza Movimiento motor
movlw d'8'
subwf Mov,0
btfsc STATUS,2
goto $+2
goto $+6
clrf Mov
movfw Mov
call Tabla
movwf PORTC
goto $+4
movfw Mov
call Tabla
movwf PORTC
bcf T1CON,TMR1ON
movlw 0x0B
movwf TMR1H
movlw 0xDC
movwf TMR1L
bsf T1CON,TMR1ON
bcf PIR1,TMR1IF
retfie
EndInt
BSF INTCON,7
retfie
PARO; Al sensar 1cm para el motor, desactivo las interrupciones por TMR1
movlw .1
subwf Distancia,0
btfsc STATUS,2
GOTO $+2
GOTO $+5
movlw b'00110000'
movwf T1CON
CLRF PORTC
GOTO $+3
movlw b'00110001'
movwf T1CON
return
Tabla
ADDWF PCL,1
retlw B'00000001'
retlw B'00000000'
retlw B'00000001'
retlw B'00000000'
retlw B'00000010'
retlw B'00000000'
retlw B'00000010'
retlw B'00000000'
RETURN
INCLUDE <Libreria.inc> ;**Libreria de Retardos****
end