久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: C8051F410驅動DS18B20源碼分享 [打印本頁]

作者: ch5320    時間: 2018-10-13 13:40
標題: C8051F410驅動DS18B20源碼分享
//DS18B20驅動程序
//溫度范圍:-55-125攝氏度
//C8051F410,外部晶振(22.1184MHz),DS18B20上拉4.7K,1腳GND,2腳DQ,3腳VCC。
//功能:調用ds18b20_get_tem()程序,讀取溫度整數,小數值及符號位
//格式:溫度整數為10進制1至125,溫度小數為十進制0至9,符號為位狀態0或1。
//變量:溫度整數dswendu,溫度小數dsxiao,符號DSWDFH。
#include "intrins.h" //_nop_();延時函數用  
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^5;
//#define DQHIN (P1MDOUT&=~0x20;P0 |= 0x01;)  
//#define DQ RC1
//#define DQH TRISC1=1;//DS18B20定義為高電平并設置為輸入端
//#define DQL TRISC1=0;//DS18B20定義為低電平并設置為輸出端
uchar  dswendu,dsxiao;
bit DSWDFH;
void delay_18b20(uint x) //18B20延時程序
{while(x--);}
void ds18b20_reset()//18B20復位程序
{//C8051F410,22.1184外部晶振
uchar st=1;//狀態位置1
DQ=1;//總線高
while(st)
     {
      DQ=0;
      delay_18b20(600); //需要延時480us-960us
      DQ=1;
      delay_18b20(50); //需要延時15us-60us
      if(DQ==1)//等待時間約為240us-420us
       st=1;
      else
       st=0;        
     }
DQ=1;
delay_18b20(300);//100需要延時60us-240us

}
void ds18b20_write_byte(uchar dat)//18B20寫一個字節
{
    unsigned char i=0;
for (i=8; i>0; i--)
    {
       DQ = 0;
       DQ = dat&0x01;
       delay_18b20(100);
       DQ = 1;
       dat>>=1;
    }
}
uchar ds18b20_read_byte()//18B20讀一個字節
{
    unsigned char i=0;
   unsigned char dat = 0;
  for (i=8;i>0;i--)
    {
      DQ = 0;     // 給脈沖信號
      dat>>=1;
      DQ = 1;     // 給脈沖信號
      if(DQ)
      dat|=0x80;
      delay_18b20(80);
    }
     return(dat);
}
void ds18b20_get_tem()  //讀出溫度并轉換成顯示BCD碼
{
uchar low,high,huhao;
uint dstemp,xs;
ds18b20_reset(); //復位
ds18b20_write_byte(0xCC);//跳過ROM
ds18b20_write_byte(0x44);//溫度轉換
ds18b20_reset();//18B20復位程序
ds18b20_write_byte(0xCC);//跳過ROM
ds18b20_write_byte(0xBE);//發送讀取命令   
low=ds18b20_read_byte();  
high=ds18b20_read_byte();
huhao=high&0xf8;     
dstemp=high;
dstemp<<=8;   
dstemp=dstemp|low;
if(huhao==0xf8) //符號判斷
      {
         dstemp=~dstemp+1;
            DSWDFH=1;
      }
    else DSWDFH=0;  
xs=(dstemp&0x0f)*625;
    dsxiao=xs/1000%10;//計算出小數位。
dswendu=dstemp>>4;
    dswendu=dswendu&0x7f;//計算出溫度值
}

作者: admin    時間: 2018-10-13 14:59
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
作者: ch5320    時間: 2018-10-13 21:44
版主給我了很大的動力啊!DS18B20單總線電路也沒什么可畫的,主要是程序運行時間。再者自已要搬磚也沒太多時間。版主諒解!
作者: 九死還魂草    時間: 2018-10-15 20:33
這種搞法業余玩玩還可以,復雜的項目里用不了
作者: ch5320    時間: 2018-10-26 19:41
請問如果專業的有什么區別?本人小白。謝謝!
作者: 九死還魂草    時間: 2018-10-26 21:21
ch5320 發表于 2018-10-26 19:41
請問如果專業的有什么區別?本人小白。謝謝!

DS18B20是靠高低電平的不同時長區分0和1的,樓主里用了死循環的方式做延時,這樣做在簡單的系統里沒問題。
但一個真正的項目中往往有很多中斷需要處理,這樣就有兩個問題:
1. 如果延時期間允許中斷,則在中斷頻繁時實際的延時就會比預計的長,導致0和1誤判。
2. 如果延時期間不允許中斷,則又會造成中斷不能及時相應,可能會丟失重要的數據,或者使系統反應變得十分遲鈍。
作者: ch5320    時間: 2018-10-28 11:02
九死還魂草 發表于 2018-10-26 21:21
DS18B20是靠高低電平的不同時長區分0和1的,樓主里用了死循環的方式做延時,這樣做在簡單的系統里沒問題 ...

ds18b20這個延時的確是個問題,但做項目用到18B20一般都會單獨設計芯片做采集。不會用主CPU來處理18B20,特別是多路采集。
作者: 九死還魂草    時間: 2018-11-7 16:20
ch5320 發表于 2018-10-28 11:02
ds18b20這個延時的確是個問題,但做項目用到18B20一般都會單獨設計芯片做采集。不會用主CPU來處理18B20, ...

一個18B20多少錢,一個MCU多少錢,再加一個芯片怎么也得幾塊錢吧,這樣做成本上沒有可行性,除非是壟斷行業,感覺樓主沒做過真正商用的項目,太想當然。
作者: ch5320    時間: 2018-11-10 12:04
的確是沒做過大的商用項目,現在這點知識還做不了大的項目,經后要和各位高手好好學習。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品国产欧美 | 日韩欧美国产高清91 | 亚洲欧美日韩色图 | 99小视频 | 免费在线成人网 | 国产精品永久久久久久久久久 | 欧美午夜精品久久久久免费视 | 国产精品一区av | 91精品免费视频 | 国产精品国产成人国产三级 | 四虎www | 日韩在线视频免费观看 | 福利三区 | 欧美成人黄色 | 伊人网在线 | 亚洲激情综合网 | 国产精品999 | 久久一区视频 | 天天操天天拍 | 手机看片福利永久 | 日韩国产精品视频 | 亚洲一级黄色片 | 亚洲精品视频在线观看免费 | 五月天激情综合 | 日韩成人高清 | 欧美日韩久久 | 日韩av资源| 国产极品国产极品 | 亚洲第一黄网 | 天天干天天干天天干 | 久久国产精品一区二区 | 亚洲午夜视频在线观看 | 伦一理一级一a一片 | 特大黑人巨交吊性xxxx视频 | 在线国产一区 | 日韩国产在线播放 | 在线亚洲天堂 | 色人人| 拍床戏真做h文黄肉1v1 | 欧美视频在线观看一区 | 亚洲精品xxx |