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

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

?? ds18b20s.c

?? msp430+雙ds18b20 成功測溫度+響應時間 c程序
?? C
字號:
#define DS18B20_DIR P2DIR
#define DS18B20_OUT P2OUT
#define DS18B20_IN P2IN
//***********************************************
#define TRUE 1
#define FALSE !TRUE
//***********************************************
unsigned char Ds18b20_read_byte(void);//從 1-wire 總線上讀取一個字節
void delay(unsigned int);//延時
unsigned char Ds18b20_present(void);//ds18b20復位和存在脈沖
void Ds18b20_write_byte(unsigned char);//向 1-WIRE 總線上寫一個字節
//***********************************************
// GLOBAL VARIABLES
//static unsigned char ROM[8]; // ROM Bit
//static unsigned char lastDiscrep = 0; // last discrepancy
//static unsigned char doneFlag = 0; // Done flag
//static unsigned char FoundROM[10][8]; // table of found ROM codes
//static unsigned char numROMs;
//static unsigned char dowcrc;
//***********************************************
static unsigned char ow_crc(unsigned char);
//***********************************************
static const unsigned char dscrc_table[] = 
{
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
};
//***********************************************
static unsigned char Next(void);

//signed int Ds18b20_resault[10];
//static unsigned char numDS18B20s = 0;
//static unsigned char ROMCODE[2][8];
//static char tmpbuf[100] ;
//static unsigned char DS18b20_chanle = 0;

/************************************************
函 數 名: delay(unsigned int)
功 能:延時
說 明:
調 用:
全局變量:
入口參數:unsigned int
出口參數:無
返 回 值:無
************************************************/
//延時
void delay(unsigned int useconds)
{
for(; useconds > 0; useconds--)
{
_NOP();
_NOP();
}
}
/************************************************
函 數 名: Ds18b20_present()
功 能: ds18b20復位和存在脈沖
說 明:
調 用:
全局變量:
入口參數: 無
出口參數:無
返 回 值: unsigned char(0: presence, 1: no part)
************************************************/
//ds18b20復位
unsigned char Ds18b20_present(void)
{
unsigned char presence;
DS18B20_OUT |= DS18B20;
DS18B20_OUT &= ~DS18B20; //pull DQ line low
DS18B20_DIR |= DS18B20; //SET TO OUTPUT
delay(100); //leave it low for 600us
DS18B20_OUT |= DS18B20; //allow line to return high
delay(4); //wait for presence
DS18B20_DIR &= ~DS18B20; //SET TO INPUT
presence = DS18B20_IN & DS18B20; //get presence signal
delay(100); //wait for end of timeslot
if(presence)
return(FALSE);
else
return(TRUE); //presence signal returned
} //1 = presence, 0 = no part
/************************************************
函 數 名: Ds18b20_read_bit()
功 能:從 1-wire 總線上讀取一個位
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:unsigned char
************************************************/
//從 1-wire 總線上讀取一個位
unsigned char Ds18b20_read_bit(void)
{
unsigned char bit = 0;
DS18B20_OUT &= ~DS18B20; //pull DQ low to start timeslot
DS18B20_DIR |= DS18B20; //SET TO OUTPUT
_NOP();
_NOP();
DS18B20_DIR &= ~DS18B20; //SET TO INPUT
if(DS18B20_IN & DS18B20)
bit = 1;
else
bit = 0;
delay(8); //wait for rest of timeslot
return(bit);
}
/************************************************
函 數 名: Ds18b20_read_byte()
功 能:從 1-wire 總線上讀取一個字節
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:unsigned char
************************************************/
//從 1-wire 總線上讀取一個字節
unsigned char Ds18b20_read_byte(void)
{
unsigned char i;
unsigned char value = 0;
for(i = 8; i > 0; i--)
{
value >>= 1;
DS18B20_OUT &= ~DS18B20; //pull DQ low to start timeslot
DS18B20_DIR |= DS18B20; //SET TO OUTPUT
_NOP();
_NOP();
DS18B20_DIR &= ~DS18B20; //SET TO INPUT
if(DS18B20_IN & DS18B20)
value |= 0x80;
else
value &= ~0x80;
delay(8); //wait for rest of timeslot
}
return(value);
}
/************************************************
函 數 名: Ds18b20_write_bit(unsigned char)
功 能:向 1-WIRE 總線上寫一個位
說 明:
調 用:
全局變量:
入口參數:unsigned char
出口參數:無
返 回 值:無
************************************************/
//向 1-WIRE 總線上寫一個位
void Ds18b20_write_bit(unsigned char bit)
{
DS18B20_DIR |= DS18B20; //SET TO OUTPUT
DS18B20_OUT &= ~DS18B20; //pull DQ low to start time slot
_NOP();
if(bit & 0x01)
DS18B20_OUT |= DS18B20;
else
DS18B20_OUT &= ~DS18B20;
delay(12); //hold value for remainder of time slot
DS18B20_OUT |= DS18B20;
delay(10);
}
/************************************************
函 數 名: Ds18b20_write_byte(unsigned char)
功 能:向 1-WIRE 總線上寫一個字節
說 明:
調 用:
全局變量:
入口參數:unsigned char
出口參數:無
返 回 值:無
************************************************/
//向 1-WIRE 總線上寫一個字節
void Ds18b20_write_byte(unsigned char val)
{
unsigned char i;
DS18B20_DIR |= DS18B20; //SET TO OUTPUT
for(i = 8; i > 0; i--) //writes byte, one bit at a time
{
DS18B20_OUT &= ~DS18B20; //pull DQ low to start time slot
_NOP();
if(val & 0x01)
DS18B20_OUT |= DS18B20;
else
DS18B20_OUT &= ~DS18B20;
delay(12); //hold value for remainder of time slot
DS18B20_OUT |= DS18B20;
val >>= 1;
}
delay(10);
} 

