📄 exp.c
字号:
/*
* exp.c
*
* 读取室温(DS18B20)
*
*
*
* 陈真勇(SA01010010)
* w3wind@sina.com or
* zychen@ustc.edu.cn
* 中国科学技术大学自动化系
* 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;/*产生读信号*/
_nop_();
_nop_();
DQ = 1;/*准备输入数据*/
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -