If I
#define aa=DWORD[0x30];
#define aa=DBYTE[0x30];
In all fairness (to Keil), however, the array/index characteristics of the 'WORD versions of these macros is noted in the C51 manual. My warning came about as a result of seeing the OP's use of the same index value when using both the 'BYTE and 'WORD macros.