⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.txt

📁 基于ADUC841D的DS18B20调试程序
💻 TXT
字号:


#include <ADuC841.h>



#define BAUDRATE 4800 //波特率bps
#define SYSCLK 11059200 //外部晶振
#define uchar unsigned char
#define uint unsigned int
uchar tmp[2]={0xab,0xcd};
sbit DQ   = P3^7;

unsigned char time=0;
///////////////////////////////////////////////////////////////////////////////////	
void delay1(unsigned int a)
{

   while(a--);
}




//串口初始化
void UART_Init(void)
{
   SCON=0x50;//模式1 8-bit 允许接受       
   TMOD=0x20;//TMOD: 定时器1, 工作方式2, 8-bit
   TH1=-(SYSCLK/BAUDRATE/32);//4800波特率  fosc=11.0592MHz 
   TR1=1;
   PCON=0x00;
   ES =1; //UART中断开启      
   TR1 = 1; //启动定时器T1
  }

//发送单个字符
void Send_Char(unsigned char ch)
{
	SBUF = ch; //送入缓冲区1
	while(TI == 0); //等待发送完毕
	TI = 0; //软件清零
}



//初始化函数
void Init_DS18B20(void)
{
	 bit x=1;
 	DQ = 1;    //DQ复位
 	delay1(8);  //稍做延时
 	DQ = 0;    //单片机将DQ拉低
 	delay1(500); //精确延时 大于 480us
	DQ = 1;    //拉高总线
 	delay1(40);
 	x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 	delay1(100);//
//if(x==0){  Send_Char(0x66); }
     DQ = 1;
}

//读一个字节

bit Rbit (void){

 DQ=0;
 delay1(2);
 DQ=1;
 delay1(20);
return (DQ);
 
}

  ReadOneChar(void)
 {
	unsigned char i=0,j=0;
	unsigned char dat=0;
	for (i=0;i<8;i++)
 	{
	  j=Rbit();
      dat=(j<<7)|(dat>>1);
 	}
   return(dat);
 }


//写一个字节
void WriteOneChar(unsigned char dat)
{
 	unsigned char i=0;
     bit dq;
 	for (i=0; i<8; i++)
 	{

        dq=dat&0x01;
		dat>>=1;
      
 		if(dq){
     			DQ=0;
				delay1(20);
				DQ=1; 
				delay1(40);
				}
       else {
				DQ=0;
				delay1(50);
				DQ=1; 
				delay1(20);
				}
  		
 	}

}

//读取温度
void  ReadTemperature(void)
{
	unsigned char a=0;
	unsigned char b=0;
	unsigned int t=0,k=0;

	Init_DS18B20();
	WriteOneChar(0xCC); // 跳过读序号列号的操作
	WriteOneChar(0x44); // 启动温度转换
	Init_DS18B20();
	WriteOneChar(0xCC); //跳过读序号列号的操作
	WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	a=ReadOneChar();
	b=ReadOneChar();
if(b==0xff){time++;}
  else {Send_Char(time);Send_Char(0x99);}
   Send_Char(b);
  Send_Char(a);  
t=b;


	t<<=8;
	t=t|a;   
    k=t>>4;   
   tmp[1]=t&0x0f;
}



    







	 void main (void)
	 {

		 UART_Init();	
  		 delay1(50000);

		   while(1)

		   {  
		   
     	   ReadTemperature();//读温度		  
 		   delay1(50000); 

	 		  }
	 
	 
	 }














⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -