Битовые поля по стандарту упаковываются группами в 16 бит (или в
группу равную int - тут я забыл, у меня было это одинаково) Вот как
у меня union{
	struct { //
		unsigned short ErrorTIME	:1;	///< \brief 0й бит	1- (TRUE)- Ошибка при опросе ИМС времени
		unsigned short PUSTO		:1;	///< \brief 1й бит	1- (TRUE)- Ошибки в таймере нет
		unsigned short ErrorULIC	:1;	///< \brief 2й бит	1- (TRUE)- Ошибка при опросе уличного датчика темп.
		unsigned short ErrorDOP		:1;	///< \brief 3й бит	1- (TRUE)- Ошибка при опросе дополнительного датчика темп.		
		unsigned short ErrorTATM		:1;	///< \brief 4й бит	1- (TRUE)- Ошибка при опросе дополнительного датчика темп.				
		unsigned short ErrorPUSTO	:3;	///< \brief й бит	1- (TRUE)- 
		
		unsigned short RedyTIME		:1;	///< \brief 0й бит	1- (TRUE)- Готовы данные с ИМС времени
		unsigned short TimerOn		:1;	///< \brief 1й бит	1- (TRUE)- Таймер включон
		unsigned short RedyULIC		:1;	///< \brief 2й бит	1- (TRUE)- Готовы данные с уличного датчика темп.
		unsigned short RedyDOP		:1;	///< \brief 3й бит	1- (TRUE)- Готовы данные с дополнительного датчика темп.				
		unsigned short RedyTATM		:1;	///< \brief 4й бит	1- (TRUE)- Готовы данные с дополнительного датчика темп.						
		unsigned short RedyPUSTO	:3;	///< \brief й бит	1- (TRUE)- 	1- (TRUE)- 
	};
	struct {
		unsigned char Error;
		unsigned char Redy;
	};
	unsigned short All;
}	TDatchikiFlag;
 ErrorPUSTO и RedyPUSTO - это не используемые биты, причом RedyPUSTO можно было не писать :)