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

📄 rudongbeng.lss

📁 这个是我们刚刚批量生产的工业蠕动泵的控制程序。单片机采用AVR系列单片机。该蠕动泵采用直流电机控制。主要根据用户设定的控制时间以及通断时间控制蠕动泵的出水量。程序内包含的自动模式和手动模式
💻 LSS
📖 第 1 页 / 共 4 页
字号:

Rudongbeng.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000a6e  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00000039  00800060  00800060  00000ae2  2**0
                  ALLOC
  2 .stab         00000378  00000000  00000000  00000ae4  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      00000071  00000000  00000000  00000e5c  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_aranges 00000020  00000000  00000000  00000ecd  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_pubnames 00000385  00000000  00000000  00000eed  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_info   0000049e  00000000  00000000  00001272  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_abbrev 0000010b  00000000  00000000  00001710  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_line   000009db  00000000  00000000  0000181b  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_frame  000000a0  00000000  00000000  000021f8  2**2
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    00000392  00000000  00000000  00002298  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_loc    00000050  00000000  00000000  0000262a  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54	; 0x54 <__ctors_end>
   4:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   8:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
   c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  10:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  14:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  18:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  1c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  20:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  24:	0c 94 7b 04 	jmp	0x8f6	; 0x8f6 <__vector_9>
  28:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  2c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  30:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  34:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  38:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  3c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  40:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  44:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  48:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  4c:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>
  50:	0c 94 47 00 	jmp	0x8e	; 0x8e <__bad_interrupt>

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	ee e6       	ldi	r30, 0x6E	; 110
  68:	fa e0       	ldi	r31, 0x0A	; 10
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	a0 36       	cpi	r26, 0x60	; 96
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a0 e6       	ldi	r26, 0x60	; 96
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	a9 39       	cpi	r26, 0x99	; 153
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0e 94 cb 04 	call	0x996	; 0x996 <main>
  8a:	0c 94 36 05 	jmp	0xa6c	; 0xa6c <_exit>

0000008e <__bad_interrupt>:
  8e:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

00000092 <writeEEPROM>:
//从临时寄存器*eepromPtr里面读出数据,
//根据设定行地址,把连续的12bytes动作表写入到EEPROM中
//==========================================================
void writeEEPROM(vuchar *eepromWPtr,uchar lineNumber)
{
  92:	fc 01       	movw	r30, r24
	uchar j;
	uint byteNumber;
	uint eepromAddress=0;
	eepromAddress=12*lineNumber;
  94:	8c e0       	ldi	r24, 0x0C	; 12
  96:	68 9f       	mul	r22, r24
  98:	90 01       	movw	r18, r0
  9a:	11 24       	eor	r1, r1
	while(EECR&0x02); //确认已经没有写动作
  9c:	e1 99       	sbic	0x1c, 1	; 28
  9e:	fe cf       	rjmp	.-4      	; 0x9c <writeEEPROM+0xa>
	j = SREG;//save the status
  a0:	9f b7       	in	r25, 0x3f	; 63
	clear_interrupt();
  a2:	f8 94       	cli
  a4:	40 e0       	ldi	r20, 0x00	; 0
  a6:	50 e0       	ldi	r21, 0x00	; 0
	for(byteNumber=0;byteNumber<12;byteNumber++)
	{
		while(EECR&0x02); //确认已经没有写动作
  a8:	e1 99       	sbic	0x1c, 1	; 28
  aa:	fe cf       	rjmp	.-4      	; 0xa8 <writeEEPROM+0x16>
		EEAR =eepromAddress++;
  ac:	3f bb       	out	0x1f, r19	; 31
  ae:	2e bb       	out	0x1e, r18	; 30
		EEDR =*(eepromWPtr+byteNumber);
  b0:	81 91       	ld	r24, Z+
  b2:	8d bb       	out	0x1d, r24	; 29
		EECR |= 0x04;
  b4:	e2 9a       	sbi	0x1c, 2	; 28
		EECR |= 0x02;
  b6:	e1 9a       	sbi	0x1c, 1	; 28
  b8:	4f 5f       	subi	r20, 0xFF	; 255
  ba:	5f 4f       	sbci	r21, 0xFF	; 255
  bc:	4c 30       	cpi	r20, 0x0C	; 12
  be:	51 05       	cpc	r21, r1
  c0:	18 f4       	brcc	.+6      	; 0xc8 <writeEEPROM+0x36>
  c2:	2f 5f       	subi	r18, 0xFF	; 255
  c4:	3f 4f       	sbci	r19, 0xFF	; 255
  c6:	f0 cf       	rjmp	.-32     	; 0xa8 <writeEEPROM+0x16>
	}
	while(EECR&0x02);//确认已经没有写动作
  c8:	e1 99       	sbic	0x1c, 1	; 28
  ca:	fe cf       	rjmp	.-4      	; 0xc8 <writeEEPROM+0x36>
	SREG = j; //restore the status   
  cc:	9f bf       	out	0x3f, r25	; 63
  ce:	08 95       	ret

000000d0 <readEEPROM>:
}

