亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版

標(biāo)題: 18b20的初始化程序 [打印本頁(yè)]

作者: 2336460504    時(shí)間: 2016-4-18 01:14
標(biāo)題: 18b20的初始化程序
#include "DSP28x_Project.h"
/************************************************************************
以下是DS18B20的操作程序
************************************************************************/
        //設(shè)置全局變量,專門用于嚴(yán)格延時(shí)

#define nop() {asm(" NOP ");}
#define DATA_PORT  GpioCtrlRegs.GPBDIR.all
#define DATAIN     GpioDataRegs.GPBDAT.bit.GPIO34
#define PIN_HIGH() {EALLOW;DATA_PORT|=0x000F;EDIS;DATAIN=1;}      //
#define PIN_LOW()  {EALLOW;DATA_PORT|=0x000F;EDIS;DATAIN=0;}
#define PIN_LEAVE() {EALLOW;DATA_PORT&=~0x000F;EDIS;}//
/*****************************************************
函數(shù)功能:將DS18B20傳感器初始化,讀取應(yīng)答信號(hào)
出口參數(shù):flag
***************************************************/
unsigned char Init_DS18B20(unsigned char xx)
{
unsigned char flag;         //儲(chǔ)存DS18B20是否存在的標(biāo)志,flag=0,表示存在;flag=1,表示不存在
flag=xx;
PIN_HIGH();           //先將數(shù)據(jù)線拉高
DELAY_US(6); //略微延時(shí)約6微秒

PIN_LOW();           //再將數(shù)據(jù)線從高拉低,要求保持480~960us
DELAY_US(600);  //略微延時(shí)約600微秒
              //以向DS18B20發(fā)出一持續(xù)480~960us的低電平復(fù)位脈沖
PIN_HIGH(); //釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高)
DELAY_US(1);

DELAY_US(30);  //延時(shí)約30us(釋放總線后需等待15~60us讓DS18B20輸出存在脈沖)
PIN_LEAVE();
  if(DATAIN==0)
flag=0;          //讓單片機(jī)檢測(cè)是否輸出了存在脈沖(DQ=0表示存在)
  else
          flag=1;
DELAY_US(600);  //延時(shí)足夠長(zhǎng)時(shí)間,等待存在脈沖輸出完畢

return (flag);    //返回檢測(cè)成功標(biāo)志
}
/*************************************************/
/*                讀字節(jié)子函數(shù)                  */
/*************************************************/
unsigned char ReadOneChar(void)
  {
    unsigned char i=0,dat=0;
    for (i=8;i>0;i--)
    {
      dat>>=1;//讀到數(shù)據(jù)后右移一位
      PIN_LOW();
          DELAY_US(6);//6us
          PIN_HIGH();        //數(shù)據(jù)線置高電平,釋放總線
      DELAY_US(8);//延時(shí)8us
     PIN_LEAVE();
      if(DATAIN)
              dat|=0x80;//取回最高位數(shù)據(jù)
      else
              dat|=0x00;
      DELAY_US(30);//延時(shí)30us
         PIN_HIGH();         //釋放總線,恢復(fù)高電平
    }
   return(dat);
  }
/*************************************************/
/*                寫字節(jié)子函數(shù)                  */
/*************************************************/
void WriteOneChar(unsigned char dat)
  {

        unsigned char i;
    for(i=8;i>0;i--)
     {
       PIN_LOW();
                DELAY_US(14);//14us延時(shí)
       if(dat&0x01==1)          //寫入一位數(shù)據(jù)
                   PIN_HIGH();
       if(dat&0x01==0)
               PIN_LOW();
                    DELAY_US(40);        //延時(shí)40微秒,等待DS18B20采樣
              PIN_HIGH(); //釋放總線
        dat>>=1;          //右移一位數(shù)據(jù)
        DELAY_US(4);
     }   }



/*****************************************************
函數(shù)功能:做好讀溫度的準(zhǔn)備
***************************************************/
unsigned char ReadyReadTemp(unsigned char xx)
{
        unsigned char flag;
     flag= Init_DS18B20(xx);     //將DS18B20初始化
                WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作
                WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
                 DELAY_US(20000); //轉(zhuǎn)換一次需要延時(shí)一段時(shí)間

                flag=Init_DS18B20(flag);     //將DS18B20初始化
                WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
                WriteOneChar(0xBE); //讀取溫度寄存器,前兩個(gè)分別是溫度的低位和高位
                return(flag);
}








歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1