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

📄 mkq_m8.lss

📁 一个使用AVR的M8控制单相电容启动电机的程序
💻 LSS
📖 第 1 页 / 共 2 页
字号:

mkq_m8.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000040a  00000000  00000000  00000094  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  0000040a  0000049e  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000011  00800060  00800060  0000049e  2**0
                  ALLOC
  3 .noinit       00000000  00800071  00800071  0000049e  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  0000049e  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  000004a0  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  0000080c  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000014  00000000  00000000  00000890  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 00000177  00000000  00000000  000008a4  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00000379  00000000  00000000  00000a1b  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 00000116  00000000  00000000  00000d94  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   00000394  00000000  00000000  00000eaa  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    000001b6  00000000  00000000  0000123e  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	23 c0       	rjmp	.+70     	; 0x48 <__init>
   2:	3c c0       	rjmp	.+120    	; 0x7c <__bad_interrupt>
   4:	3b c0       	rjmp	.+118    	; 0x7c <__bad_interrupt>
   6:	3a c0       	rjmp	.+116    	; 0x7c <__bad_interrupt>
   8:	39 c0       	rjmp	.+114    	; 0x7c <__bad_interrupt>
   a:	38 c0       	rjmp	.+112    	; 0x7c <__bad_interrupt>
   c:	37 c0       	rjmp	.+110    	; 0x7c <__bad_interrupt>
   e:	36 c0       	rjmp	.+108    	; 0x7c <__bad_interrupt>
  10:	35 c0       	rjmp	.+106    	; 0x7c <__bad_interrupt>
  12:	3d c0       	rjmp	.+122    	; 0x8e <__vector_9>
  14:	33 c0       	rjmp	.+102    	; 0x7c <__bad_interrupt>
  16:	32 c0       	rjmp	.+100    	; 0x7c <__bad_interrupt>
  18:	31 c0       	rjmp	.+98     	; 0x7c <__bad_interrupt>
  1a:	30 c0       	rjmp	.+96     	; 0x7c <__bad_interrupt>
  1c:	2f c0       	rjmp	.+94     	; 0x7c <__bad_interrupt>
  1e:	2e c0       	rjmp	.+92     	; 0x7c <__bad_interrupt>
  20:	2d c0       	rjmp	.+90     	; 0x7c <__bad_interrupt>
  22:	2c c0       	rjmp	.+88     	; 0x7c <__bad_interrupt>
  24:	2b c0       	rjmp	.+86     	; 0x7c <__bad_interrupt>

00000026 <__ctors_end>:
  26:	da c0       	rjmp	.+436    	; 0x1dc <door_state_init+0x2c>
  28:	d1 c0       	rjmp	.+418    	; 0x1cc <door_state_init+0x1c>
  2a:	d8 c0       	rjmp	.+432    	; 0x1dc <door_state_init+0x2c>
  2c:	c8 c0       	rjmp	.+400    	; 0x1be <door_state_init+0xe>
  2e:	cb c0       	rjmp	.+406    	; 0x1c6 <door_state_init+0x16>
  30:	cd c0       	rjmp	.+410    	; 0x1cc <door_state_init+0x1c>
  32:	d4 c0       	rjmp	.+424    	; 0x1dc <door_state_init+0x2c>
  34:	d5 c0       	rjmp	.+426    	; 0x1e0 <door_state_init+0x30>
  36:	04 c1       	rjmp	.+520    	; 0x240 <door_mainloop+0x36>
  38:	0c c1       	rjmp	.+536    	; 0x252 <door_mainloop+0x48>
  3a:	26 c1       	rjmp	.+588    	; 0x288 <door_mainloop+0x7e>
  3c:	34 c1       	rjmp	.+616    	; 0x2a6 <door_mainloop+0x9c>
  3e:	44 c1       	rjmp	.+648    	; 0x2c8 <door_mainloop+0xbe>
  40:	53 c1       	rjmp	.+678    	; 0x2e8 <door_mainloop+0xde>
  42:	66 c1       	rjmp	.+716    	; 0x310 <door_mainloop+0x106>
  44:	8d c1       	rjmp	.+794    	; 0x360 <door_mainloop+0x156>
  46:	7a c1       	rjmp	.+756    	; 0x33c <door_mainloop+0x132>

00000048 <__init>:
  48:	11 24       	eor	r1, r1
  4a:	1f be       	out	0x3f, r1	; 63
  4c:	cf e5       	ldi	r28, 0x5F	; 95
  4e:	d4 e0       	ldi	r29, 0x04	; 4
  50:	de bf       	out	0x3e, r29	; 62
  52:	cd bf       	out	0x3d, r28	; 61

00000054 <__do_copy_data>:
  54:	10 e0       	ldi	r17, 0x00	; 0
  56:	a0 e6       	ldi	r26, 0x60	; 96
  58:	b0 e0       	ldi	r27, 0x00	; 0
  5a:	ea e0       	ldi	r30, 0x0A	; 10
  5c:	f4 e0       	ldi	r31, 0x04	; 4
  5e:	02 c0       	rjmp	.+4      	; 0x64 <.do_copy_data_start>

00000060 <.do_copy_data_loop>:
  60:	05 90       	lpm	r0, Z+
  62:	0d 92       	st	X+, r0

00000064 <.do_copy_data_start>:
  64:	a0 36       	cpi	r26, 0x60	; 96
  66:	b1 07       	cpc	r27, r17
  68:	d9 f7       	brne	.-10     	; 0x60 <.do_copy_data_loop>

0000006a <__do_clear_bss>:
  6a:	10 e0       	ldi	r17, 0x00	; 0
  6c:	a0 e6       	ldi	r26, 0x60	; 96
  6e:	b0 e0       	ldi	r27, 0x00	; 0
  70:	01 c0       	rjmp	.+2      	; 0x74 <.do_clear_bss_start>

00000072 <.do_clear_bss_loop>:
  72:	1d 92       	st	X+, r1

00000074 <.do_clear_bss_start>:
  74:	a1 37       	cpi	r26, 0x71	; 113
  76:	b1 07       	cpc	r27, r17
  78:	e1 f7       	brne	.-8      	; 0x72 <.do_clear_bss_loop>
  7a:	b9 c1       	rjmp	.+882    	; 0x3ee <main>

0000007c <__bad_interrupt>:
  7c:	c1 cf       	rjmp	.-126    	; 0x0 <__vectors>

0000007e <timer0_init>:
//****************************
void timer0_init(void)
{
	//T0定时10ms
	TCCR0 = 0x00; //stop
  7e:	13 be       	out	0x33, r1	; 51
 	TCNT0 = T0_10MS; //setup	
  80:	84 e6       	ldi	r24, 0x64	; 100
  82:	82 bf       	out	0x32, r24	; 50
	TCCR0 = 0x03; //start timer	--64分频--1M内部系统时钟--10ms中断一次	
  84:	83 e0       	ldi	r24, 0x03	; 3
  86:	83 bf       	out	0x33, r24	; 51
	TIMSK = 0x01; //溢出中断TOIE0
  88:	81 e0       	ldi	r24, 0x01	; 1
  8a:	89 bf       	out	0x39, r24	; 57
  8c:	08 95       	ret

0000008e <__vector_9>:
}

//************************************
SIGNAL(SIG_OVERFLOW0)//T0溢出中断10ms
{
  8e:	1f 92       	push	r1
  90:	0f 92       	push	r0
  92:	0f b6       	in	r0, 0x3f	; 63
  94:	0f 92       	push	r0
  96:	11 24       	eor	r1, r1
  98:	8f 93       	push	r24
	TCNT0 = T0_10MS;	
  9a:	84 e6       	ldi	r24, 0x64	; 100
  9c:	82 bf       	out	0x32, r24	; 50
	f_10ms=1;	
  9e:	81 e0       	ldi	r24, 0x01	; 1
  a0:	80 93 6c 00 	sts	0x006C, r24
  a4:	8f 91       	pop	r24
  a6:	0f 90       	pop	r0
  a8:	0f be       	out	0x3f, r0	; 63
  aa:	0f 90       	pop	r0
  ac:	1f 90       	pop	r1
  ae:	18 95       	reti

000000b0 <main_init>:
}	

