• 大小: 5KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: 其他
  • 标签: 2线  DS18B20  程序  

资源简介

2线DS18B20程序

资源截图

代码片段和文件信息

//*************DS18B20寄生供电模式程序开始*******************/
//数据口P3.6强上拉口P3.7,系统时钟3.2768MHz
//*******************************************************/
#include 
#define uint unsigned int 
#define uchar unsigned char
uchar BIT_Array[8]={BIT0BIT1BIT2BIT3BIT4BIT5BIT6BIT7};
uchar flag;//判断复位是否成功
uchar sunx;//温度值
//******************声明引用的子函数*********************/
uchar Read_DQ(uchar num);//设置IO口为输入模式
void Set_DQ(uchar numuchar dat);//设置IO口为输出模式
void delay(uint count);//延时函数
uchar ReadOneChar(void);//读一个字节
void WriteOneChar(uchar dat);//写一个字节
void Init_DS18B20(void);//复位
void tmpchange(void);//启动温度转换
uchar ReadTemperature(void);//读取温度值
//****************启动DS18B20进行温度转换****************/
void tmpchange(void)
{
  Init_DS18B20();
  if(flag==1)//判断复位是否成功
  {
   delay(1);
   WriteOneChar(0xCC); // 跳过读序号列号的操作
   WriteOneChar(0x44); // 启动温度转换
   Set_DQ(70);        //强上拉使能P3.7
  }
}
//********************从18b20读取温度值******************/
//定义P3.6为DQ口。DQ表示与18b20相连的io口;
uchar ReadTemperature(void)
 {
  uchar aa=0;
  uchar bb=0;
  uint  t=0;
  uint tt=0;
  Set_DQ(71); //强上拉关闭P3.7
  Init_DS18B20();
  delay(5);
  if(flag==1)//判断复位是否成功
   {
    delay(1);
    WriteOneChar(0xCC); //跳过读序号列号的操作
    WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
    aa=ReadOneChar();
    bb=ReadOneChar();
    Init_DS18B20();
    delay(5);
    t=bb;
    t<<=8;
    t=t|aa;
    tt=t*0.0625;
    return(tt);
    }
  else
    return(0);
 }
//***********************延时函数***********************/
void delay(uint count)
{
 while(count--);
 }
/*--------初始化18b20------*/
//内部的具体延时时间需要调整,因为晶振频率不同;
void Init_DS18B20(void)
{
 uchar x=0;
  Set_DQ(61);    //DQ复位
  delay(5);       //稍做延时
  Set_DQ(60);    //单片机将DQ拉低
  delay(400);     //480us--960us
  Set_DQ(61);    //拉高总线
  delay(40);      //大于60us
  x=Read_DQ(6);   //如果x=0则初始化成功 x=1则初始化失败
  if(x==0)
    {
     flag=1;
     Set_DQ(61);
     delay(300);
    }
  else
    {
     flag=0;
     Set_DQ(61);
     delay(300);
    }
 }
//**********************读一个字节**********************/
uchar ReadOneChar(void)
 {
  uchar i=0;
  uchar j=0;
  uchar dat = 0;
  for (i=8;i>0;i--)
   {
    Set_DQ(61);
    delay(1);
    

评论

共有 条评论