📄 ds1820.c
字号:
#include "reg51.h"
#include "intrins.h"
sbit DQ = P2^7;
void delay (unsigned int us)
{
unsigned int s;
for (s = 0; s < us; s++);
}
unsigned char ow_reset(void)
{
unsigned char presence;
DQ = 0; //pull DQ line low
delay(29); // leave it low for 480μs
DQ = 1; // allow line to return high
delay(3); // wait for presence
presence = DQ; // get presence signal
delay(25); // wait for end of timeslot
return(presence); // presence signal returned
} // presence = 0, no part = 1
unsigned char read_bit(void)
{
unsigned char i;
DQ = 0; // pull DQ low to start timeslot
DQ = 1; // then return high
for (i = 0; i < 3; i++); // delay 15μs from start of timeslot
return(DQ); // return value of DQ line
}
void write_bit(unsigned char bitval)
{
DQ = 0; // pull DQ low to start timeslot
if(bitval==1) DQ =1; // return DQ high if write 1
delay(5);// hold value for remainder of timeslot
DQ = 1;
}
unsigned char read_byte(void)
{
unsigned char i;
unsigned char value = 0;
for( i = 0; i < 8; i++)
{
if( read_bit() )value|=0x01<<i;
delay(6);
}
return(value);
}
void write_byte(char val)
{
unsigned char i;
unsigned char temp;
for (i = 0; i < 8; i++) // writes byte, one bit at a time
{
temp = val>>i; // shifts val right ‘i’ spaces
temp &= 0x01; // copy that bit to temp
write_bit(temp); // write bit in temp into
}
delay(5);
}
/*
void main(void)
{
unsigned char cTh,cTl;
while(1)
{
ow_reset();
write_byte(0xcc);
write_byte(0x44);
ow_reset();
write_byte(0xcc);
write_byte(0xbe);
cTl=read_byte();
cTh=read_byte();
_nop_();
_nop_();
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -