Electronic – Will assigning a value to the W-reg in PIC16F84A during an interrupt, save it after the interrupt is disabled

assemblypicregister

Okay so, I'm having this part of my program that needs a value to be checked to continue.

basically, here is what it is doing:

WAIT_INT   ; wait for interrupt
     CLRWDT
     BTFSS TO_LOOP_OR_NOT    ; will be set after interrupt runs
     GOTO WAIT
     ; interrupt assigns a value to W-reg
     ; When it exits, it will be compared here below
     SUBLW 01H
     BTFSS STATUS, Z            ; checks if equal
     GOTO WAIT_INT
     
     ; rest of code

I am stuck in this part and I don't know if the value W-reg is saved after being assigned in an interrupt.

Best Answer

The answer is in the datasheet in section 2.4.

https://ww1.microchip.com/downloads/en/devicedoc/35007b.pdf

When an interrupt occurs the PCLAT and PCLATH are stored on the stack. It doesn't day anything about WREG being stored. If you assign a value to WREG in an interrupt it the value will persist when the interrupt returns.

The PIC16F84A doesn't have a notion of a stack in memory. It only has a hardware return address stack for interrupts and function calls. In fact if you look in Table 7-2 (PIC16CXXX INSTRUCTION SET) there are no push and pop instructions. You can however use the INDF register for the purposes of implementing a stack in memory.

I would point out though, that you are waiting in a loop for an interrupt to occur. You could just as easily test the interrupt flags directly without actually going into an interrupt, and you will probably achieve the same result.

Related Topic