//================================================================
//根据设定行地址,把连续的12bytes的动作表从EEPROM中读出来,
//然后写入到指定的临时寄存器*eepromPtr里面
//================================================================
void readEEPROM(vuchar *eepromPtr,uchar lineNumber)
{
  d0:	fc 01       	movw	r30, r24
	uchar j;
	uchar byteNumber;
	uint eepromAddress;
	eepromAddress=12*lineNumber;
  d2:	8c e0       	ldi	r24, 0x0C	; 12
  d4:	68 9f       	mul	r22, r24
  d6:	c0 01       	movw	r24, r0
  d8:	11 24       	eor	r1, r1
	while(EECR&0x02);	//确认已经没有写动作
  da:	e1 99       	sbic	0x1c, 1	; 28
  dc:	fe cf       	rjmp	.-4      	; 0xda <readEEPROM+0xa>
  de:	9c 01       	movw	r18, r24
	j = SREG;//save the register
  e0:	4f b7       	in	r20, 0x3f	; 63
  	clear_interrupt();
  e2:	f8 94       	cli
  e4:	90 e0       	ldi	r25, 0x00	; 0
	for(byteNumber=0;byteNumber<12;byteNumber++)
	{
   		EEAR =eepromAddress++;
  e6:	3f bb       	out	0x1f, r19	; 31
  e8:	2e bb       	out	0x1e, r18	; 30
  ea:	2f 5f       	subi	r18, 0xFF	; 255
  ec:	3f 4f       	sbci	r19, 0xFF	; 255
   		EECR |=0x01;
  ee:	e0 9a       	sbi	0x1c, 0	; 28
   		while(EECR&0x01);//确认已经完成读动作
  f0:	e0 99       	sbic	0x1c, 0	; 28
  f2:	fe cf       	rjmp	.-4      	; 0xf0 <readEEPROM+0x20>
   		*(eepromPtr++)= EEDR;
  f4:	8d b3       	in	r24, 0x1d	; 29
  f6:	80 83       	st	Z, r24
		while(EECR&0x02);//确认已经没有写动作
  f8:	e1 99       	sbic	0x1c, 1	; 28
  fa:	fe cf       	rjmp	.-4      	; 0xf8 <readEEPROM+0x28>
  fc:	9f 5f       	subi	r25, 0xFF	; 255
  fe:	9c 30       	cpi	r25, 0x0C	; 12
 100:	11 f0       	breq	.+4      	; 0x106 <readEEPROM+0x36>
 102:	31 96       	adiw	r30, 0x01	; 1
 104:	f0 cf       	rjmp	.-32     	; 0xe6 <readEEPROM+0x16>
	}
	SREG = j;//restore the status   
 106:	4f bf       	out	0x3f, r20	; 63
 108:	08 95       	ret

0000010a <init_devices>:
}



//call this routine to initialise all peripherals
void init_devices(void)
{
 10a:	f8 94       	cli

	
	//stop errant interrupts until set up
	clear_interrupt(); //disable all interrupts

	//port_init();
	PORTA=0xFF;
 10c:	8f ef       	ldi	r24, 0xFF	; 255
 10e:	8b bb       	out	0x1b, r24	; 27
	DDRA =0x00;
 110:	1a ba       	out	0x1a, r1	; 26
	
	PORTB = 0xFF;
 112:	88 bb       	out	0x18, r24	; 24
	DDRB  = 0x00;
 114:	17 ba       	out	0x17, r1	; 23
	
	PORTC = 0xFF; 
 116:	85 bb       	out	0x15, r24	; 21
	DDRC  = 0xFF;
 118:	84 bb       	out	0x14, r24	; 20
	
	PORTD = 0xFF;
 11a:	82 bb       	out	0x12, r24	; 18
	DDRD  = 0xFF;
 11c:	81 bb       	out	0x11, r24	; 17

	//timer0_init();
	//TIMER0 initialize - prescale:8
	// desired value: 50uSec
	// actual value: 50.000uSec (0.0%)
	TCCR0 = 0x00; //stop
 11e:	13 be       	out	0x33, r1	; 51
	TCNT0 = 0x8b; //set count
 120:	8b e8       	ldi	r24, 0x8B	; 139
 122:	82 bf       	out	0x32, r24	; 50
	TCCR0 = 0x05; //start timer
 124:	85 e0       	ldi	r24, 0x05	; 5
 126:	83 bf       	out	0x33, r24	; 51

	MCUCR = 0x08;
 128:	88 e0       	ldi	r24, 0x08	; 8
 12a:	85 bf       	out	0x35, r24	; 53
	GICR  = 0x00;
 12c:	1b be       	out	0x3b, r1	; 59
	//TIMSK = 0x45; //timer interrupt sources
	TIMSK = 0x01; //timer interrupt sources
 12e:	81 e0       	ldi	r24, 0x01	; 1
 130:	89 bf       	out	0x39, r24	; 57
 132:	08 95       	ret

00000134 <keyScanProgram>:
	//set_interrupt(); //re-enable interrupts
	//all peripherals are now initialised

}



