打印

急用,求助有关ds1302的问题

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


相关帖子

沙发
dai_weis| | 2007-8-24 15:41 | 只看该作者

电气连接要做好,第一次启动DS1302要根据手册

写入启动代码,DS1302才运行

使用特权

评论回复
板凳
qiangdao|  楼主 | 2007-8-24 18:42 | 只看该作者

回2楼

今天下午去检查了电路,程序的时序没有问题,但是发现是晶振没有起振~不知道是什么原因~
2楼主能不能指教哈,该如何启动芯片,~书上只提到了如何读写~
现在发现可能是芯片还没有工作,所以才会造成这样的原因!~

使用特权

评论回复
地板
dai_weis| | 2007-8-24 19:22 | 只看该作者

看看数据手册,在秒位上有一个启动标志

写该启动标志即可,如果你的数据手册没有这个,去max下载一个最新的

使用特权

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

.....

使用特权

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

...

自己笨死了~一着急就抓吓~谢谢咯~
早上同学去中发买芯片~下午再去调试~看看还有什么问题~到时候2楼再帮帮帮忙吧

使用特权

评论回复
7
wwj839105| | 2007-8-25 11:26 | 只看该作者

..........

如果真的确认程序没错,要注意你的32.768K的晶振的负载电容的问题,好像的DS1302里的负载电载很小几个P我不记得了。。我以前做DS1302时出现过这种情况,不是随便拿一个32.768K的晶振就可以用的。。

使用特权

评论回复
8
qiangdao|  楼主 | 2007-8-25 19:04 | 只看该作者

笨死了

刚刚静下心来看书,才发现自己没有写控制寄存器~这样的话怎么能读写芯片哦~
真的受不了自己了~
回7楼~
接的是6pf的电容~按书上说的应该没有问题~
晚上再去加班~看看把控制寄存器写了以后还会有什么问题

使用特权

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

7楼

不知道我用示波器能不能检测出晶振是否起振;如果不起振的话一般是什么问题~?

使用特权

评论回复
10
dai_weis| | 2007-8-25 20:10 | 只看该作者

万用表交流档,约有2.XV的电压

如果用电池大约1.3V左右

使用特权

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

....

回10楼:  
用示波器检查不出来吗?如果用交流检测出来,是不是起振了?

使用特权

评论回复
12
dai_weis| | 2007-8-26 08:26 | 只看该作者

当然可以,不过输入阻抗要高,要不可能停振

使用特权

评论回复
13
qiangdao|  楼主 | 2007-8-26 12:43 | 只看该作者

回12楼

不知道接1k电阻行不行~

使用特权

评论回复
14
qiangdao|  楼主 | 2007-8-26 18:00 | 只看该作者

..

下午弄了哈,但是测的是1.37v的交流电;但是还是不能从芯片读出数据,我又从新写了另一个程序还是不行~12楼帮忙看看~我都要急死了
sclk    equ    p1.0
io    equ    p1.1
rst    equ    p1.2
org    0
jmp     start
org    30h
start:
    clr    sclk
    clr    rst
    nop
    setb    rst
    mov    r0,#8fh;控制寄存器,写寄存器
    call    wr_ds
    mov    r0,#00;允许写寄存器
    call    wr_ds
    setb    sclk
    clr    rst
    nop
    clr    sclk
    setb    rst
    mov    r0,#81h
    call    wr_ds
    mov    r0,#00;给秒初值,并启动芯片
    call    wr_ds
    clr    rst
    setb    sclk
    nop
    setb    rst
    clr    sclk
    mov    r0,#83h
    call    wr_ds
    mov    r0,#55
    call    wr_ds
    clr    rst
    setb    sclk
    nop
    setb    rst
    clr    sclk
    mov    r0,#8fh
    call    wr_ds
    mov    r0,#80h;写保护,禁止写寄存器
    call    wr_ds
    clr    rst
    setb    sclk
    nop
rd_ds1302:
    setb    rst
    clr    sclk
    mov    r0,#8eh
    call    wr_ds
    mov    r0,#00;读控制寄存器,允许读
    call    wr_ds
    clr    rst
    setb    sclk
    nop
    mov    r0,#80h
    call    wr_ds
    call    rd_ds
    mov     21h,a
    clr    rst
    setb    sclk
    nop
    setb    rst
    clr    sclk
    mov    r0,#82h
    call    wr_ds
    call    rd_ds
    mov    22h,a
    clr    rst
    setb    sclk
    nop
    mov        r0,#21h
    mov        r2,#2
show_again:     
              call        show
              call        delay
              mov         p2,#0ffh
              call        delay
              inc        r0
              djnz        r2,show_again
;================================================
;程序名:        wd_ds
;程序功能:      给芯片送一个数据
;                r0为入口参数
;                 没有返回值
;================================================
       wr_ds:
       
               mov      r7,#8
               mov       a,r0
               clr    io
               clr      c
           lp1:
               setb      sclk
               rrc      a
               mov      io,c
               nop
               clr    sclk
               nop
               djnz     r7,lp1
       clr     io    
               ret
;================================================
;程序名称:      rd_ds
;程序功能:      读出芯片的一个数据
;                读出的数据存在 acc中
;================================================
        rd_ds:
                mov      r7,#8
                  clr      c
                   clr     io                 
                clr      a
           lp2:
                setb     sclk
                nop
                mov     c,io
                rrc     a
                clr    sclk
                nop
                djnz    r7,lp2
                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        


使用特权

评论回复
15
qiangdao|  楼主 | 2007-8-26 21:50 | 只看该作者

....

今晚去弄了哈,问题基本解决可以写也可以读;原因还是在程序上,但是还是没有把芯片启动起来~是秒控制寄存器的第7位为启动位,可写进去后读出来的数还是原来写进去的数,芯片并没有启动。
芯片的功能上说可以自动调节时钟日期与时间;如果我给进去的数超过了所储存数的范围的话,芯片是否会自动调整数据
如:先写入的02年10月3号16点42分10秒
    吧秒位写为60h,时钟芯片会不会把数自动调成:
    02年10月3号16点43分0秒。

使用特权

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

..顶死

彻底服了~现在芯片的晶振不起振~芯片工作不起来~哪个哥们些帮帮忙啊~
都快急死了~
哪个哥们有调试过的程序的话给我发一个吧~现在都崩溃了

使用特权

评论回复
17
dai_weis| | 2007-8-27 16:49 | 只看该作者

你先看看数据手册

DS1302的上电时引脚的电平有高低要求,看看符合不符合,先不要管什么数据超范围问题,先老老实实的写入启动标志,并把年月日时分秒设置到合理的数据,还有不要到处发帖,我都不知道在那回答

使用特权

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

....

疾病乱投医啊~
时间快到了,着急啊~
我晚上再去弄弄,如果有问题的话,还得请教您呢 

使用特权

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

谢谢阁楼~早已经出来了

使用特权

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

本版积分规则

27

主题

162

帖子

1

粉丝