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

📄 ds18b20.c

📁 the code connect Atmega 32 uC to 1 module Bluetooth ARF32
💻 C
字号:
#include "ds18b20.h"
//----------------------------//

/**Reset DS18B20 function*/
unsigned char reset_pulse(void)
  {  
     unsigned char temp,presence;
     temp=SREG;
	 cli();
	 ow_out;                       /*Set pin D6 as output pin*/
     ow_low;                       /*pull the bus low*/
     _delay_us(480);         /*delay 480us*/
	 ow_in;                       /*set D6 as Input*/
	 _delay_us(60);          /*delay 60us*/ 
	 presence=ow_read;
	 _delay_us(420);          /*delay 420us*/
	 return presence;           /*return=1: no device ; return=0: have device*/
	 SREG=temp;                  /*return the value of SREG*/
   }
   
//--------------------------------
/***Read 1 bit from DS18B20*/
 
 unsigned char read_bit(void)
   {
     unsigned char temp,kq;
	 temp=SREG;
	 cli();
	 ow_out;             /*set pin D6 as out put*/
	 ow_low;             /*pull the bus low*/
	 _delay_us(2);	 /*delay 2 us*/
	 ow_in;   			 /*release the master*/
	 _delay_us(9); /*delay 9us*/
	if(!(ow_read))       //Doc du lieu
	  kq = 0;
	else
	  kq = 1;
	 _delay_us(60);/*delay 60 us*/
	 SREG=temp;          /*return value of SREG*/
	return kq;
	}
//---------------------------------

/***Write 1 bit to DS18B20***/

  void write_bit(unsigned char dbit)
    {
	  unsigned char temp;
	  temp=SREG;
	  cli();
	  ow_out;                  /*Set PinD6 as output*/
	  ow_low;                  /*Drive the Bus low*/
	  if (dbit==0) 
	    { _delay_us(60); /*delay 60us*/
		  ow_in;              /*release the master*/
		  _delay_us(9);  /*delay 9us*/
		 }
	  if (dbit==1)
	    { _delay_us(6);  /*delay 6us*/
		   ow_in; /*release the master*/
		   _delay_us(64); /*delay 64us*/
		 }
	  SREG=temp;
	}
//------------------------------------

//Read 1 byte from Bus
unsigned char read_byte (void) {
    unsigned char i,byte = 0;
    for (i=0; i<8; i++) 
	 {
        if (read_bit())
            byte |= (1<<i);
        _delay_us(40);   //delay 
	 } 
    return byte;
}

//------------------------------------

/***Write 1 byte to DS18B20***/
  
  void write_byte(unsigned char dout)
     {
	   unsigned char i,temp;
	   
	   for(i=0;i<8;i++)
	   {
	     temp=dout&0x01;
		 write_bit(temp);
		 dout=dout>>1;
		}
	 }

//---------------------------------------------
/***Read temperature from DS18B20***/

  unsigned int read_temp(void)
    { 
	  unsigned char i,tempo;
	  unsigned int p[9]={0,0,0,0,0,0,0,0,0};
	  unsigned int kq;
	  tempo=SREG;
	  cli();
	  reset_pulse();
      write_byte(0xCC);     //Skip ROM command
      write_byte(0x44);     //Convert T command
      _delay_us(750); 		// wait 750ms for conversion complete

	  reset_pulse();
	  write_byte(0xCC);		//Skip Rom command
      write_byte(0xBE);    //Read Scratchpad
      for (i=0; i < 9; i++)
        {p[i] = read_byte();}
      kq = (p[0] | (p[1] << 8)) >> 4;
   	  return kq;
	  SREG=tempo;			/*return Interrupt*/
	}
//-----------------------------------------------


⌨️ 快捷键说明

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