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

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

?? nicd.asm

?? ATMEL AVR 單片機 ni-mh 電池充電控制原代碼
?? ASM
字號:

;  Last change:  JB    00/07/11 (YY/MM/DD)
 
;**************************** MODULE INFO  *******************************
;
;   File name   :  nicd.asm
;   AUTHOR      :  Atmel
;   VERSION     :  1.2
;   DATE        :  July 10th 2000
;
;   Compiler    :  Atmel AVR Assembler 1.30
;   Contents    :  Travel Battery Charger Reference Design with ATtiny15
;		   - Battery specific functions:
;                  - fast_charge
;                  - trickle_charge
;   Options:
;	- Watchdog timer 
;	- Add battery detection
;
;   Please send comments on this code to avr@atmel.com
;
;	Change log
;	V1.1		JB	Changed fast I_fast measurement to measure without gain
;								
;	V1.2		JB	Fixed bug when stopping PWM output

;*************************[ Include Define Files ]***********************
; Define files included here 

.include	"tn15def.inc"
.include    	"bc.inc" 
.include 	"NiCd.inc"
 
;*************************[ Interrupt Vector Table ]**********************
; Execution always starts here

	.org 0x00
	ldi			temp, 0x05
 	out			TCCR0, temp				; TCNT0 CK/1024
 	ldi			temp, 0x41				; TCNT1 8-bit PWM @ 100 kHz
 	out			TCCR1, temp				; output DISCONNECTED
	rjmp		fast_charge 

	.org OVF0addr

;*****************[ Timer 0 Overflow Interrupt Handler ]******************
Timer0_OVF_Int:
	in		SREG_Storage, SREG				; Store SREG Contents
	
	dec			tick_cnt					; Decrement tick Counter
	brne		t0ovf_exit
											; This code is executed once a second	
	ldi			tick_cnt, sec_duration		; Reset Tick Counter
											; *** Insert user code here (approx 1 second)
	inc			t_sec						; Increment second counter
	cpi			t_sec, min_duration
	brne		t0ovf_exit					; Test second overflow	
											; This code is executed once a minute
	clr			t_sec						; Clear Second Counter
											; *** Insert user code here (approx 1 minute)
	inc			t_min						; Increment Minutes Counter
	
t0ovf_exit:
	out			SREG, SREG_Storage			; Restore SREG
	reti

;***********************[ PWM Control ]*********************************
; Functions to start and stop PWM output
start_PWM:
 	ldi			temp, 0x61
 	out			TCCR1, temp					; TCNT1 8-bit PWM @ 100 kHz
	ret

stop_PWM:
	cbi			PORTB, PWM_PIN				; Lock current to zero
	sbi			DDRB, PWM_PIN			
	ldi			temp, 0x41
	out			TCCR1, temp					; Disconnect PWM output
	ret

;*******************[  Adjust Charge Current ]****************
;  Function to Adjust Charge Current
adj_current:	
	cp			Il, temp
	cpc			Ih, temp2					; if( I = I_fast )
	breq		adj_charge_end					; skip	
	cp			Il, temp
	cpc			Ih, temp2					; if( I < I_fast )
	brsh		f_dec		
					
f_inc:	
	in			temp, OCR1A					; increment charge current
	subi		temp, 0xFF					; if( OCR1A < 0xFF )
	brcc		adj_charge_end
	out			OCR1A, temp
	rjmp		adj_charge_end				; Exit if limit value

f_dec:	
	in			temp, OCR1A					; decrement charge current
	subi		temp, 0x01					; if( OCR1A > 0x00 )
	brcs		adj_charge_end
	out			OCR1A, temp					; Exit if limit value
adj_charge_end:
	ret
	
;*******************[function F_measure: Measure all Parameters ]***************
; Measure Charge Parameters
f_measure:
	ldi			temp,ADC_V_channel			; Select Voltage Channel
	rcall		convert_average				; Measure Battery Charge Voltage
	mov			Vl, av_l
	mov			Vh, av_h					; Record value

	ldi			temp,ADC_T_channel			; Select Temperature Channel
	rcall		convert_average				; Measure Battery Temperature
	mov			Tl, av_l
	mov			Th, av_h					; Record value

;	ldi			temp,ADC_gain_channel		; Select Current Channel
;	rcall		convert_average				; Measure Battery Current
;	mov			Il, av_l
;	mov			Ih, av_h					; Record value
;	ret

;*************************[ ADC Handler ]*********************************
; This function measures the channel selected by [temp], and returns the 
; converted value in [av_h:av_l]
convert_average:
	out			ADMUX, temp					; Set ADC Channel
	clr			av_l
	clr			av_h						; Clear Average Registers
	ldi			temp2,(1<<avg_loop_cnt) 	; Set loop counter
convert_start:
	ldi	 		temp,0xD4
	out			ADCSR,temp
convert_wait:
	sbis		ADCSR, ADIF
	rjmp		convert_wait				; Wait for Conversion to finish
	in			temp, ADCL
	add			av_l, temp
	in			temp, ADCH
	adc			av_h, temp					; Add measured value to average
	dec			temp2
	brne		convert_start				; Repeat (1<<avg_loop_cnt) times
	ldi			temp2, avg_loop_cnt			; Set shift counter
convert_avg:	
	lsr			av_h
	ror			av_l						; av_h:av_l = av_h:av_l/2
	dec			temp2
	brne		convert_avg					; Repeat (avg_loop_cnt) times
	cbi			ADCSR,ADEN
	ret										; return to measure

;*******************[Check Temperature ]********************
; checking temperature, terminate if outside range

check_temperature:
	ldi			temp, high(max_T_abs)
	cpi			Tl, low(max_T_abs)			; Temperature too high? (T_max)
	cpc			Th, temp	
	brlo		f_terminate_error			; Yes, terminate and flag error
	
	ldi			temp, high(min_T_abs)
	cpi			Tl, low(min_T_abs)			; Temperature too low? (T_min)
	cpc			Th, temp
	brsh		f_terminate_error			; Yes, terminate and flag error
	ret
	
;*******************[ Error handling ]***************************************
; If error, the program ends up here

f_terminate_error:
	rcall		stop_PWM	
error_loop:
	rjmp		error_loop

;*******************[ Fast Charge: Reset ]********************************
; Start Fast Charge Cycle
; Reset Charge Parameters
fast_charge:
	ldi			temp, 0x65
	out			0x3D, temp					; Initialize Stack (emulator only)
 	ldi			temp,0xFF
 	out 		OCR1B,temp
 	ldi			temp, 0x02
 	out			TIMSK, temp					; Enable TCNT0 overflow interrupt
  	cbi			PORTB, PWM_PIN				; Set Port B levels
  	sbi			DDRB, PWM_PIN				; Set Port B directions
	ldi			tick_cnt, sec_duration		; Tick counter = 0
	clr			last_t_min
	sei	
	ldi			t_min, 0x00
	ldi			t_sec, 0x00					; Reset Fast Charge Timer
	out			OCR1A, t_sec				; Reset PWM counter

	rcall		start_PWM
	rcall 		f_measure

;*******************[ Fast Charge: initialize temperature and voltage ]********
minute_init:
	mov			last_t_min,t_min			; initialize values for checking every minute
	mov			last_min_Vl,Vl
	mov			last_min_Vh,Vh
	mov			last_min_Tl,Tl
	mov			last_min_Th,Th
	
;*******************[ Fast Charge: Check Temperature ]********************
charge_loop:

	ldi			temp,ADC_diff_channel		; Select Current Channel
	rcall		convert_average				; Measure Battery Current
	mov			Il, av_l
	mov			Ih, av_h					; Record value
	
	rcall 		f_measure					; Measure battery
	rcall		check_temperature
	
;*******************[ Fast Charge: Check Voltage ]********************
	ldi			temp, high(max_V_fast)
	cpi			Vl, low(max_V_fast)
	cpc			Vh, temp					; if( V > max_V_fast )
	brsh		f_terminate_error			; Yes, terminate and flag error

;*******************[ Fast Charge: Adjust Charge Current ]****************
;  Load the charge current values and call the adjust charge current function
	ldi			temp,low(I_fast)
	ldi			temp2,high(I_fast) 			; Load current value and adjust current 
	rcall		adj_current
	
;*******************[ Fast Charge: Terminate Test ]***********************
; On each decrement, test for termination
f_terminate_test:
	cpi			t_min, max_time_fast
	brsh		f_terminate_error			; timeout (test minutes only)

;*******************[ Fast Charge: Minute loop ]***********************
	cp			last_t_min,t_min			; Check for 60 sec overflow
	brsh 		charge_loop					; If new minute
	
	cbi 		PORTB,PWM_PIN				; Included for debug with emulator
	
	sub			last_min_Tl,Tl				; Check for temperature change
	sbc			last_min_Th,Th	
		
	ldi			temp,low(delta_T)			; Load max temperature change value
	ldi			temp2,high(delta_T)
	sub			last_min_Tl,temp			; Terminate if temperature rise more than 1C/min
	sbc			last_min_Th,temp2
	brge		f_terminate
	
	sub			last_min_Vl,Vl				; Subtract last minutes voltage
	sbc			last_min_Vh,Vh
	
	ldi			temp,low(neg_dV)			; Check if voltage drops
	ldi			temp2,high(neg_dV)
	sub			last_min_Vl,temp
	sbc			last_min_Vh,temp2
	brge		f_terminate
		
	rjmp		minute_init					; Reload last minute values
		
;*******************[ Fast Charge: Terminate ]****************************
;  Terminate Fast Charge Cycle
f_terminate:
	rcall		stop_PWM					; Disable PWM Output
									; Continue with Trickle Charge
;*******************[ Trickle Charge: Reset ]*****************************
; Reset Charge Parameters
	ldi			temp, 0x00
	out			OCR1A, temp					; Minimum Duty Cycle

;*******************[ Trickle Charge: Measure all Parameters ]************
; Measure Charge Parameters
	ldi			t_min, 0x00
	ldi			t_sec, 0x00
	rcall		start_PWM					; Start PWM

t_charge_loop:
	rcall 		f_measure

	ldi			temp,ADC_gain_channel		; Select Current Channel
	rcall		convert_average				; Measure Battery Current
	mov			Il, av_l
	mov			Ih, av_h					; Record value

	ldi			temp,ADC_g_offset_channel	; Select Current offset Channel
	rcall		convert_average				; Measure offset value
	sub			Il, av_l					; Subtract offset from measured value
	sbc			Ih, av_h
	brpl		pos					
	clr			Il							; Reset if negative value
	clr			Ih
pos:	
	rcall		check_temperature
	
;*******************[ Trickle Charge: Check Voltage ]*****************
	ldi			temp, high(max_V_trickle)
	cpi			Vl, low(max_V_trickle)
	cpc			Vh, temp					; V>(max_V_fast)?
	brsh		t_terminate_error			; Yes, terminate and flag error

;*******************[ Trickle Charge: Adjust Charge Current ]*************
;  Adjust Charge Current
	ldi			temp, low(I_trickle)
	ldi			temp2, high(I_trickle)
	rcall		adj_current
	rjmp		t_charge_loop

;*******************[ Trickle Charge: Check timeout ]*************
;  Check timeout 
	cpi			t_min, max_time_trickle
	brsh		t_terminate_error			; timeout (test minutes only)
	
