找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 713|回复: 2
收起左侧

请教大佬关于单片机+ds1302读一个字节的问题

[复制链接]
ID:1090268 发表于 2023-8-1 13:26 | 显示全部楼层 |阅读模式
先写一下我自己读一个字节的函数
sbit rtc_io = P3 ^ 4;
sbit rtc_ce = P3 ^ 5;
sbit rtc_sclk = P3 ^ 6;


static unsigned char rtc_read_byte(unsigned char cw)
{
        unsigned char cnt = 0;
        unsigned char byte = 0x00;
        unsigned char tmp;
      
        rtc_ce = 1;
      
        for (cnt = 0; cnt < 8; ++cnt) {
                rtc_io = !!(cw & 0x01 << cnt);
                rtc_sclk = 1;
                _nop_();
                rtc_sclk = 0;
        }

        cnt ^= cnt;
      
        do {
                byte |= (tmp = rtc_io) ? tmp << cnt : 0;
                rtc_sclk = 1;
                _nop_();
                rtc_sclk = 0;
        } while (++cnt < 8);
      
        rtc_ce = 0;
        rtc_io = 0;  //这里不懂
        return byte;
}


如上代码,当我把函数返回前的那句rtc_io = 0注释掉之后,读取的时间就是乱的,但是加上了就正常了。
这里实在不明白为什么最后一定要把io口电平拉低,查看ds1302的手册和时序图,并没有看到相关的讲解,实在是弄不清原因了,还希望大佬能帮我解答一下,多谢啦
回复

使用道具 举报

ID:332444 发表于 2023-8-1 15:36 | 显示全部楼层
IO只与读数据有关,驱动看我帖子有荔枝.
回复

使用道具 举报

ID:1090268 发表于 2023-8-1 15:45 | 显示全部楼层
xianfajushi 发表于 2023-8-1 15:36
IO只与读数据有关,驱动看我帖子有荔枝.

我看了您的文章,是那篇仿真的那个吗?我这个问题是出在stc89c52上的,和P34无上拉有关,所以在您那个仿真电路上可能没这个现象
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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