All that volatile does, is to let the optimiser skip over the declaration.. This way the compiler lets it stay where you put it... If, for example, you are testing but not actually using the variable, the optimiser will just leave it out!! Very annoying whilst trying to debug!!
If you are using the free version, then forget the volatile bit as there is no / little optimisation done..
I tried your suggestion to assign it to an address and the compiler did that but in the main code it still doesn't call the function when the bit is changed. I looked @ the program memory for the "if" statement and it shows MOVF tstatus, W, ACCESS. If I understand this it is looking @ the whole byte and not the bit. I have tried to mask i.e. if (tstatus.a &0x01 ==true)call function ,but it still will not execute that line.