久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12596|回復: 16
打印 上一主題 下一主題
收起左側

求助 ds1302時鐘 為什么秒不走??

[復制鏈接]
跳轉到指定樓層
樓主
ID:66729 發表于 2014-11-8 22:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
按本壇上面的12864萬年歷資料,做了幾塊PCB板,之前也在淘寶買了兩塊不同的PCB板子,但是都出現了同一個問題:用的ds1302和晶振,上電后就是秒不走,不知道是什么原因,首先程序是沒問題的,然后PCB板焊接也應該沒問題,上電后12864開機有顯示,然后顯示界面上,年月日星期都正常,但是時間的秒不走,就是一直定格在開機的樣子。。。。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:66729 發表于 2014-11-8 22:03 | 只看該作者
時間顯示一直是 00 00  00   沒有走時,沒有秒點顯示。。。
回復

使用道具 舉報

板凳
ID:66729 發表于 2014-11-8 22:47 | 只看該作者
/****************************************************************************/ //程序名稱:     DS1302頭文件                             /****************************************************************************/  #ifndef __DS1302_H__  #define __DS1302_H__   #include <AT89X52.h> #include <intrins.h>    //包含_nop_()延時函數  #ifndef uchar #define uchar unsigned char #endif  #ifndef uint #define uint  unsigned int #endif  /****************************************************************************/ //定義DS1302時鐘接口 sbit clock_clk = P2 ^ 4;//ds1302_clk(時鐘線) sbit clock_dat = P2 ^ 5;//ds1302_dat(數據線) sbit clock_Rst = P2 ^ 6;//ds1302_Rst(復位線) //定義累加器A中的各位 sbit a0   = ACC ^ 0; sbit a1   = ACC ^ 1; sbit a2   = ACC ^ 2; sbit a3   = ACC ^ 3; sbit a4   = ACC ^ 4; sbit a5   = ACC ^ 5; sbit a6   = ACC ^ 6; sbit a7   = ACC ^ 7; /*****************************************************************************/ //1302驅動程序(底層協議) void clock_out(unsigned char dd){         ACC=dd;         clock_dat=a0; clock_clk=1; clock_clk=0;         clock_dat=a1; clock_clk=1; clock_clk=0;         clock_dat=a2; clock_clk=1; clock_clk=0;         clock_dat=a3; clock_clk=1; clock_clk=0;         clock_dat=a4; clock_clk=1; clock_clk=0;         clock_dat=a5; clock_clk=1; clock_clk=0;         clock_dat=a6; clock_clk=1; clock_clk=0;         clock_dat=a7; clock_clk=1; clock_clk=0; } /*****************************************************************************/ //DS1302寫數據(底層協議) void write_clock(unsigned char ord, unsigned char dd){         clock_clk=0;         clock_Rst=0;         clock_Rst=1;         clock_out(ord);         clock_out(dd);         clock_Rst=0;         clock_clk=1; } /*****************************************************************************/ //DS1302寫入字節(底層協議) unsigned char clock_in(void){         clock_dat=1;         a0=clock_dat;         clock_clk=1; clock_clk=0; a1=clock_dat;         clock_clk=1; clock_clk=0; a2=clock_dat;         clock_clk=1; clock_clk=0; a3=clock_dat;         clock_clk=1; clock_clk=0; a4=clock_dat;         clock_clk=1; clock_clk=0; a5=clock_dat;         clock_clk=1; clock_clk=0; a6=clock_dat;         clock_clk=1; clock_clk=0; a7=clock_dat;         return(ACC); } /*****************************************************************************/ //DS1302讀數據(底層協議) unsigned char read_clock(unsigned char ord){         unsigned char dd=0;         clock_clk=0;         clock_Rst=0;         clock_Rst=1;         clock_out(ord);         dd=clock_in();         clock_Rst=0;         clock_clk=1;         return(dd); } /*****************************************************************************/ //設置1302的初始時間(自動初始化) void Init_1302(void){//-設置1302的初始時間(2007年1月1日00時00分00秒星期一)         unsigned char f;         if(read_clock(0xc1) != 0xaa){                 write_clock(0x8e,0x00);//允許寫操作                 write_clock(0x8c,0x07);//年                 write_clock(0x8a,0x01);//星期                 write_clock(0x88,0x01);//月                 write_clock(0x86,0x01);//日                 write_clock(0x84,0x00);//小時                 write_clock(0x82,0x00);//分鐘                 write_clock(0x80,0x00);//秒                 write_clock(0x90,0xa5);//充電                         write_clock(0xc0,0xaa);//寫入初始化標志RAM(第00個RAM位置)                 for(f=0;f<60;f=f+2){//清除鬧鐘RAM位為0                         write_clock(0xc2+f,0x00);                 }                 write_clock(0x8e,0x80);//禁止寫操作         } }  #endif
回復

使用道具 舉報

地板
ID:66729 發表于 2014-11-8 22:48 | 只看該作者
/****************************************************************************/
//程序名稱:     DS1302頭文件               
          
/****************************************************************************/

#ifndef __DS1302_H__
#define __DS1302_H__

#include <AT89X52.h>
#include <intrins.h>    //包含_nop_()延時函數

#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uint  unsigned int
#endif

/****************************************************************************/
//定義DS1302時鐘接口
sbit clock_clk = P2 ^ 4;//ds1302_clk(時鐘線)
sbit clock_dat = P2 ^ 5;//ds1302_dat(數據線)
sbit clock_Rst = P2 ^ 6;//ds1302_Rst(復位線)
//定義累加器A中的各位
sbit a0   = ACC ^ 0;
sbit a1   = ACC ^ 1;
sbit a2   = ACC ^ 2;
sbit a3   = ACC ^ 3;
sbit a4   = ACC ^ 4;
sbit a5   = ACC ^ 5;
sbit a6   = ACC ^ 6;
sbit a7   = ACC ^ 7;
/*****************************************************************************/
//1302驅動程序(底層協議)
void clock_out(unsigned char dd){
        ACC=dd;
        clock_dat=a0; clock_clk=1; clock_clk=0;
        clock_dat=a1; clock_clk=1; clock_clk=0;
        clock_dat=a2; clock_clk=1; clock_clk=0;
        clock_dat=a3; clock_clk=1; clock_clk=0;
        clock_dat=a4; clock_clk=1; clock_clk=0;
        clock_dat=a5; clock_clk=1; clock_clk=0;
        clock_dat=a6; clock_clk=1; clock_clk=0;
        clock_dat=a7; clock_clk=1; clock_clk=0;
}
/*****************************************************************************/
//DS1302寫數據(底層協議)
void write_clock(unsigned char ord, unsigned char dd){
        clock_clk=0;
        clock_Rst=0;
        clock_Rst=1;
        clock_out(ord);
        clock_out(dd);
        clock_Rst=0;
        clock_clk=1;
}
/*****************************************************************************/
//DS1302寫入字節(底層協議)
unsigned char clock_in(void){
        clock_dat=1;
        a0=clock_dat;
        clock_clk=1; clock_clk=0; a1=clock_dat;
        clock_clk=1; clock_clk=0; a2=clock_dat;
        clock_clk=1; clock_clk=0; a3=clock_dat;
        clock_clk=1; clock_clk=0; a4=clock_dat;
        clock_clk=1; clock_clk=0; a5=clock_dat;
        clock_clk=1; clock_clk=0; a6=clock_dat;
        clock_clk=1; clock_clk=0; a7=clock_dat;
        return(ACC);
}
/*****************************************************************************/
//DS1302讀數據(底層協議)
unsigned char read_clock(unsigned char ord){
        unsigned char dd=0;
        clock_clk=0;
        clock_Rst=0;
        clock_Rst=1;
        clock_out(ord);
        dd=clock_in();
        clock_Rst=0;
        clock_clk=1;
        return(dd);
}
/*****************************************************************************/
//設置1302的初始時間(自動初始化)
void Init_1302(void){//-設置1302的初始時間(2007年1月1日00時00分00秒星期一)
        unsigned char f;
        if(read_clock(0xc1) != 0xaa){
                write_clock(0x8e,0x00);//允許寫操作
                write_clock(0x8c,0x07);//年
                write_clock(0x8a,0x01);//星期
                write_clock(0x88,0x01);//月
                write_clock(0x86,0x01);//日
                write_clock(0x84,0x00);//小時
                write_clock(0x82,0x00);//分鐘
                write_clock(0x80,0x00);//秒
                write_clock(0x90,0xa5);//充電       
                write_clock(0xc0,0xaa);//寫入初始化標志RAM(第00個RAM位置)
                for(f=0;f<60;f=f+2){//清除鬧鐘RAM位為0
                        write_clock(0xc2+f,0x00);
                }
                write_clock(0x8e,0x80);//禁止寫操作
        }
}

#endif
回復

使用道具 舉報

