⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temp.c

📁 DS1820子程序 DS1820 C51 子程序-C51 subroutine DS1820
💻 C
字号:
#include <reg51.h>
#define uchar unsigned char 

sbit TMDAT = P3^4; //根据实实际情况设定
uchar TMP; //读取后温度值存于TMP中,将其除以2即可得出实际温度;
uchar f; //结果是否为负温,“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 = 0; //
i = 103; //
while (i>0) i--; // 延时 900 uS(11.0592Mhz时) //
TMDAT = 1; //
i = 4; //
while (i>0) i--; //
} //
//////////////////////////////////////////////////////////////////////////


//判断DS1820是否存在的子程序。最好不要用,因为当器件不存在时将会进入死循环

////////////////////////////////////// 等待存在脉冲///////////////////////
void tmpre (void) //判断器件是否存在 //
{ //
unsigned int i; //
while (TMDAT); //
while (~TMDAT); //
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; // 写0 //
i++; i++; //
TMDAT = 1; //
i = 8; while (i>0) i--; //
} //
else //
{ //
TMDAT = 0; // 写0 //
i = 8; while (i>0) i--; //
TMDAT = 1; //
i++; i++; //
} //
} //
} //
//////////////////////////////////////////////////////////////////////////

/////////////////////////////////发送ds1820 开始转换//////////////////////
void tmstart (void) //
{ //
tmreset (); //复位 //
//tmpre (); //等待存在脉冲 //
dmsec (1); //延时 //
tmwbyte (0xcc); //跳过序列号命令 //
tmwbyte (0x44); //发转换命令 44H, //
} //
//////////////////////////////////////////////////////////////////////////


/////////////////////////////////// 读取温度//////////////////////////////
void tmrtemp (void) //
{ //
unsigned char a,b; //
tmreset (); //复位 //
//tmpre (); //等待存在脉冲 //
dmsec (1); //延时 //
tmwbyte (0xcc); //跳过序列号命令 //
tmwbyte (0xbe); //发送读取命令 //
a = tmrbyte (); //读取低位温度 //
b = tmrbyte (); //读取高位温度 //
f=b; //若b为1则为负温 //
if(f) //
{ //
TMP=~a+1; //如果为负温则去除其补码 //
} //
else //
{ //
TMP=a; //
} //
} //
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
main() //
{ //
do{ //
tmstart(); //
dmsec(100); //如果是不断地读取的话可以不延时 //
tmrtemp(); //读取温度,执行完毕温度将存于TMP中 //
}while(1); //
} //
//////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -