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

📄 main.lss

📁 使用Atmega8单片机开发的一个激光治疗仪的人机接口程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000164c  00000000  00000000  00000094  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000004  00800060  0000164c  000016e0  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000026  00800064  00800064  000016e4  2**0
                  ALLOC
  3 .noinit       00000000  0080008a  0080008a  000016e4  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  000016e4  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  000016e4  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  00001a50  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000050  00000000  00000000  00001ad4  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 0000070a  00000000  00000000  00001b24  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00001a6b  00000000  00000000  0000222e  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 00000435  00000000  00000000  00003c99  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   00000fd4  00000000  00000000  000040ce  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    000004da  00000000  00000000  000050a2  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
       0:	64 c0       	rjmp	.+200    	; 0xca <__init>
       2:	7d c0       	rjmp	.+250    	; 0xfe <__bad_interrupt>
       4:	7c c0       	rjmp	.+248    	; 0xfe <__bad_interrupt>
       6:	7b c0       	rjmp	.+246    	; 0xfe <__bad_interrupt>
       8:	7a c0       	rjmp	.+244    	; 0xfe <__bad_interrupt>
       a:	79 c0       	rjmp	.+242    	; 0xfe <__bad_interrupt>
       c:	e4 c3       	rjmp	.+1992   	; 0x7d6 <__vector_6>
       e:	77 c0       	rjmp	.+238    	; 0xfe <__bad_interrupt>
      10:	76 c0       	rjmp	.+236    	; 0xfe <__bad_interrupt>
      12:	75 c0       	rjmp	.+234    	; 0xfe <__bad_interrupt>
      14:	74 c0       	rjmp	.+232    	; 0xfe <__bad_interrupt>
      16:	73 c0       	rjmp	.+230    	; 0xfe <__bad_interrupt>
      18:	72 c0       	rjmp	.+228    	; 0xfe <__bad_interrupt>
      1a:	71 c0       	rjmp	.+226    	; 0xfe <__bad_interrupt>
      1c:	70 c0       	rjmp	.+224    	; 0xfe <__bad_interrupt>
      1e:	6f c0       	rjmp	.+222    	; 0xfe <__bad_interrupt>
      20:	6e c0       	rjmp	.+220    	; 0xfe <__bad_interrupt>
      22:	6d c0       	rjmp	.+218    	; 0xfe <__bad_interrupt>
      24:	6c c0       	rjmp	.+216    	; 0xfe <__bad_interrupt>

00000026 <__ctors_end>:
      26:	14 c5       	rjmp	.+2600   	; 0xa50 <Show_State+0x1c>
      28:	19 c5       	rjmp	.+2610   	; 0xa5c <Show_State+0x28>
      2a:	1c c5       	rjmp	.+2616   	; 0xa64 <Show_State+0x30>
      2c:	22 c5       	rjmp	.+2628   	; 0xa72 <Show_State+0x3e>
      2e:	25 c5       	rjmp	.+2634   	; 0xa7a <Show_State+0x46>
      30:	2a c5       	rjmp	.+2644   	; 0xa86 <Show_State+0x52>
      32:	2d c5       	rjmp	.+2650   	; 0xa8e <Show_State+0x5a>
      34:	32 c5       	rjmp	.+2660   	; 0xa9a <Show_State+0x66>
      36:	7e c5       	rjmp	.+2812   	; 0xb34 <Time_Display_Test+0x28>
      38:	84 c5       	rjmp	.+2824   	; 0xb42 <Time_Display_Test+0x36>
      3a:	87 c5       	rjmp	.+2830   	; 0xb4a <Time_Display_Test+0x3e>
      3c:	90 c5       	rjmp	.+2848   	; 0xb5e <Time_Display_Test+0x52>
      3e:	9a c5       	rjmp	.+2868   	; 0xb74 <Time_Display_Test+0x68>
      40:	a1 c5       	rjmp	.+2882   	; 0xb84 <Time_Display_Test+0x78>
      42:	a5 c5       	rjmp	.+2890   	; 0xb8e <Time_Display_Test+0x82>
      44:	ab c5       	rjmp	.+2902   	; 0xb9c <Time_Display_Test+0x90>
      46:	b4 c5       	rjmp	.+2920   	; 0xbb0 <Time_Display_Test+0xa4>
      48:	bc c5       	rjmp	.+2936   	; 0xbc2 <Time_Display_Test+0xb6>
      4a:	d3 c5       	rjmp	.+2982   	; 0xbf2 <Time_Display_Test+0xe6>
      4c:	d9 c5       	rjmp	.+2994   	; 0xc00 <Time_Display_Test+0xf4>
      4e:	dc c5       	rjmp	.+3000   	; 0xc08 <Time_Display_Test+0xfc>
      50:	e5 c5       	rjmp	.+3018   	; 0xc1c <Time_Display_Test+0x110>
      52:	ef c5       	rjmp	.+3038   	; 0xc32 <Time_Display_Test+0x126>
      54:	f6 c5       	rjmp	.+3052   	; 0xc42 <Time_Display_Test+0x136>
      56:	fa c5       	rjmp	.+3060   	; 0xc4c <Time_Display_Test+0x140>
      58:	00 c6       	rjmp	.+3072   	; 0xc5a <Time_Display_Test+0x14e>
      5a:	09 c6       	rjmp	.+3090   	; 0xc6e <Time_Display_Test+0x162>
      5c:	11 c6       	rjmp	.+3106   	; 0xc80 <Time_Display_Test+0x174>

