ting13写得18b20问题

yuanyou   2009-11-17 15:51 楼主
由于没法仿真,我用示波器测出来的读数据间隙全是高电平
经过计算出来的温度是0度,不知道是什么问题,请高手解答

回复评论 (7)

代码呢?看看初始化是否成功,软仿真总可以吧,单步调试  看看
点赞  2009-11-17 16:04
初始化估计不对,数据处理也有可能。单步调试吧
点赞  2009-11-17 16:06
18B20的程序我在MEGA128测试过的
没有什么问题,看示波器的波形,初始化应该过去了
读和写可能有问题
点赞  2009-11-17 18:21
实在不行,你用PROTUES试试

里面有DS18B20的仿真模块
点赞  2009-11-18 09:38
  1. void delay(unsigned int x)  //5us
  2. {
  3.     while(x)
  4.     {
  5.        x--;
  6.     }
  7. } void init_1820(void)
  8. {
  9.     DS18B20_SET;   
  10.     DS18B20_CRL;
  11.     //480us以上
  12.     delay(200);
  13.     DS18B20_SET;
  14.     DDRB&=~(1<
  15.     delay(10);     //15~60us
  16.     while(PINB&(1<
  17.     {  
  18.            ;
  19.     }
  20.     DDRB|=(1<
  21.     DS18B20_SET;
  22.     delay(15);   //60~240us
  23. }

  24. void write_1820(unsigned char x)
  25. {   
  26.     unsigned char m;
  27.     for(m=0;m<8;m++)
  28.     {
  29.          DS18B20_CRL;
  30.          if(x&(1<
  31.              DS18B20_SET;
  32.          else
  33.              DS18B20_CRL;
  34.          delay(4);   //15~60us
  35.          DS18B20_SET;
  36.     }
  37.     DS18B20_SET;
  38. }

  39. unsigned char read_1820(void)
  40. {     
  41.     unsigned char temp,k,n;
  42.     temp=0;
  43.     for(n=0;n<8;n++)
  44.     {
  45.         DS18B20_CRL;
  46.       //  delay(2);      
  47.         DS18B20_SET;
  48.       //delay(3);     
  49.         DDRB&=~(1<
  50.         k=(PINB&(1<
  51.         if(k)
  52.             temp|=(1<
  53.         else
  54.             temp&=~(1<
  55.         delay(3); //60~120us     
  56.         DDRB|=(1<
  57.    }
  58.    return (temp);
  59. }

  60. signed int readTempDS18B20()
  61. {
  62.         unsigned char temh=0,teml=0,zorf=0;
  63.     unsigned int val=0;
  64.     init_1820();        //复位18b20
  65.     write_1820(0xcc);   // 发出转换命令
  66.     write_1820(0x44);
  67.     delay(8);
  68.         init_1820();
  69.     write_1820(0xcc);  //发出读命令
  70.     write_1820(0xbe);
  71.     teml=read_1820();  //读数据
  72.     temh=read_1820();
  73.     zorf=(temh>>3)&0x1F;
  74.     if(zorf)
  75.         {
  76.                 teml^=0xff;
  77.                 temh^=0xff;
  78.                 teml += 1;
  79.             val=(temh<<8)|teml;
  80.             val>>=4;// val/=16;
  81.                 temp_ok = 0-val;        
  82.     }
  83.         else
  84.         {
  85.             val=(temh<<8)|teml;
  86.             val>>=4;// val/=16;       
  87.                 temp_ok = val;         
  88.     }
  89.         return temp_ok;
  90. }
点赞  2009-11-18 10:29
引用: 引用 4 楼 lbing7 的回复:
实在不行,你用PROTUES试试

里面有DS18B20的仿真模块

可以连MCU一起仿真吗?
点赞  2009-11-18 10:30
居然是熔丝位没有烧,分照给
点赞  2009-11-19 17:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复