DS18B20检测程序,程序存在问题,请高手指导_飘渺世界的空间_百度空间
   

#include "reg51.h"

#include <intrins.h>   //引用标准库

#define uint unsigned int

#define uchar unsigned char   //宏定义

sbit SET=P3^1; //定义调整键

sbit DEC=P3^2; //定义减少键

sbit ADD=P3^3; //定义增加键

sbit BEEP=P3^7; //定义蜂鸣器

bit shanshuo_st;   //闪烁间隔标志

bit beep_st;       //蜂鸣器间隔标志

sbit DIAN = P0^7;   //小数点

sbit DQ=P3^6;       //DS18B20通信端口

uchar x=0;         //计数器

signed char m;     //温度值全局变量

uchar n;           //温度值全局变量

uchar set_st=0;    //状态标志

signed char Th=38; //上限报警温度,默认值为38

signed char Tl=5;     //下限报警温度,默认值为38

uchar code LEDData[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xFF,0x00}; //定义数据表

/*****延时子程序*****/

void Delay(uint num)

{

while( --num );

}

/*****初始化定时器0*****/

void InitTimer(void)

{

TMOD=0x01; //设置定时器0

TH0=0x3c;             //定时时间0.1s

TL0=0xb0;     //50ms(晶振12M

}

/*****定时器0中断服务程序*****/

void timer0(void) interrupt 1

{

TH0=0x3c;

TL0=0xb0;

x++;

}

/*****外部中断0服务程序*****/

void int0(void) interrupt 0

{

EX0=0;      //关外部中断0

if(DEC==0&&set_st==1) //       

{

Th--;

if(Th<Tl)Th=Tl;

}

else if(DEC==0&&set_st==2) //           

{

Tl--;

if(Tl<0)Tl=0;

}

}

/*****外部中断1服务程序*****/

void int1(void) interrupt 2

{

EX1=0;      //关外部中断1   

if(ADD==0&&set_st==1)

{

Th++;

if(Th>99)Th=99;

}

else if(ADD==0&&set_st==2)  

{

Tl++;

if(Tl>Th)Tl=Th;

}

}

/*****延时子程序*****/

void Delay_DS18B20(int num)

{

while(num--) ;

}

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

unsigned char ReadOneChar(void)

{

unsigned char i=0;

unsigned char dat = 0;

for (i=8;i>0;i--)

{

    DQ = 0;     // 给脉冲信号

    dat>>=1;

    DQ = 1;     // 给脉冲信号

    if(DQ)

   dat|=0x80;

    Delay_DS18B20(4);

}

return(dat);

}

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

void WriteOneChar(unsigned char dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

    DQ = 0;

    DQ = dat&0x01;

    Delay_DS18B20(5);

    DQ = 1;

    dat>>=1;

}

}

/*****初始化DS18B20*****/

void Init_DS18B20(void)

{

unsigned char x=0;

DQ = 1;         //DQ复位

Delay_DS18B20(8);    //稍做延时

DQ = 0;         //单片机将DQ拉低

Delay_DS18B20(80);   //xx延时,大于480us

DQ = 1;         //拉高总线

Delay_DS18B20(14);

x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败

Delay_DS18B20(20);

}

程序太长 下边评论补充



郑重声明:资讯 【DS18B20检测程序,程序存在问题,请高手指导_飘渺世界的空间_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——