找回密码
 立即注册

QQ登录

只需一步,快速开始

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

对DS1302进行写入和读取操作的程序

[复制链接]
跳转到指定楼层
楼主
这是我写的,不知道为什么编译之后不对呢????

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

使用道具 举报

沙发
ID:84652 发表于 2015-8-28 17:00 | 只看该作者
ACC是累加器吗?如果是的话在计数变量 i 自加的时候,就是 i++ 运算,会用到累加器,之前存的数据就没了……正确的做法是for(i=8;i>0;i--)
回复

使用道具 举报

板凳
ID:62512 发表于 2015-8-28 17:13 | 只看该作者
王朗的诱惑 发表于 2015-8-28 17:00
ACC是累加器吗?如果是的话在计数变量 i 自加的时候,就是 i++ 运算,会用到累加器,之前存的数据就没了… ...

按照您的说法改正了,但还是不行
回复

使用道具 举报

地板
ID:84652 发表于 2015-8-28 17:25 | 只看该作者
此者彼者 发表于 2015-8-28 17:13
按照您的说法改正了,但还是不行

把ACC=ACC>>1;放到前面,就是进了for以后的第一句。
回复

使用道具 举报

5#
ID:62512 发表于 2015-8-28 19:43 | 只看该作者
王朗的诱惑 发表于 2015-8-28 17:25
把ACC=ACC>>1;放到前面,就是进了for以后的第一句。

按照您说的,还是不行,您有时间帮我看看我的程序吗??我使用keil4编写的,麻烦您了,我编译的结果是,无论初始值是什么,数码管显示的都是0,并且不动,麻烦您了。

DS1302简单时钟.rar

26.35 KB, 下载次数: 18

回复

使用道具 举报

6#
ID:84652 发表于 2015-8-28 23:52 | 只看该作者
此者彼者 发表于 2015-8-28 19:43
按照您说的,还是不行,您有时间帮我看看我的程序吗??我使用keil4编写的,麻烦您了,我编译的结果是, ...

搞定。~~不过我的电路不太一样,但是发现DS1302连到P3那几个口不好用,换到P2的就好了,估计是数码管开关的时候引脚控制牵连到DS1302了。现在DS1302通信和初始化都没问题了(接在P2的时候)。但是因为数码管电路不太一样,所以最后具体的还要你自己试试。要是还不行……可以再来找我。

DS1302简单时钟.zip

30.11 KB, 下载次数: 43

回复

使用道具 举报

7#
ID:62512 发表于 2015-8-29 12:50 | 只看该作者
王朗的诱惑 发表于 2015-8-28 23:52
搞定。~~不过我的电路不太一样,但是发现DS1302连到P3那几个口不好用,换到P2的就好了,估计是数码管开关 ...

恩恩,搞定了,真是太谢谢你啦~~~
回复

使用道具 举报

8#
ID:62512 发表于 2015-8-29 12:51 | 只看该作者
王朗的诱惑 发表于 2015-8-28 23:52
搞定。~~不过我的电路不太一样,但是发现DS1302连到P3那几个口不好用,换到P2的就好了,估计是数码管开关 ...

恩恩,可以了,真是太谢谢你啦~~~~~~
回复

使用道具 举报

9#
ID:62512 发表于 2015-8-29 12:52 | 只看该作者
王朗的诱惑 发表于 2015-8-28 23:52
搞定。~~不过我的电路不太一样,但是发现DS1302连到P3那几个口不好用,换到P2的就好了,估计是数码管开关 ...

恩恩,已经可以了,真是太谢谢你啦~~~~~~
回复

使用道具 举报

10#
ID:62512 发表于 2015-9-6 11:47 | 只看该作者
王朗的诱惑 发表于 2015-8-28 23:52
搞定。~~不过我的电路不太一样,但是发现DS1302连到P3那几个口不好用,换到P2的就好了,估计是数码管开关 ...

大神,,,我这前两天还行,但是今天就不行了,IO口换了还是不行,显示就是8888,求指导

IMG_20150906_114501.jpg (3.49 MB, 下载次数: 133)

IMG_20150906_114501.jpg
回复

使用道具 举报

11#
ID:84652 发表于 2015-9-6 14:33 | 只看该作者
本帖最后由 王朗的诱惑 于 2015-9-6 14:36 编辑
此者彼者 发表于 2015-9-6 11:47
大神,,,我这前两天还行,但是今天就不行了,IO口换了还是不行,显示就是8888,求指导

数据不能是88吧……会不会是显示问题。数码管显示调好了么?话说这面包板……好眼熟呀……你也用面包板玩……
回复

使用道具 举报

12#
ID:90563 发表于 2015-9-19 21:46 | 只看该作者
//********向1302写数据*********
void Write1302(uchar dat)
{
  uchar i;
  SCLK=0;           //拉低SCLK,为脉冲上升沿写入数据做好准备
  delay1(1);       //稍微等待,使硬件做好准备
  for(i=0;i<8;i++)      //连续写8个二进制位数据
    {
   IO=dat&0x01;    //取出dat的第0位数据写入1302
   delay(1);       //稍微等待,使硬件做好准备
   SCLK=1;           //上升沿写入数据
   delay1(1);      //稍微等待,使硬件做好准备
   SCLK=0;           //重新拉低SCLK,形成脉冲
   dat>>=1;          //将dat的各数据位右移1位,准备写入下一个数据位
   }
}

void WriteSet1302(uchar Cmd,uchar dat)
{
   RST=0;           //禁止数据传递
   SCLK=0;          //确保写数居前SCLK被拉低
   RST=1;           //启动数据传输
   delay1(1);     //稍微等待,使硬件做好准备
   Write1302(Cmd);  //写入命令字
   Write1302(dat);  //写数据
   SCLK=1;          //将时钟电平置于已知状态
   RST=0;           //禁止数据传递
}

uchar Read1302(void)
{
   uchar i,dat;
   delay(1);       //稍微等待,使硬件做好准备
   for(i=0;i<8;i++)   //连续读8个二进制位数据
   {
    dat>>=1;       //将dat的各数据位右移1位,因为先读出的是字节的最低位
    if(IO==1)    //如果读出的数据是1
    dat|=0x80;    //将1取出,写在dat的最高位
    SCLK=1;       //将SCLK置于高电平,为下降沿读出
    delay1(1);  //稍微等待
    SCLK=0;       //拉低SCLK,形成脉冲下降沿
    delay1(1);  //稍微等待
    }  
  return dat;        //将读出的数据返回
  }

uchar  ReadSet1302(uchar Cmd)
{
  uchar dat;
  RST=0;                 //拉低RST
  SCLK=0;                //确保写数居前SCLK被拉低
  RST=1;                 //启动数据传输
  Write1302(Cmd);       //写入命令字
  dat=Read1302();       //读出数据
  SCLK=1;              //将时钟电平置于已知状态
  RST=0;               //禁止数据传递
  return dat;          //将读出的数据返回
}

void Init_DS1302(void)
{
WriteSet1302(0x8E,0x00);                 //根据写状态寄存器命令字,写入不保护指令
WriteSet1302(0x80,((0/10)<<4|(0%10)));   //根据写秒寄存器命令字,写入秒的初始值
WriteSet1302(0x82,((45/10)<<4|(45%10)));   //根据写分寄存器命令字,写入分的初始值
WriteSet1302(0x84,((15/10)<<4|(15%10))); //根据写小时寄存器命令字,写入小时的初始值
WriteSet1302(0x86,((29/10)<<4|(29%10))); //根据写日寄存器命令字,写入日的初始值
WriteSet1302(0x88,((11/10)<<4|(11%10))); //根据写月寄存器命令字,写月的初始值
WriteSet1302(0x8c,((15/10)<<4|(15%10)));   //.....年.....................年.........
}
回复

使用道具 举报

13#
ID:309880 发表于 2018-5-5 20:22 | 只看该作者
Great88 发表于 2015-9-19 21:46
//********向1302写数据*********
void Write1302(uchar dat)
{

谢谢您
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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