打印
[51单片机]

ds1302问题 (标红色字体)

[复制链接]
1708|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcu_hello|  楼主 | 2014-2-6 17:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单字节读DS1302    只要缺少了 红色字体的那代码就出现问题 DSIO=0;自己看资料 没找到相关信息.
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;       
}

相关帖子

沙发
xyz549040622| | 2014-2-6 19:54 | 只看该作者
         _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
把这个都去掉,为什么要把数据拉低又拉高呢

使用特权

评论回复
板凳
mcu_hello|  楼主 | 2014-2-9 16:56 | 只看该作者
xyz549040622 发表于 2014-2-6 19:54
把这个都去掉,为什么要把数据拉低又拉高呢

_nop_();

        DSIO = 0;

        _nop_();

        DSIO = 1;

        _nop_();


去掉DSIO=0,就 不行  其他的去掉没问题

使用特权

评论回复
地板
wangch_sh| | 2014-2-9 17:06 | 只看该作者
这几句不需要,可能其他地方有问题。
我的函数是这样,没问题:
/*-------------------------------------------------------------------
从ds1302中读出一字节数据
-------------------------------------------------------------------*/
u8 readbyte_ds1302(u8 addr)
{
        unsigned char i,temp;
        rst_1302_l;
        delay_nus(1);
        clk_1302_l;
        delay_nus(1);                            
        rst_1302_h;
        delay_nus(1);  
        addr|=0x01;
        DrvGPIO_Open(E_GPA,6,E_IO_OUTPUT);                                         
        for(i=0;i<8;i++)
        {
                clk_1302_l;
                delay_nus(1);  
                if(addr&0x01)        DrvGPIO_SetBit(E_GPA,6);
                else                         DrvGPIO_ClrBit(E_GPA,6);
                 delay_nus(1);
                clk_1302_h;       
                 delay_nus(1);
                addr>>=1;       
        }
        for(i=0;i<8;i++)
        {
                temp>>=1;
                clk_1302_l;
                 delay_nus(1);
                if(ds1302_dat_read())temp|=0x80;
                else   temp&=0x7f;       
                 delay_nus(1);        
                clk_1302_h;
                 delay_nus(1);        
        }
        rst_1302_l;
        delay_nus(1);  
        clk_1302_l;
        return(temp);
}

使用特权

评论回复
5
mcu_hello|  楼主 | 2014-2-10 14:57 | 只看该作者
wangch_sh 发表于 2014-2-9 17:06
这几句不需要,可能其他地方有问题。
我的函数是这样,没问题:
/*-------------------------------------- ...

可以给我全部的代码吗?

使用特权

评论回复
6
wangch_sh| | 2014-2-10 16:12 | 只看该作者
不行,公司有保密协议。你可以在网上搜,很多的。

使用特权

评论回复
7
mcu_hello|  楼主 | 2014-2-10 21:05 | 只看该作者
wangch_sh 发表于 2014-2-10 16:12
不行,公司有保密协议。你可以在网上搜,很多的。

好的 我在去弄弄 不用硬件  用protues仿真试试  

使用特权

评论回复
8
mcu_hello|  楼主 | 2014-2-10 21:57 | 只看该作者
wangch_sh 发表于 2014-2-10 16:12
不行,公司有保密协议。你可以在网上搜,很多的。

在仿真中没有问题 去掉
     _nop_();

        DSIO = 0;

        _nop_();

        DSIO = 1;

        _nop_();
这些可以,,应该是硬件问题,是不是因为是国产芯片的原故呢? 谢谢解答

使用特权

评论回复
9
mcu_hello|  楼主 | 2014-2-10 21:59 | 只看该作者
在仿真中没问题
去掉_nop_();

        DSIO = 0;

        _nop_();

        DSIO = 1;

        _nop_();
这些都可以,是不是硬件是国产的原因呢?谢谢你们的回答!

使用特权

评论回复
10
wangch_sh| | 2014-2-10 22:03 | 只看该作者
你这个问题太奇怪啦。加上这几句就可以吗?

使用特权

评论回复
11
mcu_hello|  楼主 | 2014-2-10 22:15 | 只看该作者
wangch_sh 发表于 2014-2-10 22:03
你这个问题太奇怪啦。加上这几句就可以吗?

困扰了我好久  是再淘宝买的学习资料
  _nop_();        //以下为DS1302复位的稳定时间,必须的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
在硬件上运行一定要有这几句,,应该是一定要DSIO=0,这句,,,

我自己做了个仿真 结果
那几句代码不要都可以包括不要DSIO=0,都能正常运行  

使用特权

评论回复
12
逗逗比| | 2016-9-9 19:38 | 只看该作者
楼主,我的问题跟你一样,什么原因?

使用特权

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

本版积分规则

1

主题

7

帖子

0

粉丝