搜索
bottom↓
回复: 0

求救,18B20读函数返回值全为1(mega16/CV)

[复制链接]

出0入0汤圆

发表于 2010-5-1 22:05:39 | 显示全部楼层 |阅读模式
#include <mega16.h>
#include <delay.h>
#define PA4  4
#define DQ_IN        DDRA &= ~(1 << PA4)                //设置输入
#define DQ_OUT        DDRA |= (1 << PA4)                //设置输出
#define DQ_CLR        PORTA &= ~(1 << PA4)                //置低电平
#define DQ_SET        PORTA |= (1 << PA4)                //置高电平
#define DQ_R        PINA & (1 << PA4)                //读了电平

#define uchar unsigned char
#define uint unsigned int  

uchar ds1820_reset(void)
{
        uchar i=0;
        DQ_OUT;
        DQ_CLR;
        delay_us(500);                               
        DQ_SET;
        DQ_IN;
        delay_us(80);                               
        i = DQ_R;
        delay_us(400);                               
        if (i)
        {
         return(0x00);
         }
        else
        {
         return(0x01);
         }  
}

/*DS18B20字节读取函数*/
uchar ds1820_read_byte(void)
{

        uchar i;
        uchar value=0;
        #asm("cli");                                //关中断
        for (i = 8; i != 0; i--)
         {
                value >>= 1;
                DQ_OUT;DQ_SET; delay_us(2);
                DQ_CLR;
                delay_us(2);                       
                DQ_SET;
                DQ_IN;
                delay_us(4);                       
                if (DQ_R)
                {
                 value|=0x80;
                 }
                 else
                 {
                 value|=0x00;
                 }  
                delay_us(60);                                                                           
         }
         return(value);
}

/*DS18B20字节写入函数*/
void ds1820_write_byte(uchar value)
{  
        uchar i;
        #asm("cli");                                //关中断
        for (i = 8; i != 0; i--)
         {                       
                if (value & 0x01)                                                           
                { DQ_OUT;
                  DQ_CLR;
                  delay_us(4);
                  DQ_SET;
                  delay_us(30);
                 }
                else
                {
                  DQ_OUT;
                  DQ_CLR;
                  delay_us(30);
                  DQ_SET;
                  delay_us(4);
                  }
                //delay_us(4);                       
                DQ_SET;                                //位结束
                value >>= 1;
          }
}

/*启动ds1820转换*/
void ds1820_start(void)
{
        ds1820_reset();
        ds1820_write_byte(0xCC);        //勿略地址
        delay_us(1);
        ds1820_write_byte(0x44);        //启动转换
}

/*DS8B20读取温度信息*/
uchar ds1820_read_temp()
{      
        uchar a=0;
        uchar b=0;
        uchar t=0;
          ds1820_start();
          delay_us(1);
        ds1820_write_byte(0xCC);        //勿略地址
        delay_us(1);
          ds1820_write_byte(0xBE);        //读取温度
           a=ds1820_read_byte();
        b=ds1820_read_byte();
        t=b;     
        t<<=4;
        a>>=4;
        t|=a;
        return(t);   
}   
void main(void)
{
        PORTB=0xFF;
        DDRB=0xFF;
        while(1)
        {      
        ds1820_read_temp() ;
        PORTB=ds1820_read_temp();
        delay_ms(1000);
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 04:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表