Use DS18B20 at STC8
STC8 驱动 DS18B20
#include "STC8.h"
#include "DS18B20.h"
#include <intrins.h>
sbit DQ = P5^4;
void delay_18B20(unsigned int i)
{
_nop_();
while(--i);
}
void DS18B20_Init(void)
{
unsigned char x=0;
DQ = 1; //DQ Reset
delay_18B20(80);
DQ = 0;
delay_18B20(800);
DQ = 1;
delay_18B20(140);
x=DQ; //if DS18B20 exist DQ=0
delay_18B20(200);
}
unsigned char DS18B20_Read(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=0;i<8;i++)
{
dat >>= 1;
DQ = 0;
delay_18B20(2);
DQ = 1;
delay_18B20(2);
DQ = 1;
if(DQ) dat |= 0x80;
delay_18B20(60);
}
return(dat);
}
void DS18B20_Write(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
delay_18B20(2);
DQ = dat&0x01;
delay_18B20(60);
DQ = 1;
delay_18B20(2);
dat>>=1;
}
}
头文件:
#ifndef __DS18B20_H_
#define __DS18B20_H_
void delay_18B20(unsigned int i);
void DS18B20_Init(void);
unsigned char DS18B20_Read(void);
void DS18B20_Write(unsigned char dat);
#endif
最后修改于 Fri, 29 Nov 2019