📄 ds18b20_driver.c
字号:
/********************************************************************
//模 块 名 : 温度采集演示程序
//创 建 者 : 杨 勇
日期 : 2007年4月29日 17:20
//修 改 者 :
日期 :
//功能描述 :
//其他说明 : 22.1184MHz晶振
//芯片型号 : AT89S52
//配 置 :
//版 本 : V1.0
********************************************************************/
#include <reg52.h> //包含51单片机的头文件
#include<absacc.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit dq=P3^7;
void delay(uchar usecinds);
uchar ow_reset(void);
uchar read_byte(void);
void write_byte(char val);
int Read_Temperatuture(void);
/*=============================================================================
//函 数 名: void delay(uchar useconds)
//参 数: 无
//返 回 值: int
//函数功能: 读取温度函数
//编 写 者: 杨 勇
//编写日期: 2007年4月29日 18:11
===============================================================================*/
int Read_Temperatuture(void)
{
union{
uchar c[2];
int x;
}temp;
ow_reset();
write_byte(0xcc); //跳过ROM
write_byte(0xbe); //读RAM
temp.c[1]=read_byte();
temp.c[0]=read_byte();
ow_reset();
write_byte(0xcc);
write_byte(0x44); //开始翻转
return temp.x/2;
}
/*=============================================================================
//函 数 名: uchar read_byte(void)
//参 数: 无
//返 回 值: uchar
//函数功能: 读取一个字节函数
//编 写 者: 杨 勇
//编写日期: 2007年4月29日 18:11
===============================================================================*/
uchar read_byte(void)
{
uchar i;
uchar value=0;
for(i=8;i>0;i--)
{
value>>=1;
dq=0; // 低电平
dq=1; // 返回高电平
delay(2);
if(dq)value|=0x80;
delay(12);
}
return(value);
}
/*=============================================================================
//函 数 名: void write_byte(char val)
//参 数: 无
//返 回 值: uchar
//函数功能: 写一个字节函数
//编 写 者: 杨 勇
//编写日期: 2007年4月29日 18:11
===============================================================================*/
void write_byte(char val)
{
uchar i;
for(i=8;i>0;i--) //一次写一个字节
{
dq=0;
dq=val&0x01;
delay(10); //端口悬挂
dq=1;
val=val/2;
}
delay(10);
}
/*=============================================================================
//函 数 名: uchar read_byte(void)
//参 数: 无
//返 回 值: uchar
//函数功能: 复位函数
//编 写 者: 杨 勇
//编写日期: 2007年4月29日 18:11
===============================================================================*/
uchar ow_reset(void)
{
uchar presence;
dq=0; //设低电平
delay(58); //延时480us
dq=1; //高电平
delay(6); //等待
presence=dq; //取允许信号
delay(50);
return(presence); //返回允许信号
}
/*=============================================================================
//函 数 名: void delay(uchar useconds)
//参 数: uchar useconds
//返 回 值: 无
//函数功能: 延时函数
//编 写 者: 杨 勇
//编写日期: 2007年4月29日 18:11
===============================================================================*/
void delay(uchar useconds)
{
for(;useconds>0;useconds--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -