?? ds18b20.c
字號:
//-----------------------函數聲明,變量定義--------------------------------------------------------
#include <reg51.h>
sbit DQ=P1^0; // 將p1.0口模擬時鐘輸出
#define jump_ROM 0xCC //跳過ROM命令
#define start 0x44 //啟動轉換命令
#define read_EEROM 0xBE //讀存儲器命令
unsigned char TMPH,TMPL; //溫度值
//--------------------------------------------------------------------------------------------------
// 函數名稱: delay
// 入口參數: N
// 函數功能:延時子程序,實現(16*N+24)us的延時
// 系統采用11.0592MHz的時鐘時,延時滿足要求,其它情況需要改動
//--------------------------------------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: Reset
// 入口參數: 無
// 返回deceive_ready
// 函數功能:復位
//--------------------------------------------------------------------------------------------------
unsigned char Reset(void)
{
unsigned char deceive_ready;
DQ=0; //拉低DQ線
delay(29); //延時至少480us~960us
DQ=1; //將DQ線設置位邏輯高
delay(3); //延時等待deceive_ready響應
deceive_ready=DQ; //采樣deceive_ready信號
delay(25); //等待時序結束
return(deceive_ready); //有deceive_ready信號時返回0,否則返回1
}
//--------------------------------------------------------------------------------------------------
// 函數名稱:read_bit
// 入口參數: 無
// 返回接收的數據
// 函數功能:讀一個bit子程序
//--------------------------------------------------------------------------------------------------
unsigned char read_bit(void)
{
unsigned char i;
DQ=0; //拉低DQ線開始時序
DQ=1; //升高DQ線
for(i=0;i<3;i++); //延時至時序開始15us
return(DQ); //返回DQ值
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: write_bit
// 入口參數: bitval
// 函數功能:寫一個bit子程序
//--------------------------------------------------------------------------------------------------
void write_bit(unsigned char bitval)
{
DQ=0; //拉低DQ線開始時序
if(bitval==1)
DQ=1; //如果寫邏輯為高
delay(5); //延時
DQ=1; //升高DQ線
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: write_byte
// 入口參數: val
// 函數功能:寫一個byte子程序
//--------------------------------------------------------------------------------------------------
void write_byte(unsigned char val)
{
unsigned char i,temp;
for(i=0;i<8;i++)
{
temp=val>>i; //將val位右移i位賦值給比temp
temp=temp&0x01; //取temp最低位
write_bit(temp);
delay(5); //延時至時序結束
}
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: read_byte
// 返回接收的數據 value
// 函數功能:讀一個byte子程序
//--------------------------------------------------------------------------------------------------
unsigned char read_byte(void)
{unsigned char i,m,receive_data;
m=1;receive_data=0; //初始化
for(i=0;i<8;i++)
{
if(read_bit())
{
receive_data=receive_data+(m<<i);
} //每讀一位數據據,左移一位
delay(6); //延時至時序結束
}
return(receive_data); //返回value
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: main
// 函數功能: 主函數
//--------------------------------------------------------------------------------------------------
void main()
{
Reset();
write_byte(jump_ROM); //發跳過ROM命令
write_byte(start); //發啟動轉換命令
Reset();
write_byte(jump_ROM); //發跳過ROM命令
write_byte(read_EEROM); //發跳過ROM命令
TMPL=read_byte(); //讀低8位溫度值
TMPH=read_byte(); //讀高8位溫度值
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -