⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20a.c

📁 DS18B20做的温度计
💻 C
字号:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/eeprom.h>

#define  CPU_CRYSTAL    (7.3728) 	//CPU Ck
#define  dy(us)\
  _delay_loop_2((uint)((us)*CPU_CRYSTAL/4)) 


#define Q_s DDRD&=~0x08	//DQ float
#define Q_c DDRD|=0x08	//DQ =0
#define Q_a (PIND&0x08)	//read DQ

void ini_ds(void)
{   DDRD  &= ~0x08;   // 输入模式(上电时为高电平) 
    PORTD &= ~0x08;   // 输出锁存器写0,以后不再更改 
} 

uchar rt_ds(void)		//rest ds18b20
{uchar ret;	//return data
 ret=0;
 Q_c;
 dy(1000);
 cli();
 Q_s;
 dy(67.5);
 if(Q_a)  ret=0;	//
 else    ret=1;
// ret=1;
 sei();   
 dy(490-67.5);
 return ret;
}

void wr_ds(uchar dat1)	//write ds18b20
{uchar i;
 for(i=0;i<8;i++)
 {cli();
  Q_c;
  dy(2);
  if(dat1&0x01)  Q_s;
  else Q_c;
  dat1>>=1;
  dy(62);
  Q_s;
  sei();
  dy(2);
 }
}///*/

uchar rd_ds(void)	//read a data for ds18b20
{uchar i;
 uchar dat0;
 dat0=0;
 for(i=0;i<8;i++)
  {cli();
   Q_c;
   dy(2);
   Q_s;
   dy(4);
   dat0>>=1;
   if(Q_a)  dat0|=0x80;
   sei();
   dy(62);
  }
 return(dat0);
}

void s_ds(void)	//start ds18b20
{if(rt_ds()==1)//rest sussuful
  {wr_ds(0xcc);
   wr_ds(0x44);
    }
}

uint r_ds(void)	//read data from ds
{uint ret=0;
 if(rt_ds()==1)	//rest suuful
  {wr_ds(0xcc);
   wr_ds(0xbe);	//read data
   ret =(uint)rd_ds();	//low 8bit
   ret+=(uint)(rd_ds())<<8;
  }
  
 return(ret);
}///

 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -