本帖最后由 无心星矢 于 2015-10-12 20:40 编辑
单片机读取DS18B20温度失败,显示“0001”。
图片如下:
IMG_20151012_203256.jpg (2.72 MB, 下载次数: 0)
下载附件
2015-10-12 20:35 上传
2.5ms的定时时标,2.5ms调用一次以下代码及刷新一次显示,代码如下:
- tWord v_Ds18b20ReadTemp_f( void )
- {
- tWord TempH, TempL ;
- tWord ReturnTemp ;
- tByte Temp_G=0;
-
- if (++Temp_G == 6)
- {
- Temp_G = 0;
- }
- switch (Temp_G)
- {
- case 0:
- {
- v_Ds18b20Init_f() ;
- break;
- }
- case 1:
- {
- _nop_();
- v_Ds18b20Write_f( 0xcc ) ; //Ìø¹ýROM
- break;
- }
- case 2:
- {
- v_Ds18b20Write_f( 0x44 ) ;
- break;
- }
- case 3:
- {
- v_Ds18b20Init_f() ;
- break;
- }
- case 4:
- {
- _nop_();
- v_Ds18b20Write_f( 0xcc ) ;
- break;
- }
- case 5:
- {
- v_Ds18b20Write_f( 0xbe ) ;
- }
- }
- TempL = v_Ds18b20Read_f() ;
- TempH = v_Ds18b20Read_f() ;
- ReturnTemp = TempH ;
- ReturnTemp <<= 8 ;
- ReturnTemp |= TempL ;
- return ReturnTemp ;
- }
复制代码- void v_TemperatureUpdate_f( void )
- {
- tWord Tflag = 0 ;
- tWord TempDat ,a,b,c;
- float Temp ;
- TempDat = v_Ds18b20ReadTemp_f() ;
- if( TempDat & 0xf000 )
- {
- Tflag = 1 ;
- TempDat = ~TempDat + 1 ;
- }
- Temp = TempDat *0.0625;
- TempDat = Temp * 10+0.5 ;
- a=TempDat / 100;
- b=TempDat % 100 ;
- b=b/ 10 ;
- c=TempDat% 10 ;
- Temperature[ 3 ] = 0x3F ;
- Temperature[ 2 ] = LED_Table_G[a] ;
- Temperature[ 1 ] = LED_Table_G[b] ;
- Temperature[ 0 ] = LED_Table_G[c] ;
- }
复制代码
坐等解决。谢谢!
为什么?我是长任务按多级任务处理的,2.5ms初始化一下,2.5ms忽略ROM,2.5ms温度转换,2.5ms初始化一下,2.5ms忽略ROM,2.5ms读温度,如此循环。
QQ图片20151012221927.png (52.74 KB, 下载次数: 0)
下载附件
2015-10-12 22:19 上传
刚看了下个阶段转换时间 楼主参考下
谢谢呀!这么晚了还给回贴子,不孤单了。
有道理,我的程度在转换时就会初始化,我再试试,谢了。
一周热门 更多>