搜索
bottom↓
回复: 9

DS1302的一些小问题

[复制链接]
头像被屏蔽

出0入0汤圆

发表于 2012-12-4 13:34:57 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-12-4 13:36:39 | 显示全部楼层
不行,要设置了才可以
头像被屏蔽

出0入0汤圆

 楼主| 发表于 2012-12-4 13:45:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-12-4 17:01:02 | 显示全部楼层
最好是看DS1302数据手册,非常详细,非常权威

出0入96汤圆

发表于 2012-12-4 17:29:57 | 显示全部楼层
将秒寄存器的最高位置0,启动计时,然后如果没有断电的话就一直走

出0入96汤圆

发表于 2012-12-4 17:30:39 | 显示全部楼层
makaveli 发表于 2012-12-4 13:45
怎么设置,给个程序段看看。。。

动手搜一下,一堆一堆的。论坛里也有

出0入0汤圆

发表于 2012-12-4 17:36:34 | 显示全部楼层
要先设置电池充不充电,还有秒寄存器的高位,我这里有一个项目就用了DS1302,源码一会整理好之后我发上来.

出0入0汤圆

发表于 2012-12-4 17:56:02 | 显示全部楼层
本帖最后由 wsy2012 于 2012-12-5 17:27 编辑

DS1302驱动及读取时间代码:

