   1                     ; C Compiler for STM8 (COSMIC Software)
   2                     ; Parser V4.12.9 - 19 Apr 2023
   3                     ; Generator (Limited) V4.5.6 - 18 Jul 2023
  61                     ; 19 void InitDC2AC(void* p)
  61                     ; 20 { 
  63                     .text:	section	.text,new
  64  0000               _InitDC2AC:
  68                     ; 21 	TIM1_DeInit();       //16MHz
  70  0000 cd0000        	call	_TIM1_DeInit
  72                     ; 22 	TIM1_TimeBaseInit(0,TIM1_COUNTERMODE_UP,PULSE_PRIOD, 0);
  74  0003 4b00          	push	#0
  75  0005 ae0320        	ldw	x,#800
  76  0008 89            	pushw	x
  77  0009 4b00          	push	#0
  78  000b 5f            	clrw	x
  79  000c cd0000        	call	_TIM1_TimeBaseInit
  81  000f 5b04          	addw	sp,#4
  82                     ; 23 	TIM1_Cmd(ENABLE);
  84  0011 a601          	ld	a,#1
  85  0013 cd0000        	call	_TIM1_Cmd
  87                     ; 24 	StartPulse(0);
  89  0016 5f            	clrw	x
  90  0017 cd0000        	call	_StartPulse
  92                     ; 26  	TIM1_CtrlPWMOutputs(ENABLE);   
  94  001a a601          	ld	a,#1
  95  001c cd0000        	call	_TIM1_CtrlPWMOutputs
  97                     ; 28 	TIM1_Cmd(ENABLE);        
  99  001f a601          	ld	a,#1
 100  0021 cd0000        	call	_TIM1_Cmd
 102                     ; 29 }
 105  0024 81            	ret
 128                     ; 31 void LockAllMotor(void)
 128                     ; 32 {
 129                     .text:	section	.text,new
 130  0000               _LockAllMotor:
 134                     ; 33 	(GPIOC->ODR&=(~0x08));
 136  0000 7217500a      	bres	20490,#3
 137                     ; 34 }
 140  0004 81            	ret
 163                     ; 36 void UNLockAllMotor(void)
 163                     ; 37 {
 164                     .text:	section	.text,new
 165  0000               _UNLockAllMotor:
 169                     ; 38 	(GPIOC->ODR|=0x08);
 171  0000 7216500a      	bset	20490,#3
 172                     ; 39 }
 175  0004 81            	ret
 215                     ; 41 void StartPulse(void* p)
 215                     ; 42 {
 216                     .text:	section	.text,new
 217  0000               _StartPulse:
 221                     ; 43 	IED.MotorMoveDelayTimerID=-1;
 223  0000 35ff0018      	mov	_IED+24,#255
 224                     ; 44 	TIM1_OC1Init(TIM1_OCMODE_PWM1, 
 224                     ; 45                   TIM1_OUTPUTSTATE_ENABLE, 
 224                     ; 46                   TIM1_OUTPUTNSTATE_DISABLE, 
 224                     ; 47                   PULSE_PRIOD/2, 
 224                     ; 48 									TIM1_OCPOLARITY_LOW , 
 224                     ; 49                   TIM1_OCNPOLARITY_LOW , 
 224                     ; 50                   TIM1_OCIDLESTATE_RESET, 
 224                     ; 51                   TIM1_OCNIDLESTATE_RESET);
 226  0004 4b00          	push	#0
 227  0006 4b00          	push	#0
 228  0008 4b88          	push	#136
 229  000a 4b22          	push	#34
 230  000c ae0190        	ldw	x,#400
 231  000f 89            	pushw	x
 232  0010 4b00          	push	#0
 233  0012 ae6011        	ldw	x,#24593
 234  0015 cd0000        	call	_TIM1_OC1Init
 236  0018 5b07          	addw	sp,#7
 237                     ; 52 	TIM1_OC1PreloadConfig(ENABLE);
 239  001a a601          	ld	a,#1
 240  001c cd0000        	call	_TIM1_OC1PreloadConfig
 242                     ; 53 	TIM1_OC2Init(TIM1_OCMODE_PWM1, 
 242                     ; 54                   TIM1_OUTPUTSTATE_ENABLE, 
 242                     ; 55                   TIM1_OUTPUTNSTATE_DISABLE, 
 242                     ; 56                   PULSE_PRIOD/2, 
 242                     ; 57 									TIM1_OCPOLARITY_HIGH , 
 242                     ; 58                   TIM1_OCNPOLARITY_LOW , 
 242                     ; 59                   TIM1_OCIDLESTATE_RESET, 
 242                     ; 60                   TIM1_OCNIDLESTATE_RESET); 
 244  001f 4b00          	push	#0
 245  0021 4b00          	push	#0
 246  0023 4b88          	push	#136
 247  0025 4b00          	push	#0
 248  0027 ae0190        	ldw	x,#400
 249  002a 89            	pushw	x
 250  002b 4b00          	push	#0
 251  002d ae6011        	ldw	x,#24593
 252  0030 cd0000        	call	_TIM1_OC2Init
 254  0033 5b07          	addw	sp,#7
 255                     ; 61 	TIM1_OC2PreloadConfig(ENABLE);  
 257  0035 a601          	ld	a,#1
 258  0037 cd0000        	call	_TIM1_OC2PreloadConfig
 260                     ; 62 }
 263  003a 81            	ret
 300                     ; 64 void InitInvert(void *p)
 300                     ; 65 {
 301                     .text:	section	.text,new
 302  0000               _InitInvert:
 306                     ; 67 	TIM1_OC3Init(TIM1_OCMODE_PWM1,               
 306                     ; 68                   TIM1_OUTPUTSTATE_ENABLE, 
 306                     ; 69                   TIM1_OUTPUTNSTATE_DISABLE, 
 306                     ; 70                   PULSE_PRIOD/2, 
 306                     ; 71 									TIM1_OCPOLARITY_HIGH , 
 306                     ; 72                   TIM1_OCNPOLARITY_LOW , 
 306                     ; 73                   TIM1_OCIDLESTATE_RESET, 
 306                     ; 74                   TIM1_OCNIDLESTATE_RESET); 
 308  0000 4b00          	push	#0
 309  0002 4b00          	push	#0
 310  0004 4b88          	push	#136
 311  0006 4b00          	push	#0
 312  0008 ae0190        	ldw	x,#400
 313  000b 89            	pushw	x
 314  000c 4b00          	push	#0
 315  000e ae6011        	ldw	x,#24593
 316  0011 cd0000        	call	_TIM1_OC3Init
 318  0014 5b07          	addw	sp,#7
 319                     ; 75 	TIM1_OC3PreloadConfig(ENABLE); 
 321  0016 a601          	ld	a,#1
 322  0018 cd0000        	call	_TIM1_OC3PreloadConfig
 324                     ; 76 }
 327  001b 81            	ret
 351                     ; 78 void StopInvert() 
 351                     ; 79 { 
 352                     .text:	section	.text,new
 353  0000               _StopInvert:
 357                     ; 80 	TIM1_ForcedOC3Config(TIM1_FORCEDACTION_INACTIVE );
 359  0000 a640          	ld	a,#64
 360  0002 cd0000        	call	_TIM1_ForcedOC3Config
 362                     ; 81 }
 365  0005 81            	ret
 403                     ; 84 void DeInitDC2AC(void *p)
 403                     ; 85 {
 404                     .text:	section	.text,new
 405  0000               _DeInitDC2AC:
 409                     ; 86 	IED.cDCCovert = 1;
 411  0000 35010012      	mov	_IED+18,#1
 412                     ; 87 	TIM1_ForcedOC1Config(TIM1_FORCEDACTION_INACTIVE );
 414  0004 a640          	ld	a,#64
 415  0006 cd0000        	call	_TIM1_ForcedOC1Config
 417                     ; 88 	TIM1_ForcedOC2Config(TIM1_FORCEDACTION_ACTIVE );
 419  0009 a650          	ld	a,#80
 420  000b cd0000        	call	_TIM1_ForcedOC2Config
 422                     ; 91 }
 425  000e 81            	ret
 463                     ; 93 void StopDC2ACConvert(void* p)
 463                     ; 94 {
 464                     .text:	section	.text,new
 465  0000               _StopDC2ACConvert:
 469                     ; 95 	IED.cMoving = 0;  
 471  0000 725f0002      	clr	_IED+2
 472                     ; 96 	IED.cDCCovert = 0;
 474  0004 725f0012      	clr	_IED+18
 475                     ; 100 	StopTimer(&IED.MotorMoveDelayTimerID );
 477  0008 ae0018        	ldw	x,#_IED+24
 478  000b cd0000        	call	_StopTimer
 480                     ; 101 	DeInitDC2AC(0); 									 	   		   
 482  000e 5f            	clrw	x
 483  000f cd0000        	call	_DeInitDC2AC
 485                     ; 102 }   
 488  0012 81            	ret
 491                     	switch	.data
 492  0000               _CCR2_Val:
 493  0000 0000          	dc.w	0
 588                     ; 105 void SetWarningFreq(unsigned  int freq)
 588                     ; 106 {  
 589                     .text:	section	.text,new
 590  0000               _SetWarningFreq:
 592  0000 89            	pushw	x
 593  0001 5205          	subw	sp,#5
 594       00000005      OFST:	set	5
 597                     ; 108 	TIM3_DeInit();       //4MHz    //溢出频率为1KHz     //实际250Hz
 599  0003 cd0000        	call	_TIM3_DeInit
 601                     ; 109 	TIM3_TimeBaseInit(0,0xFFFF);
 603  0006 aeffff        	ldw	x,#65535
 604  0009 89            	pushw	x
 605  000a 4f            	clr	a
 606  000b cd0000        	call	_TIM3_TimeBaseInit
 608  000e 85            	popw	x
 609                     ; 110 	TIM3_Cmd(ENABLE);  
 611  000f a601          	ld	a,#1
 612  0011 cd0000        	call	_TIM3_Cmd
 614                     ; 112 	if(freq==0) 
 616  0014 1e06          	ldw	x,(OFST+1,sp)
 617  0016 2604          	jrne	L702
 618                     ; 113 	 	mode			= TIM3_OCMODE_TIMING;     
 620  0018 0f05          	clr	(OFST+0,sp)
 623  001a 2035          	jra	L112
 624  001c               L702:
 625                     ; 116 		CCR2_Val = 8000000UL/freq;
 627  001c 1e06          	ldw	x,(OFST+1,sp)
 628  001e cd0000        	call	c_uitolx
 630  0021 96            	ldw	x,sp
 631  0022 1c0001        	addw	x,#OFST-4
 632  0025 cd0000        	call	c_rtol
 635  0028 ae1200        	ldw	x,#4608
 636  002b bf02          	ldw	c_lreg+2,x
 637  002d ae007a        	ldw	x,#122
 638  0030 bf00          	ldw	c_lreg,x
 639  0032 96            	ldw	x,sp
 640  0033 1c0001        	addw	x,#OFST-4
 641  0036 cd0000        	call	c_ludv
 643  0039 be02          	ldw	x,c_lreg+2
 644  003b cf0000        	ldw	_CCR2_Val,x
 645                     ; 117 		if((TIM3->CCMR2&TIM3_OCMODE_TOGGLE)==TIM3_OCMODE_TOGGLE) 
 647  003e c65326        	ld	a,21286
 648  0041 a430          	and	a,#48
 649  0043 a130          	cp	a,#48
 650  0045 271b          	jreq	L62
 651                     ; 118 			return ; 
 653                     ; 119 		mode		= TIM3_OCMODE_TOGGLE;   
 655  0047 a630          	ld	a,#48
 656  0049 6b05          	ld	(OFST+0,sp),a
 658                     ; 120 		TIM3_ITConfig(TIM3_IT_CC2, ENABLE);
 660  004b ae0401        	ldw	x,#1025
 661  004e cd0000        	call	_TIM3_ITConfig
 663  0051               L112:
 664                     ; 122 	TIM3_OC2Init(mode,
 664                     ; 123                   TIM3_OUTPUTSTATE_ENABLE,
 664                     ; 124 									CCR2_Val, 
 664                     ; 125                   TIM3_OCPOLARITY_LOW); 
 666  0051 4b22          	push	#34
 667  0053 ce0000        	ldw	x,_CCR2_Val
 668  0056 89            	pushw	x
 669  0057 7b08          	ld	a,(OFST+3,sp)
 670  0059 ae0011        	ldw	x,#17
 671  005c 95            	ld	xh,a
 672  005d cd0000        	call	_TIM3_OC2Init
 674  0060 5b03          	addw	sp,#3
 675                     ; 127 }
 676  0062               L62:
 679  0062 5b07          	addw	sp,#7
 680  0064 81            	ret
 714                     ; 131 @far @interrupt void TIM3_CAP_COM_IRQHandler(void)
 714                     ; 132 #else // _RAISONANCE_  
 714                     ; 133 void TIM3_CAP_COM_IRQHandler(void) interrupt 16
 714                     ; 134 #endif // _COSMIC_  
 714                     ; 135 { 
 716                     .text:	section	.text,new
 717  0000               f_TIM3_CAP_COM_IRQHandler:
 719       00000002      OFST:	set	2
 720  0000 89            	pushw	x
 723                     ; 136 	unsigned int  newValue = (TIM3->CCR2H<<8)+TIM3->CCR2L+CCR2_Val; 
 725  0001 c6532f        	ld	a,21295
 726  0004 5f            	clrw	x
 727  0005 97            	ld	xl,a
 728  0006 4f            	clr	a
 729  0007 02            	rlwa	x,a
 730  0008 01            	rrwa	x,a
 731  0009 cb5330        	add	a,21296
 732  000c 2401          	jrnc	L23
 733  000e 5c            	incw	x
 734  000f               L23:
 735  000f 02            	rlwa	x,a
 736  0010 72bb0000      	addw	x,_CCR2_Val
 737  0014 1f01          	ldw	(OFST-1,sp),x
 739                     ; 137 	TIM3->SR1 &=  ~TIM3_IT_CC2;  
 741  0016 72155322      	bres	21282,#2
 742                     ; 138 	TIM3->CCR2H = newValue>>8;
 744  001a 7b01          	ld	a,(OFST-1,sp)
 745  001c c7532f        	ld	21295,a
 746                     ; 139 	TIM3->CCR2L = newValue&0xFF;
 748  001f 7b02          	ld	a,(OFST+0,sp)
 749  0021 a4ff          	and	a,#255
 750  0023 c75330        	ld	21296,a
 751                     ; 140 	GPIOD->ODR^=0x80;
 753  0026 901e500f      	bcpl	20495,#7
 754                     ; 141 }  
 757  002a 5b02          	addw	sp,#2
 758  002c 80            	iret
 797                     ; 143 void EnableBrakPower (UCHAR bEnable)
 797                     ; 144 {
 799                     .text:	section	.text,new
 800  0000               _EnableBrakPower:
 802  0000 88            	push	a
 803       00000000      OFST:	set	0
 806                     ; 145 	if(IED.BrakeDelayTimerID!=-1)
 808  0001 c60019        	ld	a,_IED+25
 809  0004 a1ff          	cp	a,#255
 810  0006 2706          	jreq	L542
 811                     ; 146 		StopTimer(&IED.BrakeDelayTimerID);
 813  0008 ae0019        	ldw	x,#_IED+25
 814  000b cd0000        	call	_StopTimer
 816  000e               L542:
 817                     ; 147 	if(bEnable)
 819  000e 0d01          	tnz	(OFST+1,sp)
 820  0010 2710          	jreq	L742
 821                     ; 149 		BRAKECHECK = 1;	   //如果要开刹车,立即打开 
 823  0012 72120003      	bset	_SPIIO+3,#1
 824                     ; 151 		SuspendTask(TASK_CHECK_COIL);
 826  0016 a614          	ld	a,#20
 827  0018 cd0000        	call	_SuspendTask
 829                     ; 152 		SuspendTask(TASK_CHECK_MOTOR); 
 831  001b a60d          	ld	a,#13
 832  001d cd0000        	call	_SuspendTask
 835  0020 2019          	jra	L152
 836  0022               L742:
 837                     ; 159 		IED.BrakeDelayTimerID =  StartTimer(
 837                     ; 160 					TIMER_MODE_ONCEROUTINE,1000UL,StartCheckBrake,0);
 839  0022 5f            	clrw	x
 840  0023 89            	pushw	x
 841  0024 ae0000        	ldw	x,#_StartCheckBrake
 842  0027 89            	pushw	x
 843  0028 ae03e8        	ldw	x,#1000
 844  002b 89            	pushw	x
 845  002c ae0000        	ldw	x,#0
 846  002f 89            	pushw	x
 847  0030 a601          	ld	a,#1
 848  0032 cd0000        	call	_StartTimer
 850  0035 5b08          	addw	sp,#8
 851  0037 c70019        	ld	_IED+25,a
 852                     ; 161 		nop();
 855  003a 9d            nop
 857  003b               L152:
 858                     ; 164 } 
 861  003b 84            	pop	a
 862  003c 81            	ret
 900                     ; 166  void StartCheckBrake(void *p)
 900                     ; 167 {
 901                     .text:	section	.text,new
 902  0000               _StartCheckBrake:
 906                     ; 168 	IED.BrakeDelayTimerID = -1;
 908  0000 35ff0019      	mov	_IED+25,#255
 909                     ; 169 	BRAKECHECK = 0;
 911  0004 72130003      	bres	_SPIIO+3,#1
 912                     ; 170 	ActiveTask(TASK_CHECK_COIL,50L);
 914  0008 ae0032        	ldw	x,#50
 915  000b 89            	pushw	x
 916  000c ae0000        	ldw	x,#0
 917  000f 89            	pushw	x
 918  0010 a614          	ld	a,#20
 919  0012 cd0000        	call	_ActiveTask
 921  0015 5b04          	addw	sp,#4
 922                     ; 171 	 ActiveTask(TASK_CHECK_MOTOR,1000L);
 924  0017 ae03e8        	ldw	x,#1000
 925  001a 89            	pushw	x
 926  001b ae0000        	ldw	x,#0
 927  001e 89            	pushw	x
 928  001f a60d          	ld	a,#13
 929  0021 cd0000        	call	_ActiveTask
 931  0024 5b04          	addw	sp,#4
 932                     ; 177 }
 935  0026 81            	ret
 959                     ; 180 void EnableBattary(void)
 959                     ; 181 {
 960                     .text:	section	.text,new
 961  0000               _EnableBattary:
 965                     ; 182 	if(BAT_CTRL_RELAY!=1)
 967  0000 c60003        	ld	a,_SPIIO+3
 968  0003 a501          	bcp	a,#1
 969  0005 2604          	jrne	L103
 970                     ; 187 		BAT_CTRL_RELAY = 1;
 972  0007 72100003      	bset	_SPIIO+3,#0
 973  000b               L103:
 974                     ; 189 }
 977  000b 81            	ret
