标题:
需要DS1820的C51单片机源程序看看这里
[打印本页]
作者:
benbird2011
时间:
2018-5-6 20:24
标题:
需要DS1820的C51单片机源程序看看这里
需要DS1820的C51源程序看看这里,这边需要双DS1820.正在研究中。。。。
网上有很多这样的例程啊。给你一个STC的,STC的下载程序方便,上手也比较快
CPU:STC12C5A48S2
#include "18B20.h"
#include<intrins.h>
#include <math.h> //要用到取绝对值函数abs()
/**************************************
延时X微秒(STC12C5A60S2@12M)
不同的工作环境,需要调整此函数
此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同
**************************************/
sbit DQ=P1^0; //定义18B20数据脚为P1.0端口
void DelayXus(uint n)
{
while (n--)
{
_nop_();
_nop_();
}
}
void getTmp_Update()
{
uint TPL,TPH,tmpvalue,value;
float t;
Room_tmep=0;
DS18B20_Reset(); //设备复位
DS18B20_WriteByte(0xCC); //跳过ROM命令
DS18B20_WriteByte(0x44); //开始转换命令
while (!DQ){}; //等待转换完成
DS18B20_Reset(); //设备复位
DS18B20_WriteByte(0xCC); //跳过ROM命令
DS18B20_WriteByte(0xBE); //读暂存存储器命令
TPL = DS18B20_ReadByte(); //读温度低字节
TPH = DS18B20_ReadByte(); //读温度高字节
tmpvalue = TPH;
tmpvalue <<= 8;
tmpvalue |= TPL;
value = tmpvalue;
t = value * 0.0625; //使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度
/* 如果将它放大100倍, 使显示时可显示小数点后两位, 并对小数点后第三进行4舍5入, 如t=11.0625, 进行计数后, 得到value = 1106, 即11.06 度,
如t=-11.0625, 进行计数后, 得到value = -1106, 即-11.06 度 */
Room_tmep= t; //得到最终温度
}
/**************************************
复位DS18B20,并检测设备是否存在
**************************************/
void DS18B20_Reset()
{
uchar i=0;
CY = 1;
while (CY)
{
DQ = 0; //送出低电平复位信号
DelayXus(240); //延时至少480us
DelayXus(240);
DQ = 1; //释放数据线
DelayXus(60); //等待60us
CY = DQ; //检测存在脉冲
DelayXus(240); //等待设备释放数据线
DelayXus(180);
i++;
if (i>50){AD_Error_code=1;return;}else{if (AD_Error_code==1) {AD_Error_code=0;}}
}
}
/**************************************
从DS18B20读1字节数据
**************************************/
uint DS18B20_ReadByte()
{
uchar i;
uchar dat = 0;
for (i=0; i<8; i++) //8位计数器
{
dat >>= 1;
DQ = 0; //开始时间片
DelayXus(1); //延时等待
DQ = 1; //准备接收
DelayXus(1); //接收延时
if (DQ) dat |= 0x80; //读取数据
DelayXus(60); //等待时间片结束
}
return dat;
}
/**************************************
向DS18B20写1字节数据
**************************************/
void DS18B20_WriteByte(uint dat)
{
uchar i;
for (i=0; i<8; i++) //8位计数器
{
DQ = 0; //开始时间片
DelayXus(1); //延时等待
dat >>= 1; //送出数据
DQ = CY;
DelayXus(60); //等待时间片结束
DQ = 1; //恢复数据线
DelayXus(1); //恢复延时
}
}
复制代码
Ds1820 源程序.zip
2018-5-6 20:23 上传
点击文件名下载附件
下载积分: 黑币 -5
42.39 KB, 下载次数: 10, 下载积分: 黑币 -5
C51 读DS1820
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1