📄 ds18b20.c
字号:
#include "reg52.h"
#include "delay.h"
#include "intrins.h"
sbit dq=P1^4;
void rest()
{
dq=0;
delay_n10us(60);
dq=1;
delay_n10us(60);
}
void write1()
{
dq=0;
_nop_();_nop_();
_nop_();_nop_();
dq=1;
delay_n10us(7);
}
void write0()
{
dq=0;
delay_n10us(8);
dq=1;
}
bit read()
{
bit temp;
dq=0;
_nop_();_nop_();
_nop_();
dq=1;_nop_();
if(dq)temp=1;
else temp=0;
delay_n10us(8);
return temp;
}
void write_18b20_data(unsigned char date)
{
unsigned char m;
dq=1;
for(m=0;m<8;m++)
{
if(date&0x01)write1();
else write0();
date=date>>1;
}
}
unsigned char read_18b20_data()
{
unsigned char m;
unsigned char date=0;
dq=1;
for(m=0;m<8;m++)
{
date=date>>1;
if(read())date=date|0x80;
}
return date;
}
void ini_18b20()
{
rest();
write_18b20_data(0xcc); //跳过ROM匹配
write_18b20_data(0x4e); //发写寄存器指令
write_18b20_data(0x7d); //写高温报警125
write_18b20_data(0xc9); //写低温报警-55
write_18b20_data(0x00); //写转换模式10位模式,100m
}
unsigned char read_tempuature()
{
unsigned char htem,ltem,tempuature=0;
rest();
write_18b20_data(0xcc); //跳过ROM匹配
write_18b20_data(0x44); //发送转换指令
delay_ms(150);
rest();
write_18b20_data(0xcc); //跳过ROM匹配
write_18b20_data(0xbe); //发送读RAM指令
ltem=read_18b20_data(); //读温度低位
htem=read_18b20_data(); //读间谍高位
rest();
htem=htem<<5;
ltem=ltem>>3;
tempuature=tempuature|htem;
tempuature=tempuature|ltem;
return tempuature;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -