📄 ds18b.c
字号:
//ds18.c
#include<ds18b20.h>
#define NNOP_1uS _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
unsigned char temp1[8];
void Delay10us(unsigned int n)
{
while(n--)
{
}
}
void delay(word useconds)
{
for(;useconds>0;useconds--);
}
byte ow_reset(void )
{
byte presence;
P2DIR|=DQ;
P2OUT&=~DQ;
delay(900); //480us
P2OUT|=DQ;
delay(4);
P2DIR&=~DQ;
if((P2IN&DQ)==DQ)
{
presence=1;
}
else
{
presence=0;
}
delay(25);
return presence;
}
void write_bit(unsigned char bitval)
{
P2DIR|=DQ;
P2OUT&=~DQ;
if((bitval&0x01)==1)
{
P2OUT|=DQ;
}
else
P2OUT&=~(DQ);
delay(20);
// P2OUT|=DQ;
P2DIR&=~(DQ);
delay(25);
}
unsigned char read_bit()
{
byte i;
byte value=0;
for(i=2;i>0;i--)
{
value<<=1;
//DQ=read_bit();
P2DIR|=DQ;
//P2OUT|=DQ;
P2OUT&=~DQ;
P2DIR&=~DQ;
if((P2IN&DQ)==DQ)
value|=0x01;
delay(6);
}
delay(25);
return value;
}
byte read_byte(void)
{
byte i;
byte value=0;
for(i=8;i>0;i--)
{
value>>=1;
//DQ=read_bit();
P2DIR|=DQ;
//P2OUT|=DQ;
_NOP();
_NOP();
_NOP();
_NOP();
P2OUT&=~DQ;
P2DIR&=~DQ;
_NOP();
if((P2IN&DQ)==DQ)
value|=0x80;
delay(1);
}
delay(25);
return value;
}
void write_byte(unsigned char val)
{
byte i;
for(i=8;i>0;i--)
{
P2DIR|=DQ;
P2OUT&=~DQ;
if((val&0x01)==1)
{
P2OUT|=DQ;
}
else
P2OUT&=~(DQ);
delay(20);
// P2OUT|=DQ;
P2DIR&=~(DQ);
val=val/2;
}
delay(15);
}
int Read_Temperature_jd(unsigned char *id)
{
byte h,l;
word t;
_DINT();
ow_reset();
/*write_byte(0x55);
for(j=0;j<8;j++)
{
write_byte(*id++);
}
id=id-8;*/
write_byte(0xcc);
write_byte(0xbe);
l=read_byte();
h=read_byte();
t=h;
t<<=8;
t+=l;
/* delay(3000);
delay(3000);
delay(3000);
delay(3000);
delay(3000);
delay(3000);
delay(3000);
delay(3000);*/
ow_reset();
/* write_byte(0x55);
for(j=0;j<8;j++)
{
write_byte(*id++);
}
id=id-8;*/
write_byte(0xcc);
write_byte(0x44);
_EINT();
return t;
}
int Read_Temperature(unsigned char *id)
{
byte h,l,j,cpu_sr;
word t;
OS_ENTER_CRITICAL();
ow_reset();
write_byte(0x55);
for(j=0;j<8;j++)
{
write_byte(*id++);
}
id=id-8;
write_byte(0x44);
OSTimeDly(200);
ow_reset();
write_byte(0x55);
for(j=0;j<8;j++)
{
write_byte(*id++);
}
id=id-8;
write_byte(0xbe);
l=read_byte();
h=read_byte();
t=h;
t<<=8;
t+=l;
OS_EXIT_CRITICAL();
return t;
}
int Read_ZC(void)
{
unsigned char i;
p_zc=zc;
_DINT();
ow_reset();
write_byte(0xcc);
write_byte(0xbe);
for(i=0;i<8;i++)
{
*p_zc++=read_byte();
}
p_zc=zc;
ow_reset();
_EINT();
return (0);
}
unsigned char DS18b20_search_rom(unsigned char *id)
{
unsigned char j,k,i;
union myb{
struct b20_b
{
unsigned char b1:1;
unsigned char b2:1;
}b;
unsigned char B;
}myb1;
//p_zc=zc;
_DINT();
if(ow_reset())return(2);
_NOP();
_NOP();
_NOP();
write_byte(0xf0);
for(j=8;j>0;j--)
{
for(i=8;i>0;i--)
{
myb1.B=read_bit();
switch(myb1.B)
{
//case 0:write_bit(q);q>>=1;break;
case 0:
if((j*8-i)<*p_key)
{
write_bit(1);
*p_key=j*8-i;
k>>=1;
k|=0x80;
}
else
{
write_bit(0);
k>>=1;
}
*p_key++;
break;
/* case 0:
write_bit(diff);
k>>1;
if(diff&0x01)
k|=0x08
diff>>1;
break;*/
case 1:write_bit(0);break;
case 2:write_bit(1);break;
case 3:_EINT();return err;
}
if(myb1.B!=0)
{
k>>=1;
if(myb1.b.b2==1)
k|=0x80;
}
}//for(i=0;i<8;i++)
*id++=k;
}//for(j=0;j<8;j++)
p_key=key;
_EINT();
return (4);
}
void search_rom()
{
unsigned char T1;
T1=DS18b20_search_rom(ID4);
if(T1==2)
{
dis_str(4,1,"123");
}
if(key[1]!=0xff)
{
key[0]=0xff;
dis_str(2,8,"ok");
}
T1=DS18b20_search_rom(ID3);
if(key[1]==0xff)
{
dis_str(1,8,"err");
}
T1=DS18b20_search_rom(ID2);
}
int Read_ID(void)
{
unsigned char i;
p_zc=zc;
_DINT();
ow_reset();
write_byte(0x33);
for(i=0;i<8;i++)
{
*p_zc++=read_byte();
}
ow_reset();
_EINT();
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -