How to use PIC16F84A TMR0 Interrupt as a substitute to the Sleep instruction in Assembly
In your main loop, when you want to have a delay and wait for a while, clear tmr0 and the counter variable and then enable tmr0 interrupts. Immediatly enter a little loop which repetitively compares the value of the counter variable against the limit value (number of required tmr0 interrupts). The counter variable would be incremented in the tmr0 ISR every time the ISR is executed (every time tmr0 overflows). When the counter variable value matches the limit value jump out of the loop, disable tmr0 interrupts and continue on the main loop. The code to achieve an exact 1 second delay would require a little complexity because tmr0 has a count of 256 and this figure combined with the available pre-scaler values can make life a little more complicated.
To compare the counter value against the limit value subtract one from the other and test the zero flag.
Alternatively you could start with the counter value at the required count and decrement it once every tmr0 interrupt. Then test the counter's value for when it reaches zero by repetitively moving it into itself in the repeating loop (MOVF Counter,F) and then testing the zero flag. The MOVF instruction sets the zero flag if the result is zero. This method is a little simpler than the first because no subtraction is necessary.
In the PIC 16F84A there are 68 general purpose registers (SRAM) for holding variables. They start at address 0x0C. So, before your ORG 0x0000 you would initialise your variables like this
Variablename1 equ 0x0C
Variablename2 equ 0x0D
Variablename3 equ 0x0E
and so on...