发表于
2008-9-25 9:41:42
DS18B20读写
/***************************************************************************
作者: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的频率下时,当参数data为0,延时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();