位运算
结论:取字节的最低位赋值?
实验环境:AVR?Studio?+?WinAVR?071221?
实验程序:?
#include?<avr/io.h>?
typedef?unsigned?char?INT8U;?
typedef?struct?
{?
????INT8U???a:1;?
????INT8U???b:7;?
}?BTS;?
main()?
{?
????INT8U???i=0x00;?
????INT8U???j=0xFF;?
????BTS?????bit_t;?
?????
????while(1)?
????{?
????????bit_t.a?=?i;?
????????bit_t.b?=?j;?????
????????i++;?
????????j--;?
????}?
}?
软件仿真结果:?
????第一轮:开始时,bit_t?=?0xFF,i?=?0x00,j=0xFF?
????????????bit_t.a?=?i;????//?此时:bit_t?=?0xFE,最低位置0了?
????????????bit-t.b?=?j;????//?此时:bit_t?=?0xFE,?j低7bit位111?1111B?
????第二轮:开始时,bit_t?=?0xFE,i?=?0x01,j=0xFE?
????????????bit_t.a?=?i;????//?此时:bit_t?=?0xFF,最低位置1了?
????????????bit-t.b?=?j;????//?此时:bit_t?=?0xFD,?j低7bit位111?1110B?
????第三轮:开始时,bit_t?=?0xFD,i?=?0x02,j=0xFD?
????????????bit_t.a?=?i;????//?此时:bit_t?=?0xFC,注意:最低位置0了?
????????????bit-t.b?=?j;????//?此时:bit_t?=?0xFA,?j低7bit位111?1101B?
????好了,看出结果了吧。?
实际应用:?
????位域实际是很有用的,比如最近使用ADF7021,配置寄存器为32bit的,其中某些bit表示不同的设置,这时使用带位域的一个共用体,设置寄存器非常方便。?
?????