找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机+DS3231读时间寄存器的问题

[复制链接]
跳转到指定楼层
楼主
DS3231读时间寄存器给定寄存器首地址后是否可以依次读0x00秒, 0x01分,0x02时,0x03天,.....还是只能读出给定寄存器的数据。


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

使用道具 举报

沙发
ID:285271 发表于 2019-7-24 08:38 | 只看该作者
这段程序读出寄存器数据没有问题,但是我想可不可以依次从首地址连续读出数据直到主机发出NACK
信号结束。还想请教一下大家
uchar   date[7];     /* date[2]=hour,date[1]=minute,date[0]=second*/

uchar read_ds3231(uchar address)         //从DS3231的某个地址读取1byte数据
{
        uchar dat;
uchar n;
        start();
        write_i2c(0xd0);
        while(!respons());
        write_i2c(0x00);   // 写秒寄存器地址
        while(!respons());
        start();
        write_i2c(0xd1);
        while(!respons());
   date[0]=read_i2c();
   stop();
       
        delay();delay();delay();delay();
       
       
        start();
        write_i2c(0xd0);
        while(!respons());
        write_i2c(0x01);   //  写分寄存器地址
        while(!respons());
        start();
        write_i2c(0xd1);
        while(!respons());
   date[1]=read_i2c();
   stop();
         
        delay();delay();delay();delay();
       
       
        start();
        write_i2c(0xd0);
        while(!respons());
        write_i2c(0x02);    //写小时寄存器地址
        while(!respons());
        start();
        write_i2c(0xd1);
        while(!respons());
   date[2]=read_i2c();
   stop();

}
回复

使用道具 举报

板凳
ID:540236 发表于 2019-7-27 10:53 | 只看该作者
地址指针是自动加1的,比如说
0iic开始
1写操作
2写地址sec 0x00
3写入数据 sex
4再次写数据   这里写入数据就是写到min寄存器0x01;
5iic结束
所以时间初始化是可以一次性写完的
回复

使用道具 举报

地板
ID:285271 发表于 2019-8-2 19:16 | 只看该作者
accumulation 发表于 2019-7-27 10:53
地址指针是自动加1的,比如说
0iic开始
1写操作

明白了,谢谢朋友解疑
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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