蓝桥杯单片机类驱动DS18B20

//自己看时序图写的,一般可以直接放在我的代码里作为引用,后几届的写的比较稚嫩,驱动可能不太符合,但是都大同小异。记得.c和.h分开搞

#include
#include
#define u8 unsigned char
#define u16 unsigned int
void Delay500us()  //@11.0592MHz
{
 unsigned char i, j;
 _nop_();
 _nop_();
 i = 6;
 j = 93;
 do
 {
  while (--j);
 } while (--i);
}
void Delay15us()  //@11.0592MHz
{
 unsigned char i;
 i = 39;
 while (--i);
}
void Delay60us()  //@11.0592MHz
{
 unsigned char i, j;
 i = 1;
 j = 162;
 do
 {
  while (--j);
 } while (--i);
}
void DSlinit()
{
  P14=1;
 P14=0;
 Delay500us();
 P14=1;
 Delay500us();
}
void write(u8 dat)
{
   u8 i;
 for(i=0;i<8;i++)
 {
   P14=0;
  Delay15us();
  P14=dat&0x01;
  dat>>=1;
   Delay60us();
  P14=1;
 }
}
u8 read()
{
  u8 i,dat;
 for(i=0;i<8;i++)
 {
  dat>>=1;
   P14=0;
  P14=1;
  if(P14==1)
  {
    dat|=0x80;
  }
   Delay60us();
 }
 return dat;
}
void wr()
{
  DSlinit();
 write(0xcc);
 write(0x44);
}
void re()
{
  DSlinit();
 write(0xcc);
 write(0xbe);
}
u8 zuizhong()
{
   u8 low,high,dat; P14=1;
 wr();
 re();
 low=read();
 high=read();
 dat=low>>4|high<<4;
 return dat;
}
 
 
 
 
 
//以下为.h
 
#ifndef _18B20_h
#define _18B20_h
#include
#include
#define u8 unsigned char
#define u16 unsigned int
 u8 zuizhong();
void Delay500us();
#endif

你可能感兴趣的:(蓝桥杯单片机类驱动DS18B20)