/*********************************************************
//按键扫描程序
//假定运行时间单位是10ms
*********************************************************/
void keyScanProgram(void)
{
 134:	cb 99       	sbic	0x19, 3	; 25
 136:	0d c0       	rjmp	.+26     	; 0x152 <keyScanProgram+0x1e>
	//TINY ADD按钮按下
	if(KEY_TINY_ADD_SET)

	{
		keyTinyAddStatus=KEY_PRESS;
		if(keyTinyAddCounter<200)keyTinyAddCounter++;
 138:	81 e0       	ldi	r24, 0x01	; 1
 13a:	80 93 68 00 	sts	0x0068, r24
	}
 13e:	80 91 69 00 	lds	r24, 0x0069
 142:	88 3c       	cpi	r24, 0xC8	; 200
 144:	c0 f4       	brcc	.+48     	; 0x176 <keyScanProgram+0x42>
 146:	80 91 69 00 	lds	r24, 0x0069
 14a:	8f 5f       	subi	r24, 0xFF	; 255
 14c:	80 93 69 00 	sts	0x0069, r24
 150:	12 c0       	rjmp	.+36     	; 0x176 <keyScanProgram+0x42>
	//TINY ADD按键松开
	else 
	{
		//按键是曾经是按过的
		if(keyTinyAddStatus==KEY_PRESS)
		{
 152:	80 91 68 00 	lds	r24, 0x0068
 156:	81 30       	cpi	r24, 0x01	; 1
 158:	71 f4       	brne	.+28     	; 0x176 <keyScanProgram+0x42>
			//按键有效触发
			if(keyTinyAddCounter>KEY_PRESS_OK)
			{
 15a:	80 91 69 00 	lds	r24, 0x0069
 15e:	84 30       	cpi	r24, 0x04	; 4
 160:	30 f0       	brcs	.+12     	; 0x16e <keyScanProgram+0x3a>
				keyTinyAddCounter=0;
				keyTinyAddStatus=KEY_OPEN;
 162:	10 92 69 00 	sts	0x0069, r1
			}
 166:	82 e0       	ldi	r24, 0x02	; 2
 168:	80 93 68 00 	sts	0x0068, r24
 16c:	04 c0       	rjmp	.+8      	; 0x176 <keyScanProgram+0x42>
			//无法有效触发
			else
			{
				keyTinyAddCounter=0;
				keyTinyAddStatus=KEY_WAITING;
 16e:	10 92 69 00 	sts	0x0069, r1
			}
 172:	10 92 68 00 	sts	0x0068, r1
		}
	}

	/////////////////////////////////////////
	//TINY SUB按钮按下
	if(KEY_TINY_SUB_SET)

	{
 176:	cc 99       	sbic	0x19, 4	; 25
 178:	0d c0       	rjmp	.+26     	; 0x194 <keyScanProgram+0x60>
		keyTinySubStatus=KEY_PRESS;
		if(keyTinySubCounter<200)keyTinySubCounter++;
	}
 17a:	81 e0       	ldi	r24, 0x01	; 1
 17c:	80 93 6a 00 	sts	0x006A, r24
	//TINY SUB按键松开
 180:	80 91 6b 00 	lds	r24, 0x006B
 184:	88 3c       	cpi	r24, 0xC8	; 200
 186:	c0 f4       	brcc	.+48     	; 0x1b8 <keyScanProgram+0x84>
 188:	80 91 6b 00 	lds	r24, 0x006B
 18c:	8f 5f       	subi	r24, 0xFF	; 255
 18e:	80 93 6b 00 	sts	0x006B, r24
 192:	12 c0       	rjmp	.+36     	; 0x1b8 <keyScanProgram+0x84>
	else 
	{
		//按键是曾经是按过的
		if(keyTinySubStatus==KEY_PRESS)
		{
			//按键有效触发
 194:	80 91 6a 00 	lds	r24, 0x006A
 198:	81 30       	cpi	r24, 0x01	; 1
 19a:	71 f4       	brne	.+28     	; 0x1b8 <keyScanProgram+0x84>
			if(keyTinySubCounter>KEY_PRESS_OK)
			{
				keyTinySubCounter=0;
 19c:	80 91 6b 00 	lds	r24, 0x006B
 1a0:	84 30       	cpi	r24, 0x04	; 4
 1a2:	30 f0       	brcs	.+12     	; 0x1b0 <keyScanProgram+0x7c>
				keyTinySubStatus=KEY_OPEN;
			}
 1a4:	10 92 6b 00 	sts	0x006B, r1
			//无法有效触发
 1a8:	82 e0       	ldi	r24, 0x02	; 2
 1aa:	80 93 6a 00 	sts	0x006A, r24
 1ae:	04 c0       	rjmp	.+8      	; 0x1b8 <keyScanProgram+0x84>
			else
			{
				keyTinySubCounter=0;
				keyTinySubStatus=KEY_WAITING;
			}
 1b0:	10 92 6b 00 	sts	0x006B, r1
		}
 1b4:	10 92 6a 00 	sts	0x006A, r1
	}

	/////////////////////////////////////////
	//LARGE ADD按钮按下
	if(KEY_LARGE_ADD_SET)

	{
		keyLargeAddStatus=KEY_PRESS;
 1b8:	cd 99       	sbic	0x19, 5	; 25
 1ba:	0d c0       	rjmp	.+26     	; 0x1d6 <keyScanProgram+0xa2>
		if(keyLargeAddCounter<200)keyLargeAddCounter++;
	}
	//LARGE ADD按键松开
 1bc:	81 e0       	ldi	r24, 0x01	; 1
 1be:	80 93 6c 00 	sts	0x006C, r24
	else 
 1c2:	80 91 6d 00 	lds	r24, 0x006D
 1c6:	88 3c       	cpi	r24, 0xC8	; 200
 1c8:	c0 f4       	brcc	.+48     	; 0x1fa <keyScanProgram+0xc6>
 1ca:	80 91 6d 00 	lds	r24, 0x006D
 1ce:	8f 5f       	subi	r24, 0xFF	; 255
 1d0:	80 93 6d 00 	sts	0x006D, r24
 1d4:	12 c0       	rjmp	.+36     	; 0x1fa <keyScanProgram+0xc6>
	{
		//按键是曾经是按过的
		if(keyLargeAddStatus==KEY_PRESS)
		{
			//按键有效触发
			if(keyLargeAddCounter>KEY_PRESS_OK)
 1d6:	80 91 6c 00 	lds	r24, 0x006C
 1da:	81 30       	cpi	r24, 0x01	; 1
 1dc:	71 f4       	brne	.+28     	; 0x1fa <keyScanProgram+0xc6>
			{
				keyLargeAddCounter=0;
				keyLargeAddStatus=KEY_OPEN;
 1de:	80 91 6d 00 	lds	r24, 0x006D
 1e2:	84 30       	cpi	r24, 0x04	; 4
 1e4:	30 f0       	brcs	.+12     	; 0x1f2 <keyScanProgram+0xbe>
			}
			//无法有效触发
 1e6:	10 92 6d 00 	sts	0x006D, r1
			else
 1ea:	82 e0       	ldi	r24, 0x02	; 2
 1ec:	80 93 6c 00 	sts	0x006C, r24
 1f0:	04 c0       	rjmp	.+8      	; 0x1fa <keyScanProgram+0xc6>
			{
				keyLargeAddCounter=0;
				keyLargeAddStatus=KEY_WAITING;
			}
		}
 1f2:	10 92 6d 00 	sts	0x006D, r1
	}
 1f6:	10 92 6c 00 	sts	0x006C, r1

	/////////////////////////////////////////
	//LARGE SUB按钮按下
	if(KEY_LARGE_SUB_SET)

⌨️ 快捷键说明

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