亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 單個ds1820溫度讀取程序.txt

?? 壓縮包中包括多個驅動程序的原代碼
?? TXT
字號:
單個DS1820溫度讀取程序,后面是四個DS1820溫度讀取程序 
發表時間:2005-12-13 18:57:02   瀏覽人數:55 
   
//國內網站上讀取DS1820的C51源程序不多,基本上都是那幾篇,我試過都不行
//后來我買了本書,按照上面照抄,連編譯都通不過,后來經過多次測試,終于可以順利讀取了
//// 前面是單個DS1820溫度讀取程序,后面是四個DS1820溫度讀取程序。
//推薦用11.0592Mhz晶振,經試驗用12M到24M都可以,6M就不行了。

#include <reg51.h>
#define uchar unsigned char 

sbit TMDAT = P3^4; //根據實實際情況設定
uchar TMP;  //讀取后溫度值存于TMP中,將其除以2即可得出實際溫度;
uchar f;  //結果是否為負溫,“0”為正溫,“1”為負溫。  

////////////////////////////////////////延時部分//////////////////////////
void dmsec (unsigned int count)       //
{         //
 unsigned int i;              // 
 while (count)       //
 {        //
  i = 115;      //
  while (i>0) i--;     //
  count--;      //
    }         //
}         //
//////////////////////////////////////////////////////////////////////////

 

/////////////////////////////////////// 發送復位//////////////////////////
void tmreset (void)       //
{                          //
 unsigned int i;       //
 TMDAT = 0;       //
 i = 103;       //
 while (i>0) i--;          // 延時 900 uS(11.0592Mhz時) //
 TMDAT = 1;       //
 i = 4;        //
 while (i>0) i--;      //
}         //
//////////////////////////////////////////////////////////////////////////

 

//判斷DS1820是否存在的子程序。最好不要用,因為當器件不存在時將會進入死循環

////////////////////////////////////// 等待存在脈沖///////////////////////
void tmpre (void)   //判斷器件是否存在  //
{                            //
 unsigned int 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 = 8; while (i>0) i--;  // 延時    //
 return (dat);       //
}         //
//////////////////////////////////////////////////////////////////////////


//////////////////////////////////////// 讀一個字節///////////////////////
unsigned char tmrbyte (void)        //
{                 //
 unsigned char i,j,dat;      //
 dat = 0;       //
 for (i=1;i<=8;i++)      //
 {        //
  j = tmrbit ();      //
  dat = (j << 7) | (dat >> 1);    //
 }        //
 return (dat);       //
}         //
//////////////////////////////////////////////////////////////////////////


/////////////////////////////////////// 寫一個字節////////////////////////
void tmwbyte (unsigned char 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;                           // 寫0  //
   i++; i++;                              //
   TMDAT = 1;     //
   i = 8; while (i>0) i--;                //
  }       //
  else       //
  {       //
   TMDAT = 0;                           // 寫0  //
   i = 8; while (i>0) i--;                //
   TMDAT = 1;     //
   i++; i++;                              //
  }       //
 }        //
}         //
//////////////////////////////////////////////////////////////////////////

/////////////////////////////////發送ds1820 開始轉換//////////////////////
void tmstart (void)       //
{                          //
 tmreset ();  //復位     //
 //tmpre ();  //等待存在脈沖    //
 dmsec (1);  //延時     //
 tmwbyte (0xcc);  //跳過序列號命令   //
 tmwbyte (0x44);  //發轉換命令 44H,   //
}         //
//////////////////////////////////////////////////////////////////////////


/////////////////////////////////// 讀取溫度//////////////////////////////
void tmrtemp (void)       //
{                          //
 unsigned char a,b;      //
 tmreset ();  //復位     //
 //tmpre ();  //等待存在脈沖    //
 dmsec (1);  //延時     //
 tmwbyte (0xcc);  //跳過序列號命令   //
 tmwbyte (0xbe);  //發送讀取命令     //
 a = tmrbyte ();  //讀取低位溫度    //
 b = tmrbyte ();   //讀取高位溫度    //
 f=b;   //若b為1則為負溫   //
 if(f)        //
 {        //
  TMP=~a+1; //如果為負溫則去除其補碼  //
 }        //
 else        //
 {        //
  TMP=a;       //
 }        //
}         //
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
main()         //
{         //
 do{        //
  tmstart();      //
  dmsec(100); //如果是不斷地讀取的話可以不延時 //
  tmrtemp(); //讀取溫度,執行完畢溫度將存于TMP中 //
 }while(1);       //
}         //
//////////////////////////////////////////////////////////////////////////

 

 

 

 

 

//以下是四個DS1820溫度讀取程序
//使用時先調用"rom()"子程序讀出每個器件的序列號
//再將各個序列號填入SN數組中才能讀出各個溫度

#include <reg51.h>
#define uchar unsigned char 

sbit TMDAT = P3^4; //根據實實際情況設定
uchar TMP[4];  //讀取后的4個溫度值,將其除以2即可得出實際溫度;
uchar SN[4][8];  //4個器件的序列號,先讀出單個序列號后填上才可以讀取溫度
uchar f[4];  //結果是否為負溫,“0”為正溫,“1”為負溫。  

////////////////////////////////////////延時部分//////////////////////////
void dmsec (unsigned int count)       //
{         //
 unsigned int i;              // 
 while (count)       //
 {        //
  i = 115;      //
  while (i>0) i--;     //
  count--;      //
    }         //
}         //
//////////////////////////////////////////////////////////////////////////

 

/////////////////////////////////////// 發送復位//////////////////////////
void tmreset (void)       //
{                          //
 unsigned int i;       //
 TMDAT = 0;       //
 i = 103;       //
 while (i>0) i--;          // 延時 900 uS(11.0592Mhz時) //
 TMDAT = 1;       //
 i = 4;        //
 while (i>0) i--;      //
}         //
//////////////////////////////////////////////////////////////////////////

 

//判斷DS1820是否存在的子程序。最好不要用,因為當器件不存在時將會進入死循環

////////////////////////////////////// 等待存在脈沖///////////////////////
void tmpre (void)   //判斷器件是否存在  //
{                            //
 unsigned int 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 = 8; while (i>0) i--;  // 延時    //
 return (dat);       //
}         //
//////////////////////////////////////////////////////////////////////////


//////////////////////////////////////// 讀一個字節///////////////////////
unsigned char tmrbyte (void)        //
{                 //
 unsigned char i,j,dat;      //
 dat = 0;       //
 for (i=1;i<=8;i++)      //
 {        //
  j = tmrbit ();      //
  dat = (j << 7) | (dat >> 1);    //
 }        //
 return (dat);       //
}         //
//////////////////////////////////////////////////////////////////////////


/////////////////////////////////////// 寫一個字節////////////////////////
void tmwbyte (unsigned char 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;                           // 寫0  //
   i++; i++;                              //
   TMDAT = 1;     //
   i = 8; while (i>0) i--;                //
  }       //
  else       //
  {       //
   TMDAT = 0;                           // 寫0  //
   i = 8; while (i>0) i--;                //
   TMDAT = 1;     //
   i++; i++;                              //
  }       //
 }        //
}         //
//////////////////////////////////////////////////////////////////////////

/////////////////////////////////發送ds1820 開始轉換//////////////////////
void tmstart (void)       //
{                          //
 tmreset ();  //復位     //
 //tmpre ();  //等待存在脈沖    //
 dmsec (1);  //延時     //
 tmwbyte (0xcc);  //跳過序列號命令,對所有器件有效  //
 tmwbyte (0x44);  //發轉換命令 44H,   //
}         //
//////////////////////////////////////////////////////////////////////////


/////////////////////////////////// 讀取溫度//////////////////////////////
void tmrtemp (void)       //
{                          //
 unsigned char a,b;      //
 tmreset ();  //復位     //
 //tmpre ();  //等待存在脈沖    //
 dmsec (1);  //延時     //
 tmwbyte (0xcc);  //跳過序列號命令   //
 tmwbyte (0xbe);  //發送讀取命令     //
 a = tmrbyte ();  //讀取低位溫度    //
 b = tmrbyte ();   //讀取高位溫度    //
 f=b;   //若b為1則為負溫   //
 if(f)        //
 {        //
  TMP=~a+1; //如果為負溫則去除其補碼  //
 }        //
 else        //
 {        //
  TMP=a;       //
 }        //
}         //
//////////////////////////////////////////////////////////////////////////