1001                     ; 191 void DisableBattary(void)
1001                     ; 192 {  
1002                     .text:	section	.text,new
1003  0000               _DisableBattary:
1007                     ; 193 	if(BAT_CTRL_RELAY!=0)
1009  0000 c60003        	ld	a,_SPIIO+3
1010  0003 a501          	bcp	a,#1
1011  0005 2704          	jreq	L313
1012                     ; 198 		BAT_CTRL_RELAY = 0;
1014  0007 72110003      	bres	_SPIIO+3,#0
1015  000b               L313:
1016                     ; 200 }
1019  000b 81            	ret
1050                     ; 203 void BotCheck(void)
1050                     ; 204 {
1051                     .text:	section	.text,new
1052  0000               _BotCheck:
1056                     ; 205 	GetCurretPos();
1058  0000 cd0000        	call	_GetCurretPos
1060                     ; 206 	if(pos_bot_bit==0)
1062  0003 c60004        	ld	a,_SPIIO+4
1063  0006 a580          	bcp	a,#128
1064  0008 260f          	jrne	L523
1065                     ; 208 		StopDC2ACConvert(0);
1067  000a 5f            	clrw	x
1068  000b cd0000        	call	_StopDC2ACConvert
1070                     ; 209 		SuspendTask(TASK_BREAK);//DC_DN_PR
1072  000e a612          	ld	a,#18
1073  0010 cd0000        	call	_SuspendTask
1075                     ; 213 		IED.cPos = POS_BOT ; 
1077  0013 35020001      	mov	_IED+1,#2
1079  0017 2013          	jra	L723
1080  0019               L523:
1081                     ; 217 		CheckBrakePower();//检查逆变是否正常
1083  0019 cd0000        	call	_CheckBrakePower
1085                     ; 218 		if(Warning_flag==0)
1087  001c 725d0000      	tnz	_Warning_flag
1088  0020 260a          	jrne	L723
1089                     ; 219 			Beep(1,200); 
1091  0022 ae00c8        	ldw	x,#200
1092  0025 89            	pushw	x
1093  0026 a601          	ld	a,#1
1094  0028 cd0000        	call	_Beep
1096  002b 85            	popw	x
1097  002c               L723:
1098                     ; 221 } 
1101  002c 81            	ret
1104                     	switch	.data
1105  0002               _DC2AC_CTRL:
1106  0002 00            	dc.b	0
1134                     ; 224 void StartDC2ACConvert(void)
1134                     ; 225 {
1135                     .text:	section	.text,new
1136  0000               _StartDC2ACConvert:
1140                     ; 226 	IED.cMoving = 1;
1142  0000 35010002      	mov	_IED+2,#1
1143                     ; 227 	if(DC2AC_CTRL==FALSE)
1145  0004 725d0002      	tnz	_DC2AC_CTRL
1146  0008 2607          	jrne	L343
1147                     ; 229 		DC2AC_CTRL	= TRUE; 
1149  000a 35010002      	mov	_DC2AC_CTRL,#1
1150                     ; 231 		UNLockAllMotor();
1152  000e cd0000        	call	_UNLockAllMotor
1154  0011               L343:
1155                     ; 238 	StopTimer(&IED.MotorMoveDelayTimerID);
1157  0011 ae0018        	ldw	x,#_IED+24
1158  0014 cd0000        	call	_StopTimer
1160                     ; 239 	IED.MotorMoveDelayTimerID =  StartTimer(TIMER_MODE_ONCEROUTINE,10,StartPulse,0);	  //延时0.1S逆变
1162  0017 5f            	clrw	x
1163  0018 89            	pushw	x
1164  0019 ae0000        	ldw	x,#_StartPulse
1165  001c 89            	pushw	x
1166  001d ae000a        	ldw	x,#10
1167  0020 89            	pushw	x
1168  0021 ae0000        	ldw	x,#0
1169  0024 89            	pushw	x
1170  0025 a601          	ld	a,#1
1171  0027 cd0000        	call	_StartTimer
1173  002a 5b08          	addw	sp,#8
1174  002c c70018        	ld	_IED+24,a
1175                     ; 241 }
1178  002f 81            	ret
1208                     ; 251 void Task_Power_Check()		//电压错误信号检测
1208                     ; 252 { 			
1209                     .text:	section	.text,new
1210  0000               _Task_Power_Check:
1212  0000 5204          	subw	sp,#4
1213       00000004      OFST:	set	4
1216                     ; 253 	if(MAINPOWER>MAINPOWER_VOL)	   // 主电电压正常显示
1218  0002 9c            	rvf
1219  0003 ae0bb8        	ldw	x,#3000
1220  0006 cd0000        	call	c_itof
1222  0009 96            	ldw	x,sp
1223  000a 1c0001        	addw	x,#OFST-3
1224  000d cd0000        	call	c_rtol
1227  0010 ae0010        	ldw	x,#_voltage+16
1228  0013 cd0000        	call	c_ltor
1230  0016 96            	ldw	x,sp
1231  0017 1c0001        	addw	x,#OFST-3
1232  001a cd0000        	call	c_fcmp
1234  001d 2d24          	jrsle	L553
1235                     ; 255       IED.Main_Power_OK_Cnt++  ;   //连续电压好才判断正常
1237  001f 725c001b      	inc	_IED+27
1238                     ; 256       if(IED.Main_Power_OK_Cnt>1)
1240  0023 c6001b        	ld	a,_IED+27
1241  0026 a102          	cp	a,#2
1242  0028 2538          	jrult	L163
1243                     ; 258 				IED.Err &= ~MAIN_POWER_ERROR; 
1245  002a 72150005      	bres	_IED+5,#2
1246                     ; 259 				ActiveTask(TASK_PHASE,PHASE_PRIOD); 
1248  002e ae07d0        	ldw	x,#2000
1249  0031 89            	pushw	x
1250  0032 ae0000        	ldw	x,#0
1251  0035 89            	pushw	x
1252  0036 a60a          	ld	a,#10
1253  0038 cd0000        	call	_ActiveTask
1255  003b 5b04          	addw	sp,#4
1256                     ; 260 				IED.Main_Power_OK_Cnt = 1;
1258  003d 3501001b      	mov	_IED+27,#1
1259  0041 201f          	jra	L163
1260  0043               L553:
1261                     ; 265 		DeChargeBat(FALSE);	 //停止电池放电
1263  0043 4f            	clr	a
1264  0044 cd0000        	call	_DeChargeBat
1266                     ; 266 		IED.Main_Power_OK_Cnt = 0;  
1268  0047 725f001b      	clr	_IED+27
1269                     ; 267 		if(MOTOR__RUN)   
1271  004b c60003        	ld	a,_SPIIO+3
1272  004e a50c          	bcp	a,#12
1273  0050 2703          	jreq	L363
1274                     ; 268 			ErrStopMotor();       
1276  0052 cd0000        	call	_ErrStopMotor
1278  0055               L363:
1279                     ; 269 		IED.Err |= MAIN_POWER_ERROR; 
1281  0055 72140005      	bset	_IED+5,#2
1282                     ; 270 		IED.Err |= ErrPhase;
1284  0059 72100005      	bset	_IED+5,#0
1285                     ; 271 		SuspendTask(TASK_PHASE);						//主电错误停止相位检测,防止检测错误
1287  005d a60a          	ld	a,#10
1288  005f cd0000        	call	_SuspendTask
1290  0062               L163:
1291                     ; 273 }
1294  0062 5b04          	addw	sp,#4
1295  0064 81            	ret
1352                     ; 275 void ChargeBat(bool bEnable)
1352                     ; 276 {						    
1353                     .text:	section	.text,new
1354  0000               _ChargeBat:
1356  0000 88            	push	a
1357       00000000      OFST:	set	0
1360                     ; 278 	if(bEnable)				//充电时不得放电
1362  0001 4d            	tnz	a
1363  0002 2704          	jreq	L314
1364                     ; 279 		DeChargeBat(FALSE);	//不充电时不一定放电
1366  0004 4f            	clr	a
1367  0005 cd0000        	call	_DeChargeBat
1369  0008               L314:
1370                     ; 280 	CHARGE_BAT = bEnable;
1372  0008 7b01          	ld	a,(OFST+1,sp)
1373  000a 44            	srl	a
1374  000b 901d0003      	bccm	_SPIIO+3,#6
1375                     ; 281 }
1378  000f 84            	pop	a
1379  0010 81            	ret
1415                     ; 283 void DeChargeBat(bool bEnable)
1415                     ; 284 {
1416                     .text:	section	.text,new
1417  0000               _DeChargeBat:
1421                     ; 285 	FLUSH_BAT = bEnable;
1423  0000 44            	srl	a
1424  0001 901f0003      	bccm	_SPIIO+3,#7
1425                     ; 286 }
1428  0005 81            	ret
1455                     ; 289 void BatCheck(void)
1455                     ; 290 {
1456                     .text:	section	.text,new
1457  0000               _BatCheck:
1459  0000 5204          	subw	sp,#4
1460       00000004      OFST:	set	4
1463                     ; 295 	if(BAT_POWER <BATLOW_VOL)  	   						//备电电压低
1465  0002 9c            	rvf
1466  0003 ae2328        	ldw	x,#9000
1467  0006 cd0000        	call	c_itof
1469  0009 96            	ldw	x,sp
1470  000a 1c0001        	addw	x,#OFST-3
1471  000d cd0000        	call	c_rtol
1474  0010 ae0004        	ldw	x,#_voltage+4
1475  0013 cd0000        	call	c_ltor
1477  0016 96            	ldw	x,sp
1478  0017 1c0001        	addw	x,#OFST-3
1479  001a cd0000        	call	c_fcmp
1481  001d 2e44          	jrsge	L344
1482                     ; 297 		if(MAINPOWER>MAINPOWER_VOL)
1484  001f 9c            	rvf
1485  0020 ae0bb8        	ldw	x,#3000
1486  0023 cd0000        	call	c_itof
1488  0026 96            	ldw	x,sp
1489  0027 1c0001        	addw	x,#OFST-3
1490  002a cd0000        	call	c_rtol
1493  002d ae0010        	ldw	x,#_voltage+16
1494  0030 cd0000        	call	c_ltor
1496  0033 96            	ldw	x,sp
1497  0034 1c0001        	addw	x,#OFST-3
1498  0037 cd0000        	call	c_fcmp
1500  003a 2d0a          	jrsle	L544
1501                     ; 299 			IED.Bat_Low_Cnt =0 ;		 
1503  003c 725f001a      	clr	_IED+26
1504                     ; 300 		  IED.Err &= ~BAT_LOW_ERR;
1506  0040 72170005      	bres	_IED+5,#3
1508  0044 201d          	jra	L344
1509  0046               L544:
1510                     ; 304 			IED.Bat_Low_Cnt ++ ;
1512  0046 725c001a      	inc	_IED+26
1513                     ; 305 			if(IED.Bat_Low_Cnt>=10)	
1515  004a c6001a        	ld	a,_IED+26
1516  004d a10a          	cp	a,#10
1517  004f 2504          	jrult	L154
1518                     ; 307 				IED.Err |= BAT_LOW_ERR;
1520  0051 72160005      	bset	_IED+5,#3
1521  0055               L154:
1522                     ; 309 			if(IED.Bat_Low_Cnt>=80)		//检测电压低80次后关机 8S
1524  0055 c6001a        	ld	a,_IED+26
1525  0058 a150          	cp	a,#80
1526  005a 2507          	jrult	L344
1527                     ; 311 				DisableBattary();	  		//电压低无主电关机
1529  005c cd0000        	call	_DisableBattary
1531                     ; 312 				StopDC2ACConvert(0);
1533  005f 5f            	clrw	x
1534  0060 cd0000        	call	_StopDC2ACConvert
1536  0063               L344:
1537                     ; 317 	if(BAT_POWER>BATLOW_VOL)//主电失电,可以检测电压低是否恢复
1539  0063 9c            	rvf
1540  0064 ae2328        	ldw	x,#9000
1541  0067 cd0000        	call	c_itof
1543  006a 96            	ldw	x,sp
1544  006b 1c0001        	addw	x,#OFST-3
1545  006e cd0000        	call	c_rtol
1548  0071 ae0004        	ldw	x,#_voltage+4
1549  0074 cd0000        	call	c_ltor
1551  0077 96            	ldw	x,sp
1552  0078 1c0001        	addw	x,#OFST-3
1553  007b cd0000        	call	c_fcmp
1555  007e 2d18          	jrsle	L554
1556                     ; 319 		if((IED.Err&MAIN_POWER_ERROR)==MAIN_POWER_ERROR)	   
1558  0080 c60004        	ld	a,_IED+4
1559  0083 97            	ld	xl,a
1560  0084 c60005        	ld	a,_IED+5
1561  0087 a404          	and	a,#4
1562  0089 5f            	clrw	x
1563  008a 02            	rlwa	x,a
1564  008b a30004        	cpw	x,#4
1565  008e 2608          	jrne	L554
1566                     ; 322 			IED.Bat_Low_Cnt = 0; 
1568  0090 725f001a      	clr	_IED+26
1569                     ; 323 			IED.Err &= ~BAT_LOW_ERR; 
1571  0094 72170005      	bres	_IED+5,#3
1572  0098               L554:
1573                     ; 327 }
1576  0098 5b04          	addw	sp,#4
1577  009a 81            	ret
1580                     	switch	.data
1581  0003               _charegeState:
1582  0003 0000          	dc.w	0
1583  0005               _chargeRunCnt:
1584  0005 0000          	dc.w	0
1615                     ; 335 void TaskChargeBat(void)
1615                     ; 336 {
1616                     .text:	section	.text,new
1617  0000               _TaskChargeBat:
1619  0000 5204          	subw	sp,#4
1620       00000004      OFST:	set	4
1623                     ; 337 	chargeRunCnt++;
1625  0002 ce0005        	ldw	x,_chargeRunCnt
1626  0005 1c0001        	addw	x,#1
1627  0008 cf0005        	ldw	_chargeRunCnt,x
1628                     ; 338 	GetVoltage();
1630  000b cd0000        	call	_GetVoltage
1632                     ; 339 	BatCheck();
1634  000e cd0000        	call	_BatCheck
1636                     ; 340 	switch (charegeState)
1638  0011 ce0003        	ldw	x,_charegeState
1640                     ; 470 		default:
1640                     ; 471 			break;
1641  0014 5d            	tnzw	x
1642  0015 272b          	jreq	L164
1643  0017 5a            	decw	x
1644  0018 277c          	jreq	L364
1645  001a 5a            	decw	x
1646  001b 2603          	jrne	L26
1647  001d cc00d7        	jp	L564
1648  0020               L26:
1649  0020 5a            	decw	x
1650  0021 2603          	jrne	L46
1651  0023 cc00f5        	jp	L764
1652  0026               L46:
1653  0026 5a            	decw	x
1654  0027 2603          	jrne	L66
1655  0029 cc012e        	jp	L174
1656  002c               L66:
1657  002c 5a            	decw	x
1658  002d 2603          	jrne	L07
1659  002f cc014c        	jp	L374
1660  0032               L07:
1661  0032 5a            	decw	x
1662  0033 2603          	jrne	L27
1663  0035 cc01b0        	jp	L574
1664  0038               L27:
1665  0038 5a            	decw	x
1666  0039 2603          	jrne	L47
1667  003b cc01e0        	jp	L774
1668  003e               L47:
1669  003e ac010201      	jpf	L515
1670  0042               L164:
1671                     ; 342 		case CHARGE_INIT: 
1671                     ; 343 			//主电OK
1671                     ; 344 			if((IED.Err&(MAIN_POWER_ERROR))==0)	   //主 电正常充电
1673  0042 c60005        	ld	a,_IED+5
1674  0045 a504          	bcp	a,#4
1675  0047 263b          	jrne	L715
1676                     ; 346 				if(BAT_POWER>BATSHORT_VOL)
1678  0049 9c            	rvf
1679  004a ae03e8        	ldw	x,#1000
1680  004d cd0000        	call	c_itof
1682  0050 96            	ldw	x,sp
1683  0051 1c0001        	addw	x,#OFST-3
1684  0054 cd0000        	call	c_rtol
1687  0057 ae0004        	ldw	x,#_voltage+4
1688  005a cd0000        	call	c_ltor
1690  005d 96            	ldw	x,sp
1691  005e 1c0001        	addw	x,#OFST-3
1692  0061 cd0000        	call	c_fcmp
1694  0064 2d16          	jrsle	L125
1695                     ; 348 					EnableBattary();
1697  0066 cd0000        	call	_EnableBattary
1699                     ; 349 					chargeRunCnt = 0; 
1701  0069 5f            	clrw	x
1702  006a cf0005        	ldw	_chargeRunCnt,x
1703                     ; 350 					ChargeBat(TRUE);
1705  006d a601          	ld	a,#1
1706  006f cd0000        	call	_ChargeBat
1708                     ; 351 					charegeState = PRE_ENCHARGE;   
1710  0072 ae0001        	ldw	x,#1
1711  0075 cf0003        	ldw	_charegeState,x
1713  0078 ac010201      	jpf	L515
1714  007c               L125:
1715                     ; 358 					IED.Err |=BAT_SHORT	; 
1717  007c 721a0005      	bset	_IED+5,#5
1718  0080 ac010201      	jpf	L515
1719  0084               L715:
1720                     ; 363 				charegeState = CHARGE_WAIT2;
1722  0084 ae0005        	ldw	x,#5
1723  0087 cf0003        	ldw	_charegeState,x
1724                     ; 364 				ChargeBat(FALSE); 
1726  008a 4f            	clr	a
1727  008b cd0000        	call	_ChargeBat
1729                     ; 365 				DeChargeBat(FALSE);
1731  008e 4f            	clr	a
1732  008f cd0000        	call	_DeChargeBat
1734  0092 ac010201      	jpf	L515
1735  0096               L364:
1736                     ; 368 		case PRE_ENCHARGE: 
1736                     ; 369 			if(chargeRunCnt>0)
1738  0096 9c            	rvf
1739  0097 ce0005        	ldw	x,_chargeRunCnt
1740  009a 2d3b          	jrsle	L564
1741                     ; 372 				if(BAT_POWER <BATSHORT_VOL)	
1743  009c 9c            	rvf
1744  009d ae03e8        	ldw	x,#1000
1745  00a0 cd0000        	call	c_itof
1747  00a3 96            	ldw	x,sp
1748  00a4 1c0001        	addw	x,#OFST-3
1749  00a7 cd0000        	call	c_rtol
1752  00aa ae0004        	ldw	x,#_voltage+4
1753  00ad cd0000        	call	c_ltor
1755  00b0 96            	ldw	x,sp
1756  00b1 1c0001        	addw	x,#OFST-3
1757  00b4 cd0000        	call	c_fcmp
1759  00b7 2e10          	jrsge	L135
1760                     ; 374 					ChargeBat(FALSE); 
1762  00b9 4f            	clr	a
1763  00ba cd0000        	call	_ChargeBat
1765                     ; 375 					charegeState = CHARGE_WAIT2;
1767  00bd ae0005        	ldw	x,#5
1768  00c0 cf0003        	ldw	_charegeState,x
1769                     ; 376 					IED.Err |=BAT_SHORT	; 
1771  00c3 721a0005      	bset	_IED+5,#5
1773  00c7 200e          	jra	L564
1774  00c9               L135:
1775                     ; 380 					IED.Err &= ~BAT_SHORT; 
1777  00c9 721b0005      	bres	_IED+5,#5
1778                     ; 382 					chargeRunCnt = 0;
1780  00cd 5f            	clrw	x
1781  00ce cf0005        	ldw	_chargeRunCnt,x
1782                     ; 383 					charegeState = ENCHARGE1;  
1784  00d1 ae0002        	ldw	x,#2
1785  00d4 cf0003        	ldw	_charegeState,x
1786  00d7               L564:
1787                     ; 386 		case ENCHARGE1:				 //2S充电
1787                     ; 387 			if(chargeRunCnt>20)	
1789  00d7 9c            	rvf
1790  00d8 ce0005        	ldw	x,_chargeRunCnt
1791  00db a30015        	cpw	x,#21
1792  00de 2e03          	jrsge	L67
1793  00e0 cc0201        	jp	L515
1794  00e3               L67:
1795                     ; 392 				ChargeBat(FALSE);
1797  00e3 4f            	clr	a
1798  00e4 cd0000        	call	_ChargeBat
1800                     ; 393 				charegeState = CHARGE_WAIT1;
1802  00e7 ae0003        	ldw	x,#3
1803  00ea cf0003        	ldw	_charegeState,x
1804                     ; 394 				chargeRunCnt = 0; 
1806  00ed 5f            	clrw	x
1807  00ee cf0005        	ldw	_chargeRunCnt,x
1808  00f1 ac010201      	jpf	L515
1809  00f5               L764:
1810                     ; 397 		case  CHARGE_WAIT1:
1810                     ; 398 			if(chargeRunCnt>0)		 //100ms等待
1812  00f5 9c            	rvf
1813  00f6 ce0005        	ldw	x,_chargeRunCnt
1814  00f9 2c03          	jrsgt	L001
1815  00fb cc0201        	jp	L515
1816  00fe               L001:
1817                     ; 404 				if(BAT_POWER>BATLOW_VOL)  
1819  00fe 9c            	rvf
1820  00ff ae2328        	ldw	x,#9000
1821  0102 cd0000        	call	c_itof
1823  0105 96            	ldw	x,sp
1824  0106 1c0001        	addw	x,#OFST-3
1825  0109 cd0000        	call	c_rtol
1828  010c ae0004        	ldw	x,#_voltage+4
1829  010f cd0000        	call	c_ltor
1831  0112 96            	ldw	x,sp
1832  0113 1c0001        	addw	x,#OFST-3
1833  0116 cd0000        	call	c_fcmp
1835  0119 2d05          	jrsle	L145
1836                     ; 405 					DeChargeBat(TRUE);
1838  011b a601          	ld	a,#1
1839  011d cd0000        	call	_DeChargeBat
1841  0120               L145:
1842                     ; 406 				charegeState = DECHARGE;
1844  0120 ae0004        	ldw	x,#4
1845  0123 cf0003        	ldw	_charegeState,x
1846                     ; 407 				chargeRunCnt = 0;
1848  0126 5f            	clrw	x
1849  0127 cf0005        	ldw	_chargeRunCnt,x
1850  012a ac010201      	jpf	L515
1851  012e               L174:
1852                     ; 410 		case DECHARGE: 
1852                     ; 411 			if(chargeRunCnt>=2)		//0.2s放电
1854  012e 9c            	rvf
1855  012f ce0005        	ldw	x,_chargeRunCnt
1856  0132 a30002        	cpw	x,#2
1857  0135 2e03          	jrsge	L201
1858  0137 cc0201        	jp	L515
1859  013a               L201:
1860                     ; 413 				DeChargeBat(FALSE);
1862  013a 4f            	clr	a
1863  013b cd0000        	call	_DeChargeBat
1865                     ; 414 				charegeState = CHARGE_WAIT2;
1867  013e ae0005        	ldw	x,#5
1868  0141 cf0003        	ldw	_charegeState,x
1869                     ; 415 				chargeRunCnt = 0; 
1871  0144 5f            	clrw	x
1872  0145 cf0005        	ldw	_chargeRunCnt,x
1873  0148 ac010201      	jpf	L515
1874  014c               L374:
1875                     ; 421 		case  CHARGE_WAIT2:
1875                     ; 422 			if(chargeRunCnt>10)		//1s稳定
1877  014c 9c            	rvf
1878  014d ce0005        	ldw	x,_chargeRunCnt
1879  0150 a3000b        	cpw	x,#11
1880  0153 2e03          	jrsge	L401
1881  0155 cc0201        	jp	L515
1882  0158               L401:
1883                     ; 424 				charegeState = CHECKVOL;
1885  0158 ae0006        	ldw	x,#6
1886  015b cf0003        	ldw	_charegeState,x
1887                     ; 425 				chargeRunCnt = 0;  
1889  015e 5f            	clrw	x
1890  015f cf0005        	ldw	_chargeRunCnt,x
1891                     ; 426 				if(BAT_POWER >BATOVER_VOL)  	   				
1893  0162 9c            	rvf
1894  0163 ae3138        	ldw	x,#12600
1895  0166 cd0000        	call	c_itof
1897  0169 96            	ldw	x,sp
1898  016a 1c0001        	addw	x,#OFST-3
1899  016d cd0000        	call	c_rtol
1902  0170 ae0004        	ldw	x,#_voltage+4
1903  0173 cd0000        	call	c_ltor
1905  0176 96            	ldw	x,sp
1906  0177 1c0001        	addw	x,#OFST-3
1907  017a cd0000        	call	c_fcmp
1909  017d 2d06          	jrsle	L745
1910                     ; 429 					IED.Err |= BAT_OVER_ERROR;
1912  017f 72180005      	bset	_IED+5,#4
1914  0183 2004          	jra	L155
1915  0185               L745:
1916                     ; 433 					IED.Err &= ~BAT_OVER_ERROR; 
1918  0185 72190005      	bres	_IED+5,#4
1919  0189               L155:
1920                     ; 436 				if(BAT_POWER >BATLOW_VOL)  	   						//备电电压低
1922  0189 9c            	rvf
1923  018a ae2328        	ldw	x,#9000
1924  018d cd0000        	call	c_itof
1926  0190 96            	ldw	x,sp
1927  0191 1c0001        	addw	x,#OFST-3
1928  0194 cd0000        	call	c_rtol
1931  0197 ae0004        	ldw	x,#_voltage+4
1932  019a cd0000        	call	c_ltor
1934  019d 96            	ldw	x,sp
1935  019e 1c0001        	addw	x,#OFST-3
1936  01a1 cd0000        	call	c_fcmp
1938  01a4 2d5b          	jrsle	L515
1939                     ; 438 					IED.Bat_Low_Cnt = 0; 
1941  01a6 725f001a      	clr	_IED+26
1942                     ; 439 					IED.Err &= ~BAT_LOW_ERR; 
1944  01aa 72170005      	bres	_IED+5,#3
1945  01ae 2051          	jra	L515
1946  01b0               L574:
1947                     ; 443 		case CHECKVOL:  
1947                     ; 444 			_nop_();
1950  01b0 9d            nop
1952                     ; 445 		 	if(BAT_POWER>BATFULL_VOL)
1954  01b1 9c            	rvf
1955  01b2 ae3070        	ldw	x,#12400
1956  01b5 cd0000        	call	c_itof
1958  01b8 96            	ldw	x,sp
1959  01b9 1c0001        	addw	x,#OFST-3
1960  01bc cd0000        	call	c_rtol
1963  01bf ae0004        	ldw	x,#_voltage+4
1964  01c2 cd0000        	call	c_ltor
1966  01c5 96            	ldw	x,sp
1967  01c6 1c0001        	addw	x,#OFST-3
1968  01c9 cd0000        	call	c_fcmp
1970  01cc 2d0c          	jrsle	L555
1971                     ; 450 				charegeState = CHARGEEND;
1973  01ce ae0007        	ldw	x,#7
1974  01d1 cf0003        	ldw	_charegeState,x
1975                     ; 451 				ChargeBat(FALSE);
1977  01d4 4f            	clr	a
1978  01d5 cd0000        	call	_ChargeBat
1981  01d8 2027          	jra	L515
1982  01da               L555:
1983                     ; 455 				charegeState = CHARGE_INIT;
1985  01da 5f            	clrw	x
1986  01db cf0003        	ldw	_charegeState,x
1987  01de 2021          	jra	L515
1988  01e0               L774:
1989                     ; 459 		case CHARGEEND: 
1989                     ; 460 			if(BAT_POWER<BAT_TH_VOL)//(BATFULL_VOL+BATLOW_VOL)/2)	  
1991  01e0 9c            	rvf
1992  01e1 ae2ee0        	ldw	x,#12000
1993  01e4 cd0000        	call	c_itof
1995  01e7 96            	ldw	x,sp
1996  01e8 1c0001        	addw	x,#OFST-3
1997  01eb cd0000        	call	c_rtol
2000  01ee ae0004        	ldw	x,#_voltage+4
2001  01f1 cd0000        	call	c_ltor
2003  01f4 96            	ldw	x,sp
2004  01f5 1c0001        	addw	x,#OFST-3
2005  01f8 cd0000        	call	c_fcmp
2007  01fb 2e04          	jrsge	L515
2008                     ; 465 				charegeState = CHARGE_INIT;
2010  01fd 5f            	clrw	x
2011  01fe cf0003        	ldw	_charegeState,x
2012  0201               L105:
2013                     ; 470 		default:
2013                     ; 471 			break;
2015  0201               L515:
2016                     ; 473 }
2019  0201 5b04          	addw	sp,#4
2020  0203 81            	ret
2054                     .const:	section	.text
2055  0000               L011:
2056  0000 000003ff      	dc.l	1023
2057                     ; 475 void GetVoltage(void)
2057                     ; 476 {
2058                     .text:	section	.text,new
2059  0000               _GetVoltage:
2061  0000 89            	pushw	x
2062       00000002      OFST:	set	2
2065                     ; 477 	int i =0;
2067                     ; 478 	Disable();
2070  0001 9b            sim
2072                     ; 479 	for(i=0;i<M;i++)
2074  0002 5f            	clrw	x
2075  0003 1f01          	ldw	(OFST-1,sp),x
2077  0005               L775:
2078                     ; 481 		voltage[i] = (AD_Value[i]*VREF )/0x03FF;  
2080  0005 1e01          	ldw	x,(OFST-1,sp)
2081  0007 58            	sllw	x
2082  0008 de0000        	ldw	x,(_AD_Value,x)
2083  000b 90ae1388      	ldw	y,#5000
2084  000f cd0000        	call	c_umul
2086  0012 ae0000        	ldw	x,#L011
2087  0015 cd0000        	call	c_ludv
2089  0018 cd0000        	call	c_ultof
2091  001b 1e01          	ldw	x,(OFST-1,sp)
2092  001d 58            	sllw	x
2093  001e 58            	sllw	x
2094  001f 1c0000        	addw	x,#_voltage
2095  0022 cd0000        	call	c_rtol
2097                     ; 479 	for(i=0;i<M;i++)
2099  0025 1e01          	ldw	x,(OFST-1,sp)
2100  0027 1c0001        	addw	x,#1
2101  002a 1f01          	ldw	(OFST-1,sp),x
2105  002c 9c            	rvf
2106  002d 1e01          	ldw	x,(OFST-1,sp)
2107  002f a30006        	cpw	x,#6
2108  0032 2fd1          	jrslt	L775
2109                     ; 483 	Enable();
2112  0034 9a            rim
2114                     ; 484 	VOLTAGE24 	=  11.0f*voltage[0]; 	 
2116  0035 ae0020        	ldw	x,#L116
2117  0038 cd0000        	call	c_ltor
2119  003b ae0000        	ldw	x,#_voltage
2120  003e cd0000        	call	c_fgmul
2122                     ; 485 	voltage[1]  =  6.0f*voltage[1];		//电池电压
2124  0041 ae001c        	ldw	x,#L126
2125  0044 cd0000        	call	c_ltor
2127  0047 ae0004        	ldw	x,#_voltage+4
2128  004a cd0000        	call	c_fgmul
2130                     ; 486 	voltage[2]  =  1.0f*voltage[2];
2132  004d ae0018        	ldw	x,#L136
2133  0050 cd0000        	call	c_ltor
2135  0053 ae0008        	ldw	x,#_voltage+8
2136  0056 cd0000        	call	c_fgmul
2138                     ; 487 	voltage[3]  =  1.0f*voltage[3];
2140  0059 ae0018        	ldw	x,#L136
2141  005c cd0000        	call	c_ltor
2143  005f ae000c        	ldw	x,#_voltage+12
2144  0062 cd0000        	call	c_fgmul
2146                     ; 488 	voltage[4]  =  8.7f*voltage[4];		//电源电压
2148  0065 ae0014        	ldw	x,#L146
2149  0068 cd0000        	call	c_ltor
2151  006b ae0010        	ldw	x,#_voltage+16
2152  006e cd0000        	call	c_fgmul
2154                     ; 489 	voltage[5]  =  5.7f*voltage[5];		// 
2156  0071 ae0010        	ldw	x,#L156
2157  0074 cd0000        	call	c_ltor
2159  0077 ae0014        	ldw	x,#_voltage+20
2160  007a cd0000        	call	c_fgmul
2162                     ; 494 } 
2165  007d 85            	popw	x
2166  007e 81            	ret
2169                     	switch	.data
2170  0007               _MotorLineCnt:
2171  0007 0000          	dc.w	0
2172  0009               _PreMotorLine:
2173  0009 0000          	dc.w	0
2196                     ; 501 void Task_Check_Motor (void)
2196                     ; 502 {       
2197                     .text:	section	.text,new
2198  0000               _Task_Check_Motor:
2202                     ; 504     if(MotorLineCnt>40)
2204  0000 9c            	rvf
2205  0001 ce0007        	ldw	x,_MotorLineCnt
2206  0004 a30029        	cpw	x,#41
2207  0007 2f06          	jrslt	L566
2208                     ; 506         IED.Err|=ERR_MOTOR_LINE;
2210  0009 72180004      	bset	_IED+4,#4
2212  000d 2004          	jra	L766
2213  000f               L566:
2214                     ; 510         IED.Err&=(~ERR_MOTOR_LINE);
2216  000f 72190004      	bres	_IED+4,#4
2217  0013               L766:
2218                     ; 512     MotorLineCnt = 0;
2220  0013 5f            	clrw	x
2221  0014 cf0007        	ldw	_MotorLineCnt,x
2222                     ; 514 }
2225  0017 81            	ret
2251                     ; 515 void TaskFREQMotor(void)
2251                     ; 516 {
2252                     .text:	section	.text,new
2253  0000               _TaskFREQMotor:
2257                     ; 517     if(DOORCHECK!= PreMotorLine)
2259  0000 c60004        	ld	a,_SPIIO+4
2260  0003 44            	srl	a
2261  0004 a401          	and	a,#1
2262  0006 5f            	clrw	x
2263  0007 02            	rlwa	x,a
2264  0008 c30009        	cpw	x,_PreMotorLine
2265  000b 2717          	jreq	L107
2266                     ; 519         MotorLineCnt++;
2268  000d ce0007        	ldw	x,_MotorLineCnt
2269  0010 1c0001        	addw	x,#1
2270  0013 cf0007        	ldw	_MotorLineCnt,x
2271                     ; 520         PreMotorLine = DOORCHECK;
2273  0016 c60004        	ld	a,_SPIIO+4
2274  0019 44            	srl	a
2275  001a a401          	and	a,#1
2276  001c 5f            	clrw	x
2277  001d c7000a        	ld	_PreMotorLine+1,a
2278  0020 9f            	ld	a,xl
2279  0021 c70009        	ld	_PreMotorLine,a
2280  0024               L107:
2281                     ; 522 }
2284  0024 81            	ret
2310                     ; 523 void TaskCheckBrakeCoil(void)
2310                     ; 524 {
2311                     .text:	section	.text,new
2312  0000               _TaskCheckBrakeCoil:
2316                     ; 525 	if(!BRAKECHECK)
2318  0000 c60003        	ld	a,_SPIIO+3
2319  0003 a502          	bcp	a,#2
2320  0005 2632          	jrne	L317
2321                     ; 527 		if(COILVOL>VOLTAGEBreakVOL)	 //线圈断开
2323  0007 9c            	rvf
2324  0008 ae0014        	ldw	x,#_voltage+20
2325  000b cd0000        	call	c_ltor
2327  000e ae000c        	ldw	x,#L327
2328  0011 cd0000        	call	c_fcmp
2330  0014 2d06          	jrsle	L517
2331                     ; 529 			IED.Err|=COIL_BREAK_ERR ;
2333  0016 721e0005      	bset	_IED+5,#7
2335  001a 2004          	jra	L727
2336  001c               L517:
2337                     ; 533 			IED.Err&=(~COIL_BREAK_ERR); 	
2339  001c 721f0005      	bres	_IED+5,#7
2340  0020               L727:
2341                     ; 536 		if(COILVOL<VOLTAGESHORTVOL )	//线圈短路
2343  0020 9c            	rvf
2344  0021 ae0014        	ldw	x,#_voltage+20
2345  0024 cd0000        	call	c_ltor
2347  0027 ae0008        	ldw	x,#L737
2348  002a cd0000        	call	c_fcmp
2350  002d 2e06          	jrsge	L137
2351                     ; 538 			IED.Err|=COIL_SHORT_ERR;
2353  002f 721c0005      	bset	_IED+5,#6
2355  0033 2004          	jra	L317
2356  0035               L137:
2357                     ; 542 			IED.Err&=(~COIL_SHORT_ERR); 
2359  0035 721d0005      	bres	_IED+5,#6
2360  0039               L317:
2361                     ; 548 }
2364  0039 81            	ret
2367                     	switch	.data
2368  000b               L547_FailCnt2:
2369  000b 00            	dc.b	0
2400                     ; 550 void CheckRelay(void)
2400                     ; 551 {
2401                     .text:	section	.text,new
2402  0000               _CheckRelay:
2406                     ; 555 		if(GetLinState()) //没有被锁定
2408  0000 c6500b        	ld	a,20491
2409  0003 a508          	bcp	a,#8
2410  0005 2705          	jreq	L367
2411                     ; 557 			if(MOTOR__RUN!=0)
2413  0007 c60003        	ld	a,_SPIIO+3
2414  000a a50c          	bcp	a,#12
2415  000c               L367:
2416                     ; 575 }
2419  000c 81            	ret
2422                     	switch	.data
2423  000c               L767_FailCnt1:
2424  000c 00            	dc.b	0
2463                     ; 578 void CheckBrakePower(void)
2463                     ; 579 {
2464                     .text:	section	.text,new
2465  0000               _CheckBrakePower:
2467  0000 88            	push	a
2468       00000001      OFST:	set	1
2471                     ; 583 		char LinState = GetLinState();
2473  0001 c6500b        	ld	a,20491
2474  0004 a408          	and	a,#8
2475  0006 6b01          	ld	(OFST+0,sp),a
2477                     ; 584 		if(LinState!=0) //没有被锁定		
2479  0008 0d01          	tnz	(OFST+0,sp)
2480  000a 273a          	jreq	L7001
2481                     ; 586 			if(GetBrakePowerState()!=0)
2483  000c c65001        	ld	a,20481
2484  000f a502          	bcp	a,#2
2485  0011 2721          	jreq	L1101
2486                     ; 589 				FailCnt1++;
2488  0013 725c000c      	inc	L767_FailCnt1
2489                     ; 590 				if((FailCnt1>50)||
2489                     ; 591 					((IED.cDCCovert==0)&&(FailCnt1>20)))//逆变的时候
2491  0017 c6000c        	ld	a,L767_FailCnt1
2492  001a a133          	cp	a,#51
2493  001c 240d          	jruge	L5101
2495  001e 725d0012      	tnz	_IED+18
2496  0022 2622          	jrne	L7001
2498  0024 c6000c        	ld	a,L767_FailCnt1
2499  0027 a115          	cp	a,#21
2500  0029 251b          	jrult	L7001
2501  002b               L5101:
2502                     ; 593 					IED.Err|=ERR_BRAKE_POWER_FAIL;
2504  002b 721c0004      	bset	_IED+4,#6
2505                     ; 594 					LockAllMotor();
2507  002f cd0000        	call	_LockAllMotor
2509  0032 2012          	jra	L7001
2510  0034               L1101:
2511                     ; 599 				FailCnt1>0?--FailCnt1:0;
2513  0034 725d000c      	tnz	L767_FailCnt1
2514  0038 270b          	jreq	L421
2515  003a 725a000c      	dec	L767_FailCnt1
2516  003e c6000c        	ld	a,L767_FailCnt1
2517  0041 5f            	clrw	x
2518  0042 97            	ld	xl,a
2519  0043 2001          	jra	L621
2520  0045               L421:
2521  0045 5f            	clrw	x
2522  0046               L621:
2523  0046               L7001:
2524                     ; 603 }
2527  0046 84            	pop	a
2528  0047 81            	ret
2553                     ; 604 void TaskCheckSensor(void)
2553                     ; 605 {
2554                     .text:	section	.text,new
2555  0000               _TaskCheckSensor:
2559                     ; 606 	if((SENSOR_HEAT>=1500.0f)||(SENSOR_SMOKE>=1500.0f))
2561  0000 9c            	rvf
2562  0001 ae0008        	ldw	x,#_voltage+8
2563  0004 cd0000        	call	c_ltor
2565  0007 ae0004        	ldw	x,#L1401
2566  000a cd0000        	call	c_fcmp
2568  000d 2e0f          	jrsge	L3301
2570  000f 9c            	rvf
2571  0010 ae000c        	ldw	x,#_voltage+12
2572  0013 cd0000        	call	c_ltor
2574  0016 ae0004        	ldw	x,#L1401
2575  0019 cd0000        	call	c_fcmp
2577  001c 2f0c          	jrslt	L1301
2578  001e               L3301:
2579                     ; 608 		if(IED.b_warning==0)
2581  001e 725d0003      	tnz	_IED+3
2582  0022 260a          	jrne	L7401
2583                     ; 610 			IED.b_warning=1;
2585  0024 35010003      	mov	_IED+3,#1
2586  0028 2004          	jra	L7401
2587  002a               L1301:
2588                     ; 616 	IED.b_warning=0;
2590  002a 725f0003      	clr	_IED+3
2591  002e               L7401:
2592                     ; 619 }
2595  002e 81            	ret
2665                     	xdef	_PreMotorLine
2666                     	xdef	_MotorLineCnt
2667                     	xdef	_chargeRunCnt
2668                     	xdef	_charegeState
2669                     	xdef	_ChargeBat
2670                     	xdef	_DC2AC_CTRL
2671                     	xdef	f_TIM3_CAP_COM_IRQHandler
2672                     	xdef	_CCR2_Val
2673                     	switch	.bss
2674  0000               _voltage:
2675  0000 000000000000  	ds.b	28
2676                     	xdef	_voltage
2677                     	xref	_Warning_flag
2678                     	xref	_StopTimer
2679                     	xref	_StartTimer
2680                     	xref	_SuspendTask
2681                     	xref	_ActiveTask
2682                     	xref	_GetCurretPos
2683                     	xref	_ErrStopMotor
2684                     	xref	_Beep
2685                     	xref	_IED
2686                     	xref	_SPIIO
2687                     	xdef	_TaskCheckSensor
2688                     	xdef	_Task_Power_Check
2689                     	xdef	_CheckBrakePower
2690                     	xdef	_CheckRelay
2691                     	xdef	_Task_Check_Motor
2692                     	xdef	_TaskFREQMotor
2693                     	xdef	_TaskCheckBrakeCoil
2694                     	xdef	_StartDC2ACConvert
2695                     	xdef	_BotCheck
2696                     	xdef	_GetVoltage
2697                     	xdef	_BatCheck
2698                     	xdef	_TaskChargeBat
2699                     	xdef	_DeChargeBat
2700                     	xdef	_DisableBattary
2701                     	xdef	_EnableBattary
2702                     	xdef	_StartCheckBrake
2703                     	xdef	_EnableBrakPower
2704                     	xdef	_SetWarningFreq
2705                     	xdef	_StopDC2ACConvert
2706                     	xdef	_StopInvert
2707                     	xdef	_InitInvert
2708                     	xdef	_DeInitDC2AC
2709                     	xdef	_StartPulse
2710                     	xdef	_InitDC2AC
2711                     	xdef	_UNLockAllMotor
2712                     	xdef	_LockAllMotor
2713                     	xref	_AD_Value
2714                     	xref	_TIM3_ITConfig
2715                     	xref	_TIM3_Cmd
2716                     	xref	_TIM3_OC2Init
2717                     	xref	_TIM3_TimeBaseInit
2718                     	xref	_TIM3_DeInit
2719                     	xref	_TIM1_OC3PreloadConfig
2720                     	xref	_TIM1_OC2PreloadConfig
2721                     	xref	_TIM1_OC1PreloadConfig
2722                     	xref	_TIM1_ForcedOC3Config
2723                     	xref	_TIM1_ForcedOC2Config
2724                     	xref	_TIM1_ForcedOC1Config
2725                     	xref	_TIM1_CtrlPWMOutputs
2726                     	xref	_TIM1_Cmd
2727                     	xref	_TIM1_OC3Init
2728                     	xref	_TIM1_OC2Init
2729                     	xref	_TIM1_OC1Init
2730                     	xref	_TIM1_TimeBaseInit
2731                     	xref	_TIM1_DeInit
2732                     	switch	.const
2733  0004               L1401:
2734  0004 44bb8000      	dc.w	17595,-32768
2735  0008               L737:
2736  0008 44228000      	dc.w	17442,-32768
2737  000c               L327:
2738  000c 4571e000      	dc.w	17777,-8192
2739  0010               L156:
2740  0010 40b66666      	dc.w	16566,26214
2741  0014               L146:
2742  0014 410b3333      	dc.w	16651,13107
2743  0018               L136:
2744  0018 3f800000      	dc.w	16256,0
2745  001c               L126:
2746  001c 40c00000      	dc.w	16576,0
2747  0020               L116:
2748  0020 41300000      	dc.w	16688,0
2749                     	xref.b	c_lreg
2750                     	xref.b	c_x
2751                     	xref.b	c_y
2771                     	xref	c_fgmul
2772                     	xref	c_ultof
2773                     	xref	c_umul
2774                     	xref	c_fcmp
2775                     	xref	c_itof
2776                     	xref	c_ltor
2777                     	xref	c_ludv
2778                     	xref	c_rtol
2779                     	xref	c_uitolx
2780                     	end
