亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ds1820.c.bak

?? 溫度芯片驅動
?? BAK
字號:
//**********************************************************************
//功能		: 實時時鐘DS1302操作模塊
//作者		: lihj
//創建日期	: 2004-07-10
//版本		: V1.0
//修改記錄	: 
//***********************************************************************
#include <reg51.h>
#include <std.h>
#include <ds1820.h>

sbit TMDAT = P3^4;			//根據實實際情況設定

//函數功能:延時(12MHz晶振)
//輸入參數:<count>延時時間長度,單位1ms
void Delay_ms (U16 count)	 					
{									
	U16 i;		       						
	while (count)							
	{								
		i = 123;						
		while (i>0) i--;					
		count--;						
    }									
}									

//函數功能:復位芯片(至少480us長的低電平信號)
void ResetChip (void)							
{		                  		 			
	U16 i;	
							
	TMDAT = 0;				//480us~960us長低電平:復位
	i = 150;							
	while (i--);         	//延時約900 uS(12Mhz時)	
	TMDAT = 1;							
	i = 5;								
	while (i--);		   	//DS1820檢測到上升沿后,過15~60us后輸出“存在”信號
}

//函數功能:	判斷DS1820是否存在
//返回參數:	TRUE:芯片存在
//	    	FALSE:芯片不存在
U8 ChipPresenceCheck(void)				
{                     						
	U16 i;							
	
	ResetChip();
	
	//等待70us,應該檢測到低電平
	i = 11;
	while(i--);
	if(TMDAT)
	{
		return FALSE;
	}
	
	//等待400us,應檢測到高電平,低電平信號保持60~240us
	i = 65; 
	while (i--);
	if(TMDAT)
	{
		return TRUE;		
	}
	else
	{
		return FALSE;
	}	
}									

//函數功能:從總線上讀取1位信號
bit RdBit (void)							
{                   							  
	U16 i;							
	bit b0;							
	TMDAT = 0; i++;				//下降沿之后,保持低電平至少1us						//
	TMDAT = 1; i++; i++;		//微量延時(既作輸入又作輸出的I/O腳,讀數據時,先拉高電平)
	
	b0 = TMDAT;							
	i = 9; 
	while (i--);				//延時60us		
	return (b0);							
}									

//函數功能:從總線上讀取1個字節信號
U8 RdByte (void) 			 			
{         								
	U8 i,j,byRdData=0;						
	
	for (i=0;i<8;i++)						
	{								
		j = RdBit ();
		byRdData >>= 1;						
		byRdData = (j << 7) | byRdData;				
	}								
	return (byRdData);							
}									

//函數功能:向總線上寫一位數據	
void WrBit(bit b0)
{
	U8 i;
	
	if (b0)						
	{							
		TMDAT = 0;              		//產生一個下降沿,低電平至少保持1us	//
		i++; i++;               		             		
		TMDAT = 1;				//輸出1				
		i = 9; while (i--); 			//高電平保持60us             		//
	}							
	else							
	{							
		TMDAT = 0;                           	// 寫0 	
		i = 9; while (i--);  			//低電平保持60us           		//
		TMDAT = 1;					
		i++; i++;                            		
	}	
}

//向總線上寫一個字節
void WrByte (U8 dat)					
{                						
	U8 i;						
	bit testb;							
	for (i=0;i<8;i++)						
	{								
		testb = dat & 0x01;					
		dat = dat >> 1;						
		WrBit(testb);						
	}								
}									

//函數功能	:寫1-Wire協議頭操作(復位芯片、選擇芯片、寫命令碼)
//輸入參數	:<pSN>芯片序號
//	  	: <byCommand>命令碼
void SendHeaderData(U8 *pSN, U8 byCommand)
{
	U8 i;
	
	ResetChip();			//復位				
	Delay_ms(1);			//延時				

//***********************
//如果總線上只有一個設備,不需要選擇芯片操作	
#if	(CHIP_NUM_IN_WIRE == 1)
	WrByte(0xcc);			//總線上只有一個設備,跳過芯片匹配步驟
#else	
	WrByte(0x55); 			//發送ROM匹配命令		
	for(i=0;i<8;i++)					
	{							
		WrByte(*pSN++);		//發送64位序列號	
	}
#endif							

	WrByte(byCommand);		//發送讀取中間寄存器命令
}

//函數功能	: 讀溫度芯片中間寄存器(從偏移地址0開始)
//輸入參數	: <pSN>溫度芯片的序號(ROM碼)
//		:  <pRdData> 存放讀取出的數據
//		:  <byLen>需讀取的數據的長度
void RdScratchpad(U8 *pSN, U8 *pRdData, U8 byLen)
{
	U8 i;
	
	//輸入參數檢查
	if(byLen > 9)
	{
		byLen = 9;
	}
	
	SendHeaderData(pSN, 0xbe);
	
	//讀出數據
	for(i=0;i<byLen;i++)
	{
		*pRdData++ = RdByte();
	}
	
	ResetChip();			//復位芯片,結束讀操作
	Delay_ms(1);			//延時	
}


//函數功能	: 寫溫度芯片中間寄存器(從偏移地址2開始)
//輸入參數	: <pSN>溫度芯片的序號(ROM碼)
//		:  <pWrData> 寫到中間寄存器的源數據
//		:  <byLen>寫入數據的長度	
void WrScratchpad(U8 *pSN, U8 *pWrData, U8 byLen) 
{
	U8 i;
	
	//輸入參數檢查
	if(byLen > 2)
	{
		byLen = 2;
	}
	
	SendHeaderData(pSN, 0x4e);		//發送協議頭			
	
	//寫入數據
	for(i=0;i<byLen;i++)
	{
		WrByte(*pWrData++);
	}
	
	ResetChip();				//復位芯片,結束寫操作
	Delay_ms(1);				//延時	
}

//函數功能:啟動溫度轉換過程
//輸入參數:<pSN>芯片序號
void StartConvertTmpt (U8 *pSN)							//
{       
	U8 byBusyFlag=0;
	 
	SendHeaderData(pSN, 0x44); 		//發送協議頭           				
	
	while(1)				//某些情況下,這里可能出現死循環
	{
		byBusyFlag = RdByte();
		if(byBusyFlag == 0xff)
		{
			break;
		}
	}
	
	ResetChip ();				//復位,保持低電平480-960us					//
	Delay_ms(1);
}									

//函數功能	:讀取溫度
//輸入參數	: <pSN>芯片序號
//輸出參數	: 溫度值,放大10倍的整數
S16 RdTemperture (U8 *pSN)								//
{                   							
	U8 byRdData[8];
	U8 byTEMP_READ;
	U8 byCOUNT_PER_C;
	U8 byCOUNT_REMAIN;
	S16 t;							
	float ft;
	
	
	RdScratchpad(pSN, byRdData, 8);		//讀取數據,沒有讀CRC校驗碼

	//0.5攝氏度精度的計算方法
//	t = byRdData[0]+(byRdData[1]<<8);	//1表示0.5攝氏度
//	return t;
	
	t = byRdData[0]+(byRdData[1]<<8);
	byTEMP_READ = t>>1;
	byCOUNT_REMAIN = byRdData[6];
	byCOUNT_PER_C = byRdData[7];
					
	ft = (float)byTEMP_READ - 0.25 + (float)(byCOUNT_PER_C - byCOUNT_REMAIN)/(float)byCOUNT_PER_C;
	t = ft*10;
	
	return t;				//1表示0.1攝氏度							
}									

//函數功能	:讀取芯片序號(只能在總線只有一個器件時調用)
//輸入參數	: <pSN>返回的芯片序號存放地址
void ReadROM(U8 *pSN)									//
{									
	U8 i;
	
	ResetChip ();			//復位					
	Delay_ms (1);			//延時					
	WrByte(0x33);			//發送讀序列號子程序			
	
	for(i=0;i<8;i++)
	{
		*pSN ++ = RdByte();	//讀取第一個序列號,應為10H;		//
	}							
}									

//功能	:寫溫度報警上下限
//輸入參數	: <pSN>溫度芯片序號
//		:  <nHighAlarmLim> 溫度報警上限
//		:  <nLowAlarmLim> 溫度報警下限
U8 WrTmptAlarmLim(U8 *pSN, S16 nHighAlarmLim, S16 nLowAlarmLim)
{
	U8 byWrData[2];
	U8 byRdData[4];
	
	byWrData[0] = nHighAlarmLim;
	byWrData[1] = nLowAlarmLim;
	
	WrScratchpad(pSN, byWrData, 2);		//寫入數據
	
	RdScratchpad(pSN, byRdData, 4);		//讀出數據進行校驗
	if((byRdData[2] != nHighAlarmLim) || (byRdData[3] != nLowAlarmLim))
	{
		return FALSE;
	}
	
	//將中間寄存器數據拷貝到E2RAM(存放報警限數據)
	SendHeaderData(pSN, 0x48);
	Delay_ms (6);				//延時6ms	
	ResetChip();				//復位芯片,結束本次操作
}
	
		
									

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
经典三级在线一区| 久久99精品国产麻豆婷婷洗澡| 日韩欧美国产三级电影视频| 在线观看日韩毛片| 欧美视频一区二区三区| 在线观看日韩高清av| 色婷婷av久久久久久久| 99久久国产综合精品麻豆| kk眼镜猥琐国模调教系列一区二区| 韩国女主播成人在线| 国产美女精品人人做人人爽| 国产一二精品视频| 成人黄色777网| 色狠狠色噜噜噜综合网| 欧美日产在线观看| 欧美电影免费观看高清完整版在线| 精品毛片乱码1区2区3区| 亚洲精品在线网站| 17c精品麻豆一区二区免费| 亚洲毛片av在线| 热久久国产精品| 国产精品一区二区在线观看网站 | 亚洲二区在线观看| 五月天中文字幕一区二区| 激情综合色综合久久| 不卡在线观看av| 91精品国产综合久久小美女| 久久亚洲捆绑美女| 亚洲精品日日夜夜| 久久激五月天综合精品| 波多野结衣亚洲| 欧美一区二区三区在线看| 日本一区二区三区国色天香| 亚洲国产日韩综合久久精品| 国产一区二区三区免费观看| 在线视频观看一区| 欧美国产日本韩| 日韩激情一区二区| 成人av在线网| 欧美一区二区国产| 亚洲一区在线观看免费观看电影高清| 麻豆国产欧美日韩综合精品二区| kk眼镜猥琐国模调教系列一区二区 | 国产激情视频一区二区三区欧美| 91精品1区2区| 国产欧美日韩三级| 日本人妖一区二区| 色乱码一区二区三区88| 日韩一区和二区| 亚洲精品国产无天堂网2021| 国产一区二区h| 日韩欧美国产wwwww| 亚洲激情网站免费观看| 成人美女视频在线观看18| 欧美成人三级电影在线| 亚洲自拍都市欧美小说| 99久久综合狠狠综合久久| 久久久久久久久久美女| 日本不卡视频在线观看| 欧美性感一区二区三区| 亚洲欧洲国产专区| 成人一区二区三区在线观看| 久久亚洲影视婷婷| 久久国内精品自在自线400部| 欧美日韩中文字幕精品| 亚洲制服欧美中文字幕中文字幕| 成人性生交大片免费看视频在线| 久久精品人人做人人综合| 久久99精品久久久久久动态图| 欧美一级高清片| 久久爱另类一区二区小说| 欧美一区二区三区啪啪| 日日摸夜夜添夜夜添精品视频 | 日精品一区二区| 制服丝袜亚洲播放| 老司机精品视频在线| 欧美大片在线观看| 国产一区二区调教| 久久久激情视频| 成人av资源在线| 亚洲精品一二三四区| 91精品福利视频| 天天综合天天做天天综合| 日韩一区二区在线看| 精品一区二区三区视频在线观看 | 成人激情午夜影院| 中文字幕视频一区| 91啪在线观看| 午夜精品久久久久久久99水蜜桃 | 精品一区二区三区视频| 久久美女艺术照精彩视频福利播放| 国产寡妇亲子伦一区二区| 久久久精品国产免大香伊 | 欧美日韩一区二区三区不卡 | 日本一区二区三区高清不卡| 丁香婷婷深情五月亚洲| 日韩毛片在线免费观看| 69堂国产成人免费视频| 国产精品一区二区三区99| 日韩理论片一区二区| 欧美久久久久久久久久| 国产制服丝袜一区| 一个色综合av| 欧美成人精品高清在线播放| 懂色av一区二区三区免费观看| 亚洲女性喷水在线观看一区| 91超碰这里只有精品国产| 国产丶欧美丶日本不卡视频| 亚洲女人小视频在线观看| 91精品国模一区二区三区| 成人综合婷婷国产精品久久蜜臀| 亚洲已满18点击进入久久| 日韩欧美国产高清| 91豆麻精品91久久久久久| 久久国产成人午夜av影院| 中文字幕一区二区三区在线播放 | 一区二区三区四区国产精品| 日韩欧美中文字幕公布| 91网站视频在线观看| 另类小说一区二区三区| 成人欧美一区二区三区视频网页| 欧美一卡二卡三卡| 色一情一乱一乱一91av| 国产制服丝袜一区| 日韩精品久久久久久| 亚洲婷婷综合久久一本伊一区 | 国产成人啪免费观看软件| 亚洲二区在线视频| 亚洲欧美日韩人成在线播放| 久久综合色一综合色88| 69久久99精品久久久久婷婷| 99九九99九九九视频精品| 韩国女主播成人在线观看| 人人超碰91尤物精品国产| 亚洲综合成人在线视频| 亚洲精品久久久蜜桃| 亚洲欧洲av在线| 中文字幕电影一区| 国产人久久人人人人爽| 精品久久久久香蕉网| 日韩欧美色综合| 91麻豆精品91久久久久同性| 97精品国产露脸对白| 成人免费av网站| fc2成人免费人成在线观看播放| 国产精品88888| 国产一区久久久| 狠狠色伊人亚洲综合成人| 青青草成人在线观看| 日韩精品一区第一页| 五月天国产精品| 五月天网站亚洲| 午夜精品福利一区二区蜜股av| 亚洲成人av一区二区三区| 亚洲国产视频网站| 亚洲国产日韩a在线播放性色| 一区二区欧美国产| 亚洲一区二区三区影院| 亚洲妇女屁股眼交7| 亚洲aaa精品| 美女在线视频一区| 精品制服美女丁香| 国产精品夜夜嗨| 不卡的av电影| 在线视频综合导航| 欧美人妇做爰xxxⅹ性高电影| 欧美乱熟臀69xxxxxx| 欧美一区二区在线播放| 精品少妇一区二区三区日产乱码| 精品国产凹凸成av人导航| 国产精品女同互慰在线看| 成人欧美一区二区三区1314| 一区二区三区小说| 日本大胆欧美人术艺术动态 | av在线综合网| 欧美三级日本三级少妇99| 日韩视频免费直播| 国产目拍亚洲精品99久久精品| 亚洲男同1069视频| 天堂av在线一区| 国产成人日日夜夜| 欧美少妇性性性| 久久久久久久精| 一区二区三区欧美| 国内精品伊人久久久久av影院| 97精品久久久午夜一区二区三区| 欧美日韩国产区一| 久久精品男人天堂av| 亚洲精品少妇30p| 国模套图日韩精品一区二区 | 日韩中文字幕91| 成人自拍视频在线| 欧美日韩你懂得| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲成人av福利| 国产成人丝袜美腿| 欧美一区二视频| 樱花影视一区二区| 国产一区二区三区高清播放| 在线观看中文字幕不卡|