He estado intentando hacer una rutina que me temporice 10 segundos, esto lo intento realizar temporizando 50ms con el timer1 y con un contador cuyo valor es 200,se decrementa cada vez y cuando es 0 la salida debe bascular, pero no lo hace y no se cual puede ser el problema. A ver si alguien puede ayudarme, muchas gracias
Codigo:
list p = 16f876;no funciona
#include <p16f876.inc>
;temporiza y parpadea portb,0
CONTADOR EQU 20H
TRANSICION EQU 21H
ORG 00H
GOTO INICIO
ORG 04H
BCF PIR1,0;Borro bandera
DECFSZ CONTADOR
GOTO CONTINUA;Va a retornar de la int,
BSF TRANSICION,0
GOTO VERSAL
VERSAL
MOVLW 0C8H
MOVWF CONTADOR
BTFSS PORTB,0;Analiza la salida
GOTO ACTIVAR;Va a activar salida
BCF PORTB,0;DESACTIVA
CONTINUA
RETFIE
ACTIVAR
BSF PORTB,0;activa
RETFIE
INICIO
BCF STATUS,6
BSF STATUS,5;banco 1
CLRF TRISB;B SALIDA
MOVLW 01H;HABILITA TMR1E
MOVWF PIE1
MOVLW 0C0H;
MOVWF INTCON;HABILITA GIE Y PERIFERICOS
BCF STATUS,5;BANCO 0
CLRF PORTB
BSF PORTB,1;COMPROBAR SI FUNCIONA EL PROGRAMA
TIEMPO
BCF T1CON,0
MOVLW 0DCH
MOVWF TMR1L;CARGA TIMER1BAJO
MOVLW 0BH
MOVWF TMR1H;CARGA TIMER1ALTO
MOVLW 31H
MOVWF T1CON;PRESCALER 8 Y ACTIVA
NADA
GOTO NADA
GOTO TIEMPO
END
Tras ejecutarse la interrupcion el puntero se cargara apuntanto a la siguiente instruccion ,asi saldra del bucle nada y se ira a tiempo. de todas formas por si esto no es asi lo he intentado configurando de nuevo el timer1 antes de retornar de la interrupcion y tampoco me ha funcionado
Gracias por tu ayuda, te lo decia porque yo he usado antes el lvp y el puerto b para sacar datos y no me habia pasado nada. Lo de la recarga tambien lo valore pero tampoco me iba,seria algo asi:
Codigo:
ORG 00H
GOTO INICIO
ORG 04H
BCF PIR1,0;Borro bandera
DECFSZ CONTADOR
GOTO RETORNA;Va a retornar de la int,
BSF TRANSICION,0
GOTO VERSAL
VERSAL
MOVLW 0C8H
MOVWF CONTADOR
BTFSS PORTB,0;Analiza la salida
GOTO ACTIVAR;Va a activar salida
BCF PORTB,0;DESACTIVA
GOTO RETORNA
ACTIVAR
BSF PORTB,0;activa
GOTO RETORNA
RETORNA
BCF T1CON,0
MOVLW 0DCH
MOVWF TMR1L;CARGA TIMER1BAJO
MOVLW 0BH
MOVWF TMR1H;CARGA TIMER1ALTO
MOVLW 31H
MOVWF T1CON;PRESCALER 8 Y ACTIVA
RETFIE
Edito:
Ya lo he conseguido hacer funcionar, tenia varios fallos. Para empezar el timer1 temporizaba 500 milisegundos y no 50, no se xq me equivoque; y ademas el contador hay que configurarlo junto al temporizador, ya que si no la primera vez toma un valor cualquiera