?? 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 + -