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

📄 18b20._c

📁 D12固件程序
💻 _C
字号:
#include <io8515v.h>
#include <macros.h>
#include "d12head.h"

#define TEMPTPORT  PORTB
#define TEMPTDDR   DDRB
#define TEMPTPIN   PINB   
#define TEMPTNUM   0     //定义B0口为18b20 

/*void delay_us(int time)
{
	do{
		time--;
	}while (time>1);
}
*/
/** /
void delay_ms(long time)
{
	time=time*60;   
	do{
		WDR(); //看门狗复位	
		time--;
	}while (time>1);
}
/**/

/*********************************************
          检查DS18B20是否存在:
	如果DS18B20不存在返回1,否则返回0
*********************************************/
/*///
unsigned char DS18B20_ack(void)
{
	unsigned char ack;
	TEMPTDDR|=1<<TEMPTNUM;        //输出
	TEMPTPORT&=~(1<<TEMPTNUM);    //输出LOW
	delay_us(500);//复位低电平,480us-960us
	TEMPTPORT|=1<<TEMPTNUM;       //输出HIGH
	TEMPTDDR&=~(1<<TEMPTNUM);     //输入
	delay_us(45);//复位预计600us
	ack=TEMPTPIN;
	ack &= 1<<TEMPTNUM;
	delay_us(500);//等待18B20的自动上拉电阻拉高。
	return ack;
}
*////
/*********************************************
           写ROM或存贮器命令到DS18B20
*********************************************/
/*///
void DS18B20_write(unsigned char cmd)
{ 
	unsigned char i,j;
	TEMPTDDR |= 1<<TEMPTNUM;         //输出
	for (j=0;j<=7;j++)//两次数据之间的时间间隔大于1us。
	{
		i=cmd&0x01;
		if (i==0x01)//输出1
		{
			TEMPTPORT &= ~(1<<TEMPTNUM);     //输出LOW
			delay_us(10);//保持低电平大于1us小于15us
			TEMPTPORT |= 1<<TEMPTNUM;        //输出HIGH
			delay_us(100);//要求持续时间大于60us,小于120us
		}
		else        //输出0
		{
			TEMPTPORT &= ~(1<<TEMPTNUM);     //输出LOW
			delay_us(100);
			TEMPTPORT |= 1<<TEMPTNUM;        //输出HIGH
			delay_us(10);
         }
		 cmd=cmd>>1;
	}
}
*////
/*********************************************
          从DS18B20读温度数据
*********************************************/
/*///
void DS18B20_read(void)   
{
	unsigned char byteH,byteL,i;  
	unsigned int tempt=0;  
	for (i=0;i<8;i++)
	{
		TEMPTDDR  |= 1<<TEMPTNUM;       //输出
		TEMPTPORT &= ~(1<<TEMPTNUM);    //输出LOW
		delay_us(3);//发送0,保持大于1us以上时间。
		TEMPTPORT |= 1<<TEMPTNUM;       //输出HIGH
		TEMPTDDR  &= ~(1<<TEMPTNUM);    //输入
		delay_us(10);
		if (TEMPTPIN&1<<TEMPTNUM)
			byteL |= 0x80;
		if (i<7)
			byteL = byteL>>1;
		delay_us(100);
		TEMPTDDR |= 1<<TEMPTNUM;       //输出
		delay_us(5);
	}
	for (i=0;i<8;i++)
	{
		TEMPTDDR  |= 1<<TEMPTNUM;       //输出
		TEMPTPORT &= ~(1<<TEMPTNUM);    //输出LOW
		delay_us(3);//发送0,保持大于1us以上时间。
		TEMPTPORT |= 1<<TEMPTNUM;       //输出HIGH
		TEMPTDDR  &= ~(1<<TEMPTNUM);    //输入
		delay_us(10);
		if (TEMPTPIN&1<<TEMPTNUM)
			byteH |= 0x80;
		if (i<7)
			byteH = byteH>>1;
		delay_us(100);
		TEMPTDDR |= 1<<TEMPTNUM;       //输出
		delay_us(5);
	}
	XmtBuff.msg[0] = byteL;//返回主机有符号的shor int 数
	XmtBuff.msg[1] = byteH;//其除以16即为温度值
	XmtBuff.msgL = 2;
}
*////
/*///
void converT_command(void)
{
	char i;
	do{
///		i=DS18B20_ack();//对DS18B20进行复位				 	     
	} while (i == 1<<TEMPTNUM);
///	DS18B20_write(0xcc); //1100 1100 给18B20发启动命令
///	DS18B20_write(0x44); //0100 0100 给18B20发转换温度指令 
} 
*////
//delay_ms(900);//延时等转换结束,12位格式约需750ms
/*///
void readT_command (void)
{
	char i;
	do{
///		i=DS18B20_ack();//对DS18B20进行复位				 	     
	} while (i == 1<<TEMPTNUM);
///	DS18B20_write(0xcc);//1100 1100 给18B20发启动命令
///	DS18B20_write(0xbe);//1011 1110 给18B20发读温度指令	
///	DS18B20_read();				
}
*////
void wendu (void)
{
///	converT_command();
///	readT_command();
}

⌨️ 快捷键说明

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