t_terminate_error:
	rjmp		f_terminate_error

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线free| 国产尤物一区二区| 色又黄又爽网站www久久| 国产精品无码永久免费888| 日韩一级片网站| 麻豆成人综合网| 久久久不卡网国产精品二区| 国产福利一区二区三区视频在线 | 成人av网站在线观看| 中文字幕乱码亚洲精品一区| jlzzjlzz欧美大全| 亚洲一区二区高清| 日韩欧美一区二区久久婷婷| 国产麻豆91精品| 亚洲欧美日韩国产手机在线| 欧美日韩国产另类一区| 久久99精品国产.久久久久久| xfplay精品久久| 99综合电影在线视频| 精品免费日韩av| 福利一区二区在线| 国产精品久久久爽爽爽麻豆色哟哟| 成人av午夜电影| 国产成人精品一区二区三区四区 | 亚洲高清免费观看| 欧美日韩高清不卡| 久久se精品一区二区| 国产亲近乱来精品视频| 北条麻妃国产九九精品视频| 国产精品国产三级国产a| 在线欧美日韩精品| 免费人成精品欧美精品| 久久色在线观看| 成人深夜视频在线观看| 樱花影视一区二区| 欧美一区二区久久| 国产精品性做久久久久久| 日本一区二区成人| 色噜噜狠狠一区二区三区果冻| 日韩电影在线观看一区| 欧美激情资源网| 欧美伊人精品成人久久综合97 | 欧美成人高清电影在线| 国产成人精品三级| 亚洲激情校园春色| 精品乱人伦小说| 95精品视频在线| 久久国产人妖系列| 最新不卡av在线| 欧美一级日韩不卡播放免费| 欧美成人精品高清在线播放| 成人教育av在线| 日韩高清欧美激情| 中文字幕精品在线不卡| 欧美性大战xxxxx久久久| 久久成人18免费观看| 亚洲色图一区二区| 久久久久久久久伊人| 欧美日韩国产免费| 成人h版在线观看| 精品一区二区三区不卡| 亚洲激情欧美激情| 国产女人18水真多18精品一级做| 一本高清dvd不卡在线观看| 精品一区二区三区视频在线观看| 日韩美女视频19| 久久久久亚洲综合| 欧美一区二区在线视频| 91麻豆精品一区二区三区| 国产成人综合在线| 蓝色福利精品导航| 亚洲国产美女搞黄色| 国产欧美一区在线| 久久综合狠狠综合久久综合88| 欧美天堂亚洲电影院在线播放| 国产成人精品亚洲777人妖| 日韩av一级片| 亚洲精品自拍动漫在线| 久久亚洲春色中文字幕久久久| 欧美日韩精品免费观看视频| 色综合天天综合网天天看片| 成人免费高清在线观看| 国产精品资源网站| 国产一区二区久久| 久久 天天综合| 日日夜夜免费精品视频| 亚洲电影一级片| 亚洲美女淫视频| 国产精品美女久久久久av爽李琼| 久久久久久久久伊人| 精品1区2区在线观看| 精品免费一区二区三区| 欧美变态tickling挠脚心| 欧美一区二区三区免费| 日韩片之四级片| 日韩精品中文字幕一区二区三区| 日韩午夜av电影| 日韩视频一区二区| 精品奇米国产一区二区三区| 精品国产乱码久久久久久图片| 日韩一区二区三区四区| 欧美一区二区在线观看| 日韩欧美卡一卡二| 337p粉嫩大胆噜噜噜噜噜91av| 欧美电影免费观看高清完整版在线观看 | 狠狠色狠狠色综合| 国产毛片精品一区| 成人av网址在线| 色综合一区二区| 欧美日韩亚洲不卡| 日韩色在线观看| 国产三区在线成人av| 久久综合久久综合久久综合| 91精品国产一区二区三区蜜臀| 日韩一二在线观看| 精品久久免费看| 久久久久久电影| 亚洲日本在线天堂| 午夜激情一区二区| 久久69国产一区二区蜜臀| 高清国产一区二区| 91成人免费在线视频| 91麻豆精品国产自产在线 | 亚洲精品国产视频| 日产欧产美韩系列久久99| 国产一区二区中文字幕| 99久久免费国产| 正在播放一区二区| 中文字幕欧美三区| 日韩电影在线观看电影| 国产 日韩 欧美大片| 欧美区视频在线观看| 久久久久亚洲综合| 亚洲一区在线观看免费 | 国产福利一区二区三区视频在线| 国产一区久久久| 欧美在线一区二区| 国产片一区二区| 日韩有码一区二区三区| 成人小视频在线观看| 欧美一区二区三区在线| 国产精品看片你懂得| 日韩激情一区二区| 成人黄色在线网站| 欧美一级日韩一级| 一区二区三区中文在线| 国产乱子伦一区二区三区国色天香| 国产精品99久久不卡二区| 欧美日韩在线精品一区二区三区激情 | 久久国产视频网| 色8久久人人97超碰香蕉987| 精品久久国产字幕高潮| 国产精品久久午夜夜伦鲁鲁| 奇米一区二区三区av| 94-欧美-setu| 久久精品夜色噜噜亚洲a∨| 日日噜噜夜夜狠狠视频欧美人| 成人一区在线观看| 精品国产免费人成在线观看| 亚洲国产乱码最新视频 | 欧美电影免费观看高清完整版在| 亚洲免费成人av| 成人国产一区二区三区精品| 日韩亚洲欧美在线| 日韩精品国产欧美| 欧美日韩精品一区二区在线播放| 中文字幕一区视频| 国产成人免费在线观看| 久久综合狠狠综合| 石原莉奈在线亚洲三区| 国产精品影视在线| 日韩欧美国产综合在线一区二区三区| 亚洲精品老司机| 日本国产一区二区| 亚洲色图在线视频| 99久久久久久| 久久免费视频色| 国产精品自在在线| 国产亚洲一本大道中文在线| 久久精品国产免费看久久精品| 欧美疯狂做受xxxx富婆| 亚洲18影院在线观看| 欧美日韩在线播放| 亚洲成人中文在线| 欧美群妇大交群的观看方式| 丝袜诱惑制服诱惑色一区在线观看| 在线观看日韩精品| 亚洲电影第三页| 欧美精品乱码久久久久久| 日日噜噜夜夜狠狠视频欧美人| 在线免费不卡视频| 亚洲丶国产丶欧美一区二区三区| 欧美一区二区福利视频| 久久精品国产99| 久久精品日韩一区二区三区| 成人性生交大片免费| 亚洲男人电影天堂| 欧美色综合天天久久综合精品| 婷婷夜色潮精品综合在线| 欧美一区二区三区在线看|