dat>>=1; //将dat的各数据位右移1位,因为先读出的是字节的最低位

/*****************************************************函数功能:从1302读一个字节数据入口参数:x********... /*****************************************************
函数功能:从1302读一个字节数据
入口参数:x
***************************************************/
unsigned char Read1302(void)
{
unsigned char i,dat;
delaynus(2); //稍微等待,使硬件做好准备
for(i=0;i<8;i++) //连续读8个二进制位数据
{
dat>>=1; //将dat的各数据位右移1位,因为先读出的是字节的最低位
if(DATA==1) //如果读出的数据是1
dat|=0x80; //将1取出,写在dat的最高位
SCLK=1; //将SCLK置于高电平,为下降沿读出
delaynus(2); //稍微等待
SCLK=0; //拉低SCLK,形成脉冲下降沿
delaynus(2); //稍微等待
}
return dat; //将读出的数据返回
}

为什么先读出的是字节的最低位???清详细解释下,谢谢!!!
为什么要先右移一位,???清详细解释下,谢谢!!!
展开
 我来答
竹叶兰之夏
2015-08-11 · 超过63用户采纳过TA的回答
知道小有建树答主
回答量:83
采纳率:0%
帮助的人:78.6万
展开全部
驱动?裸板?1302是什么?也不说清楚,谁知道啊。
据我估计,你的硬件手册说明是先读低位。依次往高了读。

那么他是每次把最低位放到最高位,右移一位,这样八次,第一次的最高位就变成了最低位,
最后一次存放的位就成了最高位。这样做的话,遇到0可以不用管,直接位移就行了。
这样写代码简洁高效,硬件运算量低。
z伊凡z
推荐于2018-04-19 · TA获得超过229个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:100万
展开全部
假设你要读出一个8位数据0010 1001,他从最低位逐位向你发,你该怎么接收?
如程序所示:建立一个变量dat,接收数据后循环右移,你第一次接到1变成了1000 0000,然后循环右移接收下一位变成了0100 0000,如此循环8次后dat便会完整的接收到你要接受的数据:0010 1001
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式