❶ 单片机移位问题
_crol_是自编的移位函数吧,
第一次循环就是if条件为0,当i=0时,0x7f左移0位,此时0x7F与0x80按位与结果是0,因此SDA=0;
因为传输的数据是0x7F,数据本身二进位0的个数就一个。因此执行时也就SDA
只有一次是0,当然如果你传输的是0x01那就多了。
呵呵,此程序是i2c通信中的吧。
❷ 单片机 左移函数是怎么用的
左循环本征函数:
函数原型:unsigned char _crol_(unsigned char a,unsigned char n);
单片机左移函数用法:
例如,P2=0xff; P2=_crol_(P2,1);//语法是对的,但这是没意义的,因为执行程序后P2还是原值0xff
P2=0xfe; P2=_crol_(P2,1);//执行程序后P2=0xfd
(2)单片机移位扩展阅读:
单片机相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。单片机也被称为单片微控器,属于一种集成式电路芯片。
在单片机中主要包含CPU、只读存储器ROM和随机存储器RAM等,多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。
❸ 关于单片机按键移位的问题,程序如下
分三种情况,1.
按下,
2.
防抖,3.
抬起
第1和2中,你估计已经明白
然后第3种,当抬起时,由于key_v记录的是按下的值,0x01或0x02,抬起后key_s变为0x03,所以程序会执行proc_key过程,但由于两个条件都未满足,也就是啥也没做就退出来了。现在key_v变成了
0x03,等待下次按下了。
❹ 想知道单片机》《移位符号的用法。想要实例就这个程序希望大家给一些解释。
如果将该数值左移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
❺ 单片机 移位 问题
不一样的,第一个执行后结果为P0=0x3f(0011 1111);
第二个执行后结果为:P0=0xbf(1011 1111);
❻ 单片机 移位操作 右移 C语言
C51系列单片机中_crol_指令是循环左移函数,_cror_是循环右移函数,这是51中特有的指令,别的类型单片机就不能使用了。易于程序的移植和通用性考虑个人比较推荐用<< 左移, 右移>>这两个C中的移位符号。
❼ 单片机移位运算顺序问题
因为你后面那句相当于temp = temp>>2;中间结果没有赋值给temp!
❽ 51单片机移位操作问题
这是编译器优化问题,可以降低编译器优化等级
❾ 有关于单片机数据移位的问题,希望大虾们可以帮帮忙啊!!!小弟感激不尽啊。。。
sbit P1_7=P1^7;//需要先声明各个位引脚,因为C语言不能直接给P1.7幅值
sbit P1_6=P1^6;
sbit P1_5=P1^5;
sbit P1_4=P1^4;
sbit P1_3=P1^3;
pp=pp<<6; //整型变量16位,移动6位,让最高位到D15位置
if(pp&0x8000) P1_7=1; //最高位幅值给P1.7
else P1_7=0;
pp=pp<<1; //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_6=1; //次高位赋值给P1.6
else P1_6=0;
pp=pp<<1; //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_5=1; //依次类推P1_5,P1_4.......
else P1_5=0;
pp=pp<<1; //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_4=1; //依次类推P1_4.......
else P1_4=0;
pp=pp<<1; //左移一位,让次高位到最高位位置
if(pp&0x8000) P1_3=1; //依次类推P1_3.......
else P1_3=0;
}
❿ 用c写51单片机代码,其中“>>”来移位实现的功能是什么
a>>6表示a左移6位,也就是除以32,这样可以加快单片机的处理速度(移位运算速度远高于除法),a本身的值不变;
左移右移运算只对int,char有效,float和double则不可以~
1<<i就是1右移i位,多数情况都是为后续的位运算做准备……
比如按位与,按位或,最常用的就是判断单片机IO口的状态~