0000005e <OutAdjustData>:
      5e:	00 00 00 40                                         ...@

00000062 <BottomData>:
      62:	00 02 02 00                                         ....

00000066 <ChargeStayData>:
      66:	02 00 00 00                                         ....

0000006a <BatteryCapData>:
      6a:	00 00 00 00 00 00 00 01 01 00 00 01 01 01 00 01     ................
      7a:	01 01 01 01                                         ....

0000007e <TherapyDymData>:
      7e:	04 00 00 00 04 04 00 00 04 04 04 00 04 04 04 04     ................

0000008e <OutStateData>:
      8e:	00 00 00 00 80 00 00 00 80 80 00 00 80 80 80 00     ................
      9e:	80 80 80 80                                         ....

000000a2 <NumData>:
      a2:	18 08 18 08 00 08 08 00 08 18 10 08 08 18 08 08     ................
      b2:	10 18 08 00 18 10 08 08 18 10 18 08 08 08 08 00     ................
      c2:	18 18 18 08 18 18 08 08                             ........

000000ca <__init>:
      ca:	11 24       	eor	r1, r1
      cc:	1f be       	out	0x3f, r1	; 63
      ce:	cf e5       	ldi	r28, 0x5F	; 95
      d0:	d4 e0       	ldi	r29, 0x04	; 4
      d2:	de bf       	out	0x3e, r29	; 62
      d4:	cd bf       	out	0x3d, r28	; 61

000000d6 <__do_copy_data>:
      d6:	10 e0       	ldi	r17, 0x00	; 0
      d8:	a0 e6       	ldi	r26, 0x60	; 96
      da:	b0 e0       	ldi	r27, 0x00	; 0
      dc:	ec e4       	ldi	r30, 0x4C	; 76
      de:	f6 e1       	ldi	r31, 0x16	; 22
      e0:	02 c0       	rjmp	.+4      	; 0xe6 <.do_copy_data_start>

000000e2 <.do_copy_data_loop>:
      e2:	05 90       	lpm	r0, Z+
      e4:	0d 92       	st	X+, r0

000000e6 <.do_copy_data_start>:
      e6:	a4 36       	cpi	r26, 0x64	; 100
      e8:	b1 07       	cpc	r27, r17
      ea:	d9 f7       	brne	.-10     	; 0xe2 <.do_copy_data_loop>

000000ec <__do_clear_bss>:
      ec:	10 e0       	ldi	r17, 0x00	; 0
      ee:	a4 e6       	ldi	r26, 0x64	; 100
      f0:	b0 e0       	ldi	r27, 0x00	; 0
      f2:	01 c0       	rjmp	.+2      	; 0xf6 <.do_clear_bss_start>

000000f4 <.do_clear_bss_loop>:
      f4:	1d 92       	st	X+, r1

000000f6 <.do_clear_bss_start>:
      f6:	aa 38       	cpi	r26, 0x8A	; 138
      f8:	b1 07       	cpc	r27, r17
      fa:	e1 f7       	brne	.-8      	; 0xf4 <.do_clear_bss_loop>
      fc:	c0 c2       	rjmp	.+1408   	; 0x67e <main>

000000fe <__bad_interrupt>:
      fe:	80 cf       	rjmp	.-256    	; 0x0 <__vectors>

00000100 <Init_Flag>:


