DS1302时钟问题

[复制链接]
4460|34
 楼主| luoqiang10605 发表于 2014-7-19 22:00 | 显示全部楼层 |阅读模式
各位大神看下 用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电容退耦。
 楼主| luoqiang10605 发表于 2014-7-20 07:47 | 显示全部楼层
你是说在1302供电那里?
ningling_21 发表于 2014-7-20 08:14 | 显示全部楼层
luoqiang10605 发表于 2014-7-20 07:47
你是说在1302供电那里?

8脚是备用电源,1脚是主电源...
xyz549040622 发表于 2014-7-20 08:20 | 显示全部楼层
1302初始化时不要写入0,你写入随便一个时间试试
 楼主| luoqiang10605 发表于 2014-7-20 10:48 | 显示全部楼层
写入时间也没用  仿真没有问题  感觉数据是读取出来了 但是时钟芯片没走
 楼主| luoqiang10605 发表于 2014-7-20 10:49 | 显示全部楼层
是不是要对哪个寄存器赋值
ningling_21 发表于 2014-7-20 10:54 | 显示全部楼层
luoqiang10605 发表于 2014-7-20 10:48
写入时间也没用  仿真没有问题  感觉数据是读取出来了 但是时钟芯片没走

秒寄存器要初始化为0,否则不会走....
 楼主| luoqiang10605 发表于 2014-7-20 11:23 | 显示全部楼层
那三根信号线要不要接上拉电阻
 楼主| 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);
}
 楼主| luoqiang10605 发表于 2014-7-20 11:28 | 显示全部楼层
这样写的初始化
xuyaqi 发表于 2014-7-20 11:42 | 显示全部楼层
有些单片机接1302是需要上拉电阻的。
 楼主| luoqiang10605 发表于 2014-7-20 12:47 | 显示全部楼层
用的是STC89c52
ningling_21 发表于 2014-7-20 13:07 | 显示全部楼层
luoqiang10605 发表于 2014-7-20 11:28
这样写的初始化

参考一下这个
  1. void Write1302(uchar ucAddr, uchar ucDa)
  2. {
  3.        
  4.         DS1302_RST = 0;
  5.         DS1302_CLK = 0;
  6.         DS1302_RST = 1;
  7.         DS1302InputByte(ucAddr);        //地址,命令
  8.         DS1302InputByte(ucDa);        //写1Byte数据
  9.         DS1302_CLK = 1;
  10.         DS1302_RST = 0;
  11. }
540060348 发表于 2014-7-20 13:24 | 显示全部楼层
话说定时器用来干嘛的?1302读取的时间间隔会不会太短了?延时试试
 楼主| luoqiang10605 发表于 2014-7-20 14:02 | 显示全部楼层
定时器是用秒表走的 一闪一闪 现在还有DS1302发烫 核对了几遍 硬件电路没有接错 不知是什么问题
 楼主| luoqiang10605 发表于 2014-7-20 16:01 | 显示全部楼层
现在有时钟,比较准,但我把主电源断开,直接用的副电源供电。接上主电源就发烫 怎么破
ningling_21 发表于 2014-7-20 16:10 | 显示全部楼层
本帖最后由 ningling_21 于 2014-7-21 14:19 编辑
luoqiang10605 发表于 2014-7-20 16:01
现在有时钟,比较准,但我把主电源断开,直接用的副电源供电。接上主电源就发烫 怎么破 ...

主电源和副电源必须接到对应的管脚,不要搞错....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

448

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部