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

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

?? nicd.c

?? AVR官方設計的充電器
?? C
字號:
/****************************************************************************
	
	Device		: AT90S2333

	File name   : NiCd.c

	Ver nr.		: 1.0

	Description : Source file for NiCd charging algorithme
				    - FAST_charge
					- TRICKLE_charge
								 
	Compiler	: IAR icca90
	 
	Author		: Asmund Saetre	/ Terje	Frostad	/ Dietmar Koenig
 
    Change log  : 02.02.2000 Changed to fit Battery Charger refrence	
                  design board	 AS	 
				  17.04.2000 Debugged by AS	
                  15.05.2000 Final test and review AS
 
****************************************************************************/

#include "NiCd.h"							//Battery	specific definitions

// Extern struct prototypes
extern time_struct time;

#ifdef DEBUG                  
extern int term_value1;
extern int term_value2;
extern int charge_current_min;
extern int charge_current_max;
#endif

// Fast	Charge Algorithme
//***************************************************************************
void FAST_charge(void)
{	
	char fast_finish_hour	=	0;
	char trickle_finish_min	=	0;
	int	last_min_temp = 0;
	int	last_min_volt = 0;		
	int	temp = 0;
	int temp2 = 0;
	char last_min	=	0;
	char last_sec	=	0;
	int	top_volt	=	0;
	int	new_top_volt	=	0;
	char i = 0;
	int	last_temp	=	0;

    #ifdef DEBUG                  
	term_value1=0;
	#endif
	
	time.sec = 0x00;
  	time.min = 0x00;
  	time.hour = 0x00;
  	time.t_count = 0x3878;
	OCR1 = 0x00; 
    TCCR1B = 0x01;              // Counter 1 clock prescale = 1
	
	temp = Battery(TEMPERATURE); 
	// if	TEMPERATURE	within absolute	limits
	if ((temp	<	MIN_TEMP_ABS) &&	(temp	>	MAX_TEMP_ABS))
	{
		temp2 = Battery(VOLTAGE);
		// if	VOLTAGE	lower than absolute VOLTAGE
		if (temp2 < MAX_VOLT_ABS)           
		{
    		// if	FAST charge	TEMPERATURE	high enough		
			if (temp < MIN_TEMP_FAST)				
			{
				OCR1 = 0x00; 
				TCCR1B = 0x01;              // Counter 1 clock prescale = 1
				last_min_temp = Battery(TEMPERATURE);
				last_min_volt = Battery(VOLTAGE); 
			
				//Calculate FAST charge	finish time
				trickle_finish_min = (time.min + MAX_TIME_FAST);
				fast_finish_hour = time.hour;
				while	(trickle_finish_min	>	60)
				{
					trickle_finish_min = trickle_finish_min	-	60;
					fast_finish_hour++;
				}
				 
				while	((CHKBIT(CHARGE_STATUS,FAST))	&& (!(CHKBIT(CHARGE_STATUS,ERROR))))
				{
					do                      //Set I_FAST with "soft start"
					{	
                        //Loop until charge current == I_FAST
						temp = Battery(CURRENT);
						if ((temp	<	(I_FAST+1))&&(OCR1 < 0xFF))
						{
							OCR1++;
						}
						else if	((temp > (I_FAST-1))&&(OCR1	>	0x00))
						{
							OCR1--;
						}
					}while (temp !=	I_FAST); // I_FAST	is set now

                    #ifdef DEBUG
                    /*Save the min and max charge current for debug 
                    information*/					
					if (temp <= charge_current_min)
						charge_current_min = temp;
					if (temp > charge_current_max)
    	   				charge_current_max = temp;           
    	   			#endif	
	
						
					if ((time.hour	== fast_finish_hour)&&(time.min	== trickle_finish_min))
					{
						/*Stop the PWM, flag max time charge termination and 
						ERROR. Save the termination value and the max limit 
						value for debug information*/
						Stop_PWM();
						SETBIT(TERMINATION,TIME_MAX);
						SETBIT(CHARGE_STATUS,ERROR);
			            #ifdef DEBUG                  
						term_value1 = time.min;
						term_value2 = trickle_finish_min;
						#endif
					}
					temp = Battery(TEMPERATURE);
					if ( temp	<	MAX_TEMP_ABS)
					{
						/*Stop the PWM, flag max temperature charge 
						termination and ERROR. Save the termination value and
						the max limit value for debug information*/
						Stop_PWM();
						SETBIT(TERMINATION,TEMP_MAX);
						SETBIT(CHARGE_STATUS,ERROR);
						#ifdef DEBUG                  
						term_value1 = temp;
						term_value2 =	MAX_TEMP_ABS;
						#endif
					}
					temp = Battery(VOLTAGE);
					if (temp > MAX_VOLT_ABS)
					{
						/*Stop the PWM, flag max charge voltage charge 
						termination and ERROR. Save the termination value and
						the max limit value for debug information*/
						Stop_PWM();
						SETBIT(TERMINATION,VOLT_MAX);
						SETBIT(CHARGE_STATUS,ERROR);
						#ifdef DEBUG                  
						term_value1 = temp;
						term_value2 =	MAX_VOLT_ABS;
						#endif
					}								
					if (time.min !=	last_min)												 
					{
						last_min = time.min;

						//If charge voltage is falling,	change to trickle mode
						temp = Battery(VOLTAGE);
						if ((last_min_volt - temp) > NEG_dV)
						{
	        				/*Stop the PWM, flag FAST charge dV/dt
    	    				termination and change charge mode to 
    	    				"TRICKLE". Save the termination value and the
    	    				max limit value for debug information*/
							Stop_PWM();
							SETBIT(TERMINATION,dV_dt);
							CLRBIT(CHARGE_STATUS,FAST);
							SETBIT(CHARGE_STATUS,TRICKLE);
							#ifdef DEBUG                  
							term_value1 = temp;
					    	term_value2 =	top_volt;
					    	#endif
						}
						//Store	current	charge voltage to next minute test
						last_min_volt = temp;
						
						/*If Battery temperature rises more than max dT/dt
						change to trickle mode*/
						temp = Battery(TEMPERATURE);
						if ((last_min_temp - temp) >= ntc_c[((temp-400)/25)])
						{																						
	    					/*Stop the PWM, flag FAST charge dT/dt
	    			    	termination and change charge mode to "TRICKLE".
	    					Save the termination value and the max limit 
		    				value for debug information*/
							Stop_PWM();
							SETBIT(TERMINATION,dT_dt);
							CLRBIT(CHARGE_STATUS,FAST);
							SETBIT(CHARGE_STATUS,TRICKLE);
							#ifdef DEBUG
							term_value1 = (last_min_temp -temp);
							term_value2 = ntc_c[((temp-400)/25)];
							#endif
						}						
						//Store	current	Battery	temp to next minute test		 
						last_min_temp = temp; 
					}
				}
			}	
    		else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
	    	{
    	    	/*Flag min temperature termination and ERROR. Save 
    		   	the termination value and the max limit value for debug 
    		    information*/
    			SETBIT(TERMINATION,TEMP_MIN);
    			SETBIT(CHARGE_STATUS,ERROR);
                #ifdef DEBUG
		    	term_value1 = temp;
			   	term_value2 = MIN_TEMP_FAST;
				#endif			   	
			}		 

		}
   		else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
		{
    		/*Flag max charge voltage charge termination and ERROR. Save 
    		the termination value and the max limit value for debug 
    		information*/
			SETBIT(TERMINATION,VOLT_MAX);
			SETBIT(CHARGE_STATUS,ERROR);
			#ifdef DEBUG
			term_value1 = temp;
			term_value2 = MAX_VOLT_ABS;
			#endif
		}		 
	}		 
	else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
	{
		if	(temp	<	MIN_TEMP_ABS)
		{
		    //Flag min temperature termination and save the limit value
		    #ifdef DEBUG
		    term_value2 =	MIN_TEMP_ABS;
		    #endif
			SETBIT(TERMINATION,TEMP_MIN); 
		}
		else
		{
		    //Flag max temperature termination and save the limit value
			SETBIT(CHARGE_STATUS,TEMP_MAX);
			#ifdef DEBUG
			term_value2 =	MAX_TEMP_ABS;
			#endif
		}
    	//Flag ERROR and save the measured value causing the error for debug	
    	SETBIT(CHARGE_STATUS,ERROR);        
    	#ifdef DEBUG
	    term_value1 = temp; 				
	    #endif
    }
}
// Trickle Charge	Algorithm
//***************************************************************************
void TRICKLE_charge(void)
{
	int	temp = 0;

	time.sec = 0x00;
  	time.min = 0x00;
  	time.hour = 0x00;
  	time.t_count = 0x3878;

	OCR1 = 0x00; 
    TCCR1B = 0x01;              // Counter 1 clock prescale = 1

    #ifdef DEBUG
	term_value1=0;
	#endif

	while	((CHKBIT(CHARGE_STATUS,TRICKLE)) &&	(!(CHKBIT(CHARGE_STATUS,ERROR))))	 
	{		 
		temp = Battery(TEMPERATURE); 
		// if TEMPERATURE within absolute limits
		if ((temp	<	MIN_TEMP_ABS) ||	(temp	>	MAX_TEMP_ABS))
		{
			temp = Battery(VOLTAGE);
			// if VOLTAGE lower	than absolute VOLTAGE
			if (temp < MAX_VOLT_ABS)
			{
				do	                  // set I_TRICKLE (with "soft start")
				{
				    //Loop until charge current == I_TRICKLE
					temp = Battery(CURRENT);
					if ((temp	<	I_TRICKLE) &&	(OCR1	<	0xFF))
					{
						OCR1++;
					}
					else if	((temp > I_TRICKLE)	&& (OCR1 > 0x00))
					{
						OCR1--;
					}
				}	while (temp	!= I_TRICKLE);

                #ifdef DEBUG
                /*Save the min and max charge current for debug information*/
				if (temp <= charge_current_min)
					charge_current_min = temp; 
				if (temp > charge_current_max)
	   			charge_current_max = temp;
	   			#endif

			}
			else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
			{
    			/*Stop PWM, flag max charge voltage charge termination and 
    			ERROR. Save the termination value and the max limit value for
    			debug information*/
				Stop_PWM();
				SETBIT(TERMINATION,VOLT_MAX);
				SETBIT(CHARGE_STATUS,ERROR);
				#ifdef DEBUG
				term_value1 = temp;
				term_value2 = MAX_VOLT_ABS;
				#endif
			}
		}
		else if(!(CHKBIT(CHARGE_STATUS,ERROR)))
		{
   			/*Stop PWM, flag min max temperature charge termination and ERROR
   			Save the termination value and the limit value for debug 
   			information*/
			Stop_PWM();
			if (temp < MIN_TEMP_ABS)
			{
				SETBIT(TERMINATION,TEMP_MIN);
				#ifdef DEBUG
				term_value2 = MIN_TEMP_ABS;
				#endif
			}
			else
			{
				SETBIT(TERMINATION,TEMP_MAX);
				#ifdef DEBUG
				term_value2 = MAX_TEMP_ABS;
				#endif
			}
			SETBIT(CHARGE_STATUS,ERROR);
			#ifdef DEBUG
			term_value1 = temp;
			#endif
		}
	}
	Stop_PWM();			// stop	PWM
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人性生交大片免费看在线播放 | 欧美羞羞免费网站| 国产精品免费久久| 成人精品高清在线| 国产精品久久久久久户外露出 | 亚洲综合一二三区| 91高清在线观看| 午夜精彩视频在线观看不卡| 日韩网站在线看片你懂的| 另类小说综合欧美亚洲| 精品国产自在久精品国产| 国产一区二区中文字幕| 中文字幕免费一区| 日本韩国欧美国产| 人禽交欧美网站| 国产亚洲综合av| 91视频你懂的| 天天av天天翘天天综合网| 日韩欧美国产一二三区| 国产精品一区二区x88av| 亚洲欧洲制服丝袜| 7777女厕盗摄久久久| 狠狠色狠狠色综合| 国产欧美一区二区三区网站| 色视频欧美一区二区三区| 日韩 欧美一区二区三区| 26uuu亚洲| 色女孩综合影院| 免费成人小视频| 中文字幕一区在线| 欧美日韩一区二区欧美激情| 国产精品亚洲专一区二区三区| 中文字幕一区二区三区视频 | 91精品国产综合久久精品app| 中文字幕欧美激情| 国产日韩精品一区二区浪潮av| 国产精品素人一区二区| 免费日本视频一区| 91日韩一区二区三区| 欧美日韩一区不卡| 午夜精品福利一区二区蜜股av | 国产亚洲午夜高清国产拍精品| 国产精选一区二区三区| 一区二区三区四区五区视频在线观看| 欧美老女人第四色| 91香蕉视频黄| 久久福利视频一区二区| 综合亚洲深深色噜噜狠狠网站| 7777女厕盗摄久久久| 成人手机电影网| 在线观看国产91| 洋洋av久久久久久久一区| 精品福利一二区| 欧美日韩高清一区二区不卡| 成人黄色综合网站| 久久69国产一区二区蜜臀| 亚洲最新在线观看| 亚洲人精品一区| 国产欧美日韩三区| 久久综合成人精品亚洲另类欧美 | 最新中文字幕一区二区三区 | 日韩电影网1区2区| 一区二区视频免费在线观看| 国产精品免费久久| 欧美国产综合一区二区| 91精品欧美一区二区三区综合在| 日本道免费精品一区二区三区| 国产河南妇女毛片精品久久久| 青青草精品视频| 日韩av高清在线观看| 日韩不卡一二三区| 亚洲成人精品一区二区| 亚洲一区二区三区美女| 亚洲伦在线观看| 亚洲欧洲精品一区二区三区不卡| 久久一区二区三区四区| 精品国产乱码久久久久久闺蜜| 日韩视频在线一区二区| 日韩一区二区三区四区| 欧美一区二区三区精品| 欧美一区二区视频观看视频| 91精品国产高清一区二区三区 | 国产不卡免费视频| 成人综合在线网站| 成人一区二区三区视频在线观看 | 91蝌蚪porny成人天涯| www.爱久久.com| 成人网在线播放| a4yy欧美一区二区三区| 一本一本久久a久久精品综合麻豆| 92国产精品观看| 91成人免费网站| 911国产精品| 亚洲精品在线免费播放| 久久精品亚洲精品国产欧美kt∨| 日本一区二区成人在线| 亚洲视频 欧洲视频| 亚洲无人区一区| 色婷婷综合中文久久一本| 大胆亚洲人体视频| 色久优优欧美色久优优| 欧美精品777| 久久久亚洲精品一区二区三区| 国产精品色哟哟| 亚洲精品日韩一| 日韩黄色免费电影| 国产精品一卡二卡在线观看| 91在线观看一区二区| 欧美性猛交xxxxxxxx| 欧美一级日韩一级| 国产精品毛片无遮挡高清| 一区二区欧美精品| 黄一区二区三区| 97久久人人超碰| 欧美成人精品3d动漫h| 国产精品乱码妇女bbbb| 天堂va蜜桃一区二区三区| 国产高清成人在线| 欧美三级电影在线看| 欧美经典一区二区| 亚洲国产一区二区在线播放| 国产乱人伦偷精品视频免下载 | 欧美色网一区二区| 欧美mv日韩mv| 亚洲黄色av一区| 韩国精品主播一区二区在线观看 | 亚洲欧美另类图片小说| 麻豆成人久久精品二区三区红| 成人黄色在线网站| www激情久久| 日韩成人午夜电影| 91久久国产最好的精华液| 欧美精品一区二区三区久久久| 一区二区三区精品| 风间由美一区二区三区在线观看| 欧美精品久久99| 1区2区3区欧美| 韩国在线一区二区| 91精品福利在线一区二区三区| 亚洲三级在线观看| 国产乱码精品一区二区三| 91麻豆精品国产无毒不卡在线观看| 国产精品久久久久久久久图文区 | 久久福利视频一区二区| 欧美亚洲综合久久| 亚洲私人黄色宅男| 国产成人精品免费| 26uuu另类欧美| 青青草国产成人av片免费| 欧美日韩一区二区三区视频| 亚洲人成在线播放网站岛国 | 日韩中文字幕不卡| 91麻豆国产在线观看| 国产精品午夜久久| 国产一区二区三区香蕉| 亚洲精品在线三区| 极品销魂美女一区二区三区| 日韩精品中文字幕一区| 日本欧美大码aⅴ在线播放| 欧美最猛黑人xxxxx猛交| 国产精品乱人伦中文| 国产a精品视频| 久久精品亚洲精品国产欧美| 精品一二三四区| wwww国产精品欧美| 国产一区二区三区黄视频 | 中文字幕在线不卡| 成人午夜电影小说| 国产精品亲子乱子伦xxxx裸| 国产一区二区三区四区五区美女 | 久久久av毛片精品| 精品在线播放午夜| 日韩精品中午字幕| 国内精品在线播放| 精品国产91乱码一区二区三区 | 一区二区欧美在线观看| 欧美中文字幕一区| 亚洲福利一二三区| 欧美精品在线一区二区三区| 日韩精品一二三区| 日韩一二三区不卡| 韩国精品久久久| 中文字幕成人网| 一本一本大道香蕉久在线精品 | 国产欧美中文在线| 不卡电影免费在线播放一区| 亚洲男人电影天堂| 欧美色综合天天久久综合精品| 日韩高清电影一区| 精品av综合导航| www.日韩在线| 亚洲狠狠爱一区二区三区| 欧美一级理论性理论a| 国产成人综合网| 一区二区三区影院| 日韩欧美色综合网站| voyeur盗摄精品| 天天综合网 天天综合色| 久久色在线观看| 在线观看精品一区|