打印

DS1302时钟问题

[复制链接]
3492|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位大神看下 用DS1302做时钟电路,仿真没有问题。但是实物制作不会走。用定时器模拟时钟有用,说明硬件电路没有问题。向DS1302写入时间也可以,就是时钟好像没走。不知怎么解决。请各位大神指教。。。。
附录1; 程序
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
         for(y=30;y>0;y--);

}

  void Write_A_Byte_TO_DS1302(uchar x)          
{
        uchar i;
        for(i=0;i<8;i++)
        {
                 IO=x&0x01;SCLK=1;SCLK=0;x>>=1;
        }
}            

uchar Get_A_Byte_FROM_DS1302()
{
        uchar i,b=0x00;
        for(i=0;i<8;i++)
        {
                 b |= _crol_((uchar)IO,i);
                SCLK=1;SCLK=0;
        }
        return b/16*10+b%16;
}   


uchar Read_Data(uchar addr)
{
        uchar dat;
        RST = 0;SCLK=0;RST=1;
           Write_A_Byte_TO_DS1302(addr);
        dat = Get_A_Byte_FROM_DS1302();
           SCLK=1;RST=0;
        return dat;
}   
uchar Write_DS1302(uchar addr,uchar dat)
{

        RST = 0;SCLK=0;RST=1;
           Write_A_Byte_TO_DS1302(addr);
        Write_A_Byte_TO_DS1302(dat);
           SCLK=1;RST=0;

}  

void SET_DS1302()
{
        Write_DS1302(0X8E,0X00);
        Write_DS1302(0X82,(53/10)<<4 | (53%10));   //分
        Write_DS1302(0X84,(15/10)<<4 | (15%10));         //时
        Write_DS1302(0X8E,0X80);

}  
void GetTime()
{
        uchar i,addr = 0x81;                                   //从分钟开始取数字
        for(i=0;i<3;i++)
        {
                 DateTime[i]=Read_Data(addr);addr+=2;
                temp1=DateTime[1]+DateTime[2]*60;
              temp2=DateTime[0];
        }
}             
void ds1302init()//初始化1302  
{
    RST=0;
    SCLK=0;
    Write_DS1302(0x8e,0x00);
    Write_DS1302(0x90,0x00);
}


void main()
{       
      TMOD = 0x01;
        TH0  = (65535-50000)/256;
        TL0  = (65535-50000)%256;
        ET0 = 1;               
        EA = 1;
        TR0 = 1;
        ds1302init();
//        SET_DS1302();                       
        while(1)
        {  
           GetTime();          
           display(temp1,temp2);                                   
        }
}
附录2 :仿真电路图

相关帖子

沙发
luoqiang10605|  楼主 | 2014-7-19 22:02 | 只看该作者

使用特权

评论回复
板凳
luoqiang10605|  楼主 | 2014-7-19 22:03 | 只看该作者
点阵用于显示秒表

使用特权

评论回复
地板
ZG11211| | 2014-7-19 22:40 | 只看该作者
国产芯片爱自激,建议供电端用10K电阻限流加104电容退耦。

使用特权

评论回复
5
luoqiang10605|  楼主 | 2014-7-20 07:47 | 只看该作者
你是说在1302供电那里?

使用特权

评论回复
6
ningling_21| | 2014-7-20 08:14 | 只看该作者
luoqiang10605 发表于 2014-7-20 07:47
你是说在1302供电那里?

8脚是备用电源,1脚是主电源...

使用特权

评论回复
7
xyz549040622| | 2014-7-20 08:20 | 只看该作者
1302初始化时不要写入0,你写入随便一个时间试试

使用特权

评论回复
8
luoqiang10605|  楼主 | 2014-7-20 10:48 | 只看该作者
写入时间也没用  仿真没有问题  感觉数据是读取出来了 但是时钟芯片没走

使用特权

评论回复
9
luoqiang10605|  楼主 | 2014-7-20 10:49 | 只看该作者
是不是要对哪个寄存器赋值

使用特权

评论回复
10
ningling_21| | 2014-7-20 10:54 | 只看该作者
luoqiang10605 发表于 2014-7-20 10:48
写入时间也没用  仿真没有问题  感觉数据是读取出来了 但是时钟芯片没走

秒寄存器要初始化为0,否则不会走....

使用特权

评论回复
11
luoqiang10605|  楼主 | 2014-7-20 11:23 | 只看该作者
那三根信号线要不要接上拉电阻

使用特权

评论回复
12
luoqiang10605|  楼主 | 2014-7-20 11:27 | 只看该作者
void ds1302init()//初始化1302  
{
    RST=0;
    SCLK=0;
    Write_DS1302(0X80,0x00);   //分
    Write_DS1302(0x8e,0x00);
    Write_DS1302(0x90,0x00);
}

使用特权

评论回复
13
luoqiang10605|  楼主 | 2014-7-20 11:28 | 只看该作者
这样写的初始化

使用特权

评论回复
14
xuyaqi| | 2014-7-20 11:42 | 只看该作者
有些单片机接1302是需要上拉电阻的。

使用特权

评论回复
15
luoqiang10605|  楼主 | 2014-7-20 12:47 | 只看该作者
用的是STC89c52

使用特权

评论回复
16
ningling_21| | 2014-7-20 13:07 | 只看该作者
luoqiang10605 发表于 2014-7-20 11:28
这样写的初始化

参考一下这个
void Write1302(uchar ucAddr, uchar ucDa)
{
       
        DS1302_RST = 0;
        DS1302_CLK = 0;
        DS1302_RST = 1;
        DS1302InputByte(ucAddr);        //地址,命令
        DS1302InputByte(ucDa);        //写1Byte数据
        DS1302_CLK = 1;
        DS1302_RST = 0;
}

使用特权

评论回复
17
540060348| | 2014-7-20 13:24 | 只看该作者
话说定时器用来干嘛的?1302读取的时间间隔会不会太短了?延时试试

使用特权

评论回复
18
luoqiang10605|  楼主 | 2014-7-20 14:02 | 只看该作者
定时器是用秒表走的 一闪一闪 现在还有DS1302发烫 核对了几遍 硬件电路没有接错 不知是什么问题

使用特权

评论回复
19
luoqiang10605|  楼主 | 2014-7-20 16:01 | 只看该作者
现在有时钟,比较准,但我把主电源断开,直接用的副电源供电。接上主电源就发烫 怎么破

使用特权

评论回复
20
ningling_21| | 2014-7-20 16:10 | 只看该作者
本帖最后由 ningling_21 于 2014-7-21 14:19 编辑
luoqiang10605 发表于 2014-7-20 16:01
现在有时钟,比较准,但我把主电源断开,直接用的副电源供电。接上主电源就发烫 怎么破 ...

主电源和副电源必须接到对应的管脚,不要搞错....

使用特权

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

本版积分规则

9

主题

448

帖子

3

粉丝