When you ask why 'something does not work' you should always mention
1) what it is inteded to do
2) what it actually does.
I can't make any sense of your code. The first few lines look like symbol definitions, but I get the feeling that you want them to be assignments?
The isr: label should probably be at ORG 4 (either absloutely or by the linker script), but I don't think it is now.
Do NOT use the $+2 construct! It makes the code difficult to read and error prone to write (is +2 one instruction or two?). Use labels, like you do elsewhere.
Inside an interrupt handler you can't be sure what PCLATCH will contain, so you can't do any goto's (or calls) untill you have set PCLATH. And of course you must first save the old PCLATH so you can restore it at the end of the ISR.
If you are writing an interrupt hander you will need to save an restore the context, which must be done in a complex way on these chips. Check the datasheet for examples.
You don't show the handler code, so I can't check that. It must at least clear the interrupt source bit, and end with a RETFIE.