找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ds1302和ds18b20发生冲突

  [复制链接]
跳转到指定楼层
楼主
25黑币
最近写了一个基于51单片机实现温度和时间显示之间的转换,但是问题在于如果将温度程序和时钟程序分开写,功能都能实现,但合在一起之后时间能显示,但温度在数码管上只显示0,这个问题困扰了我很久,一直未解决。

电子温度表.rar

42.43 KB, 下载次数: 80

最佳答案

查看完整内容

这个问题,我已经不知道发过多少次了!!!!! unsigned char Ds1302Read(unsigned char addr) { unsigned char n,dat,dat1; CE = 0; _nop_(); SCLK = 0; _nop_(); CE = 1; _nop_(); for(n=0; n>= 1; SCLK = 1; _nop_(); SCLK = 0; _nop_(); } _nop_(); ...

评分

参与人数 1黑币 +30 收起 理由
HardyChen + 30 绝世好帖!

查看全部评分

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

使用道具 举报

沙发
ID:164602 发表于 2018-8-27 20:39 | 只看该作者
这个问题,我已经不知道发过多少次了!!!!!
unsigned char Ds1302Read(unsigned char addr)
{
        unsigned char n,dat,dat1;
        CE = 0;
        _nop_();

        SCLK = 0;
        _nop_();
        CE = 1;
        _nop_();

        for(n=0; n<8; n++)
        {
                DSIO = addr & 0x01;
                addr >>= 1;
                SCLK = 1;
                _nop_();
                SCLK = 0;
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)
        {
                dat1 = DSIO;
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;
                _nop_();
        }

//        CE = 0;
        _nop_();
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();

        return dat;        
}

红色那一条语句,原来有,现在我将它去掉,就好了。其它的什么都不用改。

究其原因,可能是两器件使能冲突。

评分

参与人数 1黑币 +30 收起 理由
HardyChen + 30 很给力!

查看全部评分

回复

使用道具 举报

板凳
ID:96682 发表于 2018-8-27 23:06 | 只看该作者
时钟温度计用液晶屏来显示最好,如用八位数码管得做交替显示才行

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:7485 发表于 2018-8-28 09:17 | 只看该作者
DS18B20的温度转换时间较长,不可以让程序在那里一直等待转换结束,执行完转换指令后去做其他事情,大约800ms以上在读取时间值。
回复

使用道具 举报

5#
ID:342895 发表于 2018-8-28 20:42 | 只看该作者
谢谢大佬,以前这个问题困扰了我很久,非常感谢
回复

使用道具 举报

6#
ID:453741 发表于 2019-4-16 13:17 | 只看该作者
HC6800-ES-V2.0 发表于 2018-8-27 20:39
这个问题,我已经不知道发过多少次了!!!!!
unsigned char Ds1302Read(unsigned char addr)
{

真的可以啦哈哈哈,谢谢啦楼主
回复

使用道具 举报

7#
ID:337308 发表于 2019-4-16 16:11 | 只看该作者
HC6800-ES-V2.0 发表于 2018-8-27 20:39
这个问题,我已经不知道发过多少次了!!!!!
unsigned char Ds1302Read(unsigned char addr)
{

我去,牛逼!大佬!!大佬!这个问题困扰了我4个小时。真心牛逼大佬。十分感谢!!!!!!!!!!!!
回复

使用道具 举报

8#
ID:627541 发表于 2019-10-31 21:10 | 只看该作者
uchar Ds1302Read(uchar addr)
{
        uchar n,dat,dat1;
        RST = 0;
        _nop_();

        SCLK = 0;//先将SCLK置低电平。
        _nop_();
        RST = 1;//然后将RST(CE)置高电平。
        _nop_();

        for(n=0; n<8; n++)//开始传送八位地址命令
        {
                DSIO = addr & 0x01;//数据从低位开始传送
                addr >>= 1;
                SCLK = 1;//数据在上升沿时,DS1302读取数据
                _nop_();
                SCLK = 0;//DS1302下降沿时,放置数据
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//读取8位数据
        {
                dat1 = DSIO;//从最低位开始接收
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302下降沿时,放置数据
                _nop_();
        }

        RST = 0;
        _nop_();        //以下为DS1302复位的稳定时间,必须的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
        return dat;       
}
回复

使用道具 举报

9#
ID:627541 发表于 2019-10-31 21:12 | 只看该作者
HC6800-ES-V2.0 发表于 2018-8-27 20:39
这个问题,我已经不知道发过多少次了!!!!!
unsigned char Ds1302Read(unsigned char addr)
{

uchar Ds1302Read(uchar addr)
{
        uchar n,dat,dat1;
        RST = 0;
        _nop_();

        SCLK = 0;//先将SCLK置低电平。
        _nop_();
        RST = 1;//然后将RST(CE)置高电平。
        _nop_();

        for(n=0; n<8; n++)//开始传送八位地址命令
        {
                DSIO = addr & 0x01;//数据从低位开始传送
                addr >>= 1;
                SCLK = 1;//数据在上升沿时,DS1302读取数据
                _nop_();
                SCLK = 0;//DS1302下降沿时,放置数据
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//读取8位数据
        {
                dat1 = DSIO;//从最低位开始接收
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302下降沿时,放置数据
                _nop_();
        }

        RST = 0;
        _nop_();        //以下为DS1302复位的稳定时间,必须的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
        return dat;       
}
为啥我的不行
回复

使用道具 举报

10#
ID:760 发表于 2020-5-20 14:39 | 只看该作者
HC6800-ES-V2.0 发表于 2018-8-27 20:39
这个问题,我已经不知道发过多少次了!!!!!
unsigned char Ds1302Read(unsigned char addr)
{

为什么我注释掉了CE还是不行
回复

使用道具 举报

11#
ID:759213 发表于 2020-5-26 09:02 | 只看该作者
厉害,这个问题处理了一天,在这里发现解决办法,谢谢分享
回复

使用道具 举报

12#
ID:785191 发表于 2020-7-22 18:09 | 只看该作者
simple1103 发表于 2020-5-20 14:39
为什么我注释掉了CE还是不行

还有一个写字节的函数也要注释掉,这样就行了。
回复

使用道具 举报

13#
ID:798483 发表于 2020-7-28 12:55 | 只看该作者
HC6800-ES-V2.0 发表于 2018-8-27 20:39
这个问题,我已经不知道发过多少次了!!!!!
unsigned char Ds1302Read(unsigned char addr)
{

大佬牛逼!!!
回复

使用道具 举报

14#
ID:797929 发表于 2020-9-28 08:52 | 只看该作者
HC6800-ES-V2.0 发表于 2018-8-27 20:39
这个问题,我已经不知道发过多少次了!!!!!
unsigned char Ds1302Read(unsigned char addr)
{

这个方法真可行,问题解决,谢谢
回复

使用道具 举报

15#
ID:593106 发表于 2021-3-17 22:40 | 只看该作者
困扰了一天,还是在这里找到了解决办法,大佬nb
回复

使用道具 举报

16#
ID:1045217 发表于 2022-9-19 17:04 | 只看该作者
牛啊,解决了我的问题了,感谢
回复

使用道具 举报

17#
ID:895754 发表于 2022-11-20 06:01 | 只看该作者
使能冲突是因为什么
回复

使用道具 举报

18#
ID:1058975 发表于 2023-6-21 23:26 | 只看该作者
很强,完美解决
回复

使用道具 举报

19#
ID:1034262 发表于 2023-6-23 16:58 | 只看该作者
两个通信完全不同的东东,怎么会冲突?很奇怪。
回复

使用道具 举报

20#
ID:1064915 发表于 2023-7-20 17:51 | 只看该作者
也解决了我的大问题
回复

使用道具 举报

21#
ID:1064915 发表于 2023-10-22 09:00 | 只看该作者

由电路图可知   ds18b20引脚  与   ds1302引脚  不冲突


由图而知   当CS=0  DOUT=0     CS=1   DOUT为高阻状态

由此而知   当p35=0  p37=0

所以  当ds1302时钟芯片  和   温度ds18b20  工作时

一旦将  p35=0  那么p37=0    则使然   ds1302  和   ds18b20冲突  


回复

使用道具 举报

22#
ID:1102319 发表于 2023-12-3 22:09 | 只看该作者
HC6800-ES-V2.0 发表于 2018-8-27 20:39
这个问题,我已经不知道发过多少次了!!!!!
unsigned char Ds1302Read(unsigned char addr)
{

这段代码是放在ds1302的库函数还是主函数里面
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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