Цитата(torik @ Jan 31 2007, 08:28)

Да не - адрес можно и "0xB000" и "0x8000" - это просто разные светодиоды. Название переменных "D5ON" (очепятка в тексте сообщения)...
Дело в другом:
в файле fh2regs.h делаю объявление:
EXTERN xdata volatile BYTE D5ON _AT_ 0xB000;
А, теперь понял. Тут дело вот в чем, твоя переменная D5ON объявлена, как внешняя с атрибутом EXTERN (в этом случае она должна присутствовать в какой-нибудь библиотеке, но ведь ты ее туда не помещал, поэтому следует варнинг и, соответственно, обращение к нулевому адресу). Кроме того, EXTERN и _AT_ написаны в верхнем регистре, т.к. переопределяются где-то в заголовочных файлах. IMHO, следует поступить проще: нужно объявить D5ON вот так:
xdata volatile BYTE D5ON _at_ 0xB000; // LED address
то есть, именно так, как написано в доке, а не так, как сделал ты. И все будет в порядке. В этом случае компилятор генерирует правильный код. Вот сишный текст:
xdata volatile BYTE D5ON _at_ 0xB000; // LED address
void proba(void)
{
BYTE dum;
dum = D5ON;
}
А вот соответствующий ассемблерный:
; FUNCTION proba (BEGIN)
; SOURCE LINE # 38
; SOURCE LINE # 39
; SOURCE LINE # 41
0000 90B000 MOV DPTR,#D5ON
0003 E0 MOVX A,@DPTR
0004 F500 R MOV dum,A
; SOURCE LINE # 42
0006 22 RET
; FUNCTION proba (END)