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

📄 rudongbeng.lss

📁 这个是我们刚刚批量生产的工业蠕动泵的控制程序。单片机采用AVR系列单片机。该蠕动泵采用直流电机控制。主要根据用户设定的控制时间以及通断时间控制蠕动泵的出水量。程序内包含的自动模式和手动模式
💻 LSS
📖 第 1 页 / 共 4 页
字号:
				outputStep=OUTPUT_STEP_STOP;
			}			
 81c:	80 91 7a 00 	lds	r24, 0x007A
 820:	90 91 7b 00 	lds	r25, 0x007B
 824:	01 96       	adiw	r24, 0x01	; 1
 826:	90 93 7b 00 	sts	0x007B, r25
 82a:	80 93 7a 00 	sts	0x007A, r24
		}
 82e:	a8 98       	cbi	0x15, 0	; 21
		else //if(outputStep==OUTPUT_STEP_STOP)
 830:	a9 9a       	sbi	0x15, 1	; 21
		{
			outputStopTimeCounter++;
 832:	20 91 7a 00 	lds	r18, 0x007A
 836:	30 91 7b 00 	lds	r19, 0x007B
 83a:	80 91 7c 00 	lds	r24, 0x007C
 83e:	90 91 7d 00 	lds	r25, 0x007D
 842:	82 17       	cp	r24, r18
 844:	93 07       	cpc	r25, r19
 846:	58 f5       	brcc	.+86     	; 0x89e <outputControl+0x94>
			OUTPUT1_OFF();
			OUTPUT2_OFF();
 848:	10 92 7b 00 	sts	0x007B, r1
 84c:	10 92 7a 00 	sts	0x007A, r1
			if(outPutMode==OUTPUT_HAND)
 850:	40 93 85 00 	sts	0x0085, r20
 854:	08 95       	ret
			{
				outPutEnable=0;
				outputStep=OUTPUT_STEP_WORK;
			}
			//LED3_OFF();
 856:	80 91 7e 00 	lds	r24, 0x007E
 85a:	90 91 7f 00 	lds	r25, 0x007F
 85e:	01 96       	adiw	r24, 0x01	; 1
 860:	90 93 7f 00 	sts	0x007F, r25
 864:	80 93 7e 00 	sts	0x007E, r24
			if(outputStopTimeCounter>outputStopTimeSetting)
 868:	a8 98       	cbi	0x15, 0	; 21
			{
 86a:	a9 98       	cbi	0x15, 1	; 21
				outputStopTimeCounter=0;
 86c:	80 91 83 00 	lds	r24, 0x0083
 870:	88 23       	and	r24, r24
 872:	21 f4       	brne	.+8      	; 0x87c <outputControl+0x72>
				outputStep=OUTPUT_STEP_WORK;
				//完成一个周期,判断一下运作的模式,
 874:	10 92 82 00 	sts	0x0082, r1
				//假如是手动状态,设置该程序暂停,
 878:	10 92 85 00 	sts	0x0085, r1
				//假如是自动状态,继续运行。

			}			
 87c:	20 91 7e 00 	lds	r18, 0x007E
 880:	30 91 7f 00 	lds	r19, 0x007F
 884:	80 91 80 00 	lds	r24, 0x0080
 888:	90 91 81 00 	lds	r25, 0x0081
 88c:	82 17       	cp	r24, r18
 88e:	93 07       	cpc	r25, r19
 890:	30 f4       	brcc	.+12     	; 0x89e <outputControl+0x94>
		}
	}
 892:	10 92 7f 00 	sts	0x007F, r1
 896:	10 92 7e 00 	sts	0x007E, r1
}
 89a:	10 92 85 00 	sts	0x0085, r1
 89e:	08 95       	ret

000008a0 <ledStatusShow>:


/*********************************************************
//LED输出控制
//假设时间单位是100ms
*********************************************************/
void ledStatusShow(void)
{
	//恢复状态灯指示
	//设置状态
	if(unitTimeCounter>0)
	{
		//闪烁处理
		if(timeSwitchTimeCounter>0)
		{
			//点亮一次
 8a0:	80 91 88 00 	lds	r24, 0x0088
 8a4:	90 91 89 00 	lds	r25, 0x0089
 8a8:	89 2b       	or	r24, r25
 8aa:	d9 f0       	breq	.+54     	; 0x8e2 <ledStatusShow+0x42>
			if(timeSwitchTimeCounter>150)
			{
				//运作时间的设置状态
				if(timeSetMode==TIME_SET_WORK)
				{
					LED1_ON();
 8ac:	80 91 8a 00 	lds	r24, 0x008A
 8b0:	88 23       	and	r24, r24
 8b2:	79 f0       	breq	.+30     	; 0x8d2 <ledStatusShow+0x32>
					LED2_OFF();
				}
				//间隔时间的设置状态
 8b4:	80 91 8a 00 	lds	r24, 0x008A
 8b8:	87 39       	cpi	r24, 0x97	; 151
 8ba:	58 f4       	brcc	.+22     	; 0x8d2 <ledStatusShow+0x32>
				else //if(timeSetMode==TIME_SET_WORK)
				{
					LED1_OFF();
					LED2_ON();
				}
			}
			//关闭
			else if(timeSwitchTimeCounter>100)
			{
			
				//运作时间的设置状态
				if(timeSetMode==TIME_SET_WORK)
				{
					LED1_OFF();
					LED2_OFF();
				}
 8bc:	80 91 8a 00 	lds	r24, 0x008A
 8c0:	85 36       	cpi	r24, 0x65	; 101
 8c2:	20 f4       	brcc	.+8      	; 0x8cc <ledStatusShow+0x2c>
				//间隔时间的设置状态
				else //if(timeSetMode==TIME_SET_WORK)
				{
					LED1_OFF();
					LED2_OFF();
				}
			}
						//点亮一次
			else if(timeSwitchTimeCounter>50)
			{
				//运作时间的设置状态
				if(timeSetMode==TIME_SET_WORK)
				{
					LED1_ON();
					LED2_OFF();
				}
				//间隔时间的设置状态
 8c4:	80 91 8a 00 	lds	r24, 0x008A
 8c8:	83 33       	cpi	r24, 0x33	; 51
 8ca:	18 f4       	brcc	.+6      	; 0x8d2 <ledStatusShow+0x32>
				else //if(timeSetMode==TIME_SET_WORK)
				{
					LED1_OFF();
					LED2_ON();
				}
			}
			//关闭
			else //if(timeSwitchTimeCounter>100)
			{
			
				//运作时间的设置状态
				if(timeSetMode==TIME_SET_WORK)
				{
					LED1_OFF();
					LED2_OFF();
				}
				//间隔时间的设置状态
				else //if(timeSetMode==TIME_SET_WORK)
				{
					LED1_OFF();
 8cc:	80 91 86 00 	lds	r24, 0x0086
 8d0:	0f c0       	rjmp	.+30     	; 0x8f0 <ledStatusShow+0x50>
					LED2_OFF();
				}
			}
		}
		//恢复原来的状态
		else
		{
			//运作时间的设置状态
			if(timeSetMode==TIME_SET_WORK)
			{
				LED1_ON();
				LED2_OFF();
			}
			//间隔时间的设置状态
			else //if(timeSetMode==TIME_SET_WORK)
			{
				LED1_OFF();
 8d2:	80 91 86 00 	lds	r24, 0x0086
 8d6:	88 23       	and	r24, r24
 8d8:	11 f4       	brne	.+4      	; 0x8de <ledStatusShow+0x3e>
				LED2_ON();
			}
 8da:	92 98       	cbi	0x12, 2	; 18
 8dc:	0a c0       	rjmp	.+20     	; 0x8f2 <ledStatusShow+0x52>
		}
	}
	//正常运行指示状态
	else //if(unitTimeCounter==0)
	{
		if(outPutMode==OUTPUT_AUTO)
 8de:	92 9a       	sbi	0x12, 2	; 18
 8e0:	05 c0       	rjmp	.+10     	; 0x8ec <ledStatusShow+0x4c>
		{
			LED1_ON();
			LED2_ON();
		}
		else //if(outPutMode==OUTPUT_HAND)
		{
			LED1_OFF();
			LED2_OFF();
 8e2:	80 91 83 00 	lds	r24, 0x0083
 8e6:	81 30       	cpi	r24, 0x01	; 1
 8e8:	19 f4       	brne	.+6      	; 0x8f0 <ledStatusShow+0x50>
		}
	}	
 8ea:	92 98       	cbi	0x12, 2	; 18

 8ec:	93 98       	cbi	0x12, 3	; 18
 8ee:	08 95       	ret
}


//=====================================================
 8f0:	92 9a       	sbi	0x12, 2	; 18
//10ms中断定时器
 8f2:	93 9a       	sbi	0x12, 3	; 18
 8f4:	08 95       	ret

000008f6 <__vector_9>:
//=====================================================
SIGNAL(SIG_OVERFLOW0)
{
	//CLI();
	TCNT0 = 0x8b; 			//reload counter value
	keyScanProgram();

	outputCounter++;
	if(outputCounter>10)
	{
		outputCounter=0;
 8f6:	1f 92       	push	r1
 8f8:	0f 92       	push	r0
 8fa:	0f b6       	in	r0, 0x3f	; 63
 8fc:	0f 92       	push	r0
 8fe:	11 24       	eor	r1, r1
 900:	2f 93       	push	r18
 902:	3f 93       	push	r19
 904:	4f 93       	push	r20
 906:	5f 93       	push	r21
 908:	6f 93       	push	r22
 90a:	7f 93       	push	r23
 90c:	8f 93       	push	r24
 90e:	9f 93       	push	r25
 910:	af 93       	push	r26
 912:	bf 93       	push	r27
 914:	ef 93       	push	r30
 916:	ff 93       	push	r31
		outputControl();
	}
 918:	8b e8       	ldi	r24, 0x8B	; 139
 91a:	82 bf       	out	0x32, r24	; 50

 91c:	0e 94 9a 00 	call	0x134	; 0x134 <keyScanProgram>
	//键盘执行程序
	keyProcessCounter++;
 920:	80 91 60 00 	lds	r24, 0x0060
 924:	8f 5f       	subi	r24, 0xFF	; 255
 926:	80 93 60 00 	sts	0x0060, r24

 92a:	80 91 60 00 	lds	r24, 0x0060
 92e:	8b 30       	cpi	r24, 0x0B	; 11
 930:	20 f0       	brcs	.+8      	; 0x93a <__vector_9+0x44>
	if(unitTimeCounter>0)unitTimeCounter--;
	if(timeSwitchTimeCounter>0)timeSwitchTimeCounter--;
 932:	10 92 60 00 	sts	0x0060, r1

 936:	0e 94 05 04 	call	0x80a	; 0x80a <outputControl>



}
 93a:	80 91 61 00 	lds	r24, 0x0061
 93e:	8f 5f       	subi	r24, 0xFF	; 255
 940:	80 93 61 00 	sts	0x0061, r24

//===========================================================//
 944:	80 91 88 00 	lds	r24, 0x0088
 948:	90 91 89 00 	lds	r25, 0x0089
 94c:	89 2b       	or	r24, r25
 94e:	49 f0       	breq	.+18     	; 0x962 <__vector_9+0x6c>
 950:	80 91 88 00 	lds	r24, 0x0088
 954:	90 91 89 00 	lds	r25, 0x0089
 958:	01 97       	sbiw	r24, 0x01	; 1
 95a:	90 93 89 00 	sts	0x0089, r25
 95e:	80 93 88 00 	sts	0x0088, r24
//===========================================================//
 962:	80 91 8a 00 	lds	r24, 0x008A
 966:	88 23       	and	r24, r24
 968:	29 f0       	breq	.+10     	; 0x974 <__vector_9+0x7e>
 96a:	80 91 8a 00 	lds	r24, 0x008A
 96e:	81 50       	subi	r24, 0x01	; 1
 970:	80 93 8a 00 	sts	0x008A, r24
 974:	ff 91       	pop	r31
 976:	ef 91       	pop	r30
 978:	bf 91       	pop	r27
 97a:	af 91       	pop	r26
 97c:	9f 91       	pop	r25
 97e:	8f 91       	pop	r24
 980:	7f 91       	pop	r23
 982:	6f 91       	pop	r22
 984:	5f 91       	pop	r21
 986:	4f 91       	pop	r20
 988:	3f 91       	pop	r19
 98a:	2f 91       	pop	r18
 98c:	0f 90       	pop	r0
 98e:	0f be       	out	0x3f, r0	; 63
 990:	0f 90       	pop	r0
 992:	1f 90       	pop	r1
 994:	18 95       	reti

00000996 <main>:
int main(void)
{
	init_devices();

	for(delay1=0;delay1<2000;delay1++)
	{
		if(delay2<3000)
		{
			delay2++;
		}
 996:	0e 94 85 00 	call	0x10a	; 0x10a <init_devices>
		else 
		{
			delay2=0;
 99a:	10 92 65 00 	sts	0x0065, r1
 99e:	10 92 64 00 	sts	0x0064, r1
 9a2:	1e c0       	rjmp	.+60     	; 0x9e0 <main+0x4a>
		}
	}
 9a4:	80 91 66 00 	lds	r24, 0x0066
 9a8:	90 91 67 00 	lds	r25, 0x0067
 9ac:	88 5b       	subi	r24, 0xB8	; 184
 9ae:	9b 40       	sbci	r25, 0x0B	; 11
 9b0:	50 f4       	brcc	.+20     	; 0x9c6 <main+0x30>


 9b2:	80 91 66 00 	lds	r24, 0x0066
 9b6:	90 91 67 00 	lds	r25, 0x0067
 9ba:	01 96       	adiw	r24, 0x01	; 1
 9bc:	90 93 67 00 	sts	0x0067, r25
 9c0:	80 93 66 00 	sts	0x0066, r24
 9c4:	04 c0       	rjmp	.+8      	; 0x9ce <main+0x38>
	set_interrupt(); //re-enable interrupts

	outPutEnable=0;
	outputWorkTimeSetting=90;
 9c6:	10 92 67 00 	sts	0x0067, r1
 9ca:	10 92 66 00 	sts	0x0066, r1
 9ce:	80 91 64 00 	lds	r24, 0x0064
 9d2:	90 91 65 00 	lds	r25, 0x0065
 9d6:	01 96       	adiw	r24, 0x01	; 1
 9d8:	90 93 65 00 	sts	0x0065, r25
 9dc:	80 93 64 00 	sts	0x0064, r24
 9e0:	80 91 64 00 	lds	r24, 0x0064
 9e4:	90 91 65 00 	lds	r25, 0x0065
 9e8:	80 5d       	subi	r24, 0xD0	; 208
 9ea:	97 40       	sbci	r25, 0x07	; 7
 9ec:	d8 f2       	brcs	.-74     	; 0x9a4 <main+0xe>
	outputStopTimeSetting=30;
		
	readEEPROM(dataSaveBuffer,1);
	//读出工作时间设置
	//taSaveTemp=0;
 9ee:	78 94       	sei
	unionData.charData[0]=dataSaveBuffer[WORK_TIME_HIGH];
	unionData.charData[1]=dataSaveBuffer[WORK_TIME_LOW];
 9f0:	10 92 82 00 	sts	0x0082, r1
	outputWorkTimeSetting=unionData.intData;
 9f4:	8a e5       	ldi	r24, 0x5A	; 90
 9f6:	90 e0       	ldi	r25, 0x00	; 0
 9f8:	90 93 7d 00 	sts	0x007D, r25
 9fc:	80 93 7c 00 	sts	0x007C, r24
	
 a00:	8e e1       	ldi	r24, 0x1E	; 30
 a02:	90 e0       	ldi	r25, 0x00	; 0
 a04:	90 93 81 00 	sts	0x0081, r25
 a08:	80 93 80 00 	sts	0x0080, r24
	//读出间隔时间设置
	unionData.charData[0]=dataSaveBuffer[STOP_TIME_HIGH];
 a0c:	61 e0       	ldi	r22, 0x01	; 1
 a0e:	8b e8       	ldi	r24, 0x8B	; 139
 a10:	90 e0       	ldi	r25, 0x00	; 0
 a12:	0e 94 68 00 	call	0xd0	; 0xd0 <readEEPROM>
	unionData.charData[1]=dataSaveBuffer[STOP_TIME_LOW];
	outputStopTimeSetting=unionData.intData;
	
 a16:	80 91 8b 00 	lds	r24, 0x008B
 a1a:	80 93 97 00 	sts	0x0097, r24
	
 a1e:	80 91 8c 00 	lds	r24, 0x008C
 a22:	80 93 98 00 	sts	0x0098, r24
	while(1)
 a26:	80 91 97 00 	lds	r24, 0x0097
 a2a:	90 91 98 00 	lds	r25, 0x0098
 a2e:	90 93 7d 00 	sts	0x007D, r25
 a32:	80 93 7c 00 	sts	0x007C, r24
	{
		//处理键盘程序,
		//周期是100ms
 a36:	80 91 8d 00 	lds	r24, 0x008D
 a3a:	80 93 97 00 	sts	0x0097, r24
		if(keyProcessCounter>10)
 a3e:	80 91 8e 00 	lds	r24, 0x008E
 a42:	80 93 98 00 	sts	0x0098, r24
		{
 a46:	80 91 97 00 	lds	r24, 0x0097
 a4a:	90 91 98 00 	lds	r25, 0x0098
 a4e:	90 93 81 00 	sts	0x0081, r25
 a52:	80 93 80 00 	sts	0x0080, r24
			keyProcessCounter=0;
			keyProcess();
		}

		ledStatusShow();		
	}

 a56:	80 91 61 00 	lds	r24, 0x0061
 a5a:	8b 30       	cpi	r24, 0x0B	; 11
 a5c:	20 f0       	brcs	.+8      	; 0xa66 <main+0xd0>

return 0;
 a5e:	10 92 61 00 	sts	0x0061, r1
}
 a62:	0e 94 c2 01 	call	0x384	; 0x384 <keyProcess>
 a66:	0e 94 50 04 	call	0x8a0	; 0x8a0 <ledStatusShow>
 a6a:	f5 cf       	rjmp	.-22     	; 0xa56 <main+0xc0>

00000a6c <_exit>:
 a6c:	ff cf       	rjmp	.-2      	; 0xa6c <_exit>

⌨️ 快捷键说明

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