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

📄 battery_check.lst

📁 ht46r47,电源管理源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次1


   1  0000              ;************************************ 
   2  0000              include HT46R47.inc 


   3  0000              ;*************************************
   4  0000              ;*************************************************
   5  0000              data .section 'data' 
   6  0000  00          	on_01			db ?
   7  0001  00          	main_01		db ?
   8  0002  00          	on_off_bit	db ?
   9  0003  00          	sl_idle		db ?
  10  0004  00          	idle_01		db ?
  11  0005  00          	pac_bak		db ?
  12  0006  00          	pa_bak    	db ?
  13  0007  00          	pbc_bak		db ?
  14  0008  00          	pb_bak		db ?
  15  0009  00          	intc_bak 	db ?
  16  000A  00          	spb_bak		db ?
  17  000B  00          	spbc_bak		db ?
  18  000C  00          	sintc_bak	db ?
  19  000D  00          	temp 			db ? 
  20  000E  00          	intc_out		db ?
  21  000F  00          	delay_in  	db ?
  22  0010  00          	delay_4s  	db ?
  23  0011  00          	check_4s  	db ?
  24  0012  00          	check_01		db ?
  25  0013  00          	check_times db ?
  26  0014  00          	adbuf_h 		db ? 
  27  0015  00          	adbuf_hc 	db ? 
  28  0016  00          	adbuf_l		db ?
  29  0017  00          	adcnt			db ?
  30  0018  00          	check_end	db ?
  31  0019  00          	times1_bit	db ?
  32  001A  00          	timer_in		db ?
  33  001B  00          	time5min		db ?
  34  001C  00          	time_a 		db ?
  35  001D  00          	time30min 	db ?
  36  001E  00          	time60min 	db ? 
  37  001F              ;*************************************** 
  38  0000              code .section at 0 'code' 
  39  0000              	org 000h 
  40  0000  29E2        	jmp main
  41  0001              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  42  0001              	org 004h 		;external interrupt
  43  0004  280E        	jmp exitint
  44  0005              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  45  0005              	org 008h 		;intial timer interrupt 
  46  0008  281C        	jmp timint 
  47  0009              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  48  0009              	org 00ch			;intial	a/d converter interrupt 
  49  000C  0000        	nop
  50  000D  0004        	reti 
  51  000E              ;***************************************
  52  000E              
  53  000E              	mmov macro a1,b1
  54  000E              	mov 	a,		b1
  55  000E              	mov 	a1,	a 
  56  000E              	endm
  57  000E              ;***************************************
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次2

  58  000E              
  59  000E              ; external interrupt
  60  000E              exitint:
  61  000E              	mmov	idle_01,			01h				;idle mode check bit
  62  0010  1F00     R  	clr	timer_in		
  63  0011              	mmov 	time5min, 		0ffh
  64  0013              	mmov 	time_a, 			0ffh
  65  0015              	mmov 	time30min, 		0ffh
  66  0017              	mmov 	time60min, 		0ffh
  67  0019              	mmov 	intc_out,		01h
  68  001B  0003        ret
  69  001C              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  70  001C              
  71  001C              ;timing interrupt
  72  001C              timint: 							;timer interrupt ISR	
  73  001C  1580     R  	dec 	timer_in 			;timer interrupt 1 times is 8ms 
  74  001D  1580     R  	dec 	delay_in				;check power delay
  75  001E  0004        reti
  76  001F              ;***************************************  
  77  001F              ;initial process section
  78  001F              initial:
  79  001F  1F0B        	clr 	intc 
  80  0020  1F0E        	clr 	tmrc 
  81  0021  1F22        	clr	adcr 
  82  0022  1F00     R  	clr 	on_off_bit			;control open & shut_down 
  83  0023  1F00     R  	clr 	on_01					;
  84  0024  1F0A        	clr 	status
  85  0025              	
  86  0025              ; I/O setup
  87  0025              	mmov 	pac,		089h		;pa1 pa2 pa5 pa6 output,pa4 timer enabled 
  88  0027              	mmov 	pa,		0h 		;pa0 pa3 pa7 input
  89  0029              	mmov 	pbc,		08h		;pb3 input ,pb0 is a/d
  90  002B              	mmov 	pb,		0h			;pb1,	pb2 is output
  91  002D  1F99        	set 	pdc 					;pd0 input
  92  002E  1F18        	clr 	pd
  93  002F              	
  94  002F              ; check batter power setup
  95  002F              	mmov 	adcnt, 		0fch 	;set consecutive times 
  96  0031              	mmov 	times1_bit, 02h	;on power check battery
  97  0033  1F00     R  	clr 	adbuf_h
  98  0034  1F00     R  	clr 	adbuf_hc
  99  0035  1F00     R  	clr 	adbuf_l
 100  0036  1F00     R  	clr 	check_times
 101  0037  1F00     R  	clr  	check_01
 102  0038              	mmov 	delay_in,    	07dh	;check power  time set
 103  003A              	mmov 	check_4s,  	05h	;check power delay 14s
 104  003C              	
 105  003C              ; clear ram
 106  003C  0F40        	mov 	a,			40h 		;general purpose data memory
 107  003D  0081        	mov 	mp,		a 			
 108  003E              clrram:							;clear data memory 
 109  003E  1F00        	clr 	r0 
 110  003F  1481        	inc 	mp 
 111  0040  1480     R  	inc 	temp 
 112  0041  0700     R  	mov 	a,			temp 
 113  0042  0C7F        	xor 	a,			07fh		;data memory end address 
 114  0043  3D0A        	sz 	z 
 115  0044  283E        	jmp 	clrram
 116  0045              
 117  0045              ;timer setup
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次3

 118  0045              	mmov 	tmrc,			097h 	;time clock is fsys/128  
 119  0047              	mmov 	tmr,			06h	;timer is 8ms
 120  0049              	mmov 	timer_in, 	0fah	;1time interrupt is 2s(8msX250=2000ms)
 121  004B              	mmov 	time5min, 	06ah
 122  004D              	mmov 	time_a, 		09ch	;200s loop
 123  004F              	mmov 	time30min, 	0f7h	;200X9=1800s , 10min
 124  0051              	mmov 	time60min, 	0eeh	;200X18=3600s, 1h
 125  0053              ;interrupt set	
 126  0053              	mmov 	intc,			055h	;enable only timer interrupt. 
 127  0055  1F00     R  	clr  	intc_out
 128  0056              	mmov 	delay_4s,    02h	;interrupt inform to main_cpu
 129  0058              ;idle mode
 130  0058              	mmov 	idle_01,		01h	;
 131  005A  0003        ret
 132  005B              ;***************************************
 133  005B              
 134  005B              sleep_bak:
 135  005B  3312        	set  	pa.6
 136  005C              wait_pa7:
 137  005C  3B92        	snz   pa.7					;如果pa7=1 进入“睡眠模式”
 138  005D  285C        	jmp  	wait_pa7
 139  005E  3712        	clr  	pa.6
 140  005F              	mmov 	adcr, 		0h
 141  0061              	mmov 	spbc_bak, 	pbc
 142  0063              	mmov 	spb_bak, 	pb
 143  0065              	mmov 	sintc_bak, 	intc
 144  0067  3413        	clr 	pac.0
 145  0068  3492        	clr 	pa.1
 146  0069  3414        	clr  	pb.0
 147  006A  3494        	clr  	pb.1
 148  006B  3514        	clr  	pb.2
 149  006C  340B        	clr 	intc.0 
 150  006D  0003        ret
 151  006E              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 152  006E              
 153  006E              sleep_wake_up:
 154  006E  3092        	set 	pa.1
 155  006F              	mmov 	intc, 		sintc_bak
 156  0071              	mmov	pbc,			spbc_bak
 157  0073              	mmov 	pb, 			spb_bak
 158  0075  3013        	set		pac.0
 159  0076  0003        ret
 160  0077              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 161  0077              
 162  0077              ; before sleep_mode, backup all I/O status, backup all register's 
 163  0077              sleep_mode:
 164  0077  1080     R  	sz   	main_01				;if main_01 = 1, indicate from mian_loop enter sleep
 165  0078  205B        	call 	sleep_bak			
 166  0079  360E        	clr  	tmrc.4				;if main_01 = 0, indicate from timing enter sleep
 167  007A  340B        	clr  	intc.0
 168  007B              loop_sleep:
 169  007B  3994        	snz  	pb.3
 170  007C  287B        	jmp 	loop_sleep
 171  007D  320E        	set 	tmrc.4
 172  007E  300B        	set 	intc.0
 173  007F  1080     R  	sz 	main_01
 174  0080  206E        	call 	sleep_wake_up
 175  0081  0003        ret
 176  0082              ;***************************************
 177  0082              
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次4

 178  0082              idle_wake_up:
 179  0082  3092        	set	pa.1
 180  0083  1F0B        	clr	intc
 181  0084              	mmov 	intc, 		intc_bak
 182  0086  3792        	clr		pa.7
 183  0087  0003        ret
 184  0088              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 185  0088              
 186  0088              ; before enter idle_mode, backup all I/O status, backup all register's 
 187  0088              idle_mode:
 188  0088  1F00     R  	clr 	idle_01					;before enter idle mode, clear idle_01
 189  0089              	mmov 	adcr, 		0h
 190  008B              	mmov 	intc_bak, 	intc
 191  008D              	mmov 	pb_bak, 		pb
 192  008F  3492        	clr 	pa.1
 193  0090  3414        	clr  	pb.0
 194  0091  3494        	clr  	pb.1
 195  0092  3514        	clr  	pb.2
 196  0093  1F0B        	clr	intc
 197  0094              	mmov 	intc, 		047h 		;external and timer interrupt
 198  0096              loop_idle1:
 199  0096  0000        	nop
 200  0097  3C12        	sz		pa.0
 201  0098  1F00     R  	clr	on_01
 202  0099  21D1        	call 	long_push				; long_time push_key run pvi
 203  009A  1080     R  	sz		idle_01					;if idle_01=0 , in idle_01
 204  009B  28A1        	jmp 	loop_idle3				;if idle_01=1, indiate return from ISR
 205  009C  3D94        	sz  	pb.3
 206  009D  2896        	jmp 	loop_idle1
 207  009E  340B        	clr 	intc.0
 208  009F              loop_idle2:
 209  009F  3994        	snz  	pb.3
 210  00A0  289F        	jmp 	loop_idle2
 211  00A1              loop_idle3:
 212  00A1  2082        	call 	idle_wake_up
 213  00A2  0003        ret
 214  00A3              
 215  00A3              ;***************************************
 216  00A3              adpro: 						;A/D conversion 
 217  00A3  1580     R  	dec  	times1_bit
 218  00A4              	mmov 	adcr,	08h 		;pb0 is a/d pin
 219  00A6              	mmov 	acsr,	02h		;a/d clock is fsys/32
 220  00A8  37A2        	clr  	adcr.7
 221  00A9  0000        	nop
 222  00AA  0000        	nop
 223  00AB  0000        	nop
 224  00AC  33A2        	set  	adcr.7 			; reset A/D
 225  00AD  0000        	nop
 226  00AE  0000        	nop
 227  00AF  0000        	nop
 228  00B0  37A2        	clr  	adcr.7 			; start A/D	
 229  00B1              lpask: 
 230  00B1  0000        	nop
 231  00B2  3F22        	sz  	adcr.6 			; poll the ADCR register EOCB bit to detect end of A/D conversion
 232  00B3  28B1        jmp lpask 
 233  00B4  1080     R  	sz   	times1_bit
 234  00B5  28A3        	jmp  	adpro
 235  00B6              
 236  00B6              	mmov 	times1_bit, 01h
 237  00B8  0721        	mov  	a, 	adrh 		;read A/D conversion result 
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次5

 238  00B9  0380     R  	addm 	a,		adbuf_h 	;to add 
 239  00BA  3C0A        	sz   	status.0
 240  00BB  1480     R  	inc  	adbuf_hc 
 241  00BC              	mmov  temp, 	adrl
 242  00BE  0F80        	mov  	a, 		080h
 243  00BF  0600     R  	and  	a, 		temp
 244  00C0  390A        	snz  	status.2
 245  00C1  1480     R  	inc  	adbuf_l
 246  00C2  1680     R  	siz  	adcnt 			
 247  00C3  28A3        	jmp  	adpro				;4 times convert if end? no, return 
 248  00C4              
 249  00C4              	mmov 	check_4s,  05h
 250  00C6  1F00     R  	clr  	check_01
 251  00C7              	mmov 	adcnt,	0fch 	;update times of continue conversion  
 252  00C9  340A        	clr 	status.0 
 253  00CA  1B80     R  	rrc 	adbuf_hc 
 254  00CB  1B80     R  	rrc 	adbuf_h 			;AD result/2 
 255  00CC  1980     R  	rr		adbuf_l
 256  00CD              ;	clr 	status.0 
 257  00CD  1B80     R  	rrc 	adbuf_h 			;AD result/2, get average of 4_times and save average to adbuf_h 
 258  00CE  1B80     R  	rrc 	adbuf_hc 
 259  00CF  1980     R  	rr		adbuf_l
 260  00D0              
 261  00D0  1880     R  	rl		adbuf_h
 262  00D1  0F01        	mov 	a, 		01h
 263  00D2  0600     R  	and 	a,			adbuf_l
 264  00D3  0380     R  	addm 	a, 		adbuf_h
 265  00D4  20D6        	call 	voltage_check 	;battery voltage check
 266  00D5  0003        ret 
 267  00D6              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
 268  00D6              voltage_check: 			;b5-3.5v c4-3.8v cf-4.0v d9-4.2v;;;;vdd is 3.27v 
 269  00D6  0FB5        	mov 	a,		0b5h 	
 270  00D7  0200     R  	sub 	a,		adbuf_h 	;c=0 if result is negative
 271  00D8  3C0A        	sz 	status.0
 272  00D9  2108        	call 	voltage_35 		;voltage>=3.5V 
 273  00DA  1080     R  	sz		check_end
 274  00DB  0003        	ret
 275  00DC  0FC4        	mov 	a,		0c4h		
 276  00DD  0200     R  	sub 	a,		adbuf_h 
 277  00DE  3C0A        	sz 	status.0
 278  00DF  20FF        	call 	voltage_38 		;voltage>=3.8v 
 279  00E0  1080     R  	sz		check_end
 280  00E1  0003        	ret
 281  00E2  0FCF        	mov 	a,		0cfh	 	
 282  00E3  0200     R  	sub 	a,		adbuf_h 
 283  00E4  3C0A        	sz 	status.0
 284  00E5  20F6        	call 	voltage_40 		;voltage>=4.0v
 285  00E6  1080     R  	sz		check_end
 286  00E7  0003        	ret
 287  00E8  0FD9        	mov 	a,		0d9h	 	
 288  00E9  0200     R  	sub 	a,		adbuf_h 
 289  00EA  3C0A        	sz 	status.0
 290  00EB  20ED        	call 	voltage_42 		;voltage>=4.2v
 291  00EC  0003        ret 
 292  00ED              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 293  00ED              voltage_42:
 294  00ED  1F00     R  	clr 	adbuf_h
 295  00EE  1F00     R  	clr 	adbuf_hc
 296  00EF  1F00     R  	clr 	adbuf_l
 297  00F0  3494        	clr 	pb.1
文件:BATTERY_CHECK.ASM 盛群编译器版本 2.86 页次6

 298  00F1  3514        	clr 	pb.2

⌨️ 快捷键说明

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