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

📄 18b20程序段.c

📁 采用DS12C887做时钟
💻 C
字号:
// #include <AT89X52.H> 

#include <REG52.H>
#include <INTRINS.h>
unsigned char displaybuf[4]={0,0,0,0}; 
unsigned char readdata[2]; 
sbit DQ=P2^6;   //选P3.7口与DS18B20的数字信号输出端DQ相连  
bit resetpulse(void)     //DS18B20初始化实现对DS18B20的复位
{ bit pre;
  unsigned char i; 
  DQ=0;        //发出复位脉冲,将数据线下拉480μS-960μS 
  for(i=220;i>0;i--);  //(改!!!!!!!!!!!!!!!!!!!!)
  DQ=1;         //DS18B20等待15μS-60μS 
  for(i=60;i>0;i--); 
  pre=DQ; 
  for(i=150;i>0;i--);
  return(pre);    // DS18B20返回60μS-240μS存在低脉冲,判断是否准备好接受或发送数据 
}
 
void writecommandtods18b20(unsigned char command)    //写时序 
{ 
  unsigned char i; 
  unsigned char j; 
   
  for(i=0;i<8;i++) 
    { 
      if((command & 0x01)==0)   //写0时序 
        { 
          DQ=0;        //拉低单总线至少60μS,保证DS18B20在15μS-45μS时可以正确地采样I/O总线上的低电平
          for(j=35;j>0;j--); 
          DQ=1; 
        } 
        else       //写1时序
          { 
DQ=0;         //拉低单总线后,在15us之内就得释放
            for(j=2;j>0;j--); 
            DQ=1; 
            for(j=33;j>0;j--); 
          } 
      command=_cror_(command,1);       
    } 
} 
 
unsigned char readdatafromds18b20(void)     //读时序   
{ 
  unsigned char i; 
  unsigned char j; 
  unsigned char temp; 
 
  temp=0; 
  for(i=0;i<8;i++) 
    { 
      temp=_cror_(temp,1);    
      DQ=0;                 //单总线拉低后,读时序开始 
      _nop_(); 
      _nop_(); 
      DQ=1;                  //停止将数据线拉低,以读取数据     
      for(j=10;j>0;j--); 
      if(DQ==1) 
        { 
          temp=temp | 0x80; 
        } 
        else 
          { 
            temp=temp | 0x00; 
          } 
      for(j=20;j>0;j--);  ////////////////////(改!!!!!!!!!!!!)
    } 
  return(temp); 
} 
 

⌨️ 快捷键说明

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