<noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><delect id="ixm7d"></delect><bdo id="ixm7d"></bdo><rt id="ixm7d"></rt><bdo id="ixm7d"></bdo><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"><rt id="ixm7d"></rt></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d">

ds18b20簡單介紹范文

2023-10-06

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. 交費,辦理建設工程施工許可證(建設施工合同、勘察合同、設計合同、監理合同、報建申請表、工程預算書、中標通知書、交費*** )

四、《商品房預售許可證》(由市房管局預售科下發)

上一篇:政治教育對照檢查材料范文下一篇:七上英語unit4教案范文

91尤物免费视频-97这里有精品视频-99久久婷婷国产综合亚洲-国产91精品老熟女泄火