注:
clock_dat为DS1302数据引脚
clock_clk为DS1302时钟引脚
clock_Rst为DS1302复位引脚
  1. /*************************************************************************************************************************************************************
  2. 模块名:DS1302驱动
  3. 函  数:6
  4. 作  用:读写DS1302
  5. 分  类:硬件层
  6. /*************************************************************************************************************************************************************/


  7. /*********************************************************************************************
  8. 函数名:向DS1302写信息(不可直接调用)
  9. 调  用:clock_out(dd);
  10. 参  数:dd:要写入的数据或地址
  11. 返回值:无
  12. 结  果:向DS1302写入一字节
  13. 分  类:第一硬件层
  14. /**********************************************************************************************/
  15. void clock_out(unsigned char dd){
  16.         unsigned char i;
  17.         for(i=0;i<8;i++){
  18.                 clock_dat=dd&0x01; //向DS1302写入一字节数据
  19.                 _nop_();  //延时一指令周期
  20.                 clock_clk=1;   //拉高时钟脉冲
  21.                 dd>>=1;  //右移一位
  22.                 clock_clk=0;   //拉低时钟脉冲
  23.         }
  24. }
  25. /**********************************************************************************************/

  26. /*********************************************************************************************
  27. 函数名:从DS1302读出数据(不可直接调用)
  28. 调  用:某变量=clock_in();
  29. 参  数:无
  30. 返回值:从DS1302读出的数据
  31. 结  果:从DS1302读出一字节
  32. 分  类:第一硬件层
  33. /**********************************************************************************************/
  34. unsigned char clock_in(){
  35.         unsigned char i,j=0;
  36.         clock_dat=1;
  37.         for(i=0;i<8;i++){
  38.                 j>>=1;                  //右移一位
  39.                 _nop_();          //延时一指令周期
  40.                 clock_clk=0; //拉低时钟脉冲
  41.                 _nop_();          //延时一指令周期
  42.                 if(clock_dat){ //判断接收该位数据是否为1
  43.                         j+=0x80;
  44.                 }
  45.                 _nop_();          //延时一指令周期
  46.                 clock_clk=1; //拉高时钟脉冲
  47.         }
  48.     return(j);       //返回数值
  49. }
  50. /**********************************************************************************************/

  51. /*********************************************************************************************
  52. 函数名:从DS1302读出数据
  53. 调  用:某变量=read_clock();
  54. 参  数:ord:要读的数据的地址
  55. 返回值:从DS1302读出的数据
  56. 结  果:从DS1302读出一字节
  57. 分  类:第二硬件层
  58. /**********************************************************************************************/
  59. unsigned char read_clock(unsigned char ord){ //-DS1302读数据(DS1302驱动)
  60.         unsigned char dd=0;
  61.         clock_Rst=0;
  62.         clock_clk=0;
  63.         clock_Rst=1;
  64.         clock_out(ord|0x01);
  65.         dd=clock_in();
  66.         clock_clk=1;
  67.         clock_Rst=0;
  68.         return(dd);
  69. }
  70. /**********************************************************************************************/

  71. /*********************************************************************************************
  72. 函数名:向DS1302写信息(不可直接调用)
  73. 调  用:write_clock(ord,dd);
  74. 参  数:ord:要写入的地址;dd:要写入的数据
  75. 返回值:无
  76. 结  果:向DS1302写入一字节
  77. 分  类:第二硬件层
  78. /**********************************************************************************************/
  79. void write_clock(unsigned char ord, unsigned char dd){ //-DS1302写数据(DS1302驱动)
  80.         clock_Rst=0;
  81.         clock_clk=0;
  82.         clock_Rst=1;
  83.         clock_out(ord);
  84.         clock_out(dd);
  85.         clock_clk=1;
  86.         clock_Rst=0;
  87. }
  88. /**********************************************************************************************

  89. /*********************************************************************************************
  90. 函数名:初始化DS1302
  91. 调  用:Init_1302();
  92. 参  数:无
  93. 返回值:无
  94. 结  果:自动判断DS1302是否初始化,未初始化则进行初始化
  95. 分  类:第三硬件层
  96. /**********************************************************************************************/
  97. void Init_1302(void){
  98.         unsigned char f;
  99.         if(read_clock(0xc1) != 0xaa){//&&TIME_SS==80
  100.                 write_clock(0x80,0x00);//秒
  101.                 write_clock(0x90,0xa5);//充电       
  102.                 write_clock(0xc1,0xaa);//写入初始化标志RAM(第00个RAM位置)
  103.                 for(f=0;f<60;f=f+2){//清除闹钟RAM位为0
  104.                         write_clock(0xc2+f,0x00);
  105.                 }
  106.                 write_clock(0x8e,0x80);//禁止写操作
  107.         }
  108. }
  109. /**********************************************************************************************/

  110. /*********************************************************************************************
  111. 函数名:DS1302写入时间数据
  112. 调  用:SET_1302_TIME();
  113. 参  数:无
  114. 返回值:无
  115. 结  果:将时间变量写入DS1302
  116. 分  类:第三硬件层
  117. /**********************************************************************************************/
  118. void SET_1302_TIME (void){
  119.         write_clock(0x8e,0x00);//允许写操作       
  120.         write_clock(0x8c,TIME_YY/10*16+TIME_YY%10);//TIME_YY为时间年变量
  121.         write_clock(0x88,TIME_MO/10*16+TIME_MO%10);//TIME_MO为时间月变量
  122.         write_clock(0x86,TIME_DD/10*16+TIME_DD%10);//TIME_DD为时间天变量
  123.         write_clock(0x8a,TIME_WW/10*16+TIME_WW%10);//TIME_WW为时间星期变量
  124.         write_clock(0x84,TIME_HH/10*16+TIME_HH%10);//TIME_HH为时间小时变量
  125.         write_clock(0x82,TIME_MM/10*16+TIME_MM%10);//TIME_MM为时间分钟变量
  126.         write_clock(0x80,TIME_SS/10*16+TIME_SS%10);//TIME_SS为时间秒变量
  127.         write_clock(0x90,0xa5);//充电       
  128.         write_clock(0x8e,0x80);//写保护,禁止写操作  
  129. }
  130. /**********************************************************************************************/

  131. /*************************************************************************************************************************************************************/


  132. /*
  133.         读取DS1302数据示范
  134.        
  135.         TIME_YY=read_clock(0x8c)/16*10+read_clock(0x8c)%16;
  136.         TIME_MO=read_clock(0x88)/16*10+read_clock(0x88)%16;
  137.         TIME_DD=read_clock(0x86)/16*10+read_clock(0x86)%16;
  138.         TIME_WW=read_clock(0x8a)/16*10+read_clock(0x8a)%16;
  139.         TIME_HH=read_clock(0x84)/16*10+read_clock(0x84)%16;
  140.         TIME_MM=read_clock(0x82)/16*10+read_clock(0x82)%16;
  141.         TIME_SS=read_clock(0x80)/16*10+read_clock(0x80)%16;
  142. */
复制代码

出0入0汤圆

发表于 2012-12-4 18:25:24 | 显示全部楼层
DS1302数据手册,非常详细,非常权威!学会看手册受益一生啊!

出0入0汤圆

发表于 2012-12-4 23:38:57 | 显示全部楼层
看完源码,在看手册,因为问题解决了可以放下心来看手册。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-2 05:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表