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

📄 1820.c

📁 无线红外传感报警系统
💻 C
字号:
#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int
sbit dq    = P2^6;
bit  flag;
uint temp;
void init_18b20 (void);
uint  read_word (void);
//uchar read_byte (void);
void write (uchar wr);
//void config (void);
unsigned int  get_temp (void);
void delay1820 (uchar us);
uint one=0;
uint two=0;
uint three=0;
//

void init_18b20 (void)
{
  dq=1;
  _nop_();
  dq=0;
  delay1820(90);            //delay 530 uS
  dq=1;
  delay1820(6);            //delay 100 uS
  if(dq==0)
     flag=1;            //detect 1820 success!
  else
     flag=0;             //detect 1820 fail!
  delay1820(20);
  dq=1;      
}
//
void write (uchar wr)
{
  uchar i;
  for (i=0;i<8;i++)
   {
     dq=0;
     _nop_();
     dq=wr&0x01;
     delay1820(5);            //delay 45 uS
     dq=1;
     wr>>=1;
   }  
}
//
uint read_word (void)
{ 
  uchar i;
  uint u=0;
  for(i=0;i<16;i++)
   {
     dq=0;
     u>>=1;
     dq=1;
     if(dq==1)
        u|=0x8000;        
     delay1820 (4);   
   }  
  return(u); 
}
/*
uchar read_byte (void)
{
  uchar i,u=0;
  for(i=0;i<8;i++)
   {
     dq=0;
     u>>=1;
     dq=1;
     if(dq==1)
        u|=0x80;        
     delay (4); 
   }
  return(u);     
}
//
void config (void)
{
  if(flag)
   {
     write (0xcc);        //skip rom
     write (0x4e);        //write scratchpad
     write (0x19);        //th=00
     write (0x1a);        //tl=00
     write (0x5f);           //set 11 bit (0.125)
     init_18b20();
     write (0xcc);        //skip rom
     write (0x48);        //copy
     init_18b20();
     write (0xcc);        //skip rom
     write (0xb8);        //recall
     delay (254);
     delay (250);
     init_18b20();
     write (0xcc);
     write (0xbe);
     one=read_word();
     two=read_word();
     three=read_word();
   }
}
*/
unsigned int get_temp (void)
{ 
  uint bdata tem;
  EA=0;
  init_18b20();
  if (flag)
   {
     write (0xcc);            //skip rom
     write (0x44);            //temp convert
     init_18b20 ();            
     write (0xcc);            //skip rom
     write (0xbe);            //read temp
     tem=read_word();            //read
     if(tem<0x8000)
       temp=tem*0.602;            //temperature>=0
     else
       temp=tem*(-0.625);          //temperature< 0
     //write (0xec);               //search alarm
   
	}
   EA=1;
return temp;
}
//
void delay1820(uchar us)
{
  while (us--);
}

⌨️ 快捷键说明

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