void Init_Flag(void)   //从EEPROM中读出当前功率状态
{
	eeprom_busy_wait();
     100:	8c b3       	in	r24, 0x1c	; 28
     102:	99 27       	eor	r25, r25
     104:	dc 01       	movw	r26, r24
     106:	a2 70       	andi	r26, 0x02	; 2
     108:	b0 70       	andi	r27, 0x00	; 0
     10a:	81 fd       	sbrc	r24, 1
     10c:	f9 cf       	rjmp	.-14     	; 0x100 <Init_Flag>
uint8_t 
eeprom_read_byte (const uint8_t *addr) 
{
  uint8_t result;
  asm volatile
     10e:	8a da       	rcall	.-2796   	; 0xfffff624 <__eeprom_end+0xff7ef624>
     110:	80 2d       	mov	r24, r0
     112:	99 27       	eor	r25, r25
     114:	80 93 7c 00 	sts	0x007C, r24
	AdjustTimes=eeprom_read_byte(0);
	if(AdjustTimes==0xFF)AdjustTimes=1;
     118:	80 91 7c 00 	lds	r24, 0x007C
     11c:	8f 3f       	cpi	r24, 0xFF	; 255
     11e:	19 f4       	brne	.+6      	; 0x126 <Init_Flag+0x26>
     120:	81 e0       	ldi	r24, 0x01	; 1
     122:	80 93 7c 00 	sts	0x007C, r24
     126:	08 95       	ret

00000128 <KeyScan>:
}

void Save_Flag(void)	//将调整后的功率状态存入EEPROM中
{
	eeprom_busy_wait();
	eeprom_write_byte(0,AdjustTimes);
}


void AD_Shift(void)	//开始进行A/D转换
{

/********
	//ADCH=0;ADCL=0;
	ADCSRA=0xD7;
	ADMUX=0x47;//ADMUX=0x44;//DIP-M8-UART测试
	ADCSRA|=(1<<ADSC);
	_delay_loop_1(60);
	while(ADCSRA&(1<<ADSC))
	_delay_loop_1(60);
	ChargeResult_AD=ADCL;
	ChargeResult_AD|=(uint)(ADCH<<8);
	
	//ADCH=0;ADCL=0;
	ADCSRA=0xD7;
	ADMUX=0x46;//ADMUX=0x45;//DIP-M8-UART测试
	ADCSRA|=(1<<ADSC);
	_delay_loop_1(60);
	while(ADCSRA&(1<<ADSC))
	_delay_loop_1(60);
	VoltageResult_AD=ADCL;
	VoltageResult_AD|=(uint)(ADCH<<8);
************/
	AD_init();
	VoltageResult_AD=BT_V();
	ChargeResult_AD=BT_C();
	Can_read=1;
}

void Voltage_Check(void)	//当前工作电压监测
{
	if(VoltageResult_AD>=VREFH){LevelState=4;alarm_n_short(1);}//Beep_middle(1,200);}
	else if((VoltageResult_AD>=VREFMH)&&(VoltageResult_AD<VREFH)){LevelState=4;}
	else if((VoltageResult_AD>=VREFML)&&(VoltageResult_AD<VREFMH)){LevelState=3;}
	else if((VoltageResult_AD>=VREFL)&&(VoltageResult_AD<VREFML)){LevelState=2;}
	else if((VoltageResult_AD>=VREFC)&&(VoltageResult_AD<VREFL)){LevelState=0;}
	else {LevelState=1;KeyState=0;SwitchTimes=1;alarm_n_short(1);Close();}
	AllState=(AllState&0b11111000)+LevelState;
}


void Charge_Check(void)	//充电状态监测
{
	//if(ChargeResult_AD>=VREFH_CHARGE){ChargeState=2;Beep_long(1,200);}
	//else 
	if(ChargeResult_AD>=VREFL_CHARGE)//&&ChargeResult_AD<VREFH_CHARGE)
		{
			//if(++ChargeFlagTimes>3)
			//{
			//ChargeFlagTimes=0;
			ChargeState=1;
			AllState|=(1<<6);
			LedSec=0;
			PORTC|=(1<<6);//}//LED背光给电10秒
			if(ChargeFlag==0){alarm_n_short(1);ChargeFlag=1;}//Beep_short(1,200);ChargeFlag=1;}
			//}
		}
		else 
		{
			//ChargeFlagTimes=0;
			ChargeState=0;
			AllState&=~(1<<6); 
			ChargeFlag=0;
		}
		
}

void Close(void)	//关机
{
//Beep_short(3,200);   //关机前报警
//Reset_Source();//PORTC&=~(1<<6);
PORTB&=~(1<<7);//PORTB|=(1<<7);   //置高,使POWER断开,关机	
wdt_enable(WDTO_1S);
wdt_reset();
/*****
DelayMs(1000);
cli();
Can_read=0;AllState=0;LevelState=1;OutState=0;ChargeState=0;Time_minu=0;mh=0;ml=0;SwitchTimes=0;AdjustTimes=0;Time_sec=0;
times=0;ChargeTimes=0;KeyState=0;ChargeFlag=0;ChargeFlagTimes=0;VoltageTimes=0;FlagTimes=0;DelayFlag=0;AdjustTimesFlag=0;KeyOld=0;Adj=1;AlarmFlag=0;
AbandonFlag=0;mid=0;ADTimes=0;VoltageResult_AD=0;ChargeResult_AD=0;
Init_Device();
Init_Flag();
//Reset_Source();
//AbandonFlag=0;
sei();
******/
}

void TaskTurn (void)
{
/**********
Flag 用于按下WORK时,ADJUST的屏蔽
SwitchTimes 用于开关机记数
DelayFlag 用于开机后待机状态显示稳定及扬声器发声及laserpower给电
AdjustTimesFlag为有按键进行调整的标志
*********/
switch(KeyState)
	{
	case 0x00:       //POWER/RA5键-PB6//待机状态
			//AllState&=0b01000000;
			//AllState|=(uchar)(AdjustTimes<<3)+LevelState; 
			if(DelayFlag==0)
				{
				//wdt_reset();
				if(((AllState&0b01000000)>>6)==1)ChargePOWERState_Display(10);
				else POWERState_Display(10);
				alarm_n_short(1);//Beep_middle(1,200);
				DelayFlag=1;
				}
			else 
				{
				if(((AllState&0b01000000)>>6)==1)ChargePOWERState_Display(10);
				else POWERState_Display(10);
				}
			
			if((Flag==0)&&(KeyState==0))//if((FirstFlag==1)&&(Flag==0)&&(KeyState==0))
				{
				//FirstFlag=0;
				KeyState=0;
				if(((AllState&0b01000000)>>6)==1)ChargePOWERState_Display(10);
				else POWERState_Display(10);
				DelayMs(1000);
				SwitchTimes=1;
				}//长按关机
			
			 if(SwitchTimes==1)
				{
				//wdt_reset();
				alarm_n_short(3);//Beep_middle(3,200);  
				Flag=1;
				SwitchTimes=0;
				Close();   
				} 
			
		break;
	case 0x01:		 //WORK键-PC4//工作状态
		PORTB&=~(1<<5);//laserpower给电 PB5置0
		//AllState&=0b01000000;
		//AllState|=(uchar)(AdjustTimes<<3)+LevelState;
		if(WorkFlag==0){alarm_n_short(1);WorkFlag=1;}//Beep_short(1,200);WorkFlag=1;}
		if(((AllState&0b01000000)>>6)==1)ChargeWORKState_Display(10,(uchar)((AllState&0b00111000)>>3),(uchar)(AllState&0b00000111));
		 else WORKState_Display(10,(uchar)((AllState&0b00111000)>>3),(uchar)(AllState&0b00000111));
		if(AdjustTimes==1){PORTB&=~(1<<0);PORTB&=~(1<<3);PORTB&=~(1<<4);}//PB0:PB3:PB4:->000	//给激光器调整功率状态
			else if(AdjustTimes==2){PORTB&=~(1<<0);PORTB&=~(1<<3);PORTB|=(1<<4);}//PB0:PB3:PB4:->001
				else if(AdjustTimes==3){PORTB&=~(1<<0);PORTB|=(1<<3);PORTB&=~(1<<4);}//PB0:PB3:PB4:->010
					else if(AdjustTimes==4){PORTB|=(1<<0);PORTB&=~(1<<3);PORTB&=~(1<<4);}//PB0:PB3:PB4:->100
		if((Time_minu==15)&&(AlarmFlag==0)){alarm_n_short(5);AlarmFlag=1;}//Beep_middle(5,200);AlarmFlag=1;}
		else if((Time_sec>=58)&&(Time_sec<=60)&&(Time_minu==29)&&(AlarmFlag==1)){alarm_n_short(15);AlarmFlag=0;SwitchTimes=1;KeyState=0;Close();  }//Beep_middle(15,200);AlarmFlag=0;SwitchTimes=0;}
		/*************
		if((Flag==1)&&(KeyState==1))
		{KeyState=0;//wdt_reset();
		DelayMs(1000);SwitchTimes=1;}//长按关机
		***********/
		break;
		
	case 0x02:		//ADJUST_P键-PC5//功率调整状态
		//wdt_reset();
		if(AdjustTimesFlag==1)
			{
			if(((AllState&0b01000000)>>6)==1)ChargeADJUSTState_Display(10,(uchar)((AllState&0b00111000)>>3),(uchar)(AllState&0b00000111));
				else ADJUSTState_Display(10,(uchar)((AllState&0b00111000)>>3),(uchar)(AllState&0b00000111));
			
			AdjustTimesFlag=0;
			/*********
			//AdjustTimes++;		//AdjustTimes为功率状态(第几格)
			//wdt_reset();
			AdjustTimes=(++Adj)/2;
			//AllState&=0b01000000;
			//AllState|=(uchar)(AdjustTimes<<3)+LevelState;
			Save_Flag();	
			if(Adj>8)Adj=1;
			if(Adj%2)alarm_n_short(1);//Beep_short(1,200);
			DelayMs(500);//延时消抖,防止AdjustTimes重复++
			*********/

⌨️ 快捷键说明

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