打印

请问ds1302是不是有很多版本?遭遇ds1302异灵事件。。。

[复制链接]
5430|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
krstc|  楼主 | 2008-7-13 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位高手,小弟写了一个1302的驱动程序,在有的ds1302上面能正确运行,有的ds1302上无法运行,搞到现在没有搞明白,请教一下大家。

本人写的ds1302的驱动贴在下面,大家帮忙看看有没有什么错误的地方。

奇怪的事情在这,本人买了2个ds1302,字是白色的印刷上去的,用指甲一弄就掉,上面印的是ds1302 0722A4 +107AA。

这个ds1302用我写的驱动读写正常,显示也完全正常,就是不走时,也就是不走秒,但是奇怪的是我拔掉晶振用手捏住接晶振的两端的时候,开始走秒,但是走的比较快,运行也比较正常,就是手一松就停止了,有时候不装晶振他也走时,就是很慢走的。不知道什么原因,请教大家。

由于上面的ds1302太古怪,所以我又去买了3个新的ds1302,不在同一家买的,这次的ds1302是灼刻在芯片表面的,也就是用手擦不掉的,铭牌是 ds1302 ba38hj  ,用下面写的驱动也能正常驱动,就是读数不正确,比如读秒显示的是 :00,01,00,03,00,02,07,10,08,13,09,十分混了。

但是自己能自动走,更加不可思议的是我拔掉晶振他居然也在走,而且频率和没拔的时候一样。。。

至今没有调试出来,郁闷啊啊。。。ds1302有鬼啊啊。。。。

请大家指教,下面是我的驱动程序。大家看看是不是时序问题。谢谢大家了!


void write_ds1302(unsigned char Writeaddr,unsigned char Writedata)
{
 unsigned char i;
 TIMERST=0;
 TIMECLK=0;
  TIMERST=1;
  for(i=8;i>0;i--)
  {
  TIMECLK=0;
    TIMEDATA=Writeaddr&0x01;
  _nop_();
    TIMECLK=1;
  Writeaddr=Writeaddr>>1;
    
  }

  for(i=8;i>0;i--)
  {
  TIMECLK=0;
  TIMEDATA=Writedata&0x01;
  _nop_();   //
    TIMECLK=1;
   Writedata=Writedata>>1;
  }

 TIMERST=0;
 _nop_();
 TIMECLK=0;
 _nop_();

}

/****************************************************************************
从DS1302读出一个字节的数据
****************************************************************************/
unsigned char Read_Ds1302(unsigned char Readaddr)
{
 unsigned char i;
 unsigned char value=0;
 uchar value1=0;
 
 TIMERST=0;
 TIMECLK=0;
 TIMERST=1;
 
 for(i=8;i>0;i--)
  {
  TIMECLK=0;         //0   
  TIMEDATA=Readaddr&0x01;
  _nop_();          //
  TIMECLK=1;
  Readaddr=Readaddr>>1;
 }
   for(i=8;i>0;i--)
  { 
  if(TIMEDATA==1)
    {
      value=value|0x80;
    }
  value=value>>1;
  TIMECLK=0;
  TIMECLK=1;
    _nop_();
  }


  TIMERST=0;
 _nop_();
  TIMECLK=0;
 _nop_();
 value1=value&0xf0;
 value=value&0x0f;
 value1>>=4;
 value=value+value1*10;
  return value;
}

/****************************************************************************
DS1302初始化
****************************************************************************/
void init_1302(void)
{
 while(Read_Ds1302(0xcd)!=0x01)
 {
  TIMECLK=0;
  TIMERST=1;
  write_ds1302(0x8e,0x00);
 
  write_ds1302(0x82,0x01);
  write_ds1302(0x84,0x02);
  write_ds1302(0x86,0x03);
  write_ds1302(0x88,0x04);
  write_ds1302(0x8a,0x05);
  write_ds1302(0x8c,0x06);
 
  write_ds1302(0x90,0x00);
  write_ds1302(0xcc,0x01);
  write_ds1302(0x80,0x01);
  write_ds1302(0x8e,0x80);
  if(keyboard(0)) break;

  }
}

相关帖子

沙发
xwj| | 2008-7-13 11:47 | 只看该作者

1、每次上电必须初始化;2、秒最高位为1时将停止走时

使用特权

评论回复
板凳
来与君| | 2008-7-13 12:24 | 只看该作者

这个型号有很多旧片,打磨片。

使用特权

评论回复
地板
huangqi412| | 2008-7-13 12:37 | 只看该作者

网上找个51程序试

使用特权

评论回复
5
krstc|  楼主 | 2008-7-13 13:01 | 只看该作者

谢谢大家解答

1:每次上电都初始化了。
2:秒针第7位已经设置为0,既启动运行。
3:网上找了很多51程序,都不能正常运行。
4:哪里才能买到不是打磨的呢?现在被这个卡死了。。。
5:有没有替代产品呢?或者说推荐一个同类型的时钟芯片。大家都用什么芯片呢?

使用特权

评论回复
6
krstc|  楼主 | 2008-7-13 13:22 | 只看该作者

还是没搞定。。。3天了。。。

郁闷死了。。。项目快结束了。。。被这个卡主了。。。

使用特权

评论回复
7
alongman| | 2008-7-13 13:33 | 只看该作者

可以找个正常的带1302的电路板,同你买的调换一下.

如果正常,是你的电路或程序的问题.不过从你描述的,电路好像有问题,晶振电路,电源都要考虑.

使用特权

评论回复
8
工大第二枪| | 2008-7-13 16:39 | 只看该作者

去美信的专卖看看,

应该不会有次货。

使用特权

评论回复
9
涛行九天| | 2008-7-13 17:17 | 只看该作者

www.study-bbs.com 单片机版面置顶帖

有我写的1302的代码,是好用的,参考一下

使用特权

评论回复
10
krstc|  楼主 | 2008-7-13 18:18 | 只看该作者

谢谢大家解答

谢谢楼上各位的关注。试了你们的方法。还是老样子。
1302的电路很简单。应该不会什么问题。我们这貌似没有美信的专卖。

我scl。rst。io分别接在p3口的1.2.3上,应该不是这个问题吧。谢谢大家的帮助!

使用特权

评论回复
11
happy_mcu| | 2008-7-14 08:31 | 只看该作者

DA脚接个上拉!!

使用特权

评论回复
12
meng730507| | 2008-7-14 09:41 | 只看该作者

陷阱啊!

多数是片子的问题
如果DS1302的接口上没有上拉电阻,加个4.7K试试看。要是还不行,那就换原装的芯片。

还有问卖家,换成12小时制或24小时制的

使用特权

评论回复
13
cooljoker| | 2011-1-15 20:21 | 只看该作者
我也遇到这个问题额,就是读不进来数,驱动在有的1302上走的可欢了

使用特权

评论回复
14
cooljoker| | 2011-1-28 08:46 | 只看该作者
我们的问题解决了,有些单片机的某些I/O口有复用,应该设置相关标志位

使用特权

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

本版积分规则

11

主题

53

帖子

0

粉丝