; Variables locales
CBLOCK 0xF0
Contador
STATUS_TEMP
W_TEMP
PCLATH_TEMP
ENDC
;----------- CONFIGUARION INICIAL ------------------------
ORG 0x00 ; direccion de comienzo del programa, si no le pones nada comienza en la cero
GOTO programa
ORG 0x04
GOTO Interrupcion
;------------------------------------CONFIGURACION INICIAL--- ------------------------------------------------------
programa
BANKSEL ANSEL ;ir a bank1 para configurar
clrf ANSEL ;desactivar entradas analogicas
movlw b'11111111' ;cargamos todo a 1 para que el PORTA sea entrada
movwf TRISA ;PORTA entrada
clrf TRISB ;PORTB salida
; Oscilador
bsf OSCCON,IRCF2 ;oscilador interno, pone a 1 el bit 15 para que sea salida
bsf OSCCON,IRCF1 ;Fosc = 4MHz, pone a 1 el bit 16 para que sea salida
; Timer
movlw b'01000' ;Ponemos este numero para configurar el TMR0 a 1:2
movwf OPTION_REG ;Movemos el numero de W al OPTION REG
BSF INTCON,TMR0IE ; Activo interrupcion del TMR0
BCF INTCON,TMR0IF ; Borro flag
BSF INTCON,PEIE ; Activo interrupcion de perifericos
BSF INTCON,GIE ; Activo la interrupciones globales
;Valores iniciales
BANKSEL PORTB
CLRF PORTB ;Borramos PORTB para que no quede ninguna salida activada y se ponga en marcha al iniciar
CLRF TMR0 ;Borramos el TMR0
CLRF Contador
;_________________PROGRAMA PRINCIPAL_________________________
Principal:
BTFSS PORTA,0
GOTO Activo
; PORTA,0 = 0
BCF PORTB,0 ; Casi que se puso en 0 simplemente pongo en 0 PORTB,0
GOTO Principal
Activo:
; PORTA,0 = 1
MOVLW 0x03 ; Activo los 2 PORTB
MOVWF PORTB
CLRF Contador ; Limpio contador de la interrupcion
GOTO Principal
;_________________INTERRUPCION_________________________
Interrupcion:
MOVWF W_TEMP ;Copy W to TEMP register
SWAPF STATUS, W ;Swap status to be saved into W
CLRF STATUS ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
MOVWF STATUS_TEMP ;Save status to bank zero STATUS_TEMP register
MOVF PCLATH, W ;Only required if using page 1
MOVWF PCLATH_TEMP ;Save PCLATH into W
CLRF PCLATH ;Page zero, regardless of current page
CLRF TMR0
BCF INTCON,TMR0IF
INCF Contador,F
MOVLW d'250'
SUBWF Contador,W
BTFSC STATUS,Z
BCF PORTB,1
MOVF PCLATH_TEMP, W ;Restore PCLATH
MOVWF PCLATH ;Move W into PCLATH
SWAPF STATUS_TEMP, W ;Swap STATUS_TEMP register into W
MOVWF STATUS ;Move W into STATUS register
SWAPF W_TEMP, F ;Swap W_TEMP
SWAPF W_TEMP, W ;Swap W_TEMP into W
RETFIE