5#
ID:1 發表于 2014-11-9 01:50 | 只看該作者
這問題我遇到過  應該是 32768晶振不行
回復

使用道具 舉報

6#
ID:67992 發表于 2014-11-10 10:18 | 只看該作者
看了你的程序覺得別有新意,別人都是用FOR循環,且沒有指定用ACC存儲,而且你都不用延時。好奇之下復制過來試了下,讀時分秒不正常,數據飛快亂跳,換別人的正常。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50

查看全部評分

回復

使用道具 舉報

7#
ID:66729 發表于 2014-11-10 18:54 | 只看該作者
dgahz 發表于 2014-11-10 10:18
看了你的程序覺得別有新意,別人都是用FOR循環,且沒有指定用ACC存儲,而且你都不用延時。好奇之下復制過來 ...

恩,程序是本壇上面下載的,這個是用了24C02,ds1302,18b20的12864萬年歷程序。。我沒有改動過,確實這個程序我買了三塊PCB板,然后自己也做了pCB,都是時鐘不行,看來真的這程序有問題吧??
回復

使用道具 舉報

8#
ID:67992 發表于 2014-11-10 19:56 | 只看該作者
你換下另一個別人的ds1302程序不就知道是板還是程序的問題了?
回復

使用道具 舉報

9#
ID:67992 發表于 2014-11-10 19:58 | 只看該作者
把ds1302程序模塊換掉,試試
回復

使用道具 舉報

10#
ID:67992 發表于 2014-11-10 20:38 | 只看該作者
改一個給你,把你原來的換掉:
/****************************************************************************/
//程序名稱:     DS1302頭文件               
         
/****************************************************************************/

#ifndef __DS1302_H__
#define __DS1302_H__

#include <AT89X52.h>
#include <intrins.h>    //包含_nop_()延時函數

#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uint  unsigned int
#endif

//定義DS1302時鐘接口
sbit clock_clk = P2^4;                //ds1302_clk(時鐘線)
sbit clock_dat = P2^5;                //ds1302_dat(數據線)
sbit clock_Rst = P2^6;          //ds1302_clock_Rst(復位線)
void write_clock(uchar addr, uchar dat)
{
        uchar n;
        clock_Rst = 0;
        _nop_();

        clock_clk = 0;//先將clock_clk置低電平。
        _nop_();
        clock_Rst = 1; //然后將clock_Rst(CE)置高電平。
        _nop_();

        for (n=0; n<8; n++)//開始傳送八位地址命令
        {
                clock_dat = addr & 0x01;//數據從低位開始傳送
                addr >>= 1;
                clock_clk = 1;//數據在上升沿時,DS1302讀取數據
                _nop_();
                clock_clk = 0;
                _nop_();
        }
        for (n=0; n<8; n++)//寫入8位數據
        {
                clock_dat = dat & 0x01;
                dat >>= 1;
                clock_clk = 1;//數據在上升沿時,DS1302讀取數據
                _nop_();
                clock_clk = 0;
                _nop_();       
        }       
                 
        clock_Rst = 0;//傳送數據結束
        _nop_();
}

/*******************************************************************************
* 函 數 名         : Ds1302Read
* 函數功能                   : 讀取一個地址的數據
* 輸    入         : addr
* 輸    出         : dat
*******************************************************************************/

uchar  read_clock(uchar addr)
{
        uchar n,dat,dat1;
        clock_Rst = 0;
        _nop_();

        clock_clk = 0;//先將clock_clk置低電平。
        _nop_();
        clock_Rst = 1;//然后將clock_Rst(CE)置高電平。
        _nop_();

        for(n=0; n<8; n++)//開始傳送八位地址命令
        {
                clock_dat = addr & 0x01;//數據從低位開始傳送
                addr >>= 1;
                clock_clk = 1;//數據在上升沿時,DS1302讀取數據
                _nop_();
                clock_clk = 0;//DS1302下降沿時,放置數據
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//讀取8位數據
        {
                dat1 = clock_dat;//從最低位開始接收
                dat = (dat>>1) | (dat1<<7);
                clock_clk = 1;
                _nop_();
                clock_clk = 0;//DS1302下降沿時,放置數據
                _nop_();
        }

        clock_Rst = 0;
        _nop_();        //以下為DS1302復位的穩定時間,必須的。
        clock_clk = 1;
        _nop_();
        clock_dat = 0;
        _nop_();
        clock_dat = 1;
        _nop_();

        return dat;       
}

/*****************************************************************************/
//設置1302的初始時間(自動初始化)
void Init_1302(void)//-設置1302的初始時間(2007年1月1日00時00分00秒星期一)
{        unsigned char f;
        if(read_clock(0xc1) != 0xaa)
                {
                write_clock(0x8e,0x00);//允許寫操作
                write_clock(0x8c,0x07);//年
                write_clock(0x8a,0x01);//星期
                write_clock(0x88,0x01);//月
                write_clock(0x86,0x01);//日
                write_clock(0x84,0x00);//小時
                write_clock(0x82,0x00);//分鐘
                write_clock(0x80,0x00);//秒
                write_clock(0x90,0xa5);//充電        
                write_clock(0xc0,0xaa);//寫入初始化標志RAM(第00個RAM位置)
                for(f=0;f<60;f=f+2)//清除鬧鐘RAM位為0
                                {
                        write_clock(0xc2+f,0x00);
                }
                write_clock(0x8e,0x80);//禁止寫操作
        }
}
回復

使用道具 舉報

11#
ID:66729 發表于 2014-11-10 22:32 | 只看該作者
dgahz 發表于 2014-11-10 20:38
改一個給你,把你原來的換掉:
/******************************************************************** ...

謝謝,我到時試試看
回復

使用道具 舉報

12#
ID:66729 發表于 2014-11-11 12:42 | 只看該作者
dgahz 發表于 2014-11-10 20:38
改一個給你,把你原來的換掉:
/******************************************************************** ...

我試過了,問題依舊,,還是秒不走,跟原來的一個樣,,等新買的DS1302和晶振到了我再換上去試一下,,唉,煩。。如果是程序有問題,說明是設計者共享程序的時候做了手腳,要不然按照原理圖做的PCB焊好的板子怎么會有這種問題。。。
回復

使用道具 舉報

13#
ID:66729 發表于 2014-11-13 18:32 | 只看該作者
admin 發表于 2014-11-9 01:50
這問題我遇到過  應該是 32768晶振不行

我試過了,用新買的32768晶振換上也不行,,但是今天下午我把這個晶振直接焊在DS1302的兩腳上,結果一切都正常了,唉。。估計是ds1302的管腳接觸不良。。。。
回復

使用道具 舉報

14#
ID:66729 發表于 2014-11-13 18:33 | 只看該作者
dgahz 發表于 2014-11-10 20:38
改一個給你,把你原來的換掉:
/******************************************************************** ...

你這個換上后現在能正常用了,但是掉電不能存儲時間,所以我用原程序就可以了。。。
回復

使用道具 舉報

15#
ID:153199 發表于 2016-12-17 09:42 | 只看該作者
需要晶振接地。工作更穩定
回復

使用道具 舉報

16#
ID:127881 發表于 2017-1-1 21:34 | 只看該作者
你之前的問題估計在于芯片,如果大家買到DS302N,而且正面最后一行絲印是001就要小心了,100%不能用
回復

使用道具 舉報

17#
ID:1004738 發表于 2022-2-11 10:37 | 只看該作者
我也遇到這個問題,兩個樣機,有一個不走時。首先補焊,沒有解決。互換晶振,沒有解決,互相更換ds1302后,兩個都沒有問題了。推斷是芯片和晶振的兼容性問題或者焊接問題。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 水蜜桃久久夜色精品一区 | 日本成人在线网址 | 91精品国产91久久久久久最新 | 亚洲一区二区三区四区五区午夜 | 免费观看成人性生生活片 | 日韩久久久久 | 亚洲小说图片 | 欧美高清视频在线观看 | 丝袜美腿av | 日韩欧美二区 | 黄色大片在线 | 久久9999久久 | 精品视频成人 | 国产精品一区二区三区在线播放 | 超碰精品在线观看 | 国产精品v | www.99re| av一区在线观看 | аⅴ资源新版在线天堂 | 国产在线观看一区二区 | 精品国产网 | 国产精品国产成人国产三级 | 天天影视色综合 | 99在线精品视频 | 国产欧美综合在线 | 国产成人精品一区二区三区四区 | 中文字幕一区在线观看视频 | 一级在线观看 | 欧美精品一区二区三区四区 | 日本三级网站在线观看 | 99av成人精品国语自产拍 | 97在线超碰| 国产精品不卡一区 | 中文字幕国产在线 | 黄色大片在线播放 | 欧美高清dvd | 国产成人精品久久二区二区91 | 羞羞视频网站免费观看 | 午夜伦4480yy私人影院 | 久久人爽 | 久久国产精品亚洲 |