Цитата(Пал @ Dec 11 2008, 17:58)

Вы меня не поняли. Я про битовые поля Мне нужно обратиться к битам 5-16 регистра ADDR, в которых содержится результат преобразования АЦП. Но прочитать такое поле - полбеды, сдвинул замаскировал и готово. а если модифицировать? Руки сломаешь.
Ну, руки ломать не надо - это главный инструмент программиста.

Но вот голову один раз можно и поломать.
Когда мне нужно работать с битами, то я обычно создаю необходимые макросы, которые работают по
битовым маскам.
Создай макросы типа:
#define GET_REG( reg, mask ) ( (reg) & (mask) )
#define SET_REG( reg, val ) ( (reg) |= (val) )
#define CHK_REG( reg, mask ) ( (reg) & (mask) == (mask) )
#if ( CPU_TYPE == LPC23xx )
#define ADC_DATA_REG AD0DR0
#define ADC_DATA_SHFT 5
#define ADC_DATA_MSK 0x3FF
#define ADC_DONE BIT( 31 )
#define ADC_DONE_STATE 1
#elif (CPU_TYPE == ??? )
....
#endif //CPU_TYPE
#define ADC_GET_DATA() ( GET_REG( ADC_DATA_REG, (ADC_DATA_MSK << ADC_DATA_SHFT) ) >> ADC_DATA_SHFT )
#define ADC_IS_DONE() ( GET_BIT( ADC_DATA_REG, ADC_DONE ) == ADC_DONE_STATE )
На 100% правильность реализации не претендую, вариантов реализации много, кому как нравится.
Но думаю идея понятна.