ds18b20簡單介紹范文第1篇
2、 Match ROM[55H]
這個是匹配ROM命令,后跟64位ROM序列,讓總線控制器在多點總線上定位一只特定的DS18B20。只有和64位ROM序列完全匹配的DS18B20才能響應隨后的存儲器操作。所有和64位ROM序列不匹配的從機都將等待復位脈沖。這條命令在總線上有單個或多個器件時都可以使用。
3、Skip ROM[0CCH]
這條命令允許總線控制器不用提供64位ROM編碼就使用存儲器操作命令,在單點總線情況下,可以節省時間。如果總線上不止一個從機,在Skip ROM命令之后跟著發一條讀命令,由于多個從機同時傳送信號,總線上就會發生數據沖突(漏極開路下拉效果相當于相“與”)
4、Search ROM[0F0H]
當一個系統初次啟動時,總線控制器可能并不知道單線總線上有多個器件或它們的64位編碼,搜索ROM命令允許總線控制器用排除法識別總線上的所有從機的64位編碼。
5、Alarm Search[0ECH]
這條命令的流程和Search ROM相同。然而,只有在最近一次測溫后遇到符合報警條件的情況,DS18B20才會響應這條命令。報警條件定義為溫度高于TH或低于TL。只要DS18B20不掉電,報警狀態將一直保持,知道再一次測得的溫度值達不到報警條件。
6、Write Scratchpad[4EH]
這個命令向DS18B20的暫存器TH和TL中寫入數據??梢栽谌魏螘r刻發出復位命令來中止寫入。
7、Read Scratchpad[0BEH]
這個命令讀取暫存器的內容。讀取將從第1個字節開始,一直進行下去,直到第9(CRC)字節讀完。如果不想讀完所有字節,控制器可以在任何時間發出復位命令來中止讀取。
8、Copy Scratchpad[48H]
這個命令把暫存器的內容拷貝到DS18B20的E2ROM存儲器里,即把溫度報警觸發字節存入非易失性存儲器里。如果總線控制器在這條命令之后跟著發出讀時間隙,而DS18B20又忙于把暫存器拷貝到E2存儲器,DS18B20就會輸出一個0,如果拷貝結束的話,DS18B20則輸出1。如果使用寄生電源,總線控制器必須在這條命令發出后立即啟動強上拉并保持10ms。
9、Convert T[44H]
這條命令啟動一次溫度轉換而無需其他數據。溫度轉換命令被執行,而后DS18B20保持等待狀態。如果總線控制器在這條命令之后跟著發出時間隙,而DS18B20又忙于做時間轉換的話,DS18B20將在總線上輸出0,若溫度轉換完成,則輸出1,。如果使用寄生電源,總線控制必須在發出這條命令后立即啟動強上拉,并保持500ms以上時間。
10、Recall E2
這條命令把報警觸發器里的值拷貝回暫存器。這種拷貝操作在DS18B20上電時自動執行,這樣器件一上電,暫存器里馬上就存在有效的數據了。若在這條命令發出之后發出讀數據隙,器件會輸出溫度轉換忙的標識:0為忙,1為完成。
11、Read Power Supply[0B4H]
ds18b20簡單介紹范文第2篇
2、 Match ROM[55H]
這個是匹配ROM命令,后跟64位ROM序列,讓總線控制器在多點總線上定位一只特定的DS18B20。只有和64位ROM序列完全匹配的DS18B20才能響應隨后的存儲器操作。所有和64位ROM序列不匹配的從機都將等待復位脈沖。這條命令在總線上有單個或多個器件時都可以使用。
3、Skip ROM[0CCH]
這條命令允許總線控制器不用提供64位ROM編碼就使用存儲器操作命令,在單點總線情況下,可以節省時間。如果總線上不止一個從機,在Skip ROM命令之后跟著發一條讀命令,由于多個從機同時傳送信號,總線上就會發生數據沖突(漏極開路下拉效果相當于相“與”)
4、Search ROM[0F0H]
當一個系統初次啟動時,總線控制器可能并不知道單線總線上有多個器件或它們的64位編碼,搜索ROM命令允許總線控制器用排除法識別總線上的所有從機的64位編碼。
5、Alarm Search[0ECH]
這條命令的流程和Search ROM相同。然而,只有在最近一次測溫后遇到符合報警條件的情況,DS18B20才會響應這條命令。報警條件定義為溫度高于TH或低于TL。只要DS18B20不掉電,報警狀態將一直保持,知道再一次測得的溫度值達不到報警條件。
6、Write Scratchpad[4EH]
這個命令向DS18B20的暫存器TH和TL中寫入數據??梢栽谌魏螘r刻發出復位命令來中止寫入。
7、Read Scratchpad[0BEH]
這個命令讀取暫存器的內容。讀取將從第1個字節開始,一直進行下去,直到第9(CRC)字節讀完。如果不想讀完所有字節,控制器可以在任何時間發出復位命令來中止讀取。
8、Copy Scratchpad[48H]
這個命令把暫存器的內容拷貝到DS18B20的E2ROM存儲器里,即把溫度報警觸發字節存入非易失性存儲器里。如果總線控制器在這條命令之后跟著發出讀時間隙,而DS18B20又忙于把暫存器拷貝到E2存儲器,DS18B20就會輸出一個0,如果拷貝結束的話,DS18B20則輸出1。如果使用寄生電源,總線控制器必須在這條命令發出后立即啟動強上拉并保持10ms。
9、Convert T[44H]
這條命令啟動一次溫度轉換而無需其他數據。溫度轉換命令被執行,而后DS18B20保持等待狀態。如果總線控制器在這條命令之后跟著發出時間隙,而DS18B20又忙于做時間轉換的話,DS18B20將在總線上輸出0,若溫度轉換完成,則輸出1,。如果使用寄生電源,總線控制必須在發出這條命令后立即啟動強上拉,并保持500ms以上時間。
10、Recall E2
這條命令把報警觸發器里的值拷貝回暫存器。這種拷貝操作在DS18B20上電時自動執行,這樣器件一上電,暫存器里馬上就存在有效的數據了。若在這條命令發出之后發出讀數據隙,器件會輸出溫度轉換忙的標識:0為忙,1為完成。
11、Read Power Supply[0B4H]
ds18b20簡單介紹范文第3篇
2、 Match ROM[55H]
這個是匹配ROM命令,后跟64位ROM序列,讓總線控制器在多點總線上定位一只特定的DS18B20。只有和64位ROM序列完全匹配的DS18B20才能響應隨后的存儲器操作。所有和64位ROM序列不匹配的從機都將等待復位脈沖。這條命令在總線上有單個或多個器件時都可以使用。
3、Skip ROM[0CCH]
這條命令允許總線控制器不用提供64位ROM編碼就使用存儲器操作命令,在單點總線情況下,可以節省時間。如果總線上不止一個從機,在Skip ROM命令之后跟著發一條讀命令,由于多個從機同時傳送信號,總線上就會發生數據沖突(漏極開路下拉效果相當于相“與”)
4、Search ROM[0F0H]
當一個系統初次啟動時,總線控制器可能并不知道單線總線上有多個器件或它們的64位編碼,搜索ROM命令允許總線控制器用排除法識別總線上的所有從機的64位編碼。
5、Alarm Search[0ECH]
這條命令的流程和Search ROM相同。然而,只有在最近一次測溫后遇到符合報警條件的情況,DS18B20才會響應這條命令。報警條件定義為溫度高于TH或低于TL。只要DS18B20不掉電,報警狀態將一直保持,知道再一次測得的溫度值達不到報警條件。
6、Write Scratchpad[4EH]
這個命令向DS18B20的暫存器TH和TL中寫入數據??梢栽谌魏螘r刻發出復位命令來中止寫入。
7、Read Scratchpad[0BEH]
這個命令讀取暫存器的內容。讀取將從第1個字節開始,一直進行下去,直到第9(CRC)字節讀完。如果不想讀完所有字節,控制器可以在任何時間發出復位命令來中止讀取。
8、Copy Scratchpad[48H]
這個命令把暫存器的內容拷貝到DS18B20的E2ROM存儲器里,即把溫度報警觸發字節存入非易失性存儲器里。如果總線控制器在這條命令之后跟著發出讀時間隙,而DS18B20又忙于把暫存器拷貝到E2存儲器,DS18B20就會輸出一個0,如果拷貝結束的話,DS18B20則輸出1。如果使用寄生電源,總線控制器必須在這條命令發出后立即啟動強上拉并保持10ms。
9、Convert T[44H]
這條命令啟動一次溫度轉換而無需其他數據。溫度轉換命令被執行,而后DS18B20保持等待狀態。如果總線控制器在這條命令之后跟著發出時間隙,而DS18B20又忙于做時間轉換的話,DS18B20將在總線上輸出0,若溫度轉換完成,則輸出1,。如果使用寄生電源,總線控制必須在發出這條命令后立即啟動強上拉,并保持500ms以上時間。
10、Recall E2
這條命令把報警觸發器里的值拷貝回暫存器。這種拷貝操作在DS18B20上電時自動執行,這樣器件一上電,暫存器里馬上就存在有效的數據了。若在這條命令發出之后發出讀數據隙,器件會輸出溫度轉換忙的標識:0為忙,1為完成。
11、Read Power Supply[0B4H]
ds18b20簡單介紹范文第4篇
1.1 DS18B20簡介
DS18B20是美國DALLAS半導體公司生產的可組網數字式溫度傳感器. 主要由三個數據部件組成:64的激光ROM,溫度靈敏原件,非易失性溫度告警觸發器TH和TL。 封裝如圖一:
圖一 1.
2DS18B20的特點:
1. 獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。
2. DS18B20支持多點組網功能,多個DS18B20可以并聯在唯一的三線上,實現多點測溫。 3. DS18B20在使用中不需要任何外圍元件。
4. 測溫范圍-55℃~+125℃,固有測溫分辨率0.5℃。 5. 測量結果以9位數字量方式串行傳送。
內部結構框圖如圖二所示。
圖二
2.1 訪問溫度計的協議:
(一)初始化
(二)ROM操作命令
(三)存貯器操作命令
(四)處理/數據
由熱敏原件中晶振特性計算出所測的溫度。 注意:復位操作如下圖三
圖三 必需要給DS18B20輸入脈沖激活其復位功能。
DS18B20的驅動程序:
/*************************此部分為18B20的驅動程序*************************************/
#include #include sbit D18B20=P3^7; sbit error=P3^4; #define NOP() _nop_() /* 定義空指令 */ #define _Nop() _nop_() /*定義空指令*/ void TempDelay (unsigned char idata us); void Init18b20 (void); void WriteByte (unsigned char idata wr); //單字節寫入 void read_bytes (unsigned char idata j); unsigned char CRC (unsigned char j); void GemTemp (void); void Config18b20 (void); void ReadID (void); void TemperatuerResult(void); bit flag; unsigned int idata Temperature; unsigned char idata temp_buff[9]; //存儲讀取的字節,read scratchpad為9字節,read rom ID為8字節 unsigned char idata id_buff[8];
unsigned char idata crc_data; unsigned char code CrcTable [256]={ 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};
void GetTemp() {
if(TIM==100)
{ TIM=0;
TemperatuerResult();
每隔 1000ms 讀取溫度。
void TemperatuerResult(void) {
p = id_buff;
ReadID();
//先確定是第幾個DS18B20
Config18b20(); //配置DS18B20的報警溫度和分辨度
Init18b20 ();
//復位)
WriteByte(0xcc);
//skip rom
WriteByte(0x44);
//Temperature convert
Init18b20 ();
//復位)
WriteByte(0xcc);
//skip rom
WriteByte(0xbe);
//read Temperature
p = temp_buff;
GemTemp(); //讀取溫度
}
void GemTemp (void) {
read_bytes (9);
if (CRC(9)==0) //校驗正確
{
Temperature = temp_buff[1]*0x100 + temp_buff[0]; //
Temperature *= 0.0625;
Temperature /= 16;
TempDelay(1);
} } *Function:CRC校驗 *parameter: *Return: *Modify: *************************************************************/ unsigned char CRC (unsigned char j) {
unsigned char idata i,crc_data=0;
for(i=0;i
crc_data = CrcTable[crc_data^temp_buff[i]];
return (crc_data); }
/************************************************************ *Function:向18B20寫入一個字節 *parameter: *Return: *Modify:
void WriteByte (unsigned char idata wr) //單字節寫入 {
unsigned char idata i;
for (i=0;i<8;i++)
{
D18B20 = 0;
_nop_();
D18B20=wr&0x01;
TempDelay(3);
//delay 45 uS //
5 _nop_();
_nop_();
D18B20=1;
wr >>= 1;
} }
/************************************************************ *Function:讀18B20的一個字節 *parameter: *Return: *Modify: *************************************************************/ unsigned char ReadByte (void)
//讀取單字節
unsigned char idata i,u=0;
for(i=0;i<8;i++)
{
D18B20 = 0;
u >>= 1;
D18B20 = 1;
if(D18B20==1)
u |= 0x80;
TempDelay (2);
_nop_();
}
return(u); } /************************************************************ *Function:讀18B20 *parameter: *Return: *Modify: *************************************************************/ void read_bytes (unsigned char idata j) {
unsigned char idata i;
for(i=0;i
{
*p = ReadByte();
p++;
} } /************************************************************ *Function:延時處理 *parameter: *Return: *Modify: *************************************************************/ void TempDelay (unsigned char idata us) {
while(us--); } /************************************************************ *Function:18B20初始化 *parameter: *Return: *Modify: *************************************************************/ void Init18b20 (void) {
D18B20=1;
_nop_();
D18B20=0;
TempDelay(80);
//delay 530 uS//80
_nop_();
D18B20=1;
TempDelay(14);
//delay 100 uS//14
_nop_();
_nop_();
_nop_();
if(D18B20==0)
{flag = 1; error=0; }
//detect 1820 success!
else
{flag = 0; error=1; }
//detect 1820 fail!
TempDelay(20);
//20
_nop_();
_nop_();
D18B20 = 1; }
/************************************************************
向18B20寫入一個字節 *parameter: *Return: *Modify: *************************************************************/ void WriteByte (unsigned char idata wr) //單字節寫入 {
unsigned char idata i;
for (i=0;i<8;i++)
{
D18B20 = 0;
_nop_();
D18B20=wr&0x01;
TempDelay(3);
//delay 45 uS //5
_nop_();
_nop_();
D18B20=1;
wr >>= 1;
} }
/************************************************************
讀18B20的一個字節
*/ unsigned char ReadByte (void)
//讀取單字節 {
unsigned char idata i,u=0;
for(i=0;i<8;i++)
{
D18B20 = 0;
u >>= 1;
D18B20 = 1;
if(D18B20==1)
u |= 0x80;
TempDelay (2);
_nop_();
}
return(u); }
/************************************************************ 3.1.2
SPI數據線配置。
/*************************此部分為74HC595的驅動程序使用SPI總線連接*************************************/
#include #include
#define NOP()
_nop_()
/* 定義空指令 */ #define _Nop() _nop_()
/*?定義空指令*/ void HC595SendData(unsigned int SendVal);
//SPI IO sbit
MOSIO =P1^5; sbit
R_CLK =P1^6; sbit
S_CLK =P1^7; sbit
IN_PL =P3^4;
//74HC165 shift load
把數據加載到鎖存器中 sbit
IN_Dat=P3^5;
//74HC165 output
數據移出 sbit
OE
=P3^6;
/********************************************************************************************************* ** 函數名稱: HC595SendData ** 功能描述: 向SPI總線發送數據
*********************************************************************************************************/ void HC595SendData(unsigned int SendVal) {
unsigned char i;
for(i=0;i<16;i++)
{
if((SendVal<
else MOSIO=0;
S_CLK=0;
NOP();
NOP();
S_CLK=1;
}
R_CLK=0; //set dataline low
NOP();
NOP();
R_CLK=1; //片選
OE=0; }
3.1.
3試驗數碼管上顯示溫度
#include extern GetTemp();
//聲明引用外部函數 extern unsigned int idata Temperature;
// 聲明引用外部變量 void delay(unsigned int i);
sbit
LS138A=P2^2;
//管腳定義 sbit
LS138B=P2^3; sbit
LS138C=P2^4;
//此表為 LED 的字模, 共陰數碼管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned long LedOut[5],LedNumVal; void system_Ini() {
TMOD|= 0x11;
TH1 = 0xD8;
//10
TL1 = 0xF0;
IE = 0x8A;
TR1 = 1 main() { unsigned char i;
system_Ini();
while(1)
{
GetTemp();
/********以下將讀18b20的數據送到LED數碼管顯示*************/
LedNumVal=Temperature;
//把實際溫度送到LedNumVal變量中
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100];
LedOut[2]=Disp_Tab[LedNumVal%100/10]; //十位
LedOut[3]=Disp_Tab[LedNumVal%10];
//個位
for(i=0; i<4; i++)
{
P0 = LedOut[i] ;
switch(i)
{
//138譯碼
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
}
delay(100);
}
P0 = 0;
} }
//延時程序
void delay(unsigned int i) {
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--); } 4.1 討論DS18B20的自動報警功能實現。
DS18B20只是一個測溫元件,所謂的報警功能要通過程序由單片機來實現。
DS18B20溫度傳感器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8字節的存儲器,頭2個字節包含測得的溫度信息,第3和第4字節TH(報警溫度上限)和TL(報警溫度下限)的拷貝。第5個字節,為配置寄存器,它的內容用于確定溫度值的數字轉換分辨率。第
6、
ds18b20簡單介紹范文第5篇
1.1 DS18B20簡介
DS18B20是美國DALLAS半導體公司生產的可組網數字式溫度傳感器. 主要由三個數據部件組成:64的激光ROM,溫度靈敏原件,非易失性溫度告警觸發器TH和TL。 封裝如圖一:
圖一 1.
2DS18B20的特點:
1. 獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20的雙向通訊。
2. DS18B20支持多點組網功能,多個DS18B20可以并聯在唯一的三線上,實現多點測溫。 3. DS18B20在使用中不需要任何外圍元件。
4. 測溫范圍-55℃~+125℃,固有測溫分辨率0.5℃。 5. 測量結果以9位數字量方式串行傳送。
內部結構框圖如圖二所示。
圖二
2.1 訪問溫度計的協議:
(一)初始化
(二)ROM操作命令
(三)存貯器操作命令
(四)處理/數據
由熱敏原件中晶振特性計算出所測的溫度。 注意:復位操作如下圖三
圖三 必需要給DS18B20輸入脈沖激活其復位功能。
DS18B20的驅動程序:
/*************************此部分為18B20的驅動程序*************************************/
#include #include sbit D18B20=P3^7; sbit error=P3^4; #define NOP() _nop_() /* 定義空指令 */ #define _Nop() _nop_() /*定義空指令*/ void TempDelay (unsigned char idata us); void Init18b20 (void); void WriteByte (unsigned char idata wr); //單字節寫入 void read_bytes (unsigned char idata j); unsigned char CRC (unsigned char j); void GemTemp (void); void Config18b20 (void); void ReadID (void); void TemperatuerResult(void); bit flag; unsigned int idata Temperature; unsigned char idata temp_buff[9]; //存儲讀取的字節,read scratchpad為9字節,read rom ID為8字節 unsigned char idata id_buff[8];
unsigned char idata crc_data; unsigned char code CrcTable [256]={ 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};
void GetTemp() {
if(TIM==100)
{ TIM=0;
TemperatuerResult();
每隔 1000ms 讀取溫度。
void TemperatuerResult(void) {
p = id_buff;
ReadID();
//先確定是第幾個DS18B20
Config18b20(); //配置DS18B20的報警溫度和分辨度
Init18b20 ();
//復位)
WriteByte(0xcc);
//skip rom
WriteByte(0x44);
//Temperature convert
Init18b20 ();
//復位)
WriteByte(0xcc);
//skip rom
WriteByte(0xbe);
//read Temperature
p = temp_buff;
GemTemp(); //讀取溫度
}
void GemTemp (void) {
read_bytes (9);
if (CRC(9)==0) //校驗正確
{
Temperature = temp_buff[1]*0x100 + temp_buff[0]; //
Temperature *= 0.0625;
Temperature /= 16;
TempDelay(1);
} } *Function:CRC校驗 *parameter: *Return: *Modify: *************************************************************/ unsigned char CRC (unsigned char j) {
unsigned char idata i,crc_data=0;
for(i=0;i
crc_data = CrcTable[crc_data^temp_buff[i]];
return (crc_data); }
/************************************************************ *Function:向18B20寫入一個字節 *parameter: *Return: *Modify:
void WriteByte (unsigned char idata wr) //單字節寫入 {
unsigned char idata i;
for (i=0;i<8;i++)
{
D18B20 = 0;
_nop_();
D18B20=wr&0x01;
TempDelay(3);
//delay 45 uS //
5 _nop_();
_nop_();
D18B20=1;
wr >>= 1;
} }
/************************************************************ *Function:讀18B20的一個字節 *parameter: *Return: *Modify: *************************************************************/ unsigned char ReadByte (void)
//讀取單字節
unsigned char idata i,u=0;
for(i=0;i<8;i++)
{
D18B20 = 0;
u >>= 1;
D18B20 = 1;
if(D18B20==1)
u |= 0x80;
TempDelay (2);
_nop_();
}
return(u); } /************************************************************ *Function:讀18B20 *parameter: *Return: *Modify: *************************************************************/ void read_bytes (unsigned char idata j) {
unsigned char idata i;
for(i=0;i
{
*p = ReadByte();
p++;
} } /************************************************************ *Function:延時處理 *parameter: *Return: *Modify: *************************************************************/ void TempDelay (unsigned char idata us) {
while(us--); } /************************************************************ *Function:18B20初始化 *parameter: *Return: *Modify: *************************************************************/ void Init18b20 (void) {
D18B20=1;
_nop_();
D18B20=0;
TempDelay(80);
//delay 530 uS//80
_nop_();
D18B20=1;
TempDelay(14);
//delay 100 uS//14
_nop_();
_nop_();
_nop_();
if(D18B20==0)
{flag = 1; error=0; }
//detect 1820 success!
else
{flag = 0; error=1; }
//detect 1820 fail!
TempDelay(20);
//20
_nop_();
_nop_();
D18B20 = 1; }
/************************************************************
向18B20寫入一個字節 *parameter: *Return: *Modify: *************************************************************/ void WriteByte (unsigned char idata wr) //單字節寫入 {
unsigned char idata i;
for (i=0;i<8;i++)
{
D18B20 = 0;
_nop_();
D18B20=wr&0x01;
TempDelay(3);
//delay 45 uS //5
_nop_();
_nop_();
D18B20=1;
wr >>= 1;
} }
/************************************************************
讀18B20的一個字節
*/ unsigned char ReadByte (void)
//讀取單字節 {
unsigned char idata i,u=0;
for(i=0;i<8;i++)
{
D18B20 = 0;
u >>= 1;
D18B20 = 1;
if(D18B20==1)
u |= 0x80;
TempDelay (2);
_nop_();
}
return(u); }
/************************************************************ 3.1.2
SPI數據線配置。
/*************************此部分為74HC595的驅動程序使用SPI總線連接*************************************/
#include #include
#define NOP()
_nop_()
/* 定義空指令 */ #define _Nop() _nop_()
/*?定義空指令*/ void HC595SendData(unsigned int SendVal);
//SPI IO sbit
MOSIO =P1^5; sbit
R_CLK =P1^6; sbit
S_CLK =P1^7; sbit
IN_PL =P3^4;
//74HC165 shift load
把數據加載到鎖存器中 sbit
IN_Dat=P3^5;
//74HC165 output
數據移出 sbit
OE
=P3^6;
/********************************************************************************************************* ** 函數名稱: HC595SendData ** 功能描述: 向SPI總線發送數據
*********************************************************************************************************/ void HC595SendData(unsigned int SendVal) {
unsigned char i;
for(i=0;i<16;i++)
{
if((SendVal<
else MOSIO=0;
S_CLK=0;
NOP();
NOP();
S_CLK=1;
}
R_CLK=0; //set dataline low
NOP();
NOP();
R_CLK=1; //片選
OE=0; }
3.1.
3試驗數碼管上顯示溫度
#include extern GetTemp();
//聲明引用外部函數 extern unsigned int idata Temperature;
// 聲明引用外部變量 void delay(unsigned int i);
sbit
LS138A=P2^2;
//管腳定義 sbit
LS138B=P2^3; sbit
LS138C=P2^4;
//此表為 LED 的字模, 共陰數碼管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned long LedOut[5],LedNumVal; void system_Ini() {
TMOD|= 0x11;
TH1 = 0xD8;
//10
TL1 = 0xF0;
IE = 0x8A;
TR1 = 1 main() { unsigned char i;
system_Ini();
while(1)
{
GetTemp();
/********以下將讀18b20的數據送到LED數碼管顯示*************/
LedNumVal=Temperature;
//把實際溫度送到LedNumVal變量中
LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100];
LedOut[2]=Disp_Tab[LedNumVal%100/10]; //十位
LedOut[3]=Disp_Tab[LedNumVal%10];
//個位
for(i=0; i<4; i++)
{
P0 = LedOut[i] ;
switch(i)
{
//138譯碼
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
}
delay(100);
}
P0 = 0;
} }
//延時程序
void delay(unsigned int i) {
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--); } 4.1 討論DS18B20的自動報警功能實現。
DS18B20只是一個測溫元件,所謂的報警功能要通過程序由單片機來實現。
DS18B20溫度傳感器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8字節的存儲器,頭2個字節包含測得的溫度信息,第3和第4字節TH(報警溫度上限)和TL(報警溫度下限)的拷貝。第5個字節,為配置寄存器,它的內容用于確定溫度值的數字轉換分辨率。第
6、
ds18b20簡單介紹范文第6篇
1.《建設用地規劃許可證》
2.《國有土地使用證》
3.《建設工程規劃許可證》
4.《建筑工程施工許可證》(又稱建筑工程開工證)
5.《商品房預售許可證》
詳細步驟介紹:
一 、《建設用地規劃許可證》和《國有土地使用證》
1.選址意見書(審查用地性質、范圍、面積是否符合城市整體規劃)
程序:
(1)企業提供申請報告、規劃申請表、總平面圖、土地轉讓協議或國有土地使用證、企業營業執照和資質證書,報規劃局用地處
(2)用地處轉總工室審查
(3)報局業務會批準
(4)領取選址意見書
2.規劃院實地測量,并處定位圖,收取測量費
3.建設用地規劃許可證(規劃局審批下發)
(1)企業持定位圖、選址意見書、用地申請到用地處審查
(2)主管局長、主管局市長批準
(3)打交費單,領取用地規劃許可證
4.國有土地使用證(由土地局審批下發)
(1)建設單位持用地申請、航測圖、平面布置圖、土地轉讓協議、建設用地規劃許可證、土地轉讓雙方的有關證件、委托書到土地局土地利用處
(2)土地評估
(3)土地局測量對現場測量,出定界圖
(4)繳納土地出讓金和契稅,領取國有土地使用證
二、《建設工程規劃許可證》
1. 市消防支隊蓋章
(1) 持消防審批表、全套施工圖到市消防支隊建審科進行審批
(2) 核發消防設計審核意見書、建設工程規劃許可證申請表蓋章
2.人防證明市人防辦六十個工作日辦理自建手續
3.房地產開發建設規模 建設單位持單位申請、總平面圖、資金證明到市房管局規劃發展處辦理
4.建設工程規劃許可證(由規劃局規劃處下發)
(1)建設單位持申請報告、建設工程規劃申請表(消防蓋章)、土地征、用地規劃許可證、總平面圖、全套施工圖、四套航測圖到市規劃局建管處
(2)以上資料由總工室、局業務會審定后報處長、局長簽字
(3)打交費單交費,領取建設規劃許可證、放驗線通知單
5.放線報告
持放線通知和施工圖、紅線圖到規劃院測量隊放線。
三、《建設工程施工許可證》(由建委審批下發)
1. 報建
提供資料:建設工程規劃許可證、用地規劃許可證、土地證、報建申請表4份、紅線圖、施工圖、規劃總平面圖
2. 現場勘察(3個工作日)
3. 組織招標
4. 施工圖審查
5. 施工合同審查
6. 交費,辦理建設工程施工許可證(建設施工合同、勘察合同、設計合同、監理合同、報建申請表、工程預算書、中標通知書、交費*** )
四、《商品房預售許可證》(由市房管局預售科下發)