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

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

?? sla.c

?? ATMEL AVR 單片機 ni-mh 電池充電控制原代碼
?? C
字號:
/****************************************************************************
    	        
	Device     	: AT90S2333

	File name	: SLA.c

	Ver nr.     : 1.0

	Description	: Sourcefile for SLA charging algorithm
				    - 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	AS
   				  18.05.2000 Final test and review AS  
 
****************************************************************************/

#include "Sla.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)
{
    unsigned int temp = 0;
    unsigned char fast_finish_hour = 0;
    unsigned char fast_finish_min = 0;
    unsigned int fast_charge_volt = 0;
    unsigned char last_min;

    #ifdef DEBUG 
	term_value1 = 0;
	#endif
	
	time.sec = 0x00;
  	time.min = 0x00;
  	time.hour = 0x00;
  	time.t_count = 0x3878;

    temp = Battery(TEMPERATURE); 
    // if TEMPERATURE within absolute limits
    if ((temp < MIN_TEMP_ABS) && (temp > MAX_TEMP_ABS)&& (temp > MAX_TEMP_FAST))
    {
        // calculate FAST charge finish time
        fast_finish_min = (time.min + MAX_TIME_FAST);
        fast_finish_hour = time.hour;
        while (fast_finish_min	> 60)
        {
            fast_finish_min = fast_finish_min	- 60;
            fast_finish_hour++;
        }
        
        OCR1 = 0x00; 
        TCCR1B = 0x01;					    	//counter1 clock prescale =	1

        if ((CHKBIT(CHARGE_STATUS,FAST)) && (!(CHKBIT(CHARGE_STATUS,ERROR))))
        {
            /*Find the fast charge voltage by setting charge current to 
            MAX_I_FAST - 10mA and read out the charge voltage. Store the
            voltage for later regulating referance*/    
            do
        	{
        	    fast_charge_volt = Battery(CURRENT);
	            if (fast_charge_volt < (MAX_I_FAST-I_BUFFER))
            	    OCR1++;
	            else if (fast_charge_volt > (MAX_I_FAST-I_BUFFER))
                    OCR1--;
	        } while	(fast_charge_volt != (MAX_I_FAST-I_BUFFER));
        }
      
        while ((CHKBIT(CHARGE_STATUS,FAST)) && (!(CHKBIT(CHARGE_STATUS,ERROR))))
        {
            // set fast_charge_volt (with "soft start")
	        do
	        {
        	    temp = Battery(VOLTAGE);
	       	    if (temp < fast_charge_volt)
	                OCR1++;
        	    else if (temp > fast_charge_volt)
	                OCR1--;
	        } while	(temp != fast_charge_volt);

			if ((time.hour	== fast_finish_hour)&&(time.min	== fast_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 = fast_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(CURRENT);
			if ( temp <	MAX_I_FAST)
			{
				/*Stop the PWM, flag max charge current charge 
				termination and ERROR. Save the termination value and
				the max limit value for debug information*/
				Stop_PWM();
				SETBIT(TERMINATION,I_MAX);
				SETBIT(CHARGE_STATUS,ERROR);
				#ifdef DEBUG
				term_value1 = temp;
				term_value2 = MAX_I_FAST;
				#endif
			}

            /*Every min check if MIN_I_FAST is reached, if so change to 
            trickle charge*/
            if (time.min != last_min)   
            {
                last_min = time.min;
                temp = Battery(CURRENT);
		    	if ( temp <	MAX_I_FAST)
			    {
    				Stop_PWM();
            	    SETBIT(TERMINATION,I_MIN);
	                CLRBIT(CHARGE_STATUS,FAST);
    	            SETBIT(CHARGE_STATUS,TRICKLE);		
    	            #ifdef DEBUG 
	    			term_value1 = temp;
		    	    term_value2 = MAX_I_FAST;
		    	    #endif
			    }
            }			    
        }
    }
    if(!(CHKBIT(CHARGE_STATUS,ERROR)))
	{
	    if ((temp > MAX_TEMP_ABS)||(temp > MAX_TEMP_FAST))
        {
            //Flag max temperature termination and save the limit value
			SETBIT(CHARGE_STATUS,TEMP_MIN);
			#ifdef DEBUG 
			if (MAX_TEMP_ABS < MAX_TEMP_FAST)
    			term_value2 =	MAX_TEMP_ABS;
    		else	
    			term_value2 =	MAX_TEMP_FAST;
    		#endif	
	    }
	    
		else 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); 
		}
	    //Flag ERROR and save the measured value causing the error for debug	
	    SETBIT(CHARGE_STATUS,ERROR);        
	    #ifdef DEBUG 
	    term_value1 = temp;
	    #endif
	}
            
} 

