Вы объявили в заголовочном файле переменную безымянного типа. Полагаю, adc_16_old.h был включен более чем в один файл исходников, а adc_union.h вы включили только в один. Если вы включите свой adc_union.h более чем в один файл исходиков - должны получить такую же фигню. В заголовочном файле должны определяться типы, а не переменные. Переменные в заголовочных файлах только объявляются. Вот если бы вы в заголовочном файле написали
CODE
typedef union
{
....
} data_modbus_in_type;
extern data_modbus_in_type Data_ModBus_IN;
а в каком-то одном из исходников написали (уже без extern!)
CODE
data_modbus_in_type Data_ModBus_IN;
ошибки бы не было.
Еще почитайте про
защиту от повторного включения заголовочных файлов, у вас ее нет.