打印

火急,有关ds1302的问题

[复制链接]
2862|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qiangdao|  楼主 | 2007-8-23 22:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一次使用ds1302的芯片,在第一次读ds1302的数据为:
00(年) 01(星期) 00(月) 00(日) 00(时) 00(分) 00(秒)
但以后读的数据都是ff
在检查电路的时候发现如果将ds1302的接地管腿接地后,它的第二管腿也变低(其它的管腿什么都没有接任何电路),不知道为什么,望高手们指点哈~

相关帖子

沙发
qiangdao|  楼主 | 2007-8-24 10:55 | 只看该作者

没有人顶?

各位大虾都别潜泳咯,快点带上水枪灭火啊 

使用特权

评论回复
板凳
一级菜鸟| | 2007-8-24 10:56 | 只看该作者

说明不够详细,没人帮得了你

使用特权

评论回复
地板
gjg191| | 2007-8-24 11:06 | 只看该作者

dd

描述不清楚啊

使用特权

评论回复
5
救火车| | 2007-8-24 11:06 | 只看该作者

哪有火啊?分明是在点灯。

自己检查检查吧。芯片还没工作起来呢。
再不行就贴图贴程序。

使用特权

评论回复
6
ayb_ice| | 2007-8-24 15:34 | 只看该作者

多看DATASHEET。。。

使用特权

评论回复
7
qiangdao|  楼主 | 2007-8-24 18:35 | 只看该作者

...

下午去检查了,读出来的全是00,可能跟5楼说的一样,芯片没有工作。我检查了时序,没有错误;后来检查电路是晶振没有起振~不知道是什么原因~老师也帮我检查了他也不知道为什么晶振没有起振~
有一段时间晶振和芯片特别烫,不知道是不是芯片坏了~
不知道ds1302如何启动呢?书上没有提过~只是提到如何读写芯片;大虾们也帮帮忙~

使用特权

评论回复
8
dai_weis| | 2007-8-24 19:55 | 只看该作者
9
qiangdao|  楼主 | 2007-8-25 10:19 | 只看该作者

.....

一着急就抓吓~下午再去试试~谢谢咯

使用特权

评论回复
10
qiangdao|  楼主 | 2007-8-25 18:15 | 只看该作者

....

下午去试了但是还是不行,我用示波器测试但是没有检测到晶振的波形,但是在x1脚(第三管褪)检测到2.27v的电压,芯片第2,3管褪之间接32768hz的无源晶振;并接6pf的电容,我把程贴上,各位大虾们帮帮忙,看看有什么问题~!
;================================================
;程序名称:  ds1302
;程序功能: 读出芯片的数据
;数据存储: 21h     年       变量:      year
;           22h     星期                 week
;           23h     月                   month
;           24h     日                   day
;           25h     时                   hour
;           26h     分                   min
;           27h     秒                   second
;================================================
year    equ    21h
week    equ    22h
month   equ    23h
day     equ    24h
hour    equ    25h
min     equ    26h
second  equ    27h
sclk    equ    p1.0
io      equ    p1.1
rst     equ    p1.2
;================================================
        org    0
        jmp    start
        org    30h
        start:
              mov     p1,#0ffh
              clr       sclk
              clr       rst
              clr    io
              setb      rst;初始化结束
      sat:
              mov    r1,#81h
              call    wr_ds
              mov    r1,#01h;启动芯片
              call    wr_ds    
          call    delay
          call    delay    
              mov       r1,#10001101b;年的起始地址
          mov       r6,#7
              mov       r0,#21h           
            lp:
              call      wr_ds
              setb    rst
              call      rd_ds
              mov       @r0,a
              inc       r0
              dec       r1
              dec       r1
              djnz      r6,lp
              nop
              nop
              nop
          mov    r0,#21h
          mov    r2,#7           
    show_again:          
              call    show
              call    delay
              mov     p2,#0ffh
              call    delay
              inc    r0
              djnz    r2,show_again
              jmp    sat
;================================================
;程序名:        wd_ds
;程序功能:      给芯片送一个数据
;                r1为入口参数
;                 没有返回值
;================================================
       wr_ds:
               mov      r7,#8
               mov       a,r1
               setb       rst    
               clr    io
               clr      c
           lp1:
               clr      sclk
               rrc      a
               mov      io,c
               nop
               nop
               nop
               setb     sclk
               nop
               nop
               nop
               djnz     r7,lp1
           clr     io    
               ret
;================================================
;程序名称:      rd_ds
;程序功能:      读出芯片的一个数据
;                读出的数据存在 acc中
;================================================
        rd_ds:
                mov      r7,#8
                clr      c
            clr     io                 
                clr      a
           lp2:
                clr     sclk
                nop
                nop
                nop
                mov     c,io
                rrc     a
                setb    sclk
                nop
                nop
                nop
                djnz    r7,lp2
                clr    rst
                clr    io    
                ret
;=================================================
; 程序名称:    show
;程序功能:    将读出来的数据通过P2口,显示出来
;                      无返回值     
;=================================================
       show:    
            mov    a,@r0        
        mov    b,#10
        div    ab
        mov    r1,#28h
        mov    @r1,b
        swap    a
        xchd    a,@r1
        mov    p2,a
        ret
;=================================================
;程序名称:delay
;程序功能:延时1秒,让数据显示
;            无返回值            
;=================================================
     delay:
         mov r5,#20 
     d1:mov r6,#250
     d2:mov r7,#200
         djnz    r7,$
         djnz r6,d2
         djnz r5,d1
         ret
;=================================================             
               end



使用特权

评论回复
11
qiangdao|  楼主 | 2007-8-25 18:59 | 只看该作者

笨死了,

忙了办天还是跟瞎子一样~连控制寄存器都没有写怎么能读写芯片啊~`~~~~~
我跟熊一样,是笨死的

使用特权

评论回复
12
qiangdao|  楼主 | 2007-8-27 16:42 | 只看该作者

....

各位大虾再帮帮忙~现在都急死了~虽然可以读写,但是芯片的晶振不起振,芯片工作不起来
大虾们谁有调试过的程序给我发一个~~~
万分感谢

使用特权

评论回复
13
kukucat| | 2007-8-27 21:29 | 只看该作者

呵呵,前段时间学习过DS1302,估计你控制命令没写好吧

/*********************************************************************
* 函 数 名: time_init()
* 功能描述:时钟初始化;
* 函数说明: *可利用DS1302的RAM储存断电时的时间值(未完成)
* 调用函数:
* 输 入:
* 返 回:    无
***********************************************************************/
void time_init()
{
    wr_commd(0x8e,0);            //允许写入
    wr_commd(0x80,0);            //时钟振荡
    wr_commd(0x90,0xa5);         //充电
    wr_commd(0x8c,init_time[2]);  //年
    wr_commd(0x88,init_time[3]);  //月
    wr_commd(0x86,init_time[4]);  //日
    wr_commd(0x8a,init_time[5]);  //星期
    wr_commd(0x84,init_time[6]);  //时
    wr_commd(0x82,init_time[7]);  //分
    wr_commd(0x80,init_time[8]);  //秒
    wr_commd(0x8e,0x80);          //写保护
}
//init_time[]数组为自定义时钟初始值

//还有种可能就是你硬件没搭好,还有IO管脚最好加上拉,这样稳定性会好很多!

使用特权

评论回复
14
stycx| | 2007-8-27 21:39 | 只看该作者

给个c的程序库给你参考一下

void rtc_init(unsigned char tc_on,unsigned char diodes,unsigned char res)
{
res&=3;
if (tc_on) res|=0xa0;
if (diodes==1) res|=4;
else if (diodes==2) res|=8;
else res=0;
ds1302_write(0x8e,0);
ds1302_write(0x90,res);
ds1302_write(0x8e,0x80);
}

void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
{
*hour=bcd2bin(ds1302_read(0x85));
*min=bcd2bin(ds1302_read(0x83));
*sec=bcd2bin(ds1302_read(0x81));
}

void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec)
{
ds1302_write(0x8e,0);
ds1302_write(0x84,bin2bcd(hour));
ds1302_write(0x82,bin2bcd(min));
ds1302_write(0x80,bin2bcd(sec));
ds1302_write(0x8e,0x80);
}

void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year)
{
*date=bcd2bin(ds1302_read(0x87));
*month=bcd2bin(ds1302_read(0x89));
*year=bcd2bin(ds1302_read(0x8d));
}

void rtc_set_date(unsigned char date,unsigned char month,unsigned char year)
{
ds1302_write(0x8e,0);
ds1302_write(0x86,bin2bcd(date));
ds1302_write(0x88,bin2bcd(month));
ds1302_write(0x8c,bin2bcd(year));
ds1302_write(0x8e,0x80);
}

使用特权

评论回复
15
su_tech| | 2007-8-27 21:44 | 只看该作者

控制字没整好,在汇编里没看到哟,没看到操作DS1302

使用特权

评论回复
16
qqbull| | 2007-8-28 09:44 | 只看该作者

32.768外壳接地

使用特权

评论回复
17
Bitfu| | 2007-8-28 10:14 | 只看该作者

我刚做完一个DS1302的程序,试过了

可惜不是汇编的,也不是51的
你可以参考一下:
http://www.chipart.cn/ar_list.asp?id=58

DS1302的I/O,SCK,CE三个管脚都有内部四十几K的下拉,你要注意了!
晶振不起振你怎么知道的?,一般不会的,应该是程序的问题.

"我跟熊一样,是笨死的"-哈哈,楼主真有趣.

使用特权

评论回复
18
qiangdao|  楼主 | 2007-8-28 18:49 | 只看该作者

....

人越忙越出乱子,前段时间可以读也可以写~但不知道为什么现在什么都不行咯~
搞得自己也是一头雾水~焊了好几次还是这样~
现在发现板子短路,还得从新做~受不了咯~
感谢阁楼帮我这个菜鸟~各位我程序我晚上去加班再参考哈~有问题的话还忘大家帮帮忙 

使用特权

评论回复
19
qiangdao|  楼主 | 2007-8-31 22:24 | 只看该作者

....

谢谢个楼咯~小强早些时候把它搞定,最近一直在写别的东西~所以回帖晚了~
谢谢个楼咯~

使用特权

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

本版积分规则

27

主题

162

帖子

1

粉丝