找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1485|回复: 5
打印 上一主题 下一主题
收起左侧

单片机ds1302时钟的RAM读写程序理解,求各位大神相助

[复制链接]
跳转到指定楼层
楼主
ID:894870 发表于 2021-4-15 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题一:i = read_ds1302ram(30);//怎么理解???
问题二:if(i != 3)表示的是什么意思,为什么要做这样的判断?

uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //写地址
uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //读地址
uchar code init_ds[]  ={0x58,0x29,0x07,0x05,0x10,0x14,0x1};   

  1. /*************把数据从ds1302 RAM读出来**0-31*************/
  2. uchar read_ds1302ram(uchar add)
  3. {
  4.         add <<= 1;     //地址是从第二位开始的
  5.         add |= 0x01;   //把最高位置1  是读命令
  6.         add |= 0xc0;   //地址最高两位为 1  
  7.         return(read_ds1302(add));        
  8. }

  9. /*************初始化ds1302时间***************/
  10. void init_ds1302()
  11. {
  12.         uchar i;
  13.         rst = 0;        //第一次读写数据时要把IO口拉低
  14.         clk = 0;
  15.         io = 0;
  16.         i = read_ds1302ram(30);   
  17.         if(i != 3)
  18.         {        
  19.                 i = 3;
  20.                 write_ds1302ram(30,i);                         //4050   4100                 3080
  21.                 write_ds1302(0x8e,0x00);                    //打开写保护
  22.                 for(i=0;i<7;i++)
  23.                 write_ds1302(write_add[i],init_ds[i]);        //把最高位值0 允许ds1302工作
  24.                 write_ds1302(0x8e,0x80);        //关写保护
  25.         }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:390416 发表于 2021-4-15 17:52 | 只看该作者
那么一点点容量  没必要浪费单片机的代码
回复

使用道具 举报

板凳
ID:906759 发表于 2021-4-17 10:41 | 只看该作者
时钟芯片资料里面并没有介绍该地址的作用,我用的时候并没有涉及到这个地址,不影响使用。
回复

使用道具 举报

地板
ID:712951 发表于 2021-4-18 21:24 | 只看该作者
你仔细看读函数,最后转换成ram地址oxfc,读的这个地址的数据并进行判断的
回复

使用道具 举报

5#
ID:510170 发表于 2021-4-19 15:10 | 只看该作者
就字面上来解答,具体你得根据数据手册来查看
问题一:i = read_ds1302ram(30);//怎么理解???
i= read_ds1302ram(30) 里面的内容

问题二:if(i != 3)表示的是什么意思,为什么要做这样的判断?
如果read_ds1302ram(30) 里面的内容不等于3

这里应该是读取ds1302第30号ram寄存器数据,一般来说这个位上面是秒。具体还是得查数据手册。
回复

使用道具 举报

6#
ID:889094 发表于 2021-5-2 23:47 | 只看该作者
02.uchar read_ds1302ram(uchar add)

03.{

04.        add <<= 1;     //地址是从第二位开始的

05.        add |= 0x01;   //把最高位置1  是读命令

06.        add |= 0xc0;   //地址最高两位为 1  

07.        return(read_ds1302(add));        

08.}
这个嵌套函数能执行完吗?求教
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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