理论和想法都可行,只是对于可以提高效率就不理想了;
51中位操作只能直接寻址操作,就是一个字节你需要写8个位操作指令,根据接收计数器去执行相应的指令
相比循环位移的话要差一些;
位操作用于特定固定位的操作会有优势,比如判断一些特定位的状态,无序(固定)的位复制等;
例如,可以用于端口映射sbit A_0 = ACC^0;
sbit A_1 = ACC^1;
sbit A_2 = ACC^2;
sbit A_3 = ACC^3;
sbit A_4 = ACC^4;
sbit A_5 = ACC^5;
sbit A_6 = ACC^6;
sbit A_7 = ACC^7;
void Disp_SetSeg(u8 tmp) //设置段显示数据
{
ACC = tmp;
LS1 = A_0;
LS2 = A_1;
LS3 = A_2;
LS4 = A_3;
LS5 = A_4;
LS6 = A_5;
LS7 = A_6;
LS8 = A_7;
}
以上代码可以任意端口定义IO,效率低于直接同一端口赋值,高于类似 if(dat & 0x01) LEDS1 = 1;else LEDS = 0;的代码 |