[AVR单片机] 18B20初始化问题

[复制链接]
2898|8
 楼主| xmrforever 发表于 2009-11-5 13:22 | 显示全部楼层 |阅读模式
void delay(unsigned int x)  //1.5us左右  
{  
     while(x)  
    {  
       x--;  
    }  
}  
void init_1820(void)  
{  
    DS18B20_SET;     
    DS18B20_CRL;  
    delay(400);    //480us以上  
DDRC|=(1<<PC0);
    DS18B20_SET;  
    DDRC&=~(1<<PC0);  
    delay(40);     //15~60us  
    while(PINC&(1<<PC0))      //<<<<---------1
    {   
   ;
    }  
    DDRC|=(1<<PC0);  
    DS18B20_SET;  
    delay(150);   //60~240us  
}  
执行到1的位置过不去了,是不是哪段时序没弄对?
我用的MEGA128,晶振是7.多M的
大家帮帮忙
错过-21IC 发表于 2009-11-5 21:05 | 显示全部楼层
while(!(PINC&(1<<PC0)))
加个判断试试
Karlshen 发表于 2009-11-5 22:25 | 显示全部楼层
过来看看,^_^
discovery0x01 发表于 2009-11-6 00:51 | 显示全部楼层
建议不要这样使用循环,因为编译器可能认为这个是个局部变量,而且非volatile。编译器会一直查询第一次保持的值,当然就退不出循环了。改为这样:

char i;

do
{
   i = PINC & (1 << PC0);
}while(i != 0);

或许还有一个更简单的办法,降低优化级别。或者使用ICCAVR编译器。
 楼主| xmrforever 发表于 2009-11-6 08:32 | 显示全部楼层
我用的就是ICCAVR
 楼主| xmrforever 发表于 2009-11-6 08:34 | 显示全部楼层
while(!(PINC&(1
错过-21IC 发表于 2009-11-5 21:05

在1的位置不是加了判断了吗
就是这里过不去,始终收不到18b20发的存在脉冲
 楼主| xmrforever 发表于 2009-11-6 14:22 | 显示全部楼层
自己顶一下,高手来帮忙看看啊
Karlshen 发表于 2009-11-8 23:18 | 显示全部楼层
难道四楼的说得不管用吗
lovelyegle 发表于 2009-11-10 21:03 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:忍一忍就过去了

27

主题

177

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部