//////////////////////////////////讀取溫度////////////////////////////////
uchar tmrtemp ()       //
{                          //
 uchar i,j;       //
 uchar a,b;       //
 for(j=0;j<4;j++)      //
 {        //
  tmreset ();  //復位    //
  dmsec (1);  //延時    //
  tmwbyte (0x55);  //發送ROM匹配命令  //
  for(i=0;i<8;i++)     //
  {       //
   tmwbyte(SN[j][i]); //發送64位序列號 //
  }       //
  tmwbyte (0xbe);  //發送讀取命令    //
  a = tmrbyte ();  //連續讀取兩位溫度  //
  b = tmrbyte ();       //
  f[j]=b;   //若b為1則為負溫  //
  if(f[j])      //
  {       //
   TMP[j]=~a+1; //如果為負溫則去除其補碼 //
  }       //
  else       //
  {       //
   TMP[j]=a;     //
  }       //
}         //
//////////////////////////////////////////////////////////////////////////

 

//以下是讀取器件序列號的子程序,需要讀取序列時可在程序中調用;
//調用時確保總線中只有一只器件,若有多個器件時則讀取出來的號碼無效;
//將讀取出來的序列號填到前面的數組中即可使用;
//平時可以將此子程序刪除以節約空間。

//////////////////////////讀取器件序列號子程序////////////////////////////
rom()         //
{         //
 uchar i;       //
 //以下是定義8個序列號變量     //
 uchar sn1;       //
 uchar sn2;       //
 uchar sn3;       //
 uchar sn4;       //
 uchar sn5;       //
 uchar sn6;       //
 uchar sn7;       //
 uchar sn8;       //
         //
 tmreset ();  //復位     //
 dmsec (1);  //延時     //
 tmwbyte(0x33);  //發送讀序列號子程序   //
 sn1=tmrbyte();  //讀取第一個序列號,應為16H;  //
 sn2=tmrbyte();  //讀取第二個序列號,應為10H;  //
 sn3=tmrbyte();       //
 sn4=tmrbyte();       //
 sn5=tmrbyte();       //
 sn6=tmrbyte();       //
 sn7=tmrbyte();       //
 sn8=tmrbyte();       //
}         //
//////////////////////////////////////////////////////////////////////////  


//////////////////////////////////////////////////////////////////////////
main()         //
{         //
 do{        //
  //rom(); //調用讀序列號子程序   //
  tmstart();      //
  dmsec(100); //如果是不斷地讀取的話可以不延時 //
  tmrtemp(); //讀取溫度,執行完畢溫度將存于TMP[]數組中//
 }while(1);       //
}         //
//////////////////////////////////////////////////////////////////////////

 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区免费视频| 亚洲午夜国产一区99re久久| 亚洲免费在线观看视频| 免费成人在线播放| 91丨porny丨国产入口| 欧美xingq一区二区| 亚洲国产日产av| 国产高清亚洲一区| 欧美精品色综合| 日韩伦理av电影| 国产成人综合亚洲网站| 欧美日韩一区 二区 三区 久久精品| 精品sm在线观看| 亚洲成av人在线观看| 99久久精品免费看| 久久精品视频免费观看| 久久精品噜噜噜成人av农村| 欧洲精品在线观看| 日韩毛片视频在线看| 国产精品一色哟哟哟| 日韩亚洲欧美中文三级| 亚洲综合免费观看高清完整版| 国产sm精品调教视频网站| 91精品国产综合久久久久久漫画 | 成人激情电影免费在线观看| 在线成人免费观看| 亚洲国产精品麻豆| 欧美日韩国产在线观看| 亚洲精品视频在线观看网站| 91一区二区在线观看| 国产欧美精品一区| 国产精品系列在线观看| 久久久综合精品| 国产一区二区三区在线观看精品 | 91极品美女在线| 亚洲人吸女人奶水| 色婷婷久久综合| 亚洲一区在线播放| 欧美性受极品xxxx喷水| 亚洲五月六月丁香激情| 欧美综合久久久| 首页国产欧美日韩丝袜| 欧美美女一区二区| 亚洲影院理伦片| 欧美一区二区三区播放老司机| 日韩电影在线一区二区| 欧美人与禽zozo性伦| 日韩av不卡一区二区| 日韩精品一区二| 国产精品原创巨作av| 国产精品乱人伦| 一本久道中文字幕精品亚洲嫩| 亚洲精品v日韩精品| 欧美美女视频在线观看| 免费观看一级欧美片| 国产欧美精品国产国产专区 | 久久女同性恋中文字幕| 成人开心网精品视频| 夜夜亚洲天天久久| 欧美videossexotv100| 高潮精品一区videoshd| 亚洲卡通动漫在线| 91精品免费观看| 国产成人综合网站| 一区二区三区在线视频播放| 欧美视频一区在线观看| 麻豆久久久久久| 国产精品国产三级国产有无不卡| 一本到不卡免费一区二区| 日韩精品成人一区二区三区| 久久免费午夜影院| 在线精品视频免费播放| 免费在线观看视频一区| 国产精品久久二区二区| 91精品国模一区二区三区| 国产不卡视频一区二区三区| 亚洲国产美女搞黄色| 久久亚洲影视婷婷| 欧美精品在线一区二区三区| 国产一区二区免费看| 亚洲不卡一区二区三区| 国产三级精品三级在线专区| 欧美美女一区二区| caoporn国产精品| 久久99最新地址| 亚洲一区二区3| 中文一区在线播放| 欧美va天堂va视频va在线| 91久久精品网| 成人高清免费在线播放| 欧美aa在线视频| 亚洲国产欧美在线人成| 国产精品久久久久久久久晋中| 欧美va亚洲va香蕉在线| 欧美日韩一区高清| 97久久精品人人爽人人爽蜜臀 | 91麻豆精品国产91久久久资源速度 | 色网综合在线观看| 国产一区二区三区观看| 美洲天堂一区二卡三卡四卡视频| 亚洲婷婷综合久久一本伊一区| www激情久久| 欧美成人一区二区三区| 欧美日韩国产成人在线免费| 色婷婷久久综合| 99精品欧美一区二区蜜桃免费 | 免费视频最近日韩| 亚洲不卡一区二区三区| 亚洲黄色小视频| 亚洲女同ⅹxx女同tv| 最新中文字幕一区二区三区| 日韩欧美美女一区二区三区| 欧美日韩不卡一区二区| 欧美日韩在线亚洲一区蜜芽| 日本韩国欧美一区二区三区| 99这里只有久久精品视频| 成人免费三级在线| 东方aⅴ免费观看久久av| 国产一区二区精品在线观看| 国内精品伊人久久久久av影院| 久久国产麻豆精品| 久久99精品国产麻豆婷婷洗澡| 美女视频黄免费的久久| 久久国产麻豆精品| 国产一区日韩二区欧美三区| 韩国av一区二区| 国产激情视频一区二区在线观看 | 欧美色综合网站| 欧美做爰猛烈大尺度电影无法无天| 色婷婷精品久久二区二区蜜臂av| 94-欧美-setu| 欧美私模裸体表演在线观看| 欧美日韩的一区二区| 欧美一区二区免费视频| 久久香蕉国产线看观看99| 国产夜色精品一区二区av| 中文在线一区二区| 一区二区三区不卡视频 | 黄一区二区三区| 国产高清成人在线| caoporm超碰国产精品| 91国偷自产一区二区开放时间 | 欧美浪妇xxxx高跟鞋交| 日韩情涩欧美日韩视频| 国产欧美视频一区二区三区| 亚洲欧美日韩在线不卡| 午夜欧美一区二区三区在线播放| 开心九九激情九九欧美日韩精美视频电影| 国产综合成人久久大片91| 成人亚洲一区二区一| 欧美专区在线观看一区| 精品国产免费人成电影在线观看四季 | 欧美一区二区三区四区五区| 久久天堂av综合合色蜜桃网| 国产精品美女久久久久久久久 | 久久久青草青青国产亚洲免观| 国产精品伦理在线| 偷拍一区二区三区四区| 国产麻豆成人精品| 欧美日韩大陆在线| 国产精品亚洲一区二区三区在线| 69堂精品视频| 国产综合久久久久久鬼色| 欧美日韩在线播放三区| 性做久久久久久| 欧美久久一二三四区| 首页综合国产亚洲丝袜| 欧美一区二区三区免费视频| 亚洲欧美偷拍卡通变态| 国产一区视频在线看| 久久久国产一区二区三区四区小说 | 韩国三级电影一区二区| 北条麻妃国产九九精品视频| 蜜臀av一区二区三区| 亚洲欧美另类久久久精品| 久久久久久久久久久久电影| 久久国产福利国产秒拍| 欧美日韩一区精品| 亚洲欧美在线另类| 一本久久a久久精品亚洲| 国产精品毛片久久久久久| 成人影视亚洲图片在线| 精品日本一线二线三线不卡| 日韩精品一区国产麻豆| 久久久久久麻豆| 欧美一区在线视频| 亚洲国产精品一区二区久久| 欧美日韩久久久| 国产精品沙发午睡系列990531| 国产真实乱对白精彩久久| 欧美成人精品1314www| 人人超碰91尤物精品国产| 日韩一级欧美一级| 国产精品一区一区| 亚洲综合丁香婷婷六月香| 99re视频精品| 久久99久久99精品免视看婷婷 | 丰满白嫩尤物一区二区| 色综合欧美在线视频区| 国产精品另类一区|