// Trickle Charge Algorithme
//************************************************************************************

void TRICKLE_charge(void)
{
    unsigned int temp = 0;

	time.sec = 0x00;
  	time.min = 0x00;
  	time.hour = 0x00;
  	time.t_count = 0x3878;
  
    OCR1 = 0x00; 
    TCCR1B = 0x01;					    //counter1 clock prescale =	1  
  
    while	((CHKBIT(CHARGE_STATUS,TRICKLE)) && (!(CHKBIT(CHARGE_STATUS,ERROR))))  
    {    
   	    // if TEMPERATURE within absolute limits 
        temp = Battery(TEMPERATURE); 
        if ((temp <	MIN_TEMP_ABS) || (temp > MAX_TEMP_ABS))
        {
            do						    // set VOLT_TRICKLE (with "soft start")
            {
	            temp = Battery(VOLTAGE);
            	if (temp < VOLT_TRICKLE)
	 	            OCR1++;
                else if (temp > VOLT_TRICKLE)
            	    OCR1--;
        	}while (temp != VOLT_TRICKLE);			    // VOLT_TRICKLE is set	now
        }

	    if (temp > MAX_TEMP_ABS)
		{
		    //Flag max temperature termination and save the limit value
			SETBIT(CHARGE_STATUS,TEMP_MAX);
			#ifdef DEBUG 
  			term_value2 =	MAX_TEMP_ABS;
  			#endif
		}
    	else if (temp < MIN_TEMP_ABS)
		{
		    //Flag min temperature termination and save the limit value
			SETBIT(TERMINATION,TEMP_MIN); 
			#ifdef DEBUG 
		    term_value2 = MIN_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
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本人妖一区二区| 国产一区二区91| 激情丁香综合五月| 91麻豆swag| 国产婷婷一区二区| 日韩精品一区第一页| 99re成人精品视频| 久久久精品日韩欧美| 免费成人性网站| 欧美性受极品xxxx喷水| 中文字幕一区在线观看| 精品无码三级在线观看视频| 欧美日韩国产一二三| 亚洲三级电影全部在线观看高清| 国产精品中文字幕欧美| 综合久久久久综合| 国产激情精品久久久第一区二区| 欧美精品高清视频| 亚洲国产裸拍裸体视频在线观看乱了| av在线播放一区二区三区| 国产亚洲污的网站| 国产一区二区三区不卡在线观看 | 高清av一区二区| 欧美xxxxx牲另类人与| 丝袜诱惑亚洲看片| 欧美日韩国产区一| 三级久久三级久久久| 欧美亚洲高清一区二区三区不卡| 亚洲卡通欧美制服中文| 99国产欧美另类久久久精品| 中文字幕国产精品一区二区| 国产69精品久久久久毛片| 久久嫩草精品久久久精品| 国内精品伊人久久久久av一坑| 日韩欧美中文字幕公布| 精东粉嫩av免费一区二区三区| 日韩午夜av一区| 久久国产人妖系列| 久久久精品中文字幕麻豆发布| 国产精品中文字幕日韩精品 | 国产激情视频一区二区在线观看 | 亚洲欧美日韩国产手机在线| 99re视频精品| 一区二区日韩av| 欧美理论在线播放| 日韩国产精品久久久| 精品免费国产二区三区| 国产乱一区二区| 中文字幕在线观看不卡| 日本乱人伦一区| 天堂av在线一区| 欧美精品一区二区三区高清aⅴ| 国产成人一区二区精品非洲| 国产精品久久久久久久第一福利| 91丝袜美腿高跟国产极品老师| 亚洲午夜精品网| 日韩欧美www| 成人精品在线视频观看| 亚洲综合区在线| 精品久久久久香蕉网| 成人av网址在线观看| 午夜视频在线观看一区二区| 日韩久久久精品| 99re8在线精品视频免费播放| 日韩激情在线观看| 国产女同性恋一区二区| 欧美色综合久久| 国产高清亚洲一区| 亚洲五码中文字幕| 国产日韩一级二级三级| 欧美午夜电影一区| 国产成a人无v码亚洲福利| 亚洲一区二区五区| 国产色一区二区| 欧美肥胖老妇做爰| www.亚洲人| 经典三级一区二区| 一区二区高清视频在线观看| 久久婷婷一区二区三区| 在线观看欧美日本| 高清不卡一区二区| 欧美bbbbb| 亚洲一区视频在线| 国产精品人成在线观看免费| 欧美一区午夜视频在线观看| av亚洲精华国产精华精华| 美女视频免费一区| 亚洲一区二区欧美日韩| 中文字幕亚洲不卡| 欧美精品一区二区三区蜜桃| 欧美群妇大交群中文字幕| 99久久夜色精品国产网站| 韩国中文字幕2020精品| 日本不卡不码高清免费观看| 亚洲美女精品一区| 国产精品美女久久久久久| 精品1区2区在线观看| 欧美一级爆毛片| 欧美巨大另类极品videosbest| 99re在线视频这里只有精品| 国产91露脸合集magnet| 国产又黄又大久久| 久久不见久久见免费视频7| 日韩精品电影一区亚洲| 天天色天天操综合| 亚洲成va人在线观看| 一区二区三区国产精华| 国产精品久久久久久久午夜片 | 国产剧情一区二区| 久久99深爱久久99精品| 麻豆一区二区在线| 美女看a上一区| 琪琪久久久久日韩精品| 日韩不卡手机在线v区| 日韩一区精品视频| 麻豆中文一区二区| 久久国产精品无码网站| 国内成人精品2018免费看| 狠狠色狠狠色综合系列| 国产精品91xxx| 成人黄页毛片网站| 色婷婷国产精品| 欧美少妇bbb| 日韩欧美一级二级| 久久夜色精品国产欧美乱极品| 欧美成人一区二区三区片免费 | 亚洲精选一二三| 一区二区三区久久| 亚洲国产精品久久久久秋霞影院| 五月综合激情婷婷六月色窝| 日本不卡视频在线| 国产精品亚洲视频| 色婷婷av一区二区三区之一色屋| 在线观看91视频| 日韩一区二区三区视频| 久久久久久日产精品| 日韩一区在线播放| 亚洲国产精品一区二区www | 成人avav影音| 在线精品视频一区二区三四| 在线电影欧美成精品| 欧美v日韩v国产v| 最新中文字幕一区二区三区| 亚洲午夜精品网| 国产综合色视频| 色综合久久天天综合网| 91精品国产全国免费观看| 国产视频一区二区在线| 一区二区三区国产| 国产自产视频一区二区三区| 波多野结衣中文一区| 欧美日韩亚洲高清一区二区| 精品国产免费久久 | 欧洲视频一区二区| 欧美成人高清电影在线| 亚洲男帅同性gay1069| 另类的小说在线视频另类成人小视频在线| 国产激情精品久久久第一区二区| 一道本成人在线| 精品国产91乱码一区二区三区| 日韩理论片在线| 国产伦精品一区二区三区免费| 一本久道久久综合中文字幕 | 欧美美女bb生活片| 国产精品全国免费观看高清 | 视频在线观看一区二区三区| 成人午夜在线视频| 日韩一区二区精品在线观看| 亚洲欧美电影一区二区| 国产精品一线二线三线| 欧美日韩国产影片| 亚洲欧洲一区二区三区| 国产在线视频一区二区三区| 欧美日韩国产精选| 亚洲女厕所小便bbb| 国产一区二区久久| 8x福利精品第一导航| 亚洲精品日日夜夜| 成人精品视频一区二区三区尤物| 日韩一区二区三免费高清| 亚洲大尺度视频在线观看| jlzzjlzz国产精品久久| 久久综合精品国产一区二区三区| 日韩中文欧美在线| 欧洲精品视频在线观看| 亚洲欧洲av色图| 成人av免费网站| 国产欧美日韩麻豆91| 国产一区欧美一区| 日韩欧美黄色影院| 麻豆91精品91久久久的内涵| 欧美妇女性影城| 日本不卡一区二区三区 | 色综合久久综合网欧美综合网| 国产视频在线观看一区二区三区| 国产一区二区三区在线观看免费视频| 日韩欧美一二三| 精品在线视频一区| 久久综合九色综合欧美98| 久久av资源网|