//************************************
void	main_init(void)
{
  b0:	1f 93       	push	r17
  DDRB=0x02; //B0000_0010   PB7(输入 高阻 外有上拉 ) PB1(输出 常态出高熄灭)
  b2:	12 e0       	ldi	r17, 0x02	; 2
  b4:	17 bb       	out	0x17, r17	; 23
  PORTB=0x7f;//B1111_1111
  b6:	8f e7       	ldi	r24, 0x7F	; 127
  b8:	88 bb       	out	0x18, r24	; 24

  DDRC=0x07; //B0000_0111 	PC(5 4 3)(输入 高阻 外有上拉 ) 2 1 0(输出 常态出高)
  ba:	87 e0       	ldi	r24, 0x07	; 7
  bc:	84 bb       	out	0x14, r24	; 20
  PORTC=0xff;//B1111_1111
  be:	8f ef       	ldi	r24, 0xFF	; 255
  c0:	85 bb       	out	0x15, r24	; 21

//DDRD=0x02; //B0000_0010 	PD3(输入 高阻 外有上拉 ) PD2(输入 上拉) PD1(输出 常态出高)
//PORTD=0xf7;//B1111_0111
	DDRD=0xf0; //B1111_0000 	PD3(输入 高阻 外有上拉 ) PD2(输入 上拉) PD1(输出 常态出高)
  c2:	80 ef       	ldi	r24, 0xF0	; 240
  c4:	81 bb       	out	0x11, r24	; 17
	PORTD=0x0f;//B0000_1111
  c6:	8f e0       	ldi	r24, 0x0F	; 15
  c8:	82 bb       	out	0x12, r24	; 18
   
	timer0_init();
  ca:	d9 df       	rcall	.-78     	; 0x7e <timer0_init>
	cnt_20ms=2;
  cc:	10 93 63 00 	sts	0x0063, r17
	cnt_100ms=5;
  d0:	85 e0       	ldi	r24, 0x05	; 5
  d2:	80 93 6a 00 	sts	0x006A, r24
	cnt_200ms=2;
  d6:	10 93 64 00 	sts	0x0064, r17
	cnt_10s=CONST_10S;
  da:	82 e3       	ldi	r24, 0x32	; 50
  dc:	80 93 69 00 	sts	0x0069, r24
	cnt_12s=CONST_12S;	
  e0:	8c e3       	ldi	r24, 0x3C	; 60
  e2:	80 93 61 00 	sts	0x0061, r24
  e6:	1f 91       	pop	r17
  e8:	08 95       	ret

000000ea <tim0_mainloop>:
}

