打印
[Atmel]

基于avr的18bb20仿真问题

[复制链接]
1169|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不懂错在哪了,实在调不出来了,求大家帮忙解答一下,谢谢
以下为代码:
#include<iom16v.h>
#include<macros.h>
#define uint unsigned int
#define uchar unsigned char
#define sclon PORTA|=BIT(0)
#define scloff PORTA&=~BIT(0)
#define dion PORTA|=BIT(1)
#define dioff PORTA&=~BIT(1)
#define dqon PORTD|=BIT(2)
#define dqoff PORTD&=~BIT(2)
float temperature;
uchar templ=0;
uchar temph=0;
float t;
extern const unsigned char
tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*void delay(uint z)
{
         uint x,y;
         for(x=0;x<110;x++)
                 for(y=z;y>0;y--);                          
}*/
void dataout(uchar temp)
{
         uchar i,temp1;
         temp1=tab[temp];     
         for(i=0;i<8;i++)
         {
                  scloff;
                NOP();
                if((temp1&0x80)!=0x80)       
                {
                         dioff;
                        NOP();                                       
                }       
                else
                {
                         NOP();
                         dion;
                        NOP();
                }
                        sclon;
                        NOP();
                        NOP();
                        temp1<<=1;
                        NOP();
                        NOP();
                        //scloff;                          
         }
}
void delay1(void)
{
         uint i;
         for(i=0;i<200;i++);
}
void delay(uint k)
{
         uint n;
         n=0;
         while(n<k)
         {
                   n++;
         }
         return;
}
void display(uint k)
{
           PORTA&=0x03;
         dataout(k/1000);
         delay(200);
         
         PORTA|=0x04;
         dataout(k/100%10);
         delay(200);
       
         PORTA&=0x0b;
         PORTA|=0x08;
          dataout(k/10%10);
         delay(200);
         
         PORTA|=0x0c;
         dataout(k%10);
         delay(200);                           
}
void init_18b20(void)
{
         uchar x=0;
         dqon;
         delay(8);
         dqoff;
         delay(85);
         dqon;
         delay(14);
}

read_18b20(void)
{
         uchar i=0,data=0;
         for(i=10;i>2;i--)
         {
                    dqon;
                  delay(1);
                  dqoff;
                  data>>=1;
                  dqon;
                  DDRD=0xfb;       
                  if(PIND&0x04)       
                  data|=0x80;
                  DDRD=0xff;
                  delay(4);                                  
         }
         return (data);
}

write_18b20(uchar data)
{
        uchar i=0;
        for(i=10;i>2;i--)
        {
                 dqoff;
                if(data&0x01)       
                {
                         dqon;                       
                }               
                else
                {
                         dqoff;
                }
                delay(5);
                dqon;
                data>>=1;
        }
        delay(4);                                                           
}

read_temp(void)
{
        init_18b20();
        write_18b20(0xcc);
        write_18b20(0x44);
        delay(125);
        init_18b20();
        write_18b20(0xcc);
        write_18b20(0xbe);
        templ=read_18b20();
        temph=read_18b20();
        temperature=((temph*256)+templ)*0.0625;
        delay(200);
        return (temperature);                  
}
void main(void)
{
         DDRA=0xff;
         DDRD=0xff;
         display(0);
         while(1)
         {
                          //delay();
                        t=read_temp();
                        display(t);                
                        //delay();
         }
         NOP();
图片如下:
}

QQ截图20140730161517.png (15.47 KB )

QQ截图20140730161517.png

相关帖子

沙发
ningling_21| | 2014-7-30 18:15 | 只看该作者
程序问题比较大
/******************************************************************/
//初始化DS18B20
/******************************************************************/
void Init_1820(void )
{
    DQ_OUT;
        DQ_HI;
        DQ_LO;
    delay_18B20(3000);    //480us以上
        DQ_HI;
        DQ_INPUT;
    delay_18B20(50);     //15~60us
        while(DQ_R);
        DQ_OUT;
        DQ_HI;
    delay_18B20(150);   //60~240us
}

使用特权

评论回复
板凳
ddllxxrr| | 2014-7-30 20:13 | 只看该作者
楼主的晶振是多大的,延时函数参数是1的话,共多少时间

使用特权

评论回复
地板
友进芯城| | 2014-7-30 21:14 | 只看该作者
这个有点看不懂  

使用特权

评论回复
5
ZG11211| | 2014-7-30 21:15 | 只看该作者
时序必须严格执行。

使用特权

评论回复
6
xuan_weiguan|  楼主 | 2014-8-2 12:44 | 只看该作者
ningling_21 发表于 2014-7-30 18:15
程序问题比较大
/******************************************************************/
//初始化DS18B20

嗯 好的,谢谢你,我再好好看一下

使用特权

评论回复
7
xuan_weiguan|  楼主 | 2014-8-2 12:45 | 只看该作者
ddllxxrr 发表于 2014-7-30 20:13
楼主的晶振是多大的,延时函数参数是1的话,共多少时间

我的是1Mhz

使用特权

评论回复
8
xuan_weiguan|  楼主 | 2014-8-2 12:47 | 只看该作者
ZG11211 发表于 2014-7-30 21:15
时序必须严格执行。

好的

使用特权

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

本版积分规则

7

主题

13

帖子

0

粉丝