打印
[AVR单片机]

18B20初始化问题

[复制链接]
1919|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编译器。

使用特权

评论回复
5
xmrforever|  楼主 | 2009-11-6 08:32 | 只看该作者
我用的就是ICCAVR

使用特权

评论回复
6
xmrforever|  楼主 | 2009-11-6 08:34 | 只看该作者
while(!(PINC&(1
错过-21IC 发表于 2009-11-5 21:05

在1的位置不是加了判断了吗
就是这里过不去,始终收不到18b20发的存在脉冲

使用特权

评论回复
7
xmrforever|  楼主 | 2009-11-6 14:22 | 只看该作者
自己顶一下,高手来帮忙看看啊

使用特权

评论回复
8
Karlshen| | 2009-11-8 23:18 | 只看该作者
难道四楼的说得不管用吗

使用特权

评论回复
9
lovelyegle| | 2009-11-10 21:03 | 只看该作者
顶起

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

27

主题

177

帖子

0

粉丝