⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 battery_check.lst

📁 ht46r47,电源管理源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 299  00F2  1F00     R  	clr 	check_times
 300  00F3              	mmov	check_end,	01h
 301  00F5  0003        ret
 302  00F6              voltage_40:
 303  00F6  1F00     R  	clr 	adbuf_h
 304  00F7  1F00     R  	clr 	adbuf_hc
 305  00F8  1F00     R  	clr 	adbuf_l
 306  00F9  3494        	clr 	pb.1
 307  00FA  3114        	set 	pb.2
 308  00FB  1F00     R  	clr 	check_times
 309  00FC              	mmov	check_end,	01h
 310  00FE  0003        ret
 311  00FF              voltage_38:
 312  00FF  1F00     R  	clr 	adbuf_h
 313  0100  1F00     R  	clr 	adbuf_hc
 314  0101  1F00     R  	clr 	adbuf_l
 315  0102  3094        	set 	pb.1
 316  0103  3514        	clr 	pb.2
 317  0104  1F00     R  	clr 	check_times
 318  0105              	mmov	check_end,	01h
 319  0107  0003        ret
 320  0108              voltage_35:
 321  0108  1F00     R  	clr 	adbuf_h
 322  0109  1F00     R  	clr 	adbuf_hc
 323  010A  1F00     R  	clr 	adbuf_l
 324  010B  3094        	set 	pb.1
 325  010C  3114        	set 	pb.2	
 326  010D  1480     R  	inc 	check_times
 327  010E              	mmov	check_end,	01h
 328  0110  0003        ret
 329  0111              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 330  0111              ; check power one times on 14s
 331  0111              check_delay:
 332  0111  350A        	clr 	status.2
 333  0112  0F7D        	mov 	a, 		07dh
 334  0113  0600     R  	and 	a, 		delay_in	;if timer_in=0 so result is 0
 335  0114  390A        	snz 	status.2				;if result=0 so status.2=1
 336  0115  0003        ret								;1 times loop is 2s
 337  0116              	mmov 	delay_in, 07dh	
 338  0118  1580     R  	dec 	check_4s				;delays is 4
 339  0119  3D0A        	sz 	status.2				;2X2=4s 
 340  011A  1480     R  	inc 	check_01
 341  011B  0003        ret
 342  011C              ;***************************************
 343  011C              ; enter timing mode , backup register
 344  011C              timer_bak:		
 345  011C  360E        	clr 	tmrc.4
 346  011D              	mmov 	tmr,			06h	;timer is 8ms
 347  011F  320E        	set 	tmrc.4
 348  0120              	mmov 	adcr, 		0h
 349  0122              	mmov 	pbc_bak, 	pbc
 350  0124              	mmov 	pb_bak, 		pb
 351  0126              	mmov 	intc_bak, 	intc
 352  0128  3492        	clr  	pa.1
 353  0129  3414        	clr  	pb.0
 354  012A  3494        	clr  	pb.1
 355  012B  3514        	clr  	pb.2
 356  012C              	mmov 	intc, 		047h 		;only disable a/d interrupt
 357  012E  0003        ret
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次7

 358  012F              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 359  012F              ; timing end , comeback register and reset timer paramiter
 360  012F              timer_back_write:
 361  012F              	mmov 	intc, 	intc_bak
 362  0131  3092        	set		pa.1
 363  0132              	mmov 	pbc, 		pbc_bak
 364  0134              	mmov 	pb, 		pb_bak
 365  0136  1F18        	clr  	pd
 366  0137              	mmov 	timer_in, 	0fah		;2s
 367  0139              	mmov 	time5min, 	06ah		;2X150=300s
 368  013B              	mmov 	time_a,		09ch		;2X100=200s loop
 369  013D              	mmov 	time30min, 	0f7h		;200X9=30min loop
 370  013F              	mmov 	time60min, 	0eeh		;200X18=60min loop
 371  0141  0003        ret
 372  0142              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 373  0142              ; 1min timing
 374  0142              time_5min:
 375  0142  211C        	call 	timer_bak				;do timer_bak IO status, all IO set output 0 
 376  0143              loop1:
 377  0143  21BA        	call 	ptled_sleep
 378  0144  3C12        	sz		pa.0
 379  0145  1F00     R  	clr	on_01
 380  0146  21D1        	call 	long_push
 381  0147  350A        	clr 	status.2
 382  0148  0FFA        	mov 	a, 		0fah
 383  0149  0600     R  	and 	a, 		timer_in		;if timer_in=0 so result is 0
 384  014A  390A        	snz 	status.2					;if result=0 so status.2=1
 385  014B  2943        	jmp loop1						;1 times loop is 2s
 386  014C              	mmov 	timer_in, 0fah	
 387  014E  350A        	clr 	status.2
 388  014F  1480     R  	inc 	time5min					;time5min is 150
 389  0150  390A        	snz 	status.2					;2X150=300s is 5 minutes
 390  0151  2943        	jmp loop1
 391  0152              	mmov 	time5min, 06ah			;reset time5min=106
 392  0154  212F        	call 	timer_back_write		; back write IO status
 393  0155  0003        ret
 394  0156              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 395  0156              ; 30min timing
 396  0156              time_30min:
 397  0156  211C        	call 	timer_bak
 398  0157              loop2:
 399  0157  21BA        	call 	ptled_sleep
 400  0158  3C12        	sz		pa.0
 401  0159  1F00     R  	clr	on_01
 402  015A  21D1        	call 	long_push
 403  015B  350A        	clr 	status.2
 404  015C  0FFA        	mov 	a, 		0fah
 405  015D  0600     R  	and 	a, 		timer_in
 406  015E  390A        	snz 	status.2
 407  015F  2957        	jmp loop2						;2s timer reached
 408  0160              	mmov 	timer_in, 0fah
 409  0162  350A        	clr 	status.2
 410  0163  1480     R  	inc 	time_a					;time_a=156
 411  0164  390A        	snz 	status.2					;100X2=200s status.2=1
 412  0165  2957        	jmp loop2
 413  0166              	mmov 	time_a, 09ch			;reset time_a
 414  0168  350A        	clr 	status.2
 415  0169  1480     R  	inc 	time30min				;time30min=247
 416  016A  390A        	snz 	status.2					;200X9=1800s status.2=1
 417  016B  2957        	jmp loop2
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次8

 418  016C              	mmov 	time30min, 0f7h		;reset time30min
 419  016E  212F        	call 	timer_back_write
 420  016F  0003        ret
 421  0170              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 422  0170              
 423  0170              ; 60min timing
 424  0170              time_60min:
 425  0170  211C        	call 	timer_bak
 426  0171              loop3:
 427  0171  21BA        	call 	ptled_sleep
 428  0172  3C12        	sz		pa.0
 429  0173  1F00     R  	clr	on_01
 430  0174  21D1        	call 	long_push
 431  0175  350A        	clr 	status.2
 432  0176  0FFA        	mov 	a, 		0fah
 433  0177  0600     R  	and 	a, 		timer_in
 434  0178  390A        	snz 	status.2
 435  0179  2971        	jmp loop3						;2s reached
 436  017A              	mmov 	timer_in, 0fah
 437  017C  350A        	clr 	status.2
 438  017D  1480     R  	inc 	time_a					;time_a=156
 439  017E  390A        	snz 	status.2					;100X2=200s status.2=1
 440  017F  2971        	jmp loop3
 441  0180              	mmov 	time_a,	09ch			;reset time_a
 442  0182  350A        	clr 	status.2
 443  0183  1480     R  	inc 	time60min				;time60min=18
 444  0184  390A        	snz 	status.2					;200X18=3600s
 445  0185  2971        	jmp loop3						
 446  0186              	mmov 	time60min, 0eeh		;reset time60min=237
 447  0188  212F        	call 	timer_back_write
 448  0189  0003        ret
 449  018A              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 450  018A              
 451  018A              check_mode1:
 452  018A  3818        	snz  	pd.0						; default mode, timer is no seting  enter idle mode   			
 453  018B  2088        	call 	idle_mode
 454  018C  3C18        	sz  	pd.0
 455  018D  2142        	call 	time_5min				;if pd=1, enter 5min set
 456  018E  0003        ret
 457  018F              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 458  018F              
 459  018F              check_mode2:
 460  018F  3818        	snz 	pd.0						;if pd=0 enter time_30min setup, otherwise enter time_60min setup
 461  0190  2156        	call 	time_30min
 462  0191  3C18        	sz  	pd.0				
 463  0192  2170        	call 	time_60min
 464  0193  0003        ret
 465  0194              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 466  0194              time_set:
 467  0194  1F00     R  	clr 	sl_idle
 468  0195  1F00     R  	clr	main_01
 469  0196  360E        	clr   tmrc.4
 470  0197              	mmov	tmr,			06h
 471  0199  320E        	set	tmrc.4
 472  019A  3293        	set  	pac.5
 473  019B  3992        	snz  	pa.3						;if pa.3=0 enter check_mode1, 
 474  019C  218A        	call 	check_mode1
 475  019D  3D92        	sz   	pa.3						;if pa.3=1 enter check_mode2
 476  019E  218F        	call 	check_mode2
 477  019F  0003        ret
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次9

 478  01A0              ;***************************************
 479  01A0              
 480  01A0              intc_inform:
 481  01A0  360E        	clr 	tmrc.4
 482  01A1              	mmov 	tmr,			06h		;timer is 8ms
 483  01A3  320E        	set 	tmrc.4
 484  01A4              	mmov	timer_in,	0fah
 485  01A6  0000        	nop
 486  01A7  0000        	nop
 487  01A8  3693        	clr 	pac.5
 488  01A9  3292        	set 	pa.5
 489  01AA              delay1:
 490  01AA  350A        	clr 	status.2
 491  01AB  0FFA        	mov 	a, 			0fah
 492  01AC  0600     R  	and 	a, 			timer_in		;if timer_in=0 so result is 0
 493  01AD  390A        	snz 	status.2					;if result=0 so status.2=1
 494  01AE  29AA        	jmp 	delay1					;1 times loop is 2s
 495  01AF              	mmov 	timer_in, 	0fah	
 496  01B1  350A        	clr 	status.2
 497  01B2  1580     R  	dec 	delay_4s					;delays is 2
 498  01B3  390A        	snz 	status.2					;2X2=4s 
 499  01B4              	mmov 	delay_4s,  	02h
 500  01B6  3293        	set 	pac.5
 501  01B7  3692        	clr 	pa.5 
 502  01B8  1F00     R  	clr	intc_out
 503  01B9  0003        ret
 504  01BA              ;***************************************
 505  01BA              ;photosensitive diode
 506  01BA              ptled_sleep:
 507  01BA  3C12        	sz		pa.0
 508  01BB  1F00     R  	clr	on_01
 509  01BC  3994        	snz	pb.3
 510  01BD  2077        	call 	sleep_mode				;if pb3=0 enter sleep_mode
 511  01BE  0003        ret
 512  01BF              ;***************************************
 513  01BF              ; open pvi
 514  01BF              open:	
 515  01BF  1080     R  	sz 	on_off_bit				;if on_off_bit = 0, so open pvi
 516  01C0  29C7        	jmp 	over						;if on_off_bit = 1, so do nothing
 517  01C1  3112        	set 	pa.2
 518  01C2  3092        	set 	pa.1
 519  01C3              	mmov 	on_off_bit, 	01h	;open after set on_off_bit
 520  01C5              	mmov 	on_01, 			01h	;if first on power, so on_01=1
 521  01C7              over:
 522  01C7  0003        ret
 523  01C8              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 524  01C8              ; infom main_cpu will shut down
 525  01C8              inform:
 526  01C8  3312        	set  	pa.6						;inform to mian_cpu save register
 527  01C9              shut_loop:
 528  01C9  3B92        	snz   pa.7						;if pa7=1	shut_down 
 529  01CA  29C9        	jmp  	shut_loop
 530  01CB  0003        ret
 531  01CC              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 532  01CC              ; shutdown pvi
 533  01CC              shut_down:
 534  01CC  1080     R  	sz		sl_idle
 535  01CD  21C8        	call 	inform					;before shut_down, inform main_cpu to save status
 536  01CE  3492        	clr 	pa.1
 537  01CF  3512        	clr 	pa.2
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次10

 538  01D0  0003        ret
 539  01D1              
 540  01D1              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 541  01D1              
 542  01D1              ; if POWERCK is pushed, and holding_timer > 200ms, to justify
 543  01D1              long_push:
 544  01D1  3C12        	sz  	pa.0						;pa.0 = 0, indicat switch_key did pushed
 545  01D2  0003        ret
 546  01D3  360E        	clr	tmrc.4
 547  01D4              	mmov	tmr,			06h
 548  01D6  320E        	set	tmrc.4
 549  01D7              	mmov 	timer_in,	046h
 550  01D9              loop:									; 560ms timer_delay
 551  01D9  1080     R  	sz		timer_in
 552  01DA  29D9        	jmp 	loop
 553  01DB  3812        	snz  	pa.0						;powerck push_holding >256ms						
 554  01DC  1080     R  	sz 	on_01						;if on_01 = 1, indicate key don't undo on last times, so not check open_down function
 555  01DD  29E1        	jmp 	next1						;if on_01 = 0, call open_down function
 556  01DE  1080     R  	sz 	on_off_bit				;if on_off_bit = 1, call shut_down
 557  01DF  21CC        	call 	shut_down
 558  01E0  21BF        	call 	open
 559  01E1              next1:
 560  01E1  0003        ret
 561  01E2              ;***************************************
 562  01E2              main: 
 563  01E2  201F        	call 	initial
 564  01E3              main_loop:
 565  01E3              	mmov	sl_idle,		01h
 566  01E5              	mmov 	main_01, 	01h
 567  01E7  21D1        	call 	long_push				; long_time push_key run pvi
 568  01E8  3812        	snz  	pa.0						;pa.0 = 0 , not undo key
 569  01E9  29EB        	jmp 	next2
 570  01EA  1F00     R  	clr	on_01
 571  01EB              next2:
 572  01EB              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 573  01EB              ;enter sleep_mode mode check
 574  01EB  21BA        	call 	ptled_sleep
 575  01EC              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 576  01EC              ; power check
 577  01EC  1F00     R  	clr	check_end
 578  01ED  1080     R  	sz	 	on_off_bit				;only run status, check battery's power
 579  01EE  2111        	call 	check_delay				;5s check 1 time
 580  01EF  1080     R  	sz   	check_01					;if check_01 = 1, check power of battery
 581  01F0  20A3        	call 	adpro						
 582  01F1  350A        	clr	status.2
 583  01F2  0F03        	mov 	a, 			03h		;if three times low power , so shut down
 584  01F3  0200     R  	sub 	a, 			check_times
 585  01F4  3D0A        	sz 	status.2
 586  01F5  21CC        	call 	shut_down
 587  01F6              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 588  01F6              ; timing check
 589  01F6              	mmov 	timer_in, 0fah
 590  01F8  3F92        	sz   	pa.7						;if pa7=1 check time_mode
 591  01F9  2194        	call 	time_set
 592  01FA              ;;;;;;;;;;;;;;;;
 593  01FA  1080     R  	sz  	intc_out
 594  01FB  21A0        	call 	Intc_Inform
 595  01FC  29E3        jmp main_loop
 596  01FD              ;*************************************************
 597  01FD              ;*************************************************
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次11

 598  01FD              end


        0 Errors

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -