<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于WinAVR的DS18B20源程序

基于WinAVR的DS18B20源程序

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò ) 收藏
#ifndef _DS18B20_C_

#define _DS18B20_C_

本文引用地址:http://dyxdggzs.com/article/201611/320578.htm


#define DQ_18B20 (1<<3) // PD3
#define DQ_TO_0() (DDRD |= DQ_18B20) // PD3=’0′
#define DQ_TO_1() (DDRD &= ~DQ_18B20) // PD3=’float’
#define DQ_status() (PIND & DQ_18B20) // read PD3 pin


#ifndef CPU_CRYSTAL
#define CPU_CRYSTAL (11.0592)
#endif


#define wait_us(us)
_delay_loop_2((INT16U)((us)*CPU_CRYSTAL/4))


// 1個(gè)初始化模塊
void ds18b20_config(void); // 配置端口

// 3個(gè)基本模塊
BOOL ds18b20_reset(void); // 復位DS18B20
void ds18b20_write(INT8U dat); // 寫(xiě)字節到DS18B20
INT8U ds18b20_read(void); // 讀字節從DS18B20

// 2個(gè)應用模塊
void convert_T(void); // 啟動(dòng)溫度轉換
INT16U read_T(void); // 讀取轉換值


void ds18b20_config(void)
{
DDRD &= ~DQ_18B20; // 輸入模式(上電時(shí)為高電平)
PORTD &= ~DQ_18B20; // 輸出鎖存器寫(xiě)0,以后不再更改
}


BOOL ds18b20_reset(void)
{
BOOL bus_flag;

DQ_TO_0(); // 設置1-wire總線(xiàn)為低電平(占領(lǐng)總線(xiàn))…


wait_us(490); // 490us

cli(); // 下面這段時(shí)間要求比較嚴格,為保險起見(jiàn),關(guān)中斷
DQ_TO_1(); // 設置1-wire總線(xiàn)為高電平(釋放總線(xiàn))


wait_us(67.5); // 最佳時(shí)間: 60us+7.5us!(忙延時(shí),只是一種策略)

// 探測總線(xiàn)上是否有器件
if(DQ_status()) bus_flag=FAIL; // 復位單總線(xiàn)但沒(méi)有發(fā)現有器件在線(xiàn)
else bus_flag=SUCC; // 復位單總線(xiàn)并發(fā)現有器件在線(xiàn)

sei(); // 退出臨界代碼區(開(kāi)中斷)


wait_us(490-67.5); // 490-67.5us

return(bus_flag);
}


void ds18b20_write(INT8U dat)
{
INT8U count;

// 每個(gè)字節共8位,一次發(fā)一位
for(count=0; count<8; count++) {
cli(); // 保證絕對不會(huì )發(fā)生中斷!
DQ_TO_0(); // 設置1-wire總線(xiàn)為低電平
wait_us(2); // about 2us

if(dat&0×01) DQ_TO_1(); // 并串轉換,先低位后高位
else DQ_TO_0();
dat >>= 1; // 下一位做好準備

// 60us~120us(實(shí)際不能到120us, 因為其它語(yǔ)句也用時(shí)間了!)
wait_us(62); // 62us

DQ_TO_1();
sei(); // 恢復系統中斷
wait_us(2); // 2us
}
}


INT8U ds18b20_read(void)
{
INT8U count,dat;

dat = 0×00; // 數據接收準備

// 每個(gè)字節共8位,一次收一位
for(count=0; count<8; count++) {
cli(); // 保證絕對不會(huì )發(fā)生中斷!

// 從總線(xiàn)拉低到讀總線(xiàn)狀態(tài),不能大于15us!
DQ_TO_0(); // 設置1-wire總線(xiàn)為低電平(拉低總線(xiàn)以同步)
wait_us(2); // 2us
DQ_TO_1(); // 設置1-wire總線(xiàn)為高電平(釋放總線(xiàn))
wait_us(4); // 4us
dat >>= 1;
if(DQ_status()) dat|=0×80; // 讀取總線(xiàn)電平,先收低位再收高位

sei(); // 恢復系統中斷
wait_us(62); // 必須大于60us
}
return(dat);
}


void convert_T(void)
{
if(ds18b20_reset()==SUCC) { // 如果復位成功
ds18b20_write(0xcc); // 跳過(guò)多器件識別
ds18b20_write(0×44); // 啟動(dòng)溫度轉換
}
}


INT16U read_T(void)
{
INT16U value=0;

if(ds18b20_reset()==SUCC) { // 如果復位成功
ds18b20_write(0xcc); // 跳過(guò)多器件識別
ds18b20_write(0xbe); // 讀暫存器
value = (INT16U)ds18b20_read(); // 低字節
value += (INT16U)(ds18b20_read())<<8; // 高字節
}
return(value);
}

#endif



關(guān)鍵詞: WinAVRDS18B20源程

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>