标题: 有关DS1302外部上拉电阻的问题 [打印本页]

作者: Kankanxi    时间: 2024-3-3 17:24
标题: 有关DS1302外部上拉电阻的问题
1. 请问为什么ds1302需要外接上拉电阻?
2. 请问为什么io口没有接上拉电阻时,需要在读取字节后加上DS1302_IO = 0;DS1302_IO = 1;
3. 请问为什么要先DS1302_IO = 0再DS1302_IO = 1,而不是直接DS1302_IO = 1;

以上三个问题是我在解决这个帖子(51单片机开发板ds1302+lcd1602出现问号,不能正确计时,困扰很久了,求一下解... - 24小时必答区 (51hei.com))后想到的,解决问题的代码如下:
  1. unsigned char DS1302SingleRead(unsigned char reg)
  2. {
  3.     unsigned char dat;

  4.     DS1302_CE = 1;
  5.     delay();
  6.     DS1302ByteWrite((reg << 1) | 0x81);
  7.     dat = DS1302ByteRead();
  8.     DS1302_CE = 0;
  9.     delay();
  10.     // 请注意这里
  11.     DS1302_IO = 0;
  12.     delay();
  13.     DS1302_IO = 1;

  14.     return dat;
  15. }
复制代码




作者: Kankanxi    时间: 2024-3-3 21:57
稍微顶一下
作者: xiaobendan001    时间: 2024-3-4 07:23
不加上拉这样能用?哪天翻出来旧板子试试。
作者: MCU起航    时间: 2024-3-4 11:03
51单片机io准双向口,有弱上拉,“DS1302_IO = 0再DS1302_IO = 1“”,这句是一个上升沿,你要看看这个DS1302的规格书
作者: mtt661    时间: 2024-3-4 12:39
第一个,第二个问题,上拉电阻不是绝对的,只是更能确保信号的正确性。
DS1302我没试过,但是18B20我试过,同样的18B20,直接用stc8H驱动,不用加上拉电阻就可以,但是接在ESP8266上面,必须加上拉电阻。
第三个问题,先DS1302_IO = 0再DS1302_IO = 1是由于数据使通过IO口上升沿锁存的,多看设备手册。如果某个芯片是下降沿锁存的,就是先IO = 1再IO =0了。
作者: cy009    时间: 2024-3-4 12:39
DS1302_IO = 0再DS1302_IO = 1,模拟输出上升沿
作者: 累不死的狗    时间: 2024-3-4 14:56
数据手册上确实没要求有上拉电阻
作者: 累不死的狗    时间: 2024-3-4 15:06
有测试过删除之后不行吗?管数据的应该什么状态都行才对;测之前看看你的硬件连接是不是好的
作者: 累不死的狗    时间: 2024-3-4 15:32
mtt661 发表于 2024-3-4 12:39
第一个,第二个问题,上拉电阻不是绝对的,只是更能确保信号的正确性。
DS1302我没试过,但是18B20我试过 ...

我看数据手册单字节读时序没写上升沿锁存吧?是不是有IO电平跳变就行呢?
作者: coody_sz    时间: 2024-3-4 16:39
DS1302的数据脚内有下拉电阻,所以MCU的IO要接上拉电阻(或启动内部的上拉电阻),51的准双向口不足以拉高,所以要外接上拉电阻,对于STC8系列、STC32系列的可以启动内部的4K上拉电阻。
作者: mtt661    时间: 2024-3-5 13:25
累不死的狗 发表于 2024-3-4 15:32
我看数据手册单字节读时序没写上升沿锁存吧?是不是有IO电平跳变就行呢?

手册上有时序图的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1