打印
[疑难问答]

dat = (dat>>1) | (dat1<<7);是什么意思,什么功能?

[复制链接]
3372|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bbapple|  楼主 | 2017-1-22 20:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在下面程序中,
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;        
}

问题1:        dat = (dat>>1) | (dat1<<7);是什么意思,什么功能?


问题2:dat1 = DSIO;//从最低位开始接收,数据明明是给了dat1,但是最后return 的数据 却是  dat ?
沙发
handleMessage| | 2017-1-22 20:43 | 只看该作者
dat=(dat>>1)|(dat1<<7)
dat=(dat按位右移1位)相或同假为假一真即真|(dat1按位左移7位)

使用特权

评论回复
板凳
zhouhuanの| | 2017-1-22 20:44 | 只看该作者
dat右移1位,左侧空位补0;dat1左移7位,右侧空位补0,将两个结果按位或运算,赋值给dat

使用特权

评论回复
地板
laozhongyi| | 2017-1-22 20:54 | 只看该作者
你的程序最后一句话写的是return dat;如果想返回dat1,就写return dat1;

使用特权

评论回复
5
Edisons| | 2017-1-22 20:55 | 只看该作者
for(n=0; n<8; n++)//读取8位数据
        {
                dat1 = DSIO;//从最低位开始接收
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302下降沿时,放置数据
                _nop_();
        }

使用特权

评论回复
6
_gege| | 2017-1-22 21:01 | 只看该作者
dat>>1,右移一位,高1位补零,变成0XXXXXXX。
dat1<<7左移七位,低7位补零,变成X0000000,

使用特权

评论回复
7
Mozarts| | 2017-1-22 21:02 | 只看该作者
dat = (dat>>1) | (dat1<<7)  就是dat右移一位, dat1左移7位,当两个条件任何一个为真时,结果为1.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

293

主题

1811

帖子

1

粉丝