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

📄 poweru.lst

📁 移动电源方案_原理图及源程序
💻 LST
字号:
文件:PowerU.c     盛群编译器版本 3.00 页次1



;  70: {
  70  0000              __acsr EQU [023H]
  70  0000              __adcr EQU [022H]
  70  0000              __adrh EQU [021H]
  70  0000              __adrl EQU [020H]
  70  0000              __pwm0 EQU [01fH]
  70  0000              __intc1 EQU [01eH]
  70  0000              __ctrl1 EQU [01bH]
  70  0000              __ctrl0 EQU [01aH]
  70  0000              __pcpu EQU [019H]
  70  0000              __pcc EQU [018H]
  70  0000              __pc EQU [017H]
  70  0000              __pbpu EQU [016H]
  70  0000              __pbc EQU [015H]
  70  0000              __pb EQU [014H]
  70  0000              __pawk EQU [013H]
  70  0000              __papu EQU [012H]
  70  0000              __pac EQU [011H]
  70  0000              __pa EQU [010H]
  70  0000              __tmr0c EQU [0dH]
  70  0000              __tmr0 EQU [0cH]
  70  0000              __intc0 EQU [0bH]
  70  0000              __status EQU [0aH]
  70  0000              __wdts EQU [09H]
  70  0000              __tblh EQU [08H]
  70  0000              __tblp EQU [07H]
  70  0000              __pcl EQU [06H]
  70  0000              __acc EQU [05H]
  70  0000              __mp1 EQU [03H]
  70  0000              __mp0 EQU [01H]
  70  0000              __iar1 EQU [02H]
  70  0000              __iar0 EQU [00H]
  70  0000              @All_LED_Off .SECTION 'CODE'
  70  0000              PUBLIC _All_LED_Off
  70  0000              _All_LED_Off PROC

;  71: 	LED1PORT=TURN_OFF;
  71  0000  3414        CLR [014H].0

;  72: 	LED2PORT=TURN_OFF;
  72  0001  3494        CLR [014H].1

;  73: 	LED3PORT=TURN_OFF;
  73  0002  3514        CLR [014H].2

;  74: 	LED4PORT=TURN_OFF;
  74  0003  3594        CLR [014H].3

;  75: 	LED5PORT=TURN_OFF;	
  75  0004  3614        CLR [014H].4
  75  0005              L1:
  75  0005  0003        RET
  75  0006              _All_LED_Off ENDP

;  79: {
  79  0000              @All_LED_ON .SECTION 'CODE'
  79  0000              PUBLIC _All_LED_ON
文件:PowerU.c     盛群编译器版本 3.00 页次2 

  79  0000              _All_LED_ON PROC

;  80: 	LED1PORT=TURN_ON;
  80  0000  3014        SET [014H].0

;  81: 	LED2PORT=TURN_ON;
文件:PowerU.c     盛群编译器版本 3.00 页次2

  81  0001  3094        SET [014H].1

;  82: 	LED3PORT=TURN_ON;
  82  0002  3114        SET [014H].2

;  83: 	LED4PORT=TURN_ON;
  83  0003  3194        SET [014H].3

;  84: 	LED5PORT=TURN_ON;
  84  0004  3214        SET [014H].4
  84  0005              L2:
  84  0005  0003        RET
  84  0006              _All_LED_ON ENDP

;  88: {
  88  0000              @ADC_GetBatteryData .SECTION 'CODE'
  88  0000              PUBLIC _ADC_GetBatteryData
  88  0000              _ADC_GetBatteryData PROC

;  89: 	_start=0;
  89  0000  37A2        CLR [022H].7

;  90: 	_start=1;
  90  0001  33A2        SET [022H].7

;  91: 	_start=0;
  91  0002  37A2        CLR [022H].7
  91  0003  2800     R  JMP L5
  91  0004              L4:

;  95: 			clr wdt
  95  0004  0001        clr wdt
  95  0005              L5:

;  92: 	while(_eocb==1)
  92  0005  3F22        SZ [022H].6
  92  0006  2800     R  JMP L4

;  98: 	_start=0;
  98  0007  37A2        CLR [022H].7

;  99: 	_start=1;
  99  0008  33A2        SET [022H].7

; 100: 	_start=0;
 100  0009  37A2        CLR [022H].7
 100  000A  2800     R  JMP L8
 100  000B              L7:

; 104: 			clr wdt
 104  000B  0001        clr wdt
 104  000C              L8:
文件:PowerU.c     盛群编译器版本 3.00 页次3 


; 101: 	while(_eocb==1)
 101  000C  3F22        SZ [022H].6
 101  000D  2800     R  JMP L7

; 107: 	tempinta=_adrh;
 107  000E  0721        MOV A,__adrh
 107  000F  0080     R  MOV _tempinta,A
 107  0010  1F00     R  CLR _tempinta[1]

; 108: 	tempinta*=16;
 108  0011  1180     R  SWAP _tempinta[1]
 108  0012  0FF0        MOV A,0F0H
 108  0013  0680     R  ANDM A,_tempinta[1]
 108  0014  1100     R  SWAPA _tempinta
 108  0015  0E0F        AND A,0FH
 108  0016  0580     R  ORM A,_tempinta[1]
文件:PowerU.c     盛群编译器版本 3.00 页次3

 108  0017  1180     R  SWAP _tempinta
 108  0018  0FF0        MOV A,0F0H
 108  0019  0680     R  ANDM A,_tempinta

; 109: 	tempinta+=_adrl/16;
 109  001A  1120        SWAPA __adrl
 109  001B  0E0F        AND A,0FH
 109  001C  0080     R  MOV b0_3,A
 109  001D  0700     R  MOV A,b0_3
 109  001E  0380     R  ADDM A,_tempinta
 109  001F  1F05        CLR [05H]
 109  0020  1380     R  ADCM A,_tempinta[1]

; 111: 	templonga=0x9c4000;	//2500*4096=0x9c4000,由于编译器的原因,此处不能写成2500*4096,而要直接写成0x9c4000
 111  0021  0F00        MOV A,00h
 111  0022  0080     R  MOV _templonga,A
 111  0023  0F40        MOV A,040h
 111  0024  0080     R  MOV _templonga[1],A
 111  0025  0F9C        MOV A,09ch
 111  0026  0080     R t
	_wdts=0b00000111;
//	_ctrl1=0b10000101;//Enable WDT;
}

void main()
{
	
	if(_to==0)	//上电复位
	{
		sys_init();
		All_LED_ON();
		Counter_100ms_counter=0;
		while(Counter_100ms_counter<30)//接上电芯后,所有LED点亮3秒后熄灭。
		{
			#asm
				clr wdt
			#endasm	
		}
		LED6PORT_Data_SHADE=TURN_OFF;
		LED6PORT=LED6PORT_Data_SHADE;
		WDT_Over_Counter=0;
文件:PowerU.c     盛群编译器版本 3.00 页次4 

		battery_voltage=ADC_GetBatteryData();//执行一次ADC转换
		Previous_Level=BATT_VOL_SEG_Just();
		goto sleep;
	}
	
main_infinity_loop:	
	sys_init();	
	if(_to==1)	//watchdog time-out occurred 
	{
/*		WDT_Over_Counter++;
		if(WDT_Over_Counter>=57600) //(96小时乘3600秒)除6
		{
			
			Counter_100ms_counter=0;
			while(Counter_100ms_counter<2)//等待外围电路稳定。
			{
				#asm
					clr wdt
				#endasm	
			}
			battery_voltage=ADC_GetBatteryData();			
			tempchara=BATT_VOL_SEG_Just();
			if(tempchara<Previous_Level) Previous_Level--;
			WDT_Over_Counter=0;	
		}
		if(just_discharge()==TRUE)	//看门狗溢出唤醒后,若侦测到放电,则跳转到放电处理程序
			goto Discharging;
		else	
*/			goto sleep;
	}
	
	if(BUTTON1_NOPRESSED)//不是由按键唤醒的
	{
		Counter_100ms_counter=0;
		while(Counter_100ms_counter<5)//延时0.5秒,规避插上充电器的瞬间的不稳定。
		{
			#asm
				clr wdt
			#endasm	
		}
	}
	
	if(CHARGER_PLUGGED)//充电中
	{
Charging:
//		DISCHARGE_DISABLE;
		battery_voltage=ADC_GetBatteryData();//执行一次ADC转换
		tempchara=BATT_VOL_SEG_Just();
		Previous_Level=tempchara;
		Counter_1second_background=0;
		for(;CHARGER_PLUGGED;)//充电中
		{	
			if(Previous_Level<=1)  Previous_Level=1;
			battery_voltage=ADC_GetBatteryData();//执行一次ADC转换
			tempchara=BATT_VOL_SEG_Just();
			if(tempchara==Previous_Level) Counter_1second_background=0;
			if(Counter_1second_background>120)//如果在120秒内,每次采样得到的电压段与之前都不一样,则说明电压真的改变了。
			{
				if(tempchara>Previous_Level)Previous_Level++;
				Counter_1second_background=0;
文件:PowerU.c     盛群编译器版本 3.00 页次5 

			}
			LED_ShowVoltage(Previous_Level);	//电压显示
			//充滿的判断..........
			Charge_Full_flag=FALSE;
			if(CHARGER_PLUGGED && CHARGE_FULL)
			{
				Counter_100ms_counter=0;
				Charge_Full_flag=TRUE;
				while(Counter_100ms_counter<30)//_pa3处于高电平长达3秒,则判为已充满
				{
					if(CHARGER_UNPLUGGED || CHARGE_UNFULL)	
					{	
						Charge_Full_flag=FALSE;
						break;
					}
					#asm
						clr wdt
					#endasm	
				}
			}
			if(Charge_Full_flag==TRUE)//已经充满
			{
				All_LED_ON();
				Previous_Level=4;
				while(CHARGER_PLUGGED)//充满后,等待充电器移除
				{
					#asm
						clr wdt
					#endasm						
				}
				Counter_100ms_counter=0;
				while(Counter_100ms_counter<50)//当取下充电器后5S,LED灯全灭,MCU自动进入休眠状态。
				{
					#asm
						clr wdt
					#endasm
				}
				goto sleep;
			}
		}
		LED_ShowVoltage(Previous_Level);//非充满的情况下取下充电器后,由于前一次跑马完成后,LED都是熄灭的,所以在此还需再点亮
		Counter_100ms_counter=0;
		while(Counter_100ms_counter<50)//当取下充电器后5S,LED灯全灭,MCU自动进入休眠状态。
		{
			#asm
				clr wdt
			#endasm
		}
		goto sleep;
	}	
//	DISCHARGE_ENABLE;	
	while(BUTTON1_PRESSED)//如果有Button1按下,则等其松开
	{
		#asm
			clr wdt
		#endasm	
	} 
	if(LED6_Update_flag==TRUE)
	{			
		Counter_100ms_counter=0;
文件:PowerU.c     盛群编译器版本 3.00 页次6 

		while(Counter_100ms_counter==0);//延时一下再进入休眠,避开Button1松开时的毛刺
		goto sleep;
	}


	battery_voltage=ADC_GetBatteryData();//执行一次ADC转换
	tempchara=BATT_VOL_SEG_Just();
//	if(tempchara<Previous_Level) Previous_Level=tempchara;//非充电状态下,电压只容许下降
	Previous_Level=tempchara;
	Voltage_Display();
	while(BUTTON1_PRESSED)//如果有Button1按下,则等其松开
	{
		#asm
			clr wdt
		#endasm	
	} 
sleep:
	if(CHARGER_PLUGGED)
			goto Charging;
	All_LED_Off();
	_adonb=1;	//关闭ADC的电源
	_pb5=0;
	_adcr=0;
	#asm
		HALT	//进入sleep
		NOP
		NOP
	#endasm
	//初始化ADC
	_t0on=0;//停止timer0
	_emi = 0; // Disable global interrupt
	#asm
		clr wdt
	#endasm
	goto main_infinity_loop;

}

⌨️ 快捷键说明

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