//************************************
//10ms一次中断产生检测时间20ms,报警时间100ms 时限保护10s 12s
void	tim0_mainloop(void)
{
	if(f_10ms==1)
  ea:	90 91 6c 00 	lds	r25, 0x006C
  ee:	91 30       	cpi	r25, 0x01	; 1
  f0:	e1 f5       	brne	.+120    	; 0x16a <tim0_mainloop+0x80>
	{
		f_10ms=0;
  f2:	10 92 6c 00 	sts	0x006C, r1
		if(--cnt_20ms==0)//判断按钮
  f6:	80 91 63 00 	lds	r24, 0x0063
  fa:	81 50       	subi	r24, 0x01	; 1
  fc:	80 93 63 00 	sts	0x0063, r24
 100:	88 23       	and	r24, r24
 102:	99 f5       	brne	.+102    	; 0x16a <tim0_mainloop+0x80>
		{
			cnt_20ms=2;f_20ms=1;
 104:	22 e0       	ldi	r18, 0x02	; 2
 106:	20 93 63 00 	sts	0x0063, r18
 10a:	90 93 65 00 	sts	0x0065, r25
			if(--cnt_100ms==0)//闪烁时间
 10e:	80 91 6a 00 	lds	r24, 0x006A
 112:	81 50       	subi	r24, 0x01	; 1
 114:	80 93 6a 00 	sts	0x006A, r24
 118:	88 23       	and	r24, r24
 11a:	39 f5       	brne	.+78     	; 0x16a <tim0_mainloop+0x80>
			{
				cnt_100ms = 2;f_100ms = 1;
 11c:	20 93 6a 00 	sts	0x006A, r18
 120:	90 93 62 00 	sts	0x0062, r25
				if(--cnt_200ms==0)//行程开关检测时间
 124:	80 91 64 00 	lds	r24, 0x0064
 128:	81 50       	subi	r24, 0x01	; 1
 12a:	80 93 64 00 	sts	0x0064, r24
 12e:	88 23       	and	r24, r24
 130:	e1 f4       	brne	.+56     	; 0x16a <tim0_mainloop+0x80>
				{
					cnt_200ms=2;f_200ms=1;
 132:	20 93 64 00 	sts	0x0064, r18
 136:	90 93 6b 00 	sts	0x006B, r25
					if(--cnt_10s==0)//正转时间
 13a:	80 91 69 00 	lds	r24, 0x0069
 13e:	81 50       	subi	r24, 0x01	; 1
 140:	80 93 69 00 	sts	0x0069, r24
 144:	88 23       	and	r24, r24
 146:	29 f4       	brne	.+10     	; 0x152 <tim0_mainloop+0x68>
					{
						cnt_10s=CONST_10S;f_10s=1;	
 148:	82 e3       	ldi	r24, 0x32	; 50
 14a:	80 93 69 00 	sts	0x0069, r24
 14e:	90 93 68 00 	sts	0x0068, r25
					}
					if(--cnt_12s==0)//反转时间
 152:	80 91 61 00 	lds	r24, 0x0061
 156:	81 50       	subi	r24, 0x01	; 1
 158:	80 93 61 00 	sts	0x0061, r24
 15c:	88 23       	and	r24, r24
 15e:	29 f4       	brne	.+10     	; 0x16a <tim0_mainloop+0x80>
					{
						cnt_12s=CONST_12S;f_12s=1;	
 160:	8c e3       	ldi	r24, 0x3C	; 60
 162:	80 93 61 00 	sts	0x0061, r24
 166:	90 93 6e 00 	sts	0x006E, r25
 16a:	08 95       	ret

0000016c <led_alarm>:
					}
				}
			}
		}
	}
}
//************************************
//错误报警 输入参数=1 报警 =0 不报警
void	led_alarm(uchar alarm)
{
	if((alarm==1)&&(f_100ms==1))	//同时满足 100ms时间到,报警标志为1
 16c:	81 30       	cpi	r24, 0x01	; 1
 16e:	89 f4       	brne	.+34     	; 0x192 <led_alarm+0x26>
 170:	90 91 62 00 	lds	r25, 0x0062
 174:	91 30       	cpi	r25, 0x01	; 1
 176:	69 f4       	brne	.+26     	; 0x192 <led_alarm+0x26>
	{
		f_100ms=0;
 178:	10 92 62 00 	sts	0x0062, r1
		if(blink_b==0)
 17c:	80 91 67 00 	lds	r24, 0x0067
 180:	88 23       	and	r24, r24
 182:	21 f4       	brne	.+8      	; 0x18c <led_alarm+0x20>
		{
			ERR_ON;blink_b=1;
 184:	c1 98       	cbi	0x18, 1	; 24
 186:	90 93 67 00 	sts	0x0067, r25
 18a:	08 95       	ret
		}
		else
		{
			ERR_OFF;blink_b=0;
 18c:	c1 9a       	sbi	0x18, 1	; 24
 18e:	10 92 67 00 	sts	0x0067, r1
 192:	08 95       	ret

00000194 <moto_zhen>:
		}
	}
}

