‘壹’ 单片机C语言右移指令怎么用
用这种移位语句,就是这种结果。
你试试:_crol_()和_cror_()移位函数。
需要先加上头文件:
#include<intrins.h>
‘贰’ 单片机16位原码右移一位的程序
单片机16位原码右移以为,这是汇编语言中的指令,是对累加器A中的8位数依此向左移一位,还分带Cy的移位和不带Cy的移位。
指令分别为:RLCA;带Cy的右移位;RLA;不带Cy的移位。以RLA为例说明:假如A=10110010,则左移位一次后,这8位数向左移一位,最高位回到最低位,就像是8个人转了一圈似。移位后,A=01100101
‘叁’ 单片机 移位操作 右移 C语言
aa=_crol_(aa,1); //左移一位
aa=_cror_(aa,1); //右移一位
可以打开:intrins.h,查看。
‘肆’ C语言和单片机中的左移右移
# include "reg51.h" // 包含头文件
#define uchar unsigned char
void delay02s(void) // 延时0.2s子程序
{
unsigned char i,j,k;
for ( i=2;i>0;i-- )
for (j=200;j>0;j-- )
for (k=250;k>0;k-- );
}
void main (void) // 主函数
{
uchar i,j;
while (1) // 死循环
{
j=0x01; // j初始化为0x01,左移初始值
for(i=0;i<8;i++) // for循环语句,完成8个循环
{
P1= ~ j; // 对变量j 中的值按位取反后,从P1口输出
delay02s( ); // 延时0.2s
j= j<<1; // 左移1位
}
j=0x80; // 设置右移初始值j为0x80
for (i=0;i<8;i++)
{
P1= ~ j;
delay02s( );
j= j>>1; // 右移1位
}
}
}
‘伍’ 单片机 移位操作 右移 C语言
C51系列单片机中_crol_指令是循环左移函数,_cror_是循环右移函数,这是51中特有的指令,别的类型单片机就不能使用了。易于程序的移植和通用性考虑个人比较推荐用<< 左移, 右移>>这两个C中的移位符号。
‘陆’ 循环右移指令的目标操作数有哪些其指令功能是什么在此输入你
循环右移指令的目标操作数有RRA和RRCA,其指令功能是RRA执行结果是A中的数据循环右移1位,RRCA是带进位CY的循环右移。51单片机有两条右移指令,都以累加器A为操作目标,具体指令是RRA和RRCA。RRA执行结果是A中的数据循环右移1位,例如执行前A=10001100,执行后A=01000110,A的最低位被移到了最高位,这就是循环移位的意思。RRCA是带进位CY的循环右移,例如执前CY=0,A=11110001,执行后CY=1,A=01111000,A的最低位被移到了CY,而CY被移到了A的最高位。
‘柒’ 单片机 移位操作 右移 C语言
先说第一个问题:
比如用查表法将结果保存到变量i中,查表变量为x,则i=table[x],记住c语言里面数组是从0开始的,比如说上面的0x01就是table[0],0x02是table[1],以此类推。
再说第二个问题:
比如说从p1.0口发送出去,则可以写为
sbitout=p1^0;//定义out为p1.0口,这样今后好写程序
chari;
for(i=0;i<8;i++)
{
out=data&0x80;//因为高位在前,将它写成二进制就明白了
data<<=1;
}
上面的程序就能搞定了;
应该是所有的单片机都有cy位(不知道浮点dsp有没有);
c语言中左移和右移之后低位或高位自动补零,cy位也保持为零(视编译器而定,这个得看编译器手册),有些编译器提供了循环移位的函数;
还有什么不明白的补充问题就是
‘捌’ 汇编 的 RR 指令是怎么向右移位的
这是单片机的一条指令RR:不带进位的循环右移
RR00000001结果为10000000
RR10011100结果为01001110
RR的图示为上面的那个图。
下面的那个图为RRC(带进位的循环右移)
‘玖’ C51的单片机中右移指令>>为什么有时候最高位会补1
单片机右移分为算术右移和逻辑右移。(左移没有这个问题,0x01<<i就正确)
算术右移最高位是符号位,右移后符号位保持不变(如果一直右移会导致所有位都变成和最高位一样的值)。
逻辑右移才是最高位补0。
led因为是char,编译器会把">>"解释成算术右移,即最高位是符号位(0x80最高位正好是1),保持不变。最后导致结果不对。
led要定义为unsigned char就应该也对了。
‘拾’ 51单片机执行循环右移指令的问题
用带进位的rrc即可
MOV A,33H
JB ACC.0,TO2
SETC
JMP TO1
TO2:CLRC
TO1:MOV A,30H
RRC A
MOV 30H,A
MOV A,31H
RRC A
MOV 31H,A
MOV A,32H
RRC A
MOV 32H,A
MOV A,33H
RRC A
MOV 33H,A
随便写写的,但思路如此,可能有纰漏自己改改