Hi, sorry, my English is not good, I'm using the Google translator. I have a problem in the flow of the program in assembly about PIC16F18875, when BTFSC gets 1 then it calls the instruction, CALL subroutine. In the subroutine the bank "banksel porta" is selected and then channel 5 PORTA, 5 is written. But it seems that he does not execute "BANKSEL PORTA" and therefore he does not write ON on PORTA, 5. But if I call BANKSEL before executing CALL subroutine it works fine.
The code, ISR, calls a counter CALL TIMER0_COUNTER. This counter writes data in memory: TIMER01 After, BTFSC TIMER01,4 And if it's 1, CALL SUBRUTINE BLINK_PORTA5 BANKSEL PORTA BSF PORTA, 5 RETURN But BANKSEL PORTA seems not to be executed
ISR CODE 0x0004
;Drive interrupt Timer0
BANKSEL PIR0
BTFSC PIR0,TMR0IF
CALL TIMER0_COUNTER
BTFSC TIMER01,4
CALL BLINK_PORTA5
BANKSEL PIR0
BCF PIR0,TMR0IF
RETFIE
;;;;;SUBRUTINE BLINK PORTA5
BLINK_PORTA5
BANKSEL PORTA *********************** IT IS NOT EXECUTED
BSF PORTA,5
RETURN
TIMER0_COUNTER
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,, BANKSEL PORTA ;;;;;;;;;;;;;;;;;;;;;;; HERE IT WORKS!!! WHY!?!?!?!
MOVLW 0x01
ADDWF TIMER00,1
BTFSS STATUS,C
RETURN
MOVLW TIMER00_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0x01
ADDWF TIMER01,1
BTFSS STATUS,C
RETURN
MOVLW TIMER01_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER02,1
BTFSS STATUS,C
RETURN
MOVLW TIMER02_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER03,1
BTFSS STATUS,C
RETURN
MOVLW TIMER03_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER04,1
BTFSS STATUS,C
RETURN
MOVLW TIMER04_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER05,1
BTFSS STATUS,C
RETURN
MOVLW TIMER05_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER06,1
BTFSS STATUS,C
RETURN
MOVLW TIMER06_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER07,1
BTFSS STATUS,C
RETURN
MOVLW TIMER07_OVERFLOW
MOVWF TIMER_OVERFLOW
RETURN
The code, ISR, calls a counter CALL TIMER0_COUNTER. This counter writes data in memory: TIMER01 After, BTFSC TIMER01,4 And if it's 1, CALL SUBRUTINE BLINK_PORTA5 BANKSEL PORTA BSF PORTA, 5 RETURN But BANKSEL PORTA seems not to be executed
ISR CODE 0x0004
;Drive interrupt Timer0
BANKSEL PIR0
BTFSC PIR0,TMR0IF
CALL TIMER0_COUNTER
BTFSC TIMER01,4
CALL BLINK_PORTA5
BANKSEL PIR0
BCF PIR0,TMR0IF
RETFIE
;;;;;SUBRUTINE BLINK PORTA5
BLINK_PORTA5
BANKSEL PORTA *********************** IT IS NOT EXECUTED
BSF PORTA,5
RETURN
TIMER0_COUNTER
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,, BANKSEL PORTA ;;;;;;;;;;;;;;;;;;;;;;; HERE IT WORKS!!! WHY!?!?!?!
MOVLW 0x01
ADDWF TIMER00,1
BTFSS STATUS,C
RETURN
MOVLW TIMER00_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0x01
ADDWF TIMER01,1
BTFSS STATUS,C
RETURN
MOVLW TIMER01_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER02,1
BTFSS STATUS,C
RETURN
MOVLW TIMER02_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER03,1
BTFSS STATUS,C
RETURN
MOVLW TIMER03_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER04,1
BTFSS STATUS,C
RETURN
MOVLW TIMER04_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER05,1
BTFSS STATUS,C
RETURN
MOVLW TIMER05_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER06,1
BTFSS STATUS,C
RETURN
MOVLW TIMER06_OVERFLOW
MOVWF TIMER_OVERFLOW
MOVLW 0X01
ADDWF TIMER07,1
BTFSS STATUS,C
RETURN
MOVLW TIMER07_OVERFLOW
MOVWF TIMER_OVERFLOW
RETURN