您的位置 首页 资料

STC12C5A60S2单片机的DS18B20的C程序

最近在搞18B20,发现其对CPU的不兼容性很高,由于其对时间信号的敏感引起的由于STC单片机的速度比8051速度快,属于1个时钟机器周期高速单

最近在搞18B20,发现其对CPU的不兼容性很高,因为其对时间信号的灵敏引起的

因为STC单片机的速度比8051速度快,归于1个时钟/机器周期高速单片机。速度快当然是它的长处,但关于要移植传统的8051程序而言,需求修正时序来完成某功用.

以下程序是ds18b20简略的驱动程序,其实是在网上Down的,经自己稍作修正之后,在STC12C5A60S2中调试经过的,最后读温度回来一个unsigned int,低12位便是温度数据。在主程序里进行运算即可得到实践温度值。呵呵~~

void delay_18B20(unsigned int i)
{
while(i–);
}

void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(80); //稍做延时
DQ = 0; //单片机将DQ拉低
delay_18B20(800); //准确延时 大于 480us
DQ = 1; //拉高总线
delay_18B20(140);
x=DQ; delay_18B20(200);
}

unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i–)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(40); //40
}
return(dat);
}

void WriteOneChar(uchar dat)
{
unsigned char i=0;
for (i=8; i>0; i–)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(50); //50
DQ = 1;
dat>>=1;
}
}

unsigned int ReadTemp(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int temp_value=0;

Init_DS18B20();
WriteOneChar(0xCC);

WriteOneChar(0x44);

delay_18B20(1000);

Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);

delay_18B20(1000);

a=ReadOneChar(); //读取温度值低位
b=ReadOneChar(); //读取温度值高位

temp_value = b<<8;
temp_value |= a;
return temp_value;

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/260102.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部