xuanyu 2006-11-29 09:19 

--------------------------------------------------------------------------------

/************************************************
函 數 名: Ds18b20_Send_MatchRom()
功 能:匹配ROM
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:無
************************************************/
//匹配ROM
void Ds18b20_Send_MatchRom(void)
{
unsigned char i;
Ds18b20_present();
Ds18b20_write_byte(0x55);
for(i = 0; i < 8; i++)
{
Ds18b20_write_byte(FoundROM[DS18b20_chanle][i]);
}
}
/************************************************
函 數 名: Ds18b20_Convert_commond()
功 能:轉換命令
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:無
************************************************/
void Ds18b20_Convert_commond(void)
{
Ds18b20_present();
Ds18b20_write_byte(0xCC); //Skip ROM
Ds18b20_write_byte(0x44); // Start Conversion
}
/************************************************
函 數 名: Ds18b20_Write_Scratchpad()
功 能:寫暫存器
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:無
************************************************/
//寫暫存器
void Ds18b20_Write_Scratchpad(void)
{
unsigned char i;
unsigned char buf[9];
buf[0] = 0;
buf[1] = 0;
buf[2] = 127;

Ds18b20_present();
Ds18b20_write_byte(0xCC); //Skip ROM

Ds18b20_write_byte(0x4E);
for(i = 0; i < 3; i++)
{
Ds18b20_write_byte(buf[i]);
}
}
/************************************************
函 數 名: Ds18b20_Copy_Scratchpad()
功 能:復制暫存器
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:無
************************************************/
//復制暫存器
void Ds18b20_Copy_Scratchpad(void)
{
Ds18b20_present();
Ds18b20_Send_MatchRom();
Ds18b20_write_byte(0x48);
}
/************************************************
函 數 名: Ds18b20_Read_ScratchPad()
功 能:讀暫存器
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:無
************************************************/
//讀暫存器
void Ds18b20_Read_ScratchPad(void)
{
int tmp;
unsigned char buf[9];
Ds18b20_present();
Ds18b20_Send_MatchRom();
Ds18b20_write_byte(0xBE);
for(tmp = 0; tmp < 9; tmp++)
{
buf[tmp] = Ds18b20_read_byte();
}
dowcrc = 0;
for(tmp = 0; tmp < 9; tmp++)
ow_crc(buf[tmp]);
if(dowcrc)
return;
if(buf[4] != 127)
{
Ds18b20_Write_Scratchpad();
Ds18b20_Copy_Scratchpad();
return;
}
tmp = buf[1]* 256 + buf[0];

if(tmp < 0)
{
Ds18b20_resault[DS18b20_chanle] = -((~tmp)+ 1);
}
else
{
Ds18b20_resault[DS18b20_chanle] = tmp;
}
}
/************************************************
函 數 名: ow_crc()
功 能:1-wire CRC校驗
說 明:
調 用:
全局變量:
入口參數:數據
出口參數:無
返 回 值:無
************************************************/
// ONE WIRE CRC
static unsigned char ow_crc(unsigned char x)
{
dowcrc = dscrc_table[dowcrc ^ x];
return dowcrc;
}
/************************************************
函 數 名: Next()
功 能:在1-wire上尋找下一個器件
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:
************************************************/
// The Next function searches for the next device on the 1-wire bus. If
// there are no more devices on the 1-wire then false is returned.
static unsigned char Next(void)
{
unsigned char m = 1; // ROM Bit index(id_bit_number)
unsigned char n = 0; // ROM Byte index
unsigned char k = 1; // bit mask
unsigned char x = 0;
unsigned char discrepMarker = 0; // discrepancy marker(last_zero)
unsigned char g; // Output bit (search_direction)
unsigned char nxt; // return value
unsigned char flag;

nxt = FALSE; // set the next flag to false
dowcrc = 0; // reset the dowcrc

flag = !Ds18b20_present(); // reset the 1-wire
if(flag || doneFlag) // no parts -> return false
{
lastDiscrep = 0; // reset the search
return FALSE;
}

Ds18b20_write_byte(0xF0); // send SearchROM command

do // for all eight bytes
{
x = 0;
if(1 == Ds18b20_read_bit())
x = 2;
if(1 == Ds18b20_read_bit() == 1)
x |= 1; // and its complement
if(x == 3) 
{
break;// 搜索到的位都是1,there are no devices on the 1-wire
} 
else
{
if(x > 0) // all devices coupled have 0 or 1
g = x >> 1; // 寫一個位來搜索,bit write value for search
else
{
// if this discrepancy is before the last discrepancy 
//on a previous Next then pick the same as last time
if(m < lastDiscrep)
g = ((ROM[n] & k) > 0);
else
g = (m == lastDiscrep);
// if equal to last pick 1
// if not then pick 0 if 0 was picked then record 
// position with mask k
if(g == 0)
discrepMarker = m;
}
if(g == 1)
ROM[n] |= k;// isolate bit in ROM[n] with mask k
else
ROM[n] &= ~k;

Ds18b20_write_bit(g); // ROM search write
m++; // increment bit counter m
k <<= 1; // and shift the bit mask k
if(k == 0) // if the mask is 0 then go to new ROM
{
// byte n and reset mask
ow_crc(ROM[n]); // accumulate the CRC
n++;
k = 1;
}
}
}
while(n < 8); //loop until through all ROM bytes 0-7
if(m < 65 || dowcrc) // if search was unsuccessful then
lastDiscrep = 0; // reset the last discrepancy to 0
else
{
// search was successful, so set lastDiscrep,
// lastOne, nxt
lastDiscrep = discrepMarker;
doneFlag = (lastDiscrep == 0);
nxt = TRUE; // indicates search is not complete yet, more parts remain
}
return nxt;
}
/************************************************
函 數 名: FIRST()
功 能:
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:
************************************************/
// FIRST
// The First function resets the current state of a ROM search and calls
// Next to find the first device on the 1-wire bus.
static unsigned char First(void)
{
lastDiscrep = 0; // reset the rom search last discrepancy global
doneFlag = FALSE;
return Next(); // call Next and return its return value
}
/************************************************
函 數 名: FindDevices()
功 能:
說 明:
調 用:
全局變量:
入口參數:無
出口參數:無
返 回 值:無
************************************************/
//FIND DEVICES
void FindDevices(void)
{
unsigned char m;

numDS18B20s = 0;
if(Ds18b20_present()) //Begins when a presence is detected
{ 
if(First()) //Begins when at least one part is found
{
numDS18B20s = 0;
do
{
for(m = 0; m < 8; m++)
{
FoundROM[numDS18B20s][m] = ROM[m];
}
while(Next()&&(numDS18B20s < 10));
}
else
ProgramFlagCTL |= ERROR_FLAG;
}
else
ProgramFlagCTL |= ERROR_FLAG;
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区欧美二区| 天使萌一区二区三区免费观看| 美女网站一区二区| 日韩欧美一级精品久久| 久久不见久久见免费视频7| www激情久久| 成人av在线网| 亚洲激情图片小说视频| 欧美日韩综合在线| 美洲天堂一区二卡三卡四卡视频| 久久男人中文字幕资源站| 国产成人一区在线| 亚洲精品视频在线观看网站| 制服丝袜在线91| 国内精品伊人久久久久av一坑 | 国产精品99久久久久久久女警 | 欧美三级视频在线| 美女视频黄a大片欧美| 精品国产91亚洲一区二区三区婷婷| 国产成人午夜精品影院观看视频| 一区二区中文视频| 欧美午夜电影网| 黄页网站大全一区二区| 《视频一区视频二区| 欧美日韩欧美一区二区| 国产曰批免费观看久久久| 中文字幕综合网| 久久综合视频网| 91蜜桃视频在线| 蜜桃视频一区二区| 亚洲人成伊人成综合网小说| 欧美一区二区三区电影| 99久久久国产精品| 日本一道高清亚洲日美韩| 日本一区二区三区四区| 欧美男女性生活在线直播观看| 韩日精品视频一区| 亚洲成a人v欧美综合天堂下载| 久久久99精品免费观看| 欧美日韩一区二区三区免费看| 国产一区二区三区日韩| 亚洲成人黄色影院| 18成人在线观看| 精品国产123| 欧美日韩成人综合在线一区二区| 国产99一区视频免费| 人人狠狠综合久久亚洲| 亚洲欧美区自拍先锋| 久久久久久久久97黄色工厂| 欧美男男青年gay1069videost| 99久久精品免费精品国产| 玖玖九九国产精品| 亚洲国产一区二区视频| 中文字幕一区二区5566日韩| 亚洲精品一区二区三区在线观看| 在线观看欧美黄色| 91在线观看污| 国产成a人亚洲| 精品制服美女丁香| 午夜精品免费在线| 亚洲国产精品一区二区www| 中文字幕亚洲欧美在线不卡| 久久蜜桃av一区精品变态类天堂| 在线播放国产精品二区一二区四区| 91亚洲精品久久久蜜桃网站| 大桥未久av一区二区三区中文| 经典一区二区三区| 久久成人久久爱| 人人超碰91尤物精品国产| 天堂久久久久va久久久久| 亚洲一区二区三区四区在线| 一区二区三区四区激情| 亚洲欧美一区二区三区孕妇| 亚洲视频一二三| 亚洲视频在线一区二区| 国产精品电影院| 亚洲色图在线看| 亚洲自拍另类综合| 亚洲成人在线网站| 亚洲福利视频一区二区| 午夜精品久久久久久久蜜桃app| 性久久久久久久久久久久| 午夜视频一区二区| 亚洲国产精品嫩草影院| 午夜激情一区二区三区| 久久精品噜噜噜成人88aⅴ| 麻豆精品久久久| 欧美色图一区二区三区| 色呦呦网站一区| 欧美做爰猛烈大尺度电影无法无天| 91黄色小视频| 欧美日本一道本在线视频| 91精选在线观看| www久久精品| 中文字幕亚洲一区二区va在线| 亚洲卡通动漫在线| 爽好多水快深点欧美视频| 美女任你摸久久| 粉嫩一区二区三区性色av| 色婷婷国产精品综合在线观看| 欧美日韩一区二区三区不卡| 日韩欧美一级二级三级久久久| 国产情人综合久久777777| 亚洲婷婷国产精品电影人久久| 亚洲一区二区三区免费视频| 免费精品视频最新在线| 国产不卡在线视频| 在线观看一区日韩| 日韩欧美高清一区| 中文字幕在线不卡一区| 亚洲成人在线网站| 国产二区国产一区在线观看| 91蜜桃免费观看视频| 欧美一区二区网站| 日本一区二区三区视频视频| 亚洲一区二区三区小说| 国产一区二区三区| 在线看日韩精品电影| 久久久亚洲综合| 亚洲高清免费一级二级三级| 国产精品1区二区.| 欧美性受极品xxxx喷水| 精品成人佐山爱一区二区| 亚洲欧美日韩电影| 国产精品一级黄| 欧美日韩在线直播| 日本一区二区电影| 日本免费新一区视频| 91麻豆6部合集magnet| 精品久久国产97色综合| 亚洲精品成人a在线观看| 国产米奇在线777精品观看| 欧美日韩美少妇| 国产精品久久久久精k8| 久久激五月天综合精品| 欧美系列亚洲系列| 日本一区二区成人在线| 精品中文字幕一区二区小辣椒| 在线观看视频91| 亚洲欧美一区二区在线观看| 国产在线播放一区三区四| 91麻豆精品国产91久久久更新时间| 亚洲天天做日日做天天谢日日欢| 激情六月婷婷久久| 欧美高清精品3d| 亚洲小说春色综合另类电影| 成人美女视频在线观看| 精品女同一区二区| 蜜桃久久av一区| 91精品久久久久久蜜臀| 亚洲一区在线视频| 色狠狠综合天天综合综合| 国产精品久久久久毛片软件| 精品午夜久久福利影院| 日韩欧美在线综合网| 日本不卡免费在线视频| 欧美日韩一级二级三级| 洋洋av久久久久久久一区| 91丨porny丨最新| 国产精品高清亚洲| 成人网男人的天堂| 国产日韩精品久久久| 国产精品一线二线三线精华| 日韩视频免费直播| 久久国产麻豆精品| 国产精品久久午夜夜伦鲁鲁| 国产精品一级二级三级| 国产亚洲视频系列| 国产精品99久久久久| 日本一区二区免费在线| 懂色av噜噜一区二区三区av| 国产女主播视频一区二区| 国产成人av一区| 国产精品久久久久久久裸模| www.日韩av| 亚洲国产美国国产综合一区二区| 欧美性感一区二区三区| 日韩国产欧美在线视频| 日韩免费看网站| 国产精品一品二品| 中文字幕在线观看不卡视频| 972aa.com艺术欧美| 一个色综合网站| 678五月天丁香亚洲综合网| 青青草一区二区三区| 2021国产精品久久精品| 成人激情图片网| 亚洲综合在线观看视频| 91精品国产综合久久精品麻豆| 久久99久久99| 国产精品久久看| 欧美三级日韩在线| 毛片av一区二区| 国产精品网曝门| 在线视频观看一区| 久久精品国产99| 亚洲人成伊人成综合网小说| 欧美电影在哪看比较好| 国产精品一区在线观看你懂的| 亚洲精品欧美在线|