I'm having problems with 8051 based ISRs. The problem occures when:
1- Interrupt A is being serviced. 2- Interrupt B occures and is serviced (in the middle of ISR A execution. 3- Sometimes ISR A fails to complete.
I'm using the C ISRs used in C51 without any register set defined ("using xx"). My understanding is that the ISRs should get entered and serviced mutually exclusive from one another without corrupting one another's stack. Is this not the case?
I'm not a C51 guy but I hope I can help a little. It sounds as if Erik is correct: maybe your stack overflows, corrupting the return address of A? maybe you can use some kind of static variable to count the number of not yet finished ISRs to determine the depth of the stack?