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

📄 8.lst

📁 mega8 对电机控制。采用mega8对电机控制。然后再用mega16 来控制mega8
💻 LST
📖 第 1 页 / 共 5 页
字号:
    03E9 D0F1      RCALL	_risemotor
(0100)   									 delay_ms(1200);
    03EA EB00      LDI	R16,0xB0
    03EB E014      LDI	R17,4
    03EC D17B      RCALL	_delay_ms
(0101)   									 risemotor('s');
    03ED E703      LDI	R16,0x73
    03EE E010      LDI	R17,0
    03EF D0EB      RCALL	_risemotor
(0102) 								  
(0103) 								  }break;			
    03F0 C0E6      RJMP	0x04D7
(0104) 					case PUSH2GO:
(0105) 						 		  {
(0106) 								     pushmotor2('g');   //推块电机下
    03F1 E607      LDI	R16,0x67
    03F2 E010      LDI	R17,0
    03F3 D107      RCALL	_pushmotor2
(0107)   									 delay_ms(2000);
    03F4 ED00      LDI	R16,0xD0
    03F5 E017      LDI	R17,7
    03F6 D171      RCALL	_delay_ms
(0108)   									 pushmotor2('s');
    03F7 E703      LDI	R16,0x73
    03F8 E010      LDI	R17,0
    03F9 D101      RCALL	_pushmotor2
(0109) 								  }break;	      						     
    03FA C0DC      RJMP	0x04D7
(0110) 					case PUSH2BACK:
(0111) 						 		  {
(0112) 								     pushmotor2('b');   //推块电机下
    03FB E602      LDI	R16,0x62
    03FC E010      LDI	R17,0
    03FD D0FD      RCALL	_pushmotor2
(0113)   									 delay_ms(2000);
    03FE ED00      LDI	R16,0xD0
    03FF E017      LDI	R17,7
    0400 D167      RCALL	_delay_ms
(0114)   									 pushmotor2('s');
    0401 E703      LDI	R16,0x73
    0402 E010      LDI	R17,0
    0403 D0F7      RCALL	_pushmotor2
(0115) 								  }break;					 	
    0404 C0D2      RJMP	0x04D7
(0116) 					case PUSH1GO:
(0117) 						 		 {
(0118) 								     pushmotor1('g');   //推块电机上
    0405 E607      LDI	R16,0x67
    0406 E010      LDI	R17,0
    0407 D113      RCALL	_pushmotor1
(0119)   									 delay_ms(1500);
    0408 ED0C      LDI	R16,0xDC
    0409 E015      LDI	R17,5
    040A D15D      RCALL	_delay_ms
(0120)   									 pushmotor1('s');
    040B E703      LDI	R16,0x73
    040C E010      LDI	R17,0
    040D D10D      RCALL	_pushmotor1
(0121) 								  
(0122) 								  }break;		 
    040E C0C8      RJMP	0x04D7
(0123) 					
(0124) 					
(0125) 					case PID_RESET :	 // 系统复位(RESET) 
(0126)                                 					{
(0127)                                 					 	L_PIDInit ();
    040F DC33      RCALL	_L_PIDInit
(0128)                                 						TCNT0 = 0;
    0410 2422      CLR	R2
    0411 BE22      OUT	0x32,R2
(0129)                                 						num_H = 0;
(0130)                                 						Num_Speed = 0;
    0412 92200060  STS	0x60,R2
    0414 2433      CLR	R3
    0415 92300062  STS	0x62,R3
    0417 92200061  STS	0x61,R2
(0131) 														//write7279(DECODE1+0,5);
(0132)                                 					}break;
    0419 C0BD      RJMP	0x04D7
(0133) 					case FREE_STOP:
(0134)                                 					{
(0135)                                     					TCCR2 = 0x00; //start计数器2不工作
    041A 2422      CLR	R2
    041B BC25      OUT	0x25,R2
(0136)                                     					PID_choice = 0xff;
(0137) 														//write7279(DECODE1+7,1);
(0138)                                     					free_stop ( );	
    041C EF8F      LDI	R24,0xFF
    041D 93800063  STS	0x63,R24
    041F D2C0      RCALL	_free_stop
(0139)                                     				}break;	
    0420 C0B6      RJMP	0x04D7
(0140) 					case SPEED_SET :
(0141)                                 					{
(0142)                                     					temp_int = rev_buf[1];
(0143)                                     					temp_int <<= 8;
(0144)                                     					temp_int += rev_buf[2];                       								
(0145)                                     					L_sPID.vi_Ref = temp_int; 
(0146) 														//dis_data(0, 7,L_sPID.vi_Ref);
(0147)                                     					PID_choice = SPEED_SET;				
(0148)                                     					TCCR2 = 0x07; //start选择分频源1024
    0421 90A00068  LDS	R10,0x68
    0423 24BB      CLR	R11
    0424 2CBA      MOV	R11,R10
    0425 24AA      CLR	R10
    0426 90200069  LDS	R2,0x69
    0428 2433      CLR	R3
    0429 0CA2      ADD	R10,R2
    042A 1CB3      ADC	R11,R3
    042B 92B00080  STS	_L_sPID+1,R11
    042D 92A0007F  STS	_L_sPID,R10
    042F E880      LDI	R24,0x80
    0430 93800063  STS	0x63,R24
    0432 E087      LDI	R24,7
    0433 BD85      OUT	0x25,R24
(0149)                                 					}break;
    0434 C0A2      RJMP	0x04D7
(0150) 					case DISTANCE_SET :
(0151)                                 					{														
(0152)                                     					temp_long = rev_buf[1];
(0153)                                                         temp_long <<= 8;
(0154) 														
(0155)                                                     	temp_long +=  rev_buf[2];
(0156)                                                     	temp_long <<= 8;
(0157) 														
(0158)                                                     	temp_long += rev_buf[3];
(0159)                                                     	temp_long <<= 8;
(0160) 														
(0161)                                                     	temp_long += rev_buf[4];
(0162) 
(0163)                                     					L_sPID.si_Ref = temp_long;
    0435 90200068  LDS	R2,0x68
    0437 2433      CLR	R3
    0438 2444      CLR	R4
    0439 2455      CLR	R5
    043A 01FE      MOVW	R30,R28
    043B 8220      STD	Z+0,R2
    043C 8231      STD	Z+1,R3
    043D 8242      STD	Z+2,R4
    043E 8253      STD	Z+3,R5
    043F E088      LDI	R24,0x8
    0440 E090      LDI	R25,0
    0441 01FE      MOVW	R30,R28
    0442 8020      LDD	R2,Z+0
    0443 8031      LDD	R3,Z+1
    0444 8042      LDD	R4,Z+2
    0445 8053      LDD	R5,Z+3
    0446 938A      ST	R24,-Y
    0447 0181      MOVW	R16,R2
    0448 0192      MOVW	R18,R4
    0449 D376      RCALL	lsl32
    044A 01FE      MOVW	R30,R28
    044B 8300      STD	Z+0,R16
    044C 8311      STD	Z+1,R17
    044D 8322      STD	Z+2,R18
    044E 8333      STD	Z+3,R19
    044F 90200069  LDS	R2,0x69
    0451 2433      CLR	R3
    0452 2444      CLR	R4
    0453 2455      CLR	R5
    0454 01FE      MOVW	R30,R28
    0455 8060      LDD	R6,Z+0
    0456 8071      LDD	R7,Z+1
    0457 8082      LDD	R8,Z+2
    0458 8093      LDD	R9,Z+3
    0459 0C62      ADD	R6,R2
    045A 1C73      ADC	R7,R3
    045B 1C84      ADC	R8,R4
    045C 1C95      ADC	R9,R5
    045D 01FE      MOVW	R30,R28
    045E 8260      STD	Z+0,R6
    045F 8271      STD	Z+1,R7
    0460 8282      STD	Z+2,R8
    0461 8293      STD	Z+3,R9
    0462 E088      LDI	R24,0x8
    0463 E090      LDI	R25,0
    0464 01FE      MOVW	R30,R28
    0465 8020      LDD	R2,Z+0
    0466 8031      LDD	R3,Z+1
    0467 8042      LDD	R4,Z+2
    0468 8053      LDD	R5,Z+3
    0469 938A      ST	R24,-Y
    046A 0181      MOVW	R16,R2
    046B 0192      MOVW	R18,R4
    046C D353      RCALL	lsl32
    046D 01FE      MOVW	R30,R28
    046E 8300      STD	Z+0,R16
    046F 8311      STD	Z+1,R17
    0470 8322      STD	Z+2,R18
    0471 8333      STD	Z+3,R19
    0472 9020006A  LDS	R2,0x6A
    0474 2433      CLR	R3
    0475 2444      CLR	R4
    0476 2455      CLR	R5
    0477 01FE      MOVW	R30,R28
    0478 8060      LDD	R6,Z+0
    0479 8071      LDD	R7,Z+1
    047A 8082      LDD	R8,Z+2
    047B 8093      LDD	R9,Z+3
    047C 0C62      ADD	R6,R2
    047D 1C73      ADC	R7,R3
    047E 1C84      ADC	R8,R4
    047F 1C95      ADC	R9,R5
    0480 01FE      MOVW	R30,R28
    0481 8260      STD	Z+0,R6
    0482 8271      STD	Z+1,R7
    0483 8282      STD	Z+2,R8
    0484 8293      STD	Z+3,R9
    0485 E088      LDI	R24,0x8
    0486 E090      LDI	R25,0
    0487 01FE      MOVW	R30,R28
    0488 8020      LDD	R2,Z+0
    0489 8031      LDD	R3,Z+1
    048A 8042      LDD	R4,Z+2
    048B 8053      LDD	R5,Z+3
    048C 938A      ST	R24,-Y
    048D 0181      MOVW	R16,R2
    048E 0192      MOVW	R18,R4
    048F D330      RCALL	lsl32
    0490 01FE      MOVW	R30,R28
    0491 8300      STD	Z+0,R16
    0492 8311      STD	Z+1,R17
    0493 8322      STD	Z+2,R18
    0494 8333      STD	Z+3,R19
    0495 9020006B  LDS	R2,0x6B
    0497 2433      CLR	R3
    0498 2444      CLR	R4
    0499 2455      CLR	R5
    049A 01FE      MOVW	R30,R28
    049B 8060      LDD	R6,Z+0
    049C 8071      LDD	R7,Z+1
    049D 8082      LDD	R8,Z+2
    049E 8093      LDD	R9,Z+3
    049F 0C62      ADD	R6,R2
    04A0 1C73      ADC	R7,R3
    04A1 1C84      ADC	R8,R4
    04A2 1C95      ADC	R9,R5
    04A3 01FE      MOVW	R30,R28
    04A4 8260      STD	Z+0,R6
    04A5 8271      STD	Z+1,R7
    04A6 8282      STD	Z+2,R8
    04A7 8293      STD	Z+3,R9
    04A8 01FE      MOVW	R30,R28
    04A9 8020      LDD	R2,Z+0
    04AA 8031      LDD	R3,Z+1
    04AB 8042      LDD	R4,Z+2
    04AC 8053      LDD	R5,Z+3
    04AD 92300084  STS	0x84,R3
    04AF 92200083  STS	0x83,R2
    04B1 92500086  STS	0x86,R5
    04B3 92400085  STS	0x85,R4
(0164)                                     					
(0165) 														//dis_data(0, 7, temp_long);
(0166) 		
(0167)                                                 		//dis_data(0, 7,L_sPID.si_Ref);
(0168) 														
(0169)                                     					PID_choice = DISTANCE_SET;
(0170)                                     					
(0171)                                     					TCCR2 = 0x07; //start选择分频源1024
    04B5 E980      LDI	R24,0x90
    04B6 93800063  STS	0x63,R24
    04B8 E087      LDI	R24,7
    04B9 BD85      OUT	0x25,R24
(0172)                                     				}break;		
(0173) 					default:break;
(0174)     						
(0175) 				}//end switch
(0176) 				
(0177) 			}//end if
(0178) 		}
    04BA C01C      RJMP	0x04D7
(0179) 		else				//从机发送数据
(0180) 		{
(0181) 			if (i < data_long)
    04BB 9020007E  LDS	R2,0x7E
    04BD 9030007B  LDS	R3,0x7B
    04BF 1432      CP	R3,R2
    04C0 F468      BCC	0x04CE
(0182) 			{
(0183) 				SPDR = send_buf[i];
    04C1 E781      LDI	R24,0x71
    04C2 E090      LDI	R25,0
    04C3 2DE3      MOV	R30,R3
    04C4 27FF      CLR	R31
    04C5 0FE8      ADD	R30,R24
    04C6 1FF9      ADC	R31,R25
    04C7 8020      LDD	R2,Z+0
    04C8 B82F      OUT	0x0F,R2
(0184) 				i++;
    04C9 2D83      MOV	R24,R3
    04CA 5F8F      SUBI	R24,0xFF
    04CB 9380007B  STS	0x7B,R24
(0185) 			}
    04CD C009      RJMP	0x04D7
(0186) 			else 
(0187) 			{
(0188) 				i = 0;
(0189) 				start_trans_flag = 0;
(0190) 				data_long = 0;
(0191) 				com_flag = 0x00;
    04CE 2422      CLR	R2
    04CF 9220007B  STS	0x7B,R2
    04D1 9220007C  STS	0x7C,R2
    04D3 9220007E  STS	0x7E,R2
    04D5 9220007D  STS	0x7D,R2
(0192) 				
(0193) 				/*send_buf[0] = 8;
(0194) 				send_buf[1] = 7;
(0195) 				send_buf[2] = 6;
(0196) 				send_buf[3] = 5;
(0197) 				send_buf[4] = 4;
(0198) 				send_buf[5] = 3;
(0199) 				send_buf[6] = 2;
(0200) 				send_buf[7] = 1;*/
(0201) 			}//end if 		
(0202) 				
(0203) 		}
(0204) 		
(0205) 	}
(0206) 	
(0207) }
    04D7 9624      ADIW	R28,4
    04D8 D272      RCALL	pop_gset4
    04D9 D2CF      RCALL	pop_lset
    04DA 9518      RETI
_risemotor:
  m                    --> R16
    04DB D271      RCALL	push_gset1
(0208) 
(0209)  void risemotor(unsigned char m)
(0210) {
(0211)       switch(m)
    04DC 2F40      MOV	R20,R16
    04DD 2755      CLR	R21
    04DE 3647      CPI	R20,0x67
    04DF E0E0      LDI	R30,0
    04E0 075E      CPC	R21,R30
    04E1 F079      BEQ	0x04F1
    04E2 E687      LDI	R24,0x67
    04E3 E090      LDI	R25,0
    04E4 1784      CP	R24,R20
    04E5 0795      CPC	R25,R21
    04E6 F02C      BLT	0x04EC
    04E7 3642      CPI	R20,0x62
    04E8 E0E0      LDI	R30,0
    04E9 075E      CPC	R21,R30
    04EA F049      BEQ	0x04F4
    04EB C00D      RJMP	0x04F9
    04EC 3743      CPI	R20,0x73
    04ED E0E0      LDI	R30,0
    04EE 075E      CPC	R21,R30
    04EF F039      BEQ	0x04F7
    04F0 C008      RJMP	0x04F9
(0212)    {case 'g':PORTD&=~0x40;PORTD|=0x80;break;
    04F1 9896      CBI	0x12,6
    04F2 9A97      SBI	0x12,7
    04F3 C005      RJMP	0x04F9
(0213)     case 'b':PORTD|=0x40;PORTD|=0x80;break;
    04F4 9A96      SBI	0x12,6
    04F5 9A97      SBI	0x12,7
    04F6 C002      RJMP	0x04F9
(0214)     case 's': PORTD&=~0x40;PORTD&=~0x80;break;
    04F7 9896      CBI	0x12,6
    04F8 9897      CBI	0x12,7
(0215)     default:break;
(0216)    }  
(0217)  }
    04F9 D256      RCALL	pop_gset1
    04FA 9508      RET
_pushmotor2:
  m                    --> R16
    04FB D251      RCALL	push_gset1
(0218) 
(0219) void pushmotor2(unsigned char m)
(0220) {
(0221)     switch(m)
    04FC 2F40      MOV	R20,R16
    04FD 2755      CLR	R21
    04FE 3647      CPI	R20,0x67
    04FF E0E0      LDI	R30,0
    0500 075E      CPC	R21,R30
    0501 F079      BEQ	0x0511
    0502 E687      LDI	R24,0x67
    0503 E090      LDI	R25,0
    0504 1784      CP	R24,R20
    0505 0795      CPC	R25,R21
    0506 F02C      BLT	0x050C
    0507 3642      CPI	R20,0x62
    0508 E0E0      LDI	R30,0
    0509 075E      CPC	R21,R30
    050A F049      BEQ	0x0514
    050B C00D      RJMP	0x0519
    050C 3743      CPI	R20,0x73
    050D E0E0      LDI	R30,0
    050E 075E      CPC	R21,R30
    050F F039      BEQ	0x0517

⌨️ 快捷键说明

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