//************************************
void	moto_zhen(void)
{
	JDQ_OFF;
 194:	aa 9a       	sbi	0x15, 2	; 21
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
	else
		__ticks = (uint16_t)__tmp;
 196:	84 ec       	ldi	r24, 0xC4	; 196
 198:	99 e0       	ldi	r25, 0x09	; 9
 19a:	01 97       	sbiw	r24, 0x01	; 1
 19c:	f1 f7       	brne	.-4      	; 0x19a <moto_zhen+0x6>
	_delay_ms(10);
	LOCK_ON;//正转锁紧	
 19e:	a8 98       	cbi	0x15, 0	; 21
 1a0:	08 95       	ret

000001a2 <moto_fan>:
}
//************************************
void	moto_fan(void)
{
	JDQ_ON;
 1a2:	aa 98       	cbi	0x15, 2	; 21
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
	else
		__ticks = (uint16_t)__tmp;
 1a4:	84 ec       	ldi	r24, 0xC4	; 196
 1a6:	99 e0       	ldi	r25, 0x09	; 9
 1a8:	01 97       	sbiw	r24, 0x01	; 1
 1aa:	f1 f7       	brne	.-4      	; 0x1a8 <moto_fan+0x6>
	_delay_ms(10);
	UNLOCK_ON;//反转松开
 1ac:	a9 98       	cbi	0x15, 1	; 21
 1ae:	08 95       	ret

000001b0 <door_state_init>:
}
//************************************
void	door_state_init(void)//门状态起始判断
{
	uchar	temp;
	temp=XCKG;
 1b0:	83 b3       	in	r24, 0x13	; 19
	temp>>=3;
	err_f=0;ERR_OFF;
 1b2:	10 92 6f 00 	sts	0x006F, r1
 1b6:	c1 9a       	sbi	0x18, 1	; 24
	//上电后若门合上,但未锁定100,执行锁定  
	//若门锁紧 进入0
	//若门全开 进入4
	//若门安装初态111 进入11 
	//若行程开关位置有冲突,报警,直到正确为止 包括 000 010 110
	//对于执行报警或锁紧的步骤,要加入上电初始化标志powon_f=1;
	
	temp=7;
	switch(temp)//PC5(解锁) 4(关上) 3(锁紧) 
 1b8:	ed e2       	ldi	r30, 0x2D	; 45
 1ba:	f0 e0       	ldi	r31, 0x00	; 0
 1bc:	09 94       	ijmp
	{
		case 0://000	行程开关位置有冲突 报警
			state=8;err_f=1;
			break;
		case 1://001解锁+关闭---启动锁紧并一直报警直到门锁紧为止
			moto_zhen();f_10s=0;cnt_10s=CONST_10S;
			state=3;
			err_f=1;
			break;
		case 2://010	行程开关位置有冲突 报警
			state=8;err_f=1;
			break;		
		case 3://011	门全开
			state=2;
 1be:	82 e0       	ldi	r24, 0x02	; 2
 1c0:	80 93 66 00 	sts	0x0066, r24
			break;		
 1c4:	13 c0       	rjmp	.+38     	; 0x1ec <door_state_init+0x3c>
		case 4://100已经锁紧
			state=0;
 1c6:	10 92 66 00 	sts	0x0066, r1
			break;
 1ca:	10 c0       	rjmp	.+32     	; 0x1ec <door_state_init+0x3c>
		case 5://101	门安装初态 门合上但行程开关不到位	启动锁紧并一直报警直到门锁紧为止
			moto_zhen();f_10s=0;cnt_10s=CONST_10S;
 1cc:	e3 df       	rcall	.-58     	; 0x194 <moto_zhen>
 1ce:	10 92 68 00 	sts	0x0068, r1
 1d2:	82 e3       	ldi	r24, 0x32	; 50

⌨️ 快捷键说明

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