📄 c51中位运算的分析应用.txt
字号:
汇编的移位操作很容易 RR RRC RL RLC
C51中,移出很容易,<< >> ;移入操作中的左移入也容易,困难在右移入
一:IC读写应用
typedef unsigned char uchar;
typedef unsigned int uint;
1:送数
送两个单独字节的数据的程序,左送 &0x80 右送 &0x01
bit out;
out = low & 0x01;
low >>= 1;
low |= (high & 0x01)<<7;
high >>= 1;
2:取数 //注意date为测试程序用的数据,实际情况是数据线上的位数据
a:如果是先接受高位后接受低位 (i2c总线)
uchar i;
uchar temp = 0;
uchar date = 0x82;
for (i = 0; i < 8; i++)
{
temp <<= 1; //左移
temp |= (bit)(date & 0x80);
date <<= 1;
}
b:如果是先接受低位,后接受高位
uchar i;
uchar temp = 0;
uchar date = 0x82;
for (i = 0; i < 8; i ++) //注意是先取数再移位
{
temp |= (bit)(date & 0x01);
date >>= 1;
temp = _cror_(temp,1);
//循环右移,应用_cror_()函数需要包含头文件<intrins.h>
}
如果不用_cror_()函数
则for循环应该这样写(相当于重写_cror_()函数)
for (i = 0; i < 8; i ++)//注意是先移位再取数
{
temp >>= 1;
temp |= (date & 0x01) << 7;
date >>= 1;
}
三:任意一位的置位或者取反运算
置位运算
low |= 0x01; (置最低位为1)
取反运算
low |= ~low & 0x01;
四:合并和拆分数据
1:合并两个单字节数据为一个双字节数据
uint len;
uchar low;
uchar high;
Len |= high;
Len <<= 8;
Len |= low;
2: 拆分一个双字节数据为两个单字节数据
uint len;
uchar low;
uchar high;
low |= len;
high |= len >> 8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -