Hola muchachos que tal... Aquí recordando mis viejos tiempos en ASM, pues me he puesto a compilar un programa e cual supuestamente me deberia de dar una base de tiempo de 1 segundo con el timer 1, he realizado todas las configuraciones de los registros, pero al parecer el TMR1 nunca me interrumpe, puesto que la bandera TMR1IF nunca se me activa..., pues si alguien me da una manita, a ver que es lo que tengo mal... Aquí les dejo el codigo, es cortiquito, pues to que lo unico que hago es prender y apagar un led durante un segundo... ! segundo apagado y un segundo enecendido!!!!
Estoy trabajando con un 16F877A, el Timer 1 en modo contador, con un cristal de 32768 kHz entre las paticas RC0 y RC1...
LIST P=16F877A
INCLUDE "P16F877A.INC"
ORG 0X00 ;
GOTO PRINCIPAL ;
ORG 0X04 ;
GOTO INTERRUM ;
ORG 0X05 ;
;----------------PROGRAMA PRINCIPAL-----------------------------
PRINCIPAL
CLRF PORTC ; LIMPIO EL PUETO C
CLRF PORTB ; LIMPIA LOS BITS DEL PUERTO B
BSF STATUS,RP0 ; SELECCIONA EL BANCO 1
BSF PIE1,TMR1IE ; HABILITO LA INTERRUPCIÓN POR TIMER1
MOVLW 0X00 ; PARA CONFIGURAR EL PUERTO B
MOVWF TRISB ; CONFIGURA PUERTO B COMO SALIDA
MOVLW 0XFF ; PARA CONFIGURAR LOS PUERTOS COMO ENTRADAS
MOVWF TRISC ; CONFIGURA EL PUERTO C COMO ENTRADA
CLRF STATUS ; REGRESA AL BANCO 0
;-------------------CONFIGURACIÓN DEL TIMER 1---------------------
BSF T1CON,0 ; HABILITAMOS EL TIMER 1 (TMR1ON=1)
BSF T1CON,1 ; SEÑAL DEL RELOJ DEL TIMER 1 EXTERNA (TMR1CS=1)
BSF T1CON,2 ; NO SE SINCRONIZA LA SEÑAL DE RELOJ DEL TMR1 CON LA SEÑAL EXTERNA (T1SYNC=1)
BCF T1CON,3 ; NO HABILITA EL OSCILADOR DEL TIMER 1 (T1OSCEN=0)
BCF T1CON,4 ; PRE DIVISOR DE FRECUENCIA EN 1 (T1CKPS0=0)
BCF T1CON,5 ; PRE DIVISOR DE FRECUENCIA EN 1 (T1CKPS1=0)
;-------------------HABILITACION DE INTERRUPCIONES----------------
BSF INTCON,GIE ; HABILITAMOS TODAS LAS INTERRUPCIONES
SUEÑO NOP ;
GOTO SUEÑO ; A DORMIR!!!!
GOTO SUEÑO ; A DORMIR!!!!
;-------------------RUTINA DE SERVICIO DE INTERRUPCIÓN------------
INTERRUM
BTFSC PORTB,1 ; PREGUNTO COMO ESTÁ EL LED, ENCENDIDO O APAGADO?
GOTO OFF_LED ; ESTA PRENDIDO, VOY A APAGARLO
BSF PORTB,1 ; ESTA APAGADO, VOY Y LO ENCIENDO
BCF PIR1,TMR1IF ; BORRO LA BANDERA DE INTERRUPCIÓNPOR TMR1
RETFIE ; ME RGRESO AL PROGRAMA
OFF_LED
BCF PORTB,1 ; APAGO EL LED
BCF PIR1,TMR1IF ; BORRO LA BANDERA DE INTERRUPCIÓN POR TMR1
RETFIE ; ME REGRESO AL PROGRAMA
END ; FIN DE PROGRAMA
Atte: Enigma... La llanerita de Guayana