?? exp.c
字號:
/*
* exp.c
*
* 讀取室溫(DS18B20)
*
*
*
* 陳真勇(SA01010010)
* w3wind@sina.com or
* zychen@ustc.edu.cn
* 中國科學(xué)技術(shù)大學(xué)自動化系
* 2002/6/12
*/
#include "type.h"
#include "link.h"
#include "delay.h"
#include <intrins.h>
#include <reg52.h>
void init_DS18B20()
{
BYTE i;
/*初始脈沖*/
DQ = 0;
for(i=0;i<50;i++){
delay10us();
}
DQ = 1;
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
while( !DQ ){;}
}
void write_a_byte(BYTE dat)
{
BYTE i;
BYTE mask = 1;
for(i=0;i<8;i++){
if(dat & mask){
DQ = 0;
_nop_();
_nop_();
DQ = 1;
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
}
else{
DQ = 0;
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
DQ = 1;
_nop_();
_nop_();
}
mask <<= 1;
}
}
BYTE read_byte()
{
BYTE j;
BYTE res = 0;
BYTE mask = 1;
for(j=0;j<8;j++){
DQ = 1;
_nop_();
_nop_();
DQ = 0;/*產(chǎn)生讀信號*/
_nop_();
_nop_();
DQ = 1;/*準(zhǔn)備輸入數(shù)據(jù)*/
delay10us();
delay10us();
if(DQ)
res |= mask;
mask <<= 1;
}
return res;
}
UINT read_ds_data()
{
BYTE b2,b1;
EA = 0;/*需要禁止中斷*/
init_DS18B20();
write_a_byte(0xcc);/* skip rom command */
write_a_byte(0x44);/* convert temperature */
while(! DQ ){;}/* read busy status */
init_DS18B20();
write_a_byte(0xcc);
write_a_byte(0xbe);
b1 = read_byte();
b2 = read_byte();
EA = 1;
return (b2 << 8) + b1;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -