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

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

?? usb_thermometer.c

?? USB溫度采集系統的下位機程序
?? C
字號:
/*基于USB溫度采集系統 USB_Thermometer( CH372A ) 單片機程序*/
//采用12.000MHZ 晶振//
//八路并行采集
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////


#include <reg51.h>
#include <intrins.h>
#include "CH372INC.h"

//////////////////////////////////////////////////////
#define  CH372_D0_D7 P2
#define	 StartTest   0x55



/*定義一些IO口的位*/
/////////////////////////////////////////////////////
sbit  DQ=P1^0;
sbit  CH372_A0=P1^1;
sbit  CH372_RD=P1^2;
sbit  CH372_WR=P1^3;


/*定義一些變量*/
////////////////////////////////////////////////////////
		
unsigned char Total=0;//DS18B20的個數
unsigned char Command;//命令代碼
unsigned char Config;  //配置寄存器變量
unsigned char SensorNum[8][8];//DS18B20序列號
unsigned char SendBuf[16];//一個數據塊最多只能發送16字節
unsigned char RecvBuf[12];//一個數據塊最多只能接收16字節
////////////////////////////////////////////////////////////////
//18b20的讀取程序

/**************************************************************/
/*
void Delay(unsigned char i)//  3+2*i個機器周期
{
 while(--i);
}
*/
/////////////////////////////////////////////////////////////////
void Delay50ms(unsigned char i)          //延時50ms  i 次
{
unsigned char j,k,l;
for(j=0;j<i;j++)
  for(k=0;k<80;k++)
    for(l=0;l<250;l++);
}

////////////////////////////////////////////////////////////////////
void Delay15()            //延時15us
{ unsigned char i;
for(i=0;i<5;i++);
}

void Delay60()           //延時60us
{
unsigned char i;
for(i=0;i<20;i++);
}


/*=========================================================
DS18B20驅動程序段
==========================================================*/


void WriteBit0()     //寫位0
{
DQ=1;
DQ=0;
Delay60();
DQ=1;
_nop_();
_nop_();
}



void WriteBit1()  //寫位1
{
DQ=1;
DQ=0;
_nop_();
_nop_();
DQ=1;
Delay60();
}

/*=======================================================*/


bit ReadBit()  //讀取數據位
{
bit b;
DQ=1;
DQ=0;
_nop_();
_nop_();
_nop_();
_nop_();
DQ=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
b=DQ;
Delay15();
Delay15();
Delay15();
_nop_();
_nop_();
return b;
}

/*=========================================================*/


void Reset_DS18B20() //復位
{
unsigned char i;
DQ=1;
DQ=0;
for(i=0;i<8;i++)
Delay60();
DQ=1;
while(DQ);
for(i=0;i<4;i++)
Delay60();
}


/*==============================================================*/


void WriteByte(unsigned char byte)//寫一字節byte
{
unsigned char i;
for(i=0;i<8;i++)
	{
	if(byte&0x01)           //最低位是否為1?
	WriteBit1();
	else
	WriteBit0();
	byte=byte>>1;         //字節右移1位
	}
}


unsigned char ReadByte()  //讀一字節byte
{
unsigned char i,j;
bit   b;
j=0;
for(i=0;i<8;i++)
	{
	b=ReadBit();        //讀取一位
	if(b)              //為1否
 	 j+=1;
 	j=_cror_(j,1);    //循環右移1位
	}
return j;
}


/*=============================================================*/



//---------------------------------------------------------------------------//
/*CH372_CS強制接地時*/	
//////////////////////////////////////////////////////////////////////////
/*定義CH372寫命令函數*/
//////////////////////////////////////////////////////////////////////////
void CH372_WR_CMD( unsigned char cmd)
{	
	CH372_D0_D7 = cmd;
	CH372_A0=1;	
	CH372_WR=0;
	CH372_WR=1;
	CH372_A0=0;
	CH372_D0_D7=0XFF;
}

///////////////////////////////////////////////////////////////////////////
/*定義CH372寫數據函數*/
///////////////////////////////////////////////////////////////////////////
void CH372_WR_DATA( unsigned char dat)
{	
	CH372_D0_D7= dat;
	CH372_WR=0;
	CH372_WR=1;
	CH372_D0_D7 = 0xFF; 
}


///////////////////////////////////////////////////////////////////////////
/*定義CH372讀數據函數*/
///////////////////////////////////////////////////////////////////////////
unsigned char CH372_RD_DATA()
{  
	/* 從CH372的數據端口讀出數據,周期不小于1.5uS,如果單片機較快則延時 */
	unsigned char dat;
	CH372_D0_D7 = 0xFF; // 對于準雙向I/O,請在此設置輸出全高電平,便于輸入
	CH372_RD = 0;
	dat =CH372_D0_D7;
	CH372_RD = 1;
	CH372_D0_D7 = 0xFF;  //對于準雙向I/O,請在此設置輸出全高電平
	return( dat );
}

/*CH372_CS強制接地時*/
//---------------------------------------------------------------------------//	


//////////////////////////////////////////////////////////////////////////////
/*定義CH372初始化函數*/
//////////////////////////////////////////////////////////////////////////////
void CH372_Init()
{
	unsigned char i; 
	CH372_WR_CMD( CMD_CHECK_EXIST );  /* 測試CH372是否正常工作 */
	CH372_WR_DATA( 0x55 );  /* 寫入測試數據 */
	i = ~ 0x55;  /* 返回數據應該是測試數據取反 */
	if ( CH372_RD_DATA( ) != i ) 
	{  /* CH372不正常 */
		for ( i=80; i!=0; i-- ) 
		{
			CH372_WR_CMD( CMD_RESET_ALL );  /* 多次重復發命令,執行硬件復位 */
			CH372_RD_DATA( );
		}
		CH372_WR_CMD( 0 );
		Delay50ms(1);  /* 延時50ms */
	}
		
	CH372_WR_CMD( CMD_SET_USB_MODE );/* 設置USB工作模式, 必要操作 */
	CH372_WR_DATA( 2 );  /* 設置為使用內置固件的USB設備方式 */
	for ( i=10; i!=0; i-- ) 
	{  /* 等待操作成功,通常需要等待10uS-20uS */
		if ( CH372_RD_DATA( ) == CMD_RET_SUCCESS ) break;
	}
	/* 下述啟用中斷,假定CH372連接在INT0 */
	IT0 = 0;  /* 置外部信號為低電平觸發 */
	IE0 = 0;  /* 清中斷標志 */
	EA  = 1;
	EX0 = 1;  /* 允許CH372中斷 */
}


////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
/* CH372中斷服務程序,使用寄存器組1 */
//////////////////////////////////////////////////////////////////////////////
void	CH372_Interrupt( ) interrupt 0 
{
	unsigned char InterruptStatus;
	unsigned char i;
	unsigned char j;
	unsigned char RecvLength;//收數據長度

	CH372_WR_CMD( CMD_GET_STATUS );  /* 獲取中斷狀態并取消中斷請求 */
	InterruptStatus = CH372_RD_DATA( );  /* 獲取中斷狀態 */
	switch ( InterruptStatus ) 
	{  /* 分析中斷狀態處理 */
		case USB_INT_EP2_OUT: 
		{  /* 批量端點下傳成功 */
			CH372_WR_CMD( CMD_RD_USB_DATA );  /* 從當前USB中斷的端點緩沖區讀取數據塊,并釋放緩沖區 */
			RecvLength = CH372_RD_DATA( );  /* 首先讀取后續數據長度 */
			for ( i=0;i<RecvLength;i++ ) 
			RecvBuf[ i ] = CH372_RD_DATA( );  /* 接收數據包 */
			Command=RecvBuf[0];//存儲命令代碼

			if( Command==StartTest )   //判斷是否是測試序列號
			{	
				Reset_DS18B20();
				WriteByte(0x33); //發讀取DS18B20序列號的命令
				for(i=0;i<8;i++)
				SendBuf[i]=ReadByte();
				Reset_DS18B20();  //總線復位
				CH372_WR_CMD( CMD_WR_USB_DATA7 );  /* 向USB端點2的發送緩沖區寫入數據塊 */
				CH372_WR_DATA( 0x08 );  /* 首先寫入后續數據塊長度 */
				for ( i=0;i<8;i++ ) 
				CH372_WR_DATA(SendBuf[ i ] ); /*發送數據塊*/
			}
			else
			{
				Config=RecvBuf[ 11 ];//存儲配置寄存器變量
				for(i=0;i<8;i++)
				{
					SensorNum[Total][i]=RecvBuf[i+1];
				}

				Reset_DS18B20();
				WriteByte(0x55); //發匹配目標DS18B20序列號的命令
				for(i=0;i<8;i++)
				WriteByte( RecvBuf[i+1]);//匹配目標DS18B20序列號
				WriteByte(0x4E);//發寫TH和TL報警溫度命令
				WriteByte(RecvBuf[9]);//發TH
				WriteByte(RecvBuf[10]);//發TL
				WriteByte(Config);//配置寄存器精度
				Total++;
				if(Total==Command)
				{	
					Reset_DS18B20();
					WriteByte(0xCC);  //跳過匹配序列號
					WriteByte(0x44); //發開始溫度轉換命令
					switch(Config)//DS18B20溫度轉換等待函數
					{
						case 0x1F:
							Delay50ms(2);
							break;

						case 0x3F:
							Delay50ms(4);
							break;

						case 0x5F:
							Delay50ms(8);
							break;

						case 0x7F:
							Delay50ms(16);
							break;
					}

					for(i=0;i<Command;i++)
					{	
						Reset_DS18B20();
						WriteByte(0x55); //發匹配目標DS18B20序列號的命令
						for(j=0;j<8;j++)
						WriteByte( SensorNum[i][j]);//匹配目標DS18B20序列號
						WriteByte(0xBE);//讀取溫度
						SendBuf[2*i]=ReadByte( );//讀低字節
						SendBuf[2*i+1]=ReadByte( );//讀高字節
					}
					CH372_WR_CMD( CMD_WR_USB_DATA7 );  /* 向USB端點2的發送緩沖區寫入數據塊 */
					CH372_WR_DATA( Command*2 );  /* 首先寫入后續數據塊長度 */
					for ( i = 0; i < Command*2; i++ ) 
					CH372_WR_DATA(SendBuf[ i ] ); /*發送數據塊*/
					Total=0;//清除Total
				}
			}
		break;
		}
	


		case USB_INT_EP2_IN: 
		{  /* 批量數據發送成功 */
			CH372_WR_CMD( CMD_UNLOCK_USB );  /* 釋放當前USB緩沖區 */ 
			if(Command!=StartTest)
			{
				Reset_DS18B20();
				WriteByte(0xCC);  //跳過匹配序列號
				WriteByte(0x44); //發開始溫度轉換命令
				switch(Config)//DS18B20溫度轉換等待函數
				{
					case 0x1F:
						Delay50ms(2);
						break;
					case 0x3F:
						Delay50ms(4);
						break;
					case 0x5F:
						Delay50ms(8);
						break;
					case 0x7F:
						Delay50ms(16);
						break;
				  }

				for(i=0;i<Command;i++)
				{	
					Reset_DS18B20();
					WriteByte(0x55); //發匹配目標DS18B20序列號的命令
					for(j=0;j<8;j++)
					WriteByte( SensorNum[i][j]);//匹配目標DS18B20序列號
					WriteByte(0xBE);//讀取溫度
					SendBuf[2*i]=ReadByte( );//讀低字節
					SendBuf[2*i+1]=ReadByte( );//讀高字節
				}
				CH372_WR_CMD( CMD_WR_USB_DATA7 );  /* 向USB端點2的發送緩沖區寫入數據塊 */
				CH372_WR_DATA( Command*2 );  /* 首先寫入后續數據塊長度 */
				for ( i = 0; i < Command*2; i++ ) 
				CH372_WR_DATA(SendBuf[ i ] ); /*發送數據塊*/;
			}
			break;
		}

		default: 
		{  /* 其它中斷,未用到,解鎖后退出即可 */
			CH372_WR_CMD( CMD_UNLOCK_USB );  /* 釋放當前USB緩沖區 */
			break;
		}
	}
}



////////////////////////////////////////////////////////////////////
/*主函數*/
////////////////////////////////////////////////////////////////////
void main()
{
	EA=0;
	Delay50ms(1);
	CH372_Init();
	while(1);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产欧美一区二区| 久久欧美中文字幕| 成人性生交大片免费看中文| 亚洲国产综合91精品麻豆| 国产视频一区在线观看| 欧美肥妇毛茸茸| 91视频在线看| 国产成人超碰人人澡人人澡| 午夜久久福利影院| 亚洲视频狠狠干| 国产清纯白嫩初高生在线观看91| 欧美高清视频在线高清观看mv色露露十八| 国产99久久久国产精品免费看| 日本中文字幕一区二区视频| 一级中文字幕一区二区| 18欧美乱大交hd1984| 久久精品亚洲国产奇米99| 8x8x8国产精品| 欧美特级限制片免费在线观看| 成人av在线网| 国产1区2区3区精品美女| 美国一区二区三区在线播放| 亚洲mv大片欧洲mv大片精品| 亚洲免费在线视频| 亚洲欧美日韩电影| 国产精品国产a级| 国产精品久久久久7777按摩| 国产亚洲欧美在线| 久久精品一区蜜桃臀影院| 日韩精品中文字幕一区| 亚洲自拍偷拍九九九| 国产精品女主播av| 中文欧美字幕免费| 亚洲国产精品v| 国产精品三级电影| 成人欧美一区二区三区在线播放| 国产欧美一区二区精品久导航 | 亚洲成人动漫一区| 一区二区成人在线| 亚洲 欧美综合在线网络| 亚洲国产美女搞黄色| 亚洲成人午夜电影| 五月天国产精品| 男女激情视频一区| 精品一区二区三区在线视频| 激情综合色综合久久综合| 久久99精品久久只有精品| 精品影院一区二区久久久| 国内精品自线一区二区三区视频| 久久99精品久久久| 懂色av一区二区在线播放| av不卡免费在线观看| 91老师国产黑色丝袜在线| 欧美亚州韩日在线看免费版国语版| 欧美日高清视频| 日韩精品一区二区三区四区 | 97se亚洲国产综合自在线| 色综合色综合色综合色综合色综合| 91老师片黄在线观看| 欧美日韩一区二区三区四区| 欧美一级片在线| 久久久91精品国产一区二区精品| 国产精品视频在线看| 亚洲欧美日韩成人高清在线一区| 亚洲国产精品精华液网站| 看电视剧不卡顿的网站| 高清国产一区二区| 91香蕉视频在线| 欧美日韩一区三区四区| 精品国产成人系列| 国产精品国模大尺度视频| 亚洲午夜国产一区99re久久| 国产一区欧美日韩| 色哟哟精品一区| 欧美成人一区二区三区片免费 | 日韩精品一区二区三区中文精品| 国产三级三级三级精品8ⅰ区| 亚洲精品国产精华液| 午夜成人免费视频| 国产99久久久国产精品潘金网站| 欧日韩精品视频| 久久久夜色精品亚洲| 一区二区三区四区亚洲| 精品亚洲国产成人av制服丝袜 | 欧美va亚洲va| 一区二区三区毛片| 另类小说一区二区三区| www.色精品| 日韩午夜在线观看| 中文字幕一区在线| 久久精品国产秦先生| 欧美性视频一区二区三区| 亚洲国产精品av| 毛片基地黄久久久久久天堂| av毛片久久久久**hd| 精品av综合导航| 五月天亚洲婷婷| 91免费版pro下载短视频| 337p日本欧洲亚洲大胆色噜噜| 伊人夜夜躁av伊人久久| 大胆欧美人体老妇| 欧美大片在线观看| 亚洲国产cao| 色综合久久久久网| 国产精品美女一区二区三区| 久久国产视频网| 欧美日韩成人综合在线一区二区| 国产精品传媒入口麻豆| 国产一区二区三区免费播放| 6080日韩午夜伦伦午夜伦| 亚洲天堂2016| 成人黄色免费短视频| 精品国产1区二区| 蜜桃精品视频在线| 3751色影院一区二区三区| 一区二区三区精密机械公司| 成人午夜免费视频| 国产午夜精品一区二区| 麻豆91免费看| 欧美一区二区黄| 免费成人美女在线观看| 91精品国产手机| 成人精品高清在线| 久久久精品国产免费观看同学| 日韩av一区二| 欧美一区三区二区| 日韩中文字幕1| 欧美性色aⅴ视频一区日韩精品| 自拍偷在线精品自拍偷无码专区| 粉嫩欧美一区二区三区高清影视| 精品久久久久久久久久久久久久久久久 | 精品视频在线免费观看| 亚洲欧洲综合另类| 99精品视频中文字幕| 国产精品天美传媒| 成人午夜看片网址| 国产日韩亚洲欧美综合| 国产成人精品一区二区三区四区| 久久夜色精品一区| 福利一区福利二区| 日本一区二区久久| 91亚洲永久精品| 亚洲免费av网站| 欧美亚洲综合一区| 日本亚洲天堂网| 亚洲精品一线二线三线| 国产99久久久精品| 国产精品盗摄一区二区三区| 色综合久久天天| 亚洲高清久久久| 日韩欧美国产三级| 国产一区二区网址| 中文字幕日本乱码精品影院| 91免费视频观看| 亚洲最大的成人av| 欧美少妇xxx| 久久99精品久久久| 亚洲视频精选在线| 91麻豆精品91久久久久同性| 精品一区二区三区在线播放视频| 日韩欧美中文字幕制服| 国产成人午夜精品5599| 中文字幕一区二区日韩精品绯色| 欧美怡红院视频| 精品一区二区三区在线观看国产| 久久精品视频网| 色婷婷精品大在线视频| 日韩精品三区四区| 国产三级精品三级在线专区| 色一情一乱一乱一91av| 麻豆精品在线视频| 国产精品狼人久久影院观看方式| 欧美影院一区二区三区| 国产一区二区剧情av在线| 国产精品免费免费| 在线播放中文一区| 国产91丝袜在线播放九色| 亚洲国产成人va在线观看天堂| 精品国精品自拍自在线| 色婷婷亚洲一区二区三区| 精品一区二区久久久| 国产精品久久久久久久岛一牛影视| 欧美视频一区在线| 国产精品一二三四区| 亚洲午夜久久久久久久久电影院 | 裸体歌舞表演一区二区| 亚洲欧洲无码一区二区三区| 欧美一级搡bbbb搡bbbb| 色婷婷综合在线| 国产综合久久久久久鬼色| 亚洲国产精品久久不卡毛片| 国产欧美1区2区3区| 欧美日韩成人综合在线一区二区 | 欧美精品乱人伦久久久久久| 国产成人精品一区二| 丝瓜av网站精品一区二区| 国产精品久久久久久久久免费丝袜| 宅男在线国产精品| 在线视频你懂得一区二区三区| 国内精品视频一区二区三区八戒|