没有看到你单片机的型号描述,也没有指出所用晶振是内部晶振还是外部晶振。下面从几点常见问题分析下: 1、除了楼上所说的IO口有没有被其他电路占用外,还要知道该IO口总线上必须外接上拉电阻。这是单总线通信要求。上拉电阻4.7K~10K范围。 2、单总线通信需要严格的时序,这样一定检查下程序的延时函数是否准确,尤其us级延时对51单片机来说是个考验,但这也是很多初学者调试出错的问题点。 |
小臭臭废 发表于 2024-1-13 16:37 d18b20复位成功当然接收到1,收到0反而怪了。如果一定想以收到0判断复位失败可以改写: bit DS18B20_Reset() { DQ=0; //送出低电平复位信号 delay_us(240); //延时至少480us delay_us(240); DQ=1; //释放数据线 delay_us(60); //等待60us if(!DQ) //如果DQ低电平 { delay_us(240); //等待设备释放数据线 delay_us(180); return 1; //返回1 } else //DQ低电平 { delay_us(240); //等待设备释放数据线 delay_us(180); return 0; //返回0 } } |
小臭臭废 发表于 2024-1-13 16:37 30块包邮的逻辑分析仪,你值得拥有 |
网上很多ds18b20的通信程序啊,用网上的程序试试呗,首先排除硬件问题 |
lkc8210 发表于 2024-1-12 21:34 哈哈,傻了。改了但还是接受不到0 |
第8行没报错吗? |
没有看到你单片机的型号描述,也没有指出所用晶振是内部晶振还是外部晶振。下面从几点常见问题分析下: 1、除了楼上所说的IO口有没有被其他电路占用外,还要知道该IO口总线上必须外接上拉电阻。这是单总线通信要求。上拉电阻4.7K~10K范围。 2、单总线通信需要严格的时序,这样一定检查下程序的延时函数是否准确,尤其us级延时对51单片机来说是个考验,但这也是很多初学者调试出错的问题点。 ![]() ![]() ![]() ![]() ![]() 3、当然还有一个重要原因要注意DS18B20元件的方向,一旦方向接反芯片烧坏的可能性极大。那么就不要再次使用了。附件给基于单片机STC8A8K64D4的DS18B20程序源码,个人认为这一家写的程序源码很规范,参考性很强。 |
29.58 KB, 下载次数: 3
joyb 发表于 2024-1-12 11:21 应该没有,这个I/o就做这一个活 |
IO口是否有冲突 |