ds1302做计时器准确吗

接口/时钟/PLL

49人已加入

描述

  DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。我们知道DS1302 是实时时钟芯片,既然是时钟芯片它肯定还可以用作一般意义上的定时器(定时时间以秒为单位)。

  DS1302的特点

  DS1302是DALLAS(达拉斯)公司出的一款涓流充电时钟芯片,2001年DALLAS被MAXIM(美信)收购,因此我们看到的DS1302的数据手册既有DALLAS的标志,又有MAXIM的标志,大家了解即可。DS1302实时时钟芯片广泛应用于电话、传真、便携式仪器等产品领域,他的主要性能指标如下:

  1、DS1302是一个实时时钟芯片,可以提供秒、分、小时、日期、月、年等信息,并且还有软件自动调整的能力,可以通过配置AM/PM来决定采用24小时格式还是12小时格式。

  2、拥有31字节数据存储RAM。

  3、串行I/O通信方式,相对并行来说比较节省IO口的使用。

  4、DS1302的工作电压比较宽,大概是2.0V~5.5V都可以正常工作。

  5、DS1302这种时钟芯片功耗一般都很低,它在工作电压2.0V的时候,工作电流小于300nA。

  6、DS1302共有8个引脚,有两种封装形式,一种是DIP-8封装,芯片宽度(不含引脚)是300mil,一种是SOP-8封

  装,有两种宽度,一种是150mil,一种是208mil.我1]看一下DS1302的引脚封装图,如图1所示。

  单片机

  ds1302做计时器准确吗

  ds1302是一块高性能芯片,是专用的时钟芯片,它的内部有31个寄存器,具有闰年自动补充功能,非常适合做计时器,那么ds1302是否准确了?理论上来说是没有绝对准确,只是误差小而已 上面说的定时 并不是让你用定时器去读取,定时不等于定时器只是让你一定时间读取一次时钟芯片的时间。

  网友关于ds1302做计时器是否准确的问答

  问:单片机需要定时去读取1302内部寄存器的数据,就是时间,秒,分,时,年,月,日等。

  答:它是专业的时钟芯片,内部实现准确计时功能,只有晶振搞准了,负载电容对了就可以。

  追问1:单片机的定时器本身不准确,嗯,我有点不明白定时器既然不准确,为什么还需要定时从时钟芯片读取时间数据? 
          2:时钟芯片本身是否能实现准确定时,还是需要单片机的定时器配合才能完成定时?

  追答定时从时钟芯片读取数据,并一定要用定时器哦。时钟芯片计时是比较准确的,但也有误差,不是绝对准确。但比单片机定时器要好很多了。

  程序功能:

  1定时最大范围:小时

  2 随时通过控制按键输入定时时间

  3一直显示DS1302的实时时间

  分析如F: 用DS1302 作为定时器首先需要定义两个数组,一个用作读取DS1302 的实

  时时间now[]; 另一个用作需要定时时间暂存time[]; 我们知道从DS1302 中读取的数据格

  式是压缩BCD码,即now[7]={秒,分,时,日,月,周,年}; 当控制按键按下时time[]存放

  的应该是主观定时时问,之后要将其修改成压缩BCD码并与当前时间now[]的数据相加;

  需要修正数据。

  在控制按键按下后,一次输入时两位分两位秒两位; 若想要定时1分59秒,那么对

  应输入的键值应该是time[6]= {0,0,0,1,5,9}_》_-=[0Oltime[1]= 时time[2]time[3]= 分

  time[4]time[5]= 秒这样的表示与从DS1302读出的数据不一致,需要如下修改:

  1秒处理:

  time[4]《《= 4;

  time[4]= time[4]+ time[]//time[4] 为秒的BCD 石马

  time[2] 《《= 4;

  2 分处理:

  time[2]=time[2]+ timc[3];//ime[2] 为分的BCD 5 马

  time[0]《《= 4;

  3 时处理:

  time[0]= time[O] + time[ ];/im[O] 为时的BCD 码

  time[5]=time[0];

  time[0]= time[4;秒

  time[1]= time[2];分

  docin.com

  time[2]= time[$]/时

  time[3]= time[4]= time[5]=0;

  接下来就是要处理进位关系:

  for( DATA_A= 0; DATA_A 《 3 ;DATA_A++)

  time[DATA_A]=time[DATA_A] +now[DATA_A];// 当前8 间与定时时间相加

  if(ime[DATA_A]&0x0)》0x09 )

  if( DATA_A== 2 )break;

  time[DATA_A] +=6;// 加6 修正

  }

  if(carry_flag )

  time[DATA_A] += 1;

  if(time[ DATA_A]&0x0f)== 0x0a)

  {

  time[DATA_A] &=0xf0;

  time[DATA_A] +=0x10;

  if((ime[DATA_A]&0xf0)》0X50)

  {

  time[DATA_A]-= 0x60;

  carry_flag=1;

  elsecarry_flag= 0;

  }这样基本上完成对DS1302的数据处理。

单片机

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分