?? ds18b20.c
字號:
/*******************************************************************************
* 標題: LJD-SY-5100單片機程序 *
* 文件: DS18B20.C *
* 日期: 2005-7-12 *
* 版本: 1.0 *
* 作者: 啟東微芯 *
* 網站: http://www.ljd-2008.com *
********************************************************************************
* 描述: *
* 控制DS18B20完成芯片的控制和數據傳輸 *
* *
* *
********************************************************************************
#include<reg51.h>
#include<absacc.h>
#include<stdio.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit P3_5=P3^5;
uchar TEMP; //溫度值的變量
uchar flag1; //結果為正或為負的標志位
void delay(unsigned int count)
{
unsigned int i;
while(count)
{
i=200;
while (i>0)i--;
count--;
}
}
void dsreset(void) //發送復位和初始化
{
unsigned int i;
P3_5=0;
i=103;
while(i>0)i--;
P3_5=1;
i=4;
while(i>0)i--;
}
bit tmpread(void) //讀去數據的一位
{
unsigned int i;
bit dat;
P3_5=0;i++;
P3_5=0;i++;i++; //延時
dat=P3_5;
i=8;while (i>0)i--;
return(dat);
}
unsigned char tmpread2(void) //讀一個字節
{
unsigned char i,j,dat;
dat=0;
for(i=1;i<8;i++)
{
j=tmpread();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
void tmpwrite(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)
{
P3_5=0;
i++;i++;
P3_5=1;
i=8;while(i>0)i--;
}
else
{
P3_5=0;
i=8;while(i>0)i--;
P3_5=1;
i++;i++;
}
}
}
void tmpchange(void)
{
dsreset();
delay(1);
tmpwrite(0xcc);
tmpwrite(0x44);
}
void tmp (void)
{
unsigned char a,b;
dsreset();
delay(1);
tmpwrite(0xcc);
tmpwrite(0xbe);
a=tmpread2();
b=tmpread2();
flag1=b;
if(flag1)
{
TEMP=~a+1;
}
else
{
TEMP=a;
}
}
rom()
{
uchar i;
uchar sn1;
uchar sn2;
dsreset();
delay(1);
tmpwrite(0x33);
//sn1=tmpwrite();
//sn2=tmpwrite();
}
main()
{
do {
tmpchange();
delay(200);
tmp();
}
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -