打印

单片机实时时钟 问题

[复制链接]
1179|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小盼abc|  楼主 | 2014-12-3 14:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char Ds1302_Read_Byte(unsigned char addr)
{

        unsigned char i;
        unsigned char temp=0x00;
        RST_SET;       

        //写入目标地址:addr
        addr = addr | 0x01;//最低位置高
        for (i = 0; i < 8; i ++)
            {
             
                if (addr & 0x01)
                   {
                        IO_SET;
                        }
                else
                    {
                        IO_CLR;
                        }
                SCK_SET;
                SCK_CLR;
                addr = addr >> 1;
                }
       
        //输出数据:temp
        for (i = 0; i < 8; i ++)
            {
                if (IO_R)
                   {
                        temp |= 0x80;
                        }
                else
                   {
                        temp &= 0x7F;
                        }
                SCK_SET;
                SCK_CLR;
                temp = temp >> 1;
                }
       
        RST_CLR;        //停止DS1302总线
        return temp;
}

unsigned char i;
        unsigned char temp=0x00;
        RST_SET;       

        //写入目标地址:addr
        addr = addr | 0x01;//最低位置高
        for (i = 0; i < 8; i ++)
            {
             
                if (addr & 0x01)
                   {
                        IO_SET;
                        }
                else
                    {
                        IO_CLR;
                        }
                SCK_SET;
                SCK_CLR;
                addr = addr >> 1;
                }
       
        //输出数据:temp
        for (i = 0; i < 8; i ++)
            {
                temp = temp >> 1;
                if (IO_R)
                   {
                        temp |= 0x80;
                        }
                else
                   {
                        temp &= 0x7F;
                        }
                SCK_SET;
                SCK_CLR;
                }
       
        RST_CLR;        //停止DS1302总线
        return temp;
}

仅仅是temp = temp >> 1;先后的问题  为什么结果会不一样??

相关帖子

沙发
wangch_sh| | 2014-12-3 14:55 | 只看该作者
当然会不一样了,好好分析一下。

使用特权

评论回复
板凳
NE5532| | 2014-12-3 15:11 | 只看该作者
一个在入口,一个在出口,一个进来先执行一次,一个到执行一圈以后才执行,楼主你说怎么会一样?不要认为一个圈,就哪里都是一样的了,从哪里进去有时候非常关键。

使用特权

评论回复
地板
小盼abc|  楼主 | 2014-12-3 15:40 | 只看该作者
NE5532 发表于 2014-12-3 15:11
一个在入口,一个在出口,一个进来先执行一次,一个到执行一圈以后才执行,楼主你说怎么会一样?不要认为一 ...

第一个temp=0啊,那么刚进入的时候,temp = temp >> 1的先后不就没有区别了

使用特权

评论回复
5
小盼abc|  楼主 | 2014-12-3 15:41 | 只看该作者
wangch_sh 发表于 2014-12-3 14:55
当然会不一样了,好好分析一下。

汗死  我当然知道不一样  不然结果怎么不一样  问题是我查不出  咨询下大家

使用特权

评论回复
6
wxjcan| | 2014-12-3 16:25 | 只看该作者
这种问题  自己随便找个数试着把两种程序走一遍,就能看出区别了

使用特权

评论回复
7
小盼abc|  楼主 | 2014-12-3 16:35 | 只看该作者
wxjcan 发表于 2014-12-3 16:25
这种问题  自己随便找个数试着把两种程序走一遍,就能看出区别了

区别我当然知道  就是不知道为什么有这种区别啊

使用特权

评论回复
8
wxjcan| | 2014-12-3 17:04 | 只看该作者
原因就是3楼说的,放的位置不对;      

都移动8次的话,上面的程序相当于把第一位数据给舍弃了(unsigned char temp 是8为的数据);
下面的程序虽然也移了8次。但是第一次的无用数据是移走的。

使用特权

评论回复
9
玄德| | 2014-12-3 19:19 | 只看该作者
赶脚哪里话说拧了,LZ没说清问题。

使用特权

评论回复
10
NE5532| | 2014-12-3 22:28 | 只看该作者
不一样吧,有一个最后一次读到的数据没有移位,另一个移位了。楼主把3楼的回帖再仔细琢磨琢磨。

使用特权

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

本版积分规则

22

主题

86

帖子

0

粉丝