1关于寄存器操作的一些常用方法:
1.1 描述:要操作寄存器的某一位或则某些位,可以把相应的数据左移到相应位上,再做处理。文字描述太拗口。直接举实例吧。
例如:
1.2 寄存器A 有32位,现在要让第10位 第11位 分别为1和0,操作如下:
A&=~(0x03<<10);//清零寄存器A的第10位 第11位
A|=0x01<<10;//再把第10位置1
1.3寄存器A 有32位,现在要让第10位,第11位,第12位 分别为0、0、1,操作如下:
A&=~(0x07<<10);//清零寄存器的第10 11 12 位
A|=(0x01<<12);//把寄存器第12位置1
1.2 要操作寄存器的某些位,首先把这些位清零 ,然后再处理。
1.2.1清零某位或某n位的操作是:移位取反 再按位相与
1.2.2置1 某位或某n位的操作是:移位按位相或
1.3 判断寄存器的某位的状态的方法:
把数0x01左移到相应位上,在和寄存器按位与, 结果为1 表示寄存器对应位为1,否则为0.
例如:寄存器A有32位 判断第20位,21位的状态为1还是为0。
char status[2];
status[0]=( A&(0x01<<20)) ? 1:0;
status[1]= (A&(0x01<<21) )? 1:0;
status[0]=1表示寄存器第20位为 1 否则为0.
status[1]=1表示寄存器第21位为 1 否则为0.