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

📄 18202.c

📁 这里有很多我自己做的凌阳单片机源程序
💻 C
字号:
//DS18B20的底层驱动函数
#include<spce061a_chf.h>
#include"1820.h"
#include"bit.h"

//延时函数,一共延时t*1.9285us
void delay(unsigned int t)
{
	//*P_SystemClock=0x88;//49.152M
	do
	{
		t-=1;
		asm("nop");	
	}while(t);
	//*P_SystemClock=0x1b;//24.576M	
}
//发复位脉冲函数
unsigned int rest()
{
	*P_IOA_Dir=0x01;//IOA0为输出口	
	DQ=1;//先输出高电平
	delay(1);
	DQ=0;		
	delay(600);//输出低电平后释放单线就可以了600us	
	DQ=1;	
	*P_IOA_Dir=0x00;
	delay(60);//30us
	if(DQ)
	{		
		return 0;
	}	
	delay(240);
	if(DQ)
	{
		return 1;
	}
	return 0;//延时不变回高低电平就是失败
}
//读1或0的时序一样
unsigned int read_bit()
{
	unsigned int b;
	*P_IOA_Dir=0x01;//IOA0为输出口	
	DQ=1;//先输出高电平
	delay(1);	
	DQ=0;//数据线电平拉低	
	delay(3);	//10us
	DQ=1;//上拉		
	*P_IOA_Dir=0x00;//44个周期
	delay(5);
	if(DQ)//44个周期)
	{
			b=0x01;		
	}
	else
	{
		b=0x00;
	}	
	delay(60);//的恢复时间40us读时间间隔为60us	
	return(b);
}
//写1或0时序不一样,所以要分开成每一位来写
void write_byte(unsigned int value)
{
	unsigned int f;				
	for(f=0;f<8;f++)
	{
		*P_IOA_Dir=0x01;//IOA0为输出口
		DQ=1;//先输出高电平	
		delay(1);					
		if((value&0x01)==0)
		{			
			//*P_IOA_Dir=0x01;			
			DQ=0;			
			delay(70);//延时写0时间片40us			
			DQ=1;				
			*P_IOA_Dir=0x00;		
			delay(5);//1us//上拉时间为5us
			
		}
		else//写1时间片
		{
			//*P_IOA_Dir=0x01;
			DQ=0;			
			delay(5);//10us
			DQ=1;
			delay(60);//输出高电平表示1??????????				
			*P_IOA_Dir=0x00;//改为输入则释放总 线		
			delay(5);//数据线电平拉低后延时1us就释放,等待1820采样				
		}
		value>>=1;		
		delay(1);		
	}	
	*P_IOA_Dir=0x01;//IOA0为输出口	
	DQ=1;//先输出高电平	
}

⌨️ 快捷键说明

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