📄 read_ds18b20.bak
字号:
sbit TMDAT = P3^3; //根据实实际情况设定
unsigned char tmpf; //结果是否为负温,“0”为正温,“1”为负温
//延时部分
void dmsec (unsigned int count)
{
unsigned int i;
while (count)
{
i = 115;
while (i>0) i--;
count--;
}
}
//发送复位
void tmreset (void)
{
unsigned int i;
TMDAT = 1;
i++;
TMDAT = 0;
i = 65;
while (i>0) i--; // 延时 510uS
TMDAT = 1;
i = 8; //延时60uS
while (i>0) i--;
TMDAT = 1;
}
// 等待存在脉冲
/*unsigned char tmpre (void) //判断器件是否存在
{
unsigned int i; //
i=6000;
while (TMDAT==1&&i>0){i--;} //
if(i==0)return 0;
else
{
i=6000;
while (TMDAT==0&&i>0){i--;} //
if(i==0){return 0;TMDAT=1;}
else return 1;
}
i = 4; while (i>0) i--;
}*/
// 读一位
bit tmrbit (void)
{
unsigned int i;
bit dat;
TMDAT = 0; i++;
TMDAT = 1; i++; i++; //微量延时
dat = TMDAT;
//i = 8; while (i>0) i--; // 延时
return (dat);
}
//读一个字节
unsigned char tmrbyte (void)
{
unsigned char i,j,dat;
dat = 0;
for (i=1;i<=8;i++)
{
j = tmrbit ();
dat = (j << 7) | (dat >> 1);
}
return (dat);
}
//写一个字节
void tmwbyte (unsigned char dat)
{
unsigned int i;
unsigned char j;
bit testb;
for (j=1;j<=8;j++)
{
testb = dat & 0x01;
dat = dat >> 1;
if (testb)
{
TMDAT = 0;
i++; i++;
TMDAT = 1;
i = 8; while (i>0) i--;
}
else
{
TMDAT = 0;
i = 8; while (i>0) i--;
TMDAT = 1;
i++; i++;
}
}
}
//发送ds1820 开始转换
void tmstart (void)
{ //unsigned char a;//TC_tmp;
//extern TCOUNT;
//TC_tmp=TCOUNT;
/*do {*/
tmreset (); //复位
// a=tmpre(); //等待存在脉冲
// } while(a==0&&TC_tmp==TCOUNT);
dmsec (1); //延时
tmwbyte (0xcc); //跳过序列号命令,对所有器件有效
tmwbyte (0x44); //发转换命令 44H,
}
//读取温度
unsigned char tmpread()
{ unsigned char TMP;
unsigned char a,b,real_a,real_b,real;
tmreset(); //复位
dmsec(1); //延时
tmwbyte (0xcc); //跳过序列号命令,对所有器件有效 //
tmwbyte (0xbe); //发送读取命令
a = tmrbyte (); //连续读取两位温度
b = tmrbyte ();
tmpf = b&0xf0;
real_b = b&0x0f;
real_b = real_b<<4;
real_a = a&0xf0;
real_a = real_a>>4;
real = real_b|real_a;
if(tmpf)TMP=~real;
else TMP=real;
return TMP;
}
//void tmstart (void)
//unsigned long tmpread()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -