EDN首页   博客首页

0

关于投票
DS18B20 C语言读写函数

pdfDS18B20读写

/***************************************************************************

作者:yupc

Bog 地址: http://blog.ednchina.com/yupc/

硬件描述:以下程序在AVR单片机上能可靠运行,运行频率为8M.

程序描述:以下程序只对DS18B20单个读写,多个读写的函数我没有写,这个不是难点,难点在于读写时续,本程序已成功运行了好几个月,

时间:2008.9.25

****************************************************************************/

#include <avr/io.h>

#include "DS18B20.h"

#include <avr/interrupt.h>

#define SetDo1() DDRD&=~_BV(PD6)

#define ClrDo1() DDRD|=_BV(PD6)

#define TestDo1() PIND&_BV(PD6)

#define SetDo2() DDRB&=~_BV(PB0)

#define ClrDo2() DDRB|=_BV(PB0)

#define TestDo2() PINB&_BV(PB0)


#define SKIPROM 0xCC

#define CONVERT 0x44

#define READSCRA 0xBE


/********************************************************************

作者:俞萍初

函数名: void tickDelay(unsigned int data)

描述:AVR运行在8M的频率下时,当参数data0,延时2us,分辨率为0.875us

计算公式为: 延时=2+data*0.875;

AVR运行在4M, 延时=(2+data*0.875)*2;

********************************************************************/

#define TD_A ((7 -2)/0.875) //延时7us

#define TD_B ((64)/0.875) //延时64us

#define TD_C ((60)/0.875) //延时60us

#define TD_D ((10-2)/0.875) ////延时10us

#define TD_E ((9-2)/0.875) //延时9us

#define TD_F ((55)/0.875) //延时55us

#define TD_G 0 ////延时0us

#define TD_H ((480)/0.875) //延时480us

#define TD_I ((70)/0.875) //延时70us

#define TD_J ((410)/0.875) //延时410us

void tickDelay(unsigned int data)

{

while(data--);

}

unsigned char OWTouchReset1(void)

{

unsigned char result;

tickDelay(TD_G);

ClrDo1();

tickDelay(TD_H);

SetDo1();

tickDelay(TD_I);

result=TestDo1();

tickDelay(TD_J);

return result;

}

void OWWriteBit1(unsigned char bit)

{

if(bit)

{

ClrDo1();

tickDelay(TD_A);

SetDo1();

tickDelay(TD_B);

}

else

{

ClrDo1();

tickDelay(TD_C);

SetDo1();

tickDelay(TD_D);

}

}

unsigned char OWReadBit1(void)

{

unsigned char result;

ClrDo1();