ds1822.c

来自「51系列单片机控制DS1822器件的C语言程序」· C语言 代码 · 共 92 行

C
92
字号
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit tmdat=P3^3;

void dmsec(uint count)  //delay
{ uint i;
  while(count--)
  for(i=0;i<125;i++)
      ;
} 
 
void tmreset(viod)
 {uint i;
  tmdat=0; 
  i=104;while(i>0) i--;
  tmdat=1;
  i=4; while(i>0) i--;
 }
 
void tmpre(void)
{ uint i;
  while(tmdat);
  while(~tmdat);
  i=4;while(i>0) i--;
}

bit  tmrbit(void)
 { unsigned int i;
   bit dat;
   tmdat=0; i++;
   tmdat=1; i++; i++;
   dat=tmdat;
   i=9; while(i>0) i--;
   return(dat);
}
unsigned char tmrbyte()
   { unsigned char i,j,dat;
     dat=0;
     for(i=1;i<=8;i++)
        {j=tmrbit();
         dat=(j<<7)|(dat>>1);
        }
     return(dat);
  }

 void tmwbyte(uchar dat)
   { unsigned int i;
     unsigned char j;
     bit testb;
     for(j=1; j<=8;j++)
         { testb=dat & 0x01;
           dat=dat>>1;
           if(testb)
              {tmdat=0; i++;i++;
               tmdat=1;
               i=8;while(i>0) i--;
              }
            else
               {tmdat=0;
                i=8;while(i>0) i--;
                tmdat=1;
                i++; i++;
               }
         }
   }
// ------------------------------------

void tmstart()
    { tmrest();
      tmpre();
      dmsec(2);
      tmwbyte(0xcc);  //skip rom
      tmwbyte(0x44);   // convert
    }

unsigned char tmrtemp()
    { unsigned char a,b,y1,y2,y3;
      tmreset();
      tmpre();
      dmsec(1);
      tmwbyte(oxcc);
      tmwbyte(oxbe);
      a=tmrbyte();       //l
      b=tmrbyte();       // msb
      y1=a>>4;
      y2=b<<4;
      y3=y1|y2;
      return(y3);
    }  
 

⌨️ 快捷键说明

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