ds1302当中编辑读地址数据函数的问题

ucharDs1302Read(ucharaddr){ucharn,dat,dat1;RST=0;_nop_();SCLK=0;//先将SCLK置低电平。_nop_();... uchar Ds1302Read(uchar addr)
{
uchar n,dat,dat1;
RST = 0;
_nop_();
SCLK = 0;//先将SCLK置低电平。
_nop_();
RST = 1;//然后将RST(CE)置高电平。
_nop_();
for(n=0; n<8; n++)//开始传送八位地址命令
{
DSIO = addr & 0x01;//数据从低位开始传送
addr >>= 1;
SCLK = 1;//数据在上升沿时,DS1302读取数据
_nop_();
SCLK = 0;//DS1302下降沿时,放置数据
_nop_();
}
_nop_();
for(n=0; n<8; n++)//读取8位数据
{
dat1 = DSIO;//从最低位开始接收
dat = (dat>>1) | (dat1<<7);
SCLK = 1;
_nop_();
SCLK = 0;//DS1302下降沿时,放置数据
_nop_();
}
RST = 0;
_nop_(); //以下为DS1302复位的稳定时间,必须的。
SCLK = 1;
_nop_();
DSIO = 0;
_nop_();
DSIO = 1;
_nop_();
return dat;
}
请问dat = (dat>>1) | (dat1<<7); dat1不是等于之前输入的地址了么 为什么还要左移7位? 已经是地址了 跟数据有什么联系 还要跟又移以为的dat相或? 没看懂
展开
 我来答
黄山Felix
2014-01-23 · TA获得超过828个赞
知道小有建树答主
回答量:498
采纳率:16%
帮助的人:266万
展开全部
不懂,过来学习下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
明月沉西海1
2014-03-12 · TA获得超过157个赞
知道答主
回答量:58
采纳率:0%
帮助的人:38.7万
展开全部
很简单,先写入地址,然后马上从写入的地址接收数据,数据也是通过DSIO传输的.去看看时序图吧~
追问
大哥,我问的是这么,什么旧很简单啊。请问dat = (dat>>1) | (dat1<<7);    dat1不是等于之前输入的地址了么  为什么还要左移7位? 已经是地址了 跟数据有什么联系  还要跟又移以为的dat相或?
追答
dat1=DSIO;dat1只是一位数据,dat>>1后最高位是补0的,然后或上dat1>1)|(1<<7)不就是将dat变成了1000 0000了,如果接下来一个循环读下一位dat1=DSIO还是1,那么dat就是1100 0000了,这样循环8次,移位相当于7次(因为第1次dat=0x00,右移一位后还是0X00),就将一个字节读到了dat里面,很简单啊- -
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式