STC单片机的DS18B20的C程序

hello,大家好,欢迎光临我的博客! qq:239447308

由于STC单片机的速度比8051速度快,属于1个时钟/机器周期高速单片机。速度快当然是它的优点,但对于要移植传统的8051程序而言,需要修改时序来实现某功能.

以下程序是ds18b20简单的驱动程序,其实是在网上Down的,经本人稍作修改之后,在STC12C5A32S2中调试通过的,最后读温度返回一个unsigned int,低12位就是温度数据。在主程序里进行运算即可得到实际温度值。呵呵~~

/***********ds18b20子程序*************************/

/***********ds18b20延迟子函数(晶振11.0592MHz )*******/

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

/**********ds18b20初始化函数**********************/

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);
}

/***********ds18b20读一个字节**************/

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);
}

/*************ds18b20写一个字节****************/

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;
}
}

/**************读取ds18b20当前温度************/

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;
       
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值