1. 想知道单片机》《移位符号的用法。想要实例就这个程序希望大家给一些解释。
如果将该数值左移1位,就变成了 0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa
从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。
例如:
unsigned char a;
a=1; //0b00000001
a<<=1; //0b00000010 a左移1位等效于a=a*2
a<<=2; //0b00001000 a左移2位等效于a=a*2的2次方(4)
a<<=3; //0b01000000 a左移1位等效于a=a*2的3次方(8)
a<<=1; //0b10000010 a左移1位等效于a=a*2
a<<=1; //0b00000000 a再次左移1位后溢出了,结果变成0了
c=a<<b; 在变量都是8位的时候,等效于 c=(a*pow(2,b))%256
2. 单片机中的逻辑运算怎么算的
在逻辑代数中,有与、或、非三种基本逻辑运算。表示逻辑运算的方法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。逻辑运算通常用来测试真假值。最常见到的逻辑运算就是循环的处理,用来判断是否该离开循环或继续执行循环内的指令。
累加器A清0指令。
CLR A;单片机软件指令功能是将累加器A中的内容清0。影响单片机标志寄存器PSW中的奇偶标志位P。
累加器A取反指令。
CPL A;单片机软件指令功能是将累加器A中的内容全部取反,结果送回A中。影响单片机标志寄存器PSW中的奇偶标志位P。
常用于单片机某个存储器单元或某个存储器区域中带符号数的求补。
RL A;左循环移位指令:
单片机软件指令功能是将累加器A的8位二进制数向左移动1位,累加器A中最左边1位(即最高位A.7)移至最右边1位(即最低位A.0)。不影响单片机标志寄存器PSW中的标志位。
RR A;右循环移位指令:
单片机软件指令功能是将累加器A的8位二进制数向右移动1位,累加器A中最右边1位(即最低位A.0)移至最左边1位(即最高位A.7)。不影响单片机标志寄存器PSW中的标志位。
RLC A;带进位左循环移位指令:
单片机软件指令功能是将累加器A的8位二进制数和进位CY向左移动1位,累加器A中最左边1位(即最高位A.7)移至CY,CY原内容移至累加器A的最右边1位(即最低位A.0)。影响单片机标志寄存器PSW中的进位标志位CY。
RRC A;带进位右循环移位指令:
单片机软件指令功能是将累加器A的8位二进制数和进位CY向右移动1位,累加器A中最右边1位(即最低位A.0)移至CY,CY原内容移至累加器A的最左边1位(即最高位A.7)。影响单片机标志寄存器PSW中的进位标志位CY。
(2)单片机逻辑运算循环移位例题扩展阅读:
逻辑运算组成部分
Boolean(布尔运算)的参数面板可分成三部分。
布尔运算练习模型:骰子
Pick Boolean(拾取布尔运算对象)卷展栏
该卷展栏用来拾取运算对象B,如图所示。
在布尔运算中,两个原始对象被称为运算对象,一个叫运算对象A,另一个叫运算对象B。在建立布尔运算前,首先要在视图中选择一个原始对象,这时Boolean按钮才可以使用。进入布尔运算命令面板后,单击Pick Operand B命令按钮来选择第二个运算对象。
· Pick Operand B(拾取运算对象B):单击该按钮,在场景中选择另一个物体完成布尔合成。其下的4个选项用来控制运算对象B的属性,它们要在拾取运算对象B之前确定。
· Reference(参考):将原始对象的参考复制品作为运算对象B,以后改变原始对象,也会同时改变布尔物体中的运算对象B,但改变运算对象B,不会改变原始对象。
· Copy(复制):将原始对象复制一个作为运算对象B,而不改变原始对象。当原始对象还要作其他之用时选用该方式。
· Move(移动):将原始对象直接作为运算对象B,它本身将不再存在。当原始对象无其他用途时选该用方式。该方式为默认方式。
· Instance(关联):将原始对象的关联复制品作为运算对象B,以后对两者中之一进行修改时都会同时影响另一个。
Parameters(参数)卷展栏
该卷展栏参数可分为三个区域,如图所示。
Operands(操作对象)选项组
该组参数用来显示所有的运算对象的名称,并可对它们作相关的操作。
Operands List(操作对象列表):该列表框中列出所有的运算对象,供编辑操作时选择使用。
Name(名称):显示列表框中选中的操作对象的名称。可对其进行编辑。
Extract Operand(提取运算对象):它将当前指定的运算对象重新提取到场景中,作为一个新的可用对象,包括Instance(关联)和Copy(拷贝)两种属性。这样进入了布尔运算的物体仍可以被释放到场景中。只有从其上方的列表框中选择一个操作对象后才能激活该按钮。
3. 单片机C语言怎么通过位移指令与逻辑运算实现循环左移
unsigned char tmp=0xa0;
tmp=(tmp<<1) | (tmp&0x80>>7);
因为要循环左移,所以要补上的是原来的最高位,也就是最左边的那个位数,而不是每次都补一。
4. 16位单片机循环移位
CY 在这是进位标志位,当最高位位一时经过这程序之后变为1,反之则为0,还有就是在移低八位是第八位移入cy,但在移高八位时,他又把cy的状态,移入高八位的最低位,也就是16位数的第九位。
5. 单片机循环左移
增加一个全局变量,将循环常数给变量,再对变量做左循环,将变量赋值给P0,
uchar a,b, c;
在主循环中P0=_crol_(P0,1); //P0的值向左循环移动
修改为
c=_crol_(c,1); //P0的值向左循环移动
P0=c;
6. 单片机循环移位C语言,即让如将二进制数,形如:(ABCD EFGH),移位后变为(HGFE DCBA)
你这个虽然有规律,属于镜像交换,简单移位做不到。
下面用old代表原数,new代表新数
char old,new;//定义两个变量
old=原数; // 将ABCDEFGH赋给old;如:old=0xf0;
new=0;
for(i=0;i<8;i++)
{
new<<=1;
if((old&0x01)==0x01) new|=0x01;
old>>=1;
}
执行后新数new,就是你要的镜像交换的数,这时new就等于HGFEDCBA
用心回答,望你采纳。
7. 单片机循环移位指令中A=7AH,CY=1,执行指令RLC A,结果是怎么算的
首先,RLC表示A带进位标志(CY)循环左移一次,相当于乘以2;
进位标志CY=1,则A=7AH=123D(十进制的123)的带进位标志用二进制表示为1 0111 1010 ,将其整体左移一位(就像是排头走到最后一个,其他8个依次补位),
变为0 1111 0101,即十六进制的F5H=246D(即十进制的246),此时,第一个数 0 就是进位标志,即CY=0
所以,执行后结果为,(A)=F5H,CY=0。F5H=246D=123D×2