Hello! I'm using a CYGNAL C8051F020 with the CYGNAL C8051F uVISION2 DEBUG DRIVER v1.29, Keil C51 V7.05 with µVision2 V2.37. I've got a problem which I've isolated like this: The command
MOVX @DTPR,A
Sounds like a hardware problem. What happens in the simulator?
Taking a glance at the data sheet, it looks like the part has a 4K RAM built in. That's 12 bits of address space, so the high-order 4 bits would be ignored. Thus, 0x12b6 would alias to 0x02b6. There are some mode registers you have to set if you want to access off-chip xdata memory. Perhaps those registers aren't configured correctly.
How do you have EMI0CF configured? Refer to the device datasheet. EMI0CF's post-reset value is 0b00000011, which configures the External Memory Interface for "internal only". This device has 4K (0x1000) of "internal" XRAM, so unless you've set EMI0CF to some other value, the byte at location 0x02B9 also appears at address 0x12B9, 0x22B9, 0x32B9, 0x42B9...
Thanks to all! The problem was the EMI0CF setting. Now it work ;-)