What would cause single step debugging through a module under the control of the ISD51 monitor to suddenly start stepping at 2 line intervals, and refusing to breakpoint at many locations? (The program suddenly takes on this behaviour, having started out fine.)
The cause of the effect you are seeing is that the 8051 blocks interrupts for more than a single instruction in some cases. This happens when your program accesses an interrupt enable register or an interrupt priority register. In such situations, ISD51 steps over two or more assembler instructions when single-stepping. There is no way around this. I just updated the ISD51 manual to include information about this effect. http://www.keil.com/support/man/docs/isd51/isd51_sideeffects.htm Jon