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

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

?? 1wire.c

?? 我編寫的多通道利用DB18B20監測溫度的AVR子程序。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*總線示意圖:*/
//    -------------------                 VCC
//   |      ATMEGA16     |                 |
//   |                   |                R=1K
//   |                   |                 |
//   |      pullup+busin |-------R=100------------BUS----->
//   |                   |                 |
//   |                   |               R=22
//   |                   |                 |
//   |         pulldown  |---斜率控制-----K
//   |                   |                 |
//    -------------------                 GND
/*DS18B20寄存器示意表*/
//byte0		temperature LSB;
//byte1		temperature MSB;		EEPROM
//byte2*	TH reg;				<->TH reg;
//byte3*	TL reg;				<->TL reg;
//byte4*	CONFIG;				<->CONFIG;
//byte5		reserve;
//byte6		reserve;
//byte7		reserve;
//byte8*	CRC;
#include <iom16v.h>
#include <macros.h>
#ifndef uchar
#define uchar unsigned char
#define uint unsigned int
#endif
//管腳定義:
#define on_led_on		PORTB&=~(1<<6)
#define on_led_off		PORTB|=(1<<6)
#define err_led_on		PORTB&=~(1<<7)
#ifndef busin
#define busin			DDRA							//定義1-8管腳方向:輸入數據值;輸出強上拉
#define busup			PORTA							//定義上拉管腳值:賦為1,使其具有強上拉的作用
#define busindata		(PINA&setdata)					//數據輸入腳的值:if=00,data=0;else data=1.
#define busdown			PORTC							//數據下拉管腳值。
#define rs485rx;	PORTD |=(1<<2);						//接收數據:1:485(0)
#define rs485tx;	PORTD &=~(1<<2);					//發送數據
#endif
//總線賦值:
#define bus0;	busdown = setdata;						//下拉總線:=0;
#define bus1;	busdown =0x00;/*&= clrdata;*/			//釋放總線:=1;(1k上拉)
#define buspullup;	
//bus1;busin=setdata;busup=0XFF;asm(" nop");asm(" nop");asm(" nop");asm(" nop");busin=0x00;/*&=clrdata;*/	//動態上拉總線0.5ms:=1;(動態上拉+1k上拉)
//延時時間定義:
#define delay1us();		delayhalfus(1);
#define delay2us();		delayhalfus(2);					//1.5us
#define delay3us();		delayhalfus(3);					//2us
#define delay5us();		delayhalfus(9);					//5us
#define delay7us();		delayhalfus(12);				//6.5us
#define delay8us();		delayhalfus(16);				//8.5us
//#define delay10us();	delayhalfus(19);				//10us
#define delay13us();	delayhalfus(25);				//13.5us
#define delay15us();	delayhalfus(29);				//15us
#define delay37us();	delayhalfus(73);				//37us
#define delay45us();	delayhalfus(89);
#define delay47us();	delayhalfus(93);
#define delay60us();	delayhalfus(119);
//#define delay80us();	delayhalfus(159);
#define delay120us();	delayhalfus(239);
#define delay380us();	delayhalfus(199);delayhalfus(199);delayhalfus(159);
//#define delay400us();	delayhalfus(199);delayhalfus(199);delayhalfus(199);
#define delay500us();	delayhalfus(249);delayhalfus(249);delayhalfus(249);delayhalfus(249);
//
void search_8bus(void);									//搜索全部(8個)通道子程序
void search_8ic(void);									//搜索單通道子程序(最多搜索8個節點)
uchar search_ic(void);									//搜尋器件注冊碼
void ini_allbus(void);									//初始化所有通道
void ini_wire(void);									//初始化通道上所有傳感器
uchar ini_ic(uchar);									//傳感器初始化
void syscyc(void);										//所有通道循環溫度轉換
void start_tempad(uchar);								//廣播啟動溫度轉換
void return_alldata(void);								//返回通道所有ic溫度數據
void return_data(uchar);								//返回數據
void onewire_writerom(uchar);							//匹配64bit rom 注冊碼
void onewire_reset(void);								//總線復位
void onewire_write(uchar);								//寫1字節
uchar onewire_read(void);								//讀1字節
void onewire_wbit(uchar);								//寫單位
uchar onewire_rbit(void);								//讀單位
uchar onewire_randc(void);								//
void delayhalfus(uchar);								//延時程序(n+1)/2us
extern delay256us(uchar);
extern void eeprom_rd_add(void);

const uchar crctable[] = {
	0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,
	157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220,
	35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98,
	190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255,
	70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7,
	219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154,
	101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36,
	248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185,
	140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205,
	17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80,
	175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238,
	50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115,
	202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139,
	87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22,
	233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168,
	116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53};
const uchar set[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
const uchar clr[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
extern const uchar led_ddr[8];
extern const uchar led_portb[8];

uchar allbus_ic_id[8][8][8];							//8個通道
uchar icnum[8] = {0,0,0,0,0,0,0,0};						//查詢到的第幾個ic,也可以得到通道的節點數。
uchar t_data[8][16];									//溫度數據
uchar haveic;											//總線有設備
uchar bus_num;											//總線通道循環計數
uchar setdata,clrdata;									//已知通道,對bus的操作。
uchar lastadd;											//上次查詢差異位的位計數
extern uchar setup;										//通訊setup_sign
extern uchar duanlu[8];									//短路狀態:正常aa;VCC短路50;GND短路05.
extern uchar dianlu[8];								//電路計數器。
extern uchar onoff;										//關機
extern uchar add_change;
/*******************************************************
搜索全部(8個)通道子程序:
串口通道發送:通道號;子程序發送所有搜索號;0XFF
********************************************************/
void search_8bus(void)
{
	for(bus_num=0;bus_num<8;bus_num++)
	{
		DDRB=led_ddr[bus_num];							//控制led
		PORTB&=led_portb[bus_num];						//控制led
		setdata = set[bus_num];
		clrdata = clr[bus_num];
		search_8ic();									//搜索指定(通過全局變量bus_num)通道子程序。
		////eeprom work;
		DDRB=0xf0;PORTB|=0x0f;							//控制led
	}
}
/*******************************************************
搜索單通道子程序(最多搜索8個節點):串口發送所有搜索號
無設備返回05;搜索失敗返回15;crc校驗失敗返回25;字節無效返回35;通道ic過多返回45。
********************************************************/
void search_8ic(void)
{
	uchar jb1,jb2,jb3,jb4;								//局變
	lastadd = 0;									//上次查詢差異位的位計數!!
	icnum[bus_num]= 0;
	for(jb1=0;jb1<8;jb1++)
	{
		jb2 = search_ic();
		if(jb2 == 0xff)
		{
			icnum[bus_num]++;
			break;
		}
		else if(jb2 == 0x05)
		{/*UDR = 0x05;out485();*/}
		else if(jb2 == 0x15)
		{/*UDR = 0x15;out485();*/}
		else if(jb2 == 0x25)
		{/*UDR = 0x25;out485();*/}
		else if(jb2 != 0x00)
		{/*UDR = 0x35;out485();*/}						//返回字節無效
		else
		{
//			for(jb3=0;jb3<8;jb3++)
//			{
//				jb4 = allbus_ic_id[bus_num][icnum[bus_num]][jb3];
//				UDR = jb4;	out485();				//返回id數據
//			}
			icnum[bus_num]++;
			if(jb1==7)
			{
				//UDR = 0x45;	out485();				//通道ic過多
			}
		}
	}
}
/*********************************************
從總線上搜尋器件(DS18B20)注冊碼:
正常時返回00,搜索已完返回ff;無設備返回05;搜索失敗返回15;crc校驗失敗返回25。
*********************************************/ 	
uchar search_ic(void)
{
	uchar jb_bit_num;									//位計數
	uchar change_bit;									//選擇的路徑(0/1)
	uchar last;											//差異位的位計數(記錄下該值,判斷下一個ic的id)
	uchar jb1,jb2;										//局變
	uchar bita,bitb;									//位與位補碼
	uchar jbcrc,crc8;
	last = 0x00;
	onewire_reset();									//復位;
	if(haveic == 0){return 0x05;}						//返回無設備
	onewire_write(0xf0);								//搜尋指令
	for(jb_bit_num=1;jb_bit_num<=64;jb_bit_num++)
	{
		bita = onewire_rbit();
		bitb = onewire_rbit();
		if((bita==1)&&(bitb==1))
		{return 0x15;}									//返回搜索失敗
		else
		{                               
			if(bita!=bitb)
			{
				change_bit = bita;
			}
			else 
			{
				if(jb_bit_num == lastadd)				//bita=bitb=0;
				{
					change_bit = 1;
				}
				else if(jb_bit_num > lastadd)
				{
					change_bit = 0;
				}
				else									//jb_bit_num < last
				{
					jb1 = (jb_bit_num-1)/8;
					jb2 = (jb_bit_num-1)%8;
					change_bit = allbus_ic_id[bus_num][(icnum[bus_num]-1)][jb1]&set[jb2];
				}
				if(change_bit == 0)
				{
					last = jb_bit_num;
				}
			}
			jb1 = (jb_bit_num-1)/8;
			jb2 = (jb_bit_num-1)%8;
			if(change_bit == 0)
			{allbus_ic_id[bus_num][icnum[bus_num]][jb1] &= clr[jb2];}
			else
			{allbus_ic_id[bus_num][icnum[bus_num]][jb1] |= set[jb2];}
			onewire_wbit(change_bit);
		}
	}
	crc8=0x00;
	for(jbcrc=0;jbcrc<8;jbcrc++)						//crc校驗
	{
		jb1 = allbus_ic_id[bus_num][icnum[bus_num]][jbcrc];
		jb1 ^= crc8;
		crc8 = crctable[jb1];
	}
	if(crc8 != 0x00)
	{
		return 0x25;									//crc校驗失敗
	}
	if(last == 0)
	{
		return 0xff;									//返回搜索完畢;
	}
	lastadd = last;
	return 0x00;										//正常返回
}
/*********************************************************
初始化所有通道上傳感器
************************************************************/
void ini_allbus(void)
{
	for(bus_num=0;bus_num<8;bus_num++)
	{
		//UDR = bus_num;	out485();
		setdata = set[bus_num];
		clrdata = clr[bus_num];
		ini_wire();
		//UDR = 0xff;	out485();
	}
}
/*********************************************************
初始化通道上所有傳感器
正常時返回00;無設備返回04;配置失敗返回24;crc校驗失敗返回14,94;
超時溢出返回34;pipei失敗返回0x84;寄生供電返回0x44;字節無效返回0x54。
************************************************************/
void ini_wire(void)
{
	uchar jb_ic_num;									//通道ic計數器
	uchar jb1;
	for(jb_ic_num=0;jb_ic_num<icnum[bus_num];jb_ic_num++)
	{
		jb1 = ini_ic(jb_ic_num);
		if(jb1 == 0x04){/*//UDR = 0x04;out485();*/}		//返回無設備
		else if(jb1==0x14)
		{/*//UDR = 0x14;out485();*/}					//返回crc校驗失敗
		else if(jb1==0x24)
		{/*//UDR = 0x24;out485();*/}					//配置失敗
		else if(jb1==0x94)
		{/*//UDR = 0x94;out485();*/}					//返回crc校驗失敗
		else if(jb1==0x34)
		{/*//UDR = 0x34;out485();*/}					//返回超時溢出。
		else if(jb1==0x84)
		{/*//UDR = 0x84;out485();*/}					//pipei失敗
		else if(jb1==0x44)
		{/*//UDR = 0x44;out485();*/}					//返回寄生供電!
		else if(jb1!=0x00)
		{/*//UDR = 0x54;out485();*/}					//返回字節無效
	}
}
/*********************************************************
初始化溫度傳感器
正常時返回00;無設備返回04;配置失敗返回24;crc校驗失敗返回14,94;
超時溢出返回34;pipei失敗返回0x84;寄生供電返回0x44;字節無效返回0x54。
*********************************************************/
uchar ini_ic(uchar num)
{
	uchar tem_datal,tem_datah;							//
	uchar crc8,config;									//
	uchar jb1,jb2,jb3;
	onewire_reset();									//復位;
	if(haveic == 0){return 0x04;}						//返回無設備
	onewire_write(0x55);								//匹配rom
	onewire_writerom(num);
//	{return 0x84;}										//匹配64bit rom 注冊碼
	onewire_write(0xbe);								//讀暫存器9字節
	crc8 = 0x00;
	for(jb1=0;jb1<9;jb1++)
	{
		jb2 = onewire_read();
		crc8 = crctable[crc8^jb2];				
		//UDR = jb2;out485();
		if(jb1==2){tem_datal = jb2;}					//溫度低報警值
		else if(jb1==3){tem_datah = jb2;}				//溫度高報警值
		else if(jb1==4){config = jb2;}					//配置字節
	}
	if(crc8 != 0){return 0x94;}							//返回crc校驗失敗
	if(config!=0x7f&&tem_datal!=0x00&&tem_datal!=0x00)	//配置錯誤,溫度報警設置錯誤
	{
		//寫暫存器3字節
		onewire_reset();								//復位;
		if(haveic == 0){return 0x04;}					//返回無設備
		onewire_write(0x55);							//匹配rom
		onewire_writerom(num);							//匹配64bit rom 注冊碼
		onewire_write(0x4e);							//寫暫存器3字節
		onewire_write(0x00);
		onewire_write(0x00);
		onewire_write(0x7f);
		//復制暫存器至eeprom3字節
		onewire_reset();								//復位;
		if(haveic == 0){return 0x04;}					//返回無設備
		onewire_write(0x55);							//匹配rom
		onewire_writerom(num);							//匹配64bit rom 注冊碼
		onewire_write(0x48);							//復制暫存器3字節
		onewire_write(0x00);
		onewire_write(0x00);
		onewire_write(0xff);
		//eeprom回讀暫存器
		onewire_reset();								//復位;
		if(haveic == 0){return 0x04;}					//返回無設備
		onewire_write(0x55);							//匹配rom
		onewire_writerom(num);							//匹配64bit rom 注冊碼
		onewire_write(0xb8);							//eeprom回讀暫存器
		for(jb3=0;;jb3++)
		{
			if(busindata!=0){break;}					//回讀完畢。
			if(jb3>250){return 0x34;}					//返回超時溢出。
		}
		//
		onewire_reset();								//復位;
		if(haveic == 0){return 0x04;}					//返回無設備
		onewire_write(0x55);							//匹配rom
		onewire_writerom(num);							//匹配64bit rom 注冊碼
		onewire_write(0xbe);							//讀暫存器9字節
		crc8 = 0x00;
		for(jb1=0;jb1<9;jb1++)
		{
			jb2 = onewire_read();
			crc8 = crctable[crc8^jb2];				
			if(jb1==2){tem_datal = jb2;}				//溫度低報警值
			else if(jb1==3){tem_datah = jb2;}			//溫度高報警值
			else if(jb1==4){config = jb2;}				//配置字節

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡一区二区中文字幕| 91.麻豆视频| 丝袜国产日韩另类美女| 日韩免费福利电影在线观看| 99精品视频在线观看免费| 日韩高清在线不卡| 中文字幕一区二区在线观看| 欧美日韩你懂得| 国产精品99久久久久久久vr| 亚洲成人www| 国产精品欧美一区喷水| 日韩欧美国产综合一区 | 亚洲综合色网站| 欧美va亚洲va在线观看蝴蝶网| 免费观看30秒视频久久| 日韩伦理av电影| 久久精品视频免费| 欧美成人女星排行榜| 欧美日韩国产高清一区二区三区 | 国产不卡一区视频| 天堂一区二区在线免费观看| 中文字幕亚洲区| 日本福利一区二区| 国产一区视频导航| 日韩—二三区免费观看av| 欧美一区二区三区四区在线观看| 久久电影国产免费久久电影 | 欧美一区二区在线不卡| 国产欧美一区二区精品秋霞影院 | 视频一区二区三区中文字幕| 欧美激情一区二区三区蜜桃视频 | 亚洲情趣在线观看| 成人v精品蜜桃久久一区| 免费成人在线影院| 亚洲香肠在线观看| 亚洲一区在线视频| 国产精品天美传媒| 欧美一区二区三区小说| 狠狠色丁香久久婷婷综合丁香| 91片在线免费观看| 青青草国产成人99久久| 91麻豆国产福利在线观看| 国产日韩欧美精品电影三级在线 | 亚洲午夜激情网页| av激情成人网| 亚洲午夜久久久久| 最新不卡av在线| 亚洲少妇最新在线视频| 欧美精品高清视频| 国产女同性恋一区二区| 欧美电影免费观看高清完整版在线| 精品污污网站免费看| 亚洲免费av网站| 久久精品亚洲一区二区三区浴池| 爽好多水快深点欧美视频| 亚洲人成7777| 精品三级在线观看| 色就色 综合激情| 99久久免费精品| 欧美一区二区三区的| 欧美日本精品一区二区三区| 美女诱惑一区二区| 午夜av一区二区三区| 国产精品视频线看| 91丨九色丨国产丨porny| 激情综合网天天干| 色偷偷一区二区三区| 欧美人牲a欧美精品| 天涯成人国产亚洲精品一区av| 国产1区2区3区精品美女| 成人免费黄色在线| 欧美激情在线看| 1区2区3区国产精品| 亚洲天堂2016| 在线播放91灌醉迷j高跟美女| 亚洲成人免费在线| 激情综合网最新| 99久久免费精品| 91精品久久久久久蜜臀| 国产欧美视频一区二区| 亚洲精品乱码久久久久久黑人 | 欧美日韩不卡在线| 国产亚洲一区二区三区四区| 综合久久综合久久| 国产精品1区2区3区在线观看| 免费人成在线不卡| 91精品国产综合久久久久久漫画| 国内精品自线一区二区三区视频| 国产婷婷精品av在线| 欧美日韩卡一卡二| 激情成人综合网| 丁香六月久久综合狠狠色| 日韩电影免费在线看| 国产一区三区三区| 国产综合色精品一区二区三区| 91免费看视频| 在线视频一区二区免费| 中文字幕免费观看一区| av日韩在线网站| 日韩精品中文字幕在线不卡尤物| 国产伦精品一区二区三区在线观看| 亚洲国产一区二区a毛片| 奇米精品一区二区三区四区 | 国产精品一区二区视频| 久久国产精品99精品国产| 欧美性受极品xxxx喷水| 国产欧美久久久精品影院| 日韩在线观看一区二区| 色综合中文字幕国产 | 4438x亚洲最大成人网| 欧美日韩在线三级| 《视频一区视频二区| 黄色精品一二区| 色噜噜久久综合| 亚洲国产成人av| 欧美国产亚洲另类动漫| 欧美久久免费观看| 欧美一区日韩一区| 国产欧美视频一区二区| 精品国产乱码久久久久久蜜臀 | 日韩黄色小视频| 精品88久久久久88久久久| 国产成人精品一区二| 在线精品视频免费播放| 日韩二区三区四区| 欧美日本在线一区| 成人欧美一区二区三区在线播放| 欧美—级在线免费片| 亚洲激情自拍偷拍| 五月天中文字幕一区二区| 国产在线麻豆精品观看| 这里只有精品免费| 国内精品免费在线观看| 日本不卡的三区四区五区| 久久亚洲精华国产精华液| 国产日产欧美一区二区三区| 精品美女一区二区三区| 亚洲精品国产第一综合99久久| 欧美无人高清视频在线观看| 中文字幕欧美激情一区| 91精品欧美福利在线观看| 久久美女艺术照精彩视频福利播放| 国产精品1区2区3区| 国产综合色产在线精品| 91亚洲精品久久久蜜桃网站| 亚洲国产中文字幕| 精品国产髙清在线看国产毛片| 夜夜嗨av一区二区三区四季av | 国产suv一区二区三区88区| 国产日韩精品一区| 97精品久久久久中文字幕| 色婷婷av一区二区三区软件 | 中文字幕在线观看不卡| 92国产精品观看| 亚洲中国最大av网站| 欧美久久免费观看| 91福利国产成人精品照片| 午夜私人影院久久久久| 久久草av在线| 欧美韩国日本一区| 极品销魂美女一区二区三区| 国产欧美日韩不卡免费| 日本一区二区视频在线观看| av一区二区久久| 国产一区二区电影| 成人av免费在线观看| 亚洲免费成人av| 欧美一级日韩免费不卡| 国产一区二区伦理| 亚洲免费观看高清完整版在线| 亚洲线精品一区二区三区八戒| 成人精品gif动图一区| 一区二区三区国产精品| 高清国产一区二区三区| 精品少妇一区二区三区日产乱码| 亚洲成人动漫在线免费观看| 精品久久久久久久久久久久包黑料 | 欧美变态tickle挠乳网站| 日韩一级免费一区| 国产一区二区三区免费在线观看| 亚洲小说春色综合另类电影| 经典一区二区三区| 日本最新不卡在线| 日韩电影免费在线看| 另类小说图片综合网| 欧美午夜精品久久久久久孕妇| 色悠悠久久综合| 欧美性videosxxxxx| 99精品国产视频| 不卡一卡二卡三乱码免费网站| 久久久久国产精品麻豆| 国产一区啦啦啦在线观看| 国产精品私人影院| 国产日韩精品一区二区三区 | 一区二区三区在线视频播放| 欧美日韩1区2区| 欧美一区二区三区在线视频| 欧美精品一区二区三区很污很色的| 日韩三区在线观看| 欧美日韩不卡视频|