Buenas tardes, soy nuevo en el foro y por lo que me decidí a poner mi duda aquí es porque llevo ya rato tratando de resolver mi problema y no lo logro.
Quiero que cada 7 segundos (Mas o menos) se prenda un led y pasados otros 7 segundos se apague. Estoy utilizando el Tmr1 con interrupciones, el preescaler está pues 1:8 para que cada 500 ms (mas o menos) se desborde y me lleve a la interrupcion, en la interrupción se cuentan 15 ciclos (que son mas o menos 7 segundos) y cuando se cumplen los 15 ciclos se prende el led, despues pasados otros 15 ciclos se deberia apagar el led, aunque el programa solo prende el led a los 15 ciclos, mas nunca lo apaga.
Soy nuevo en esto de los pic y apenas estoy aprendiendo a usar interrupciones.
Le agradecería si me pudieran ayudar.
Adjunto el código.
#include <p16F887.inc>
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
#DEFINE BANCO0 BCF STATUS,RP0
#DEFINE BANCO1 BSF STATUS,RP0
CONT1 EQU H'20'
;aquí inicia el programa
ORG 0x00
GOTO begin
org 0x04
BANKSEL INTCON
bcf INTCON,7 ;Apaga interrupciones globales
int BANKSEL PIR1
BCF PIR1,TMR1IF ;Apaga bandera de desborde
BANCO0
clrf TMR1
incf CONT1,f ;incrementa contador de 524.28ms
movlw D'15'
subwf CONT1,w
;prueba si la cuenta es igual a 15
btfss STATUS,Z ;bandera Z encendida?
retfie ;cuenta diferente a 15, regresa sin modificar CONT1
BTFSS PORTD,0 ; ¿LED 0 ENCENDIDO?
GOTO ENC
BSF PORTD,0 ;APAGA LED
CLRF CONT1
retfie
ENC BSF PORTD,0 ;ENCIENDE LED
CLRF CONT1
retfie
;FIN DE LA RUTINA DE INTERRUPCION
begin
CLRF CONT1
BANCO0
bcf RCSTA,SPEN
BANCO1
CLRF ANSEL
clrf TRISD
BANCO0
clrf PORTD
BANKSEL PIR1
BCF PIR1,TMR1IF
BANKSEL T1CON
CLRF TMR1L
CLRF TMR1H
movlw B'00110000' ;Prescaler 1:8
movwf T1CON
BANKSEL PIE1
BSF PIE1,TMR1IE
BANKSEL INTCON
BSF INTCON,7
BSF INTCON,6
BANKSEL T1CON
BSF T1CON,TMR1ON
BANCO0
POP GOTO POP
end