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

📄 m64.lst

📁 数字舵机(1) 数字脉宽检测 数字脉宽检测
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0309)  OCR1BL = 0x20;
(0310)  OCR1CH = 0x4E;
(0311)  OCR1CL = 0x20;
(0312)  ICR1H  = 0x4E;
(0313)  ICR1L  = 0x20;
(0314)  TCCR1A = 0x01;
(0315)  TCCR1B = 0x12; //start Timer
(0316) }*/
(0317) //TIMER1 initialize - prescale:64
(0318) // WGM: 7) PWM 10bit fast, TOP=0x03FF
(0319) // desired value: 40mSec
(0320) // actual value:  8.192mSec (79.5%)
(0321) void timer1_init(void)
(0322) {
(0323)  TCCR1B = 0x00; //stop
_timer1_init:
     4E9 2422      CLR	R2
     4EA BC2E      OUT	0x2E,R2
(0324)  TCNT1H = 0xFC; //setup
     4EB EF8C      LDI	R24,0xFC
     4EC BD8D      OUT	0x2D,R24
(0325)  TCNT1L = 0x01;
     4ED E081      LDI	R24,1
     4EE BD8C      OUT	0x2C,R24
(0326)  OCR1AH = 0x03;
     4EF E083      LDI	R24,3
     4F0 BD8B      OUT	0x2B,R24
(0327)  OCR1AL = 0xFF;
     4F1 EF8F      LDI	R24,0xFF
     4F2 BD8A      OUT	0x2A,R24
(0328)  OCR1BH = 0x03;
     4F3 E083      LDI	R24,3
     4F4 BD89      OUT	0x29,R24
(0329)  OCR1BL = 0xFF;
     4F5 EF8F      LDI	R24,0xFF
     4F6 BD88      OUT	0x28,R24
(0330)  OCR1CH = 0x03;
     4F7 E083      LDI	R24,3
     4F8 9380 0079 STS	0x0079,R24
(0331)  OCR1CL = 0xFF;
     4FA EF8F      LDI	R24,0xFF
     4FB 9380 0078 STS	0x0078,R24
(0332)  ICR1H  = 0x03;
     4FD E083      LDI	R24,3
     4FE BD87      OUT	0x27,R24
(0333)  ICR1L  = 0xFF;
     4FF EF8F      LDI	R24,0xFF
     500 BD86      OUT	0x26,R24
(0334)  TCCR1A = 0x33;
     501 E383      LDI	R24,0x33
     502 BD8F      OUT	0x2F,R24
(0335)  TCCR1B = 0x0B; //start Timer
     503 E08B      LDI	R24,0xB
     504 BD8E      OUT	0x2E,R24
     505 9508      RET
_main:
  n                    --> Y,+2
  n_juli               --> R10
  n_jiaodu             --> R10
  n_sec                --> R10
  pwm_duoji            --> R10
     506 9721      SBIW	R28,1
(0336) }
(0337) 
(0338) 
(0339) #define PWM_ON    DDRB|=   R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1;
(0340) #define PWM_OFF   DDRB&= ~(R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1);
(0341) main()
(0342) {int n;
(0343) unsigned char n_jiaodu=0,n_juli=0;
(0344) unsigned char n_sec=0;
(0345) unsigned int pwm_duoji=0;
(0346) init_devices();
     507 DCAB      RCALL	_init_devices
(0347) timer1_init();timer0_init();
     508 DFE0      RCALL	_timer1_init
     509 DFD5      RCALL	_timer0_init
(0348)  //OCR1AH = 0x00;
(0349) /* OCR1AL = 64;
(0350)  //OCR1BH = 0x00;
(0351)  OCR1BL = 64;
(0352)  //OCR1CH = 0x00;
(0353)  OCR1CL = 64;
(0354)  OCR0=64;*/
(0355) 
(0356)  
(0357) //while(1);
(0358) DDRE|=0x38;//while(1);
     50A B182      IN	R24,0x02
     50B 6388      ORI	R24,0x38
     50C B982      OUT	0x02,R24
(0359) /////////LCD
(0360) 	/* DDRB = 0xBF;    //SI输入,SO,SCK,SS输出
(0361) 	 SPCR = 0x50;  //setup SPI
(0362) 	 SPSR = 0x01;  //setup SPI*/
(0363) /*while(!(UCSR0A&(1<<UDRE0)));
(0364) UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
(0365) UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
(0366) UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
(0367) UDR0='a';*/
(0368) delay_ms(3000);
     50D EB08      LDI	R16,0xB8
     50E E01B      LDI	R17,0xB
     50F 940E 06EA CALL	_delay_ms
(0369) number_uart1(1010,1);
     511 E081      LDI	R24,1
     512 8388      STD	Y+0,R24
     513 EF02      LDI	R16,0xF2
     514 E013      LDI	R17,3
     515 E020      LDI	R18,0
     516 E030      LDI	R19,0
     517 DEB0      RCALL	_number_uart1
(0370) 			number_uart1(xx,0);
     518 2422      CLR	R2
     519 8228      STD	Y+0,R2
     51A 9120 0108 LDS	R18,xx+2
     51C 9130 0109 LDS	R19,xx+3
     51E 9100 0106 LDS	R16,xx
     520 9110 0107 LDS	R17,xx+1
     522 DEA5      RCALL	_number_uart1
(0371) 			number_uart1(ADCjohu,1);
     523 E081      LDI	R24,1
     524 8388      STD	Y+0,R24
     525 9120 0102 LDS	R18,ADCjohu+2
     527 9130 0103 LDS	R19,ADCjohu+3
     529 9100 0100 LDS	R16,ADCjohu
     52B 9110 0101 LDS	R17,ADCjohu+1
     52D DE9A      RCALL	_number_uart1
(0372) delay_ms(3000);	
     52E EB08      LDI	R16,0xB8
     52F E01B      LDI	R17,0xB
     530 940E 06EA CALL	_delay_ms
(0373) xx=0;
     532 E040      LDI	R20,0
     533 E050      LDI	R21,0
     534 E060      LDI	R22,0
     535 E070      LDI	R23,0
     536 9350 0107 STS	xx+1,R21
     538 9340 0106 STS	xx,R20
     53A 9370 0109 STS	xx+3,R23
     53C 9360 0108 STS	xx+2,R22
(0374) //LCD_Init();
(0375) //LCD_clear();
(0376) 
(0377) DDRE &= ~0x7c;//if (!(PORTE & STOP))  if (!(PORTE & VOLDOWN))  if (!(PORTE & VOLUP))  if (!(PORTE & NEXTSONG))  if (!(PORTE & PREVSONG))
     53E B182      IN	R24,0x02
     53F 7883      ANDI	R24,0x83
     540 B982      OUT	0x02,R24
(0378) PORTE |=0x7c;
     541 B183      IN	R24,0x03
     542 678C      ORI	R24,0x7C
     543 B983      OUT	0x03,R24
(0379) 
(0380) PORTD=0x01;
     544 E081      LDI	R24,1
     545 BB82      OUT	0x12,R24
(0381) //number(0,0,4,-999,1);
(0382) 	     /* OCR1AL = pwm_pingjun;
(0383)  		  OCR1BL = pwm_pingjun;
(0384)  		  OCR1CL = pwm_pingjun;
(0385)  		  OCR0=pwm_pingjun;*/
(0386) OCR1BH = 0;
     546 2422      CLR	R2
     547 BC29      OUT	0x29,R2
(0387) OCR1BL = 0;
     548 BC28      OUT	0x28,R2
(0388) pwm_duoji=177;
     549 EB81      LDI	R24,0xB1
     54A E090      LDI	R25,0
     54B 015C      MOVW	R10,R24
     54C C033      RJMP	0x0580
(0389) while(1)
(0390) {
(0391) 		if (!(PINE & NEXTSONG))
     54D 990B      SBIC	0x01,3
     54E C017      RJMP	0x0566
(0392) 	     {delay_ms(500);
     54F EF04      LDI	R16,0xF4
     550 E011      LDI	R17,1
     551 940E 06EA CALL	_delay_ms
(0393) 		  if (!(PINE & NEXTSONG))
     553 990B      SBIC	0x01,3
     554 C011      RJMP	0x0566
(0394) 		  {
(0395) 			 //CLI();
(0396) 		     if(pwm_duoji<900) pwm_duoji++;//2.5ms
     555 01C5      MOVW	R24,R10
     556 3884      CPI	R24,0x84
     557 E0E3      LDI	R30,3
     558 079E      CPC	R25,R30
     559 F410      BCC	0x055C
     55A 9601      ADIW	R24,1
     55B 015C      MOVW	R10,R24
(0397)  			 OCR1BH = (pwm_duoji>>8)&0x07;
     55C 01C5      MOVW	R24,R10
     55D 2F89      MOV	R24,R25
     55E 2799      CLR	R25
     55F 7087      ANDI	R24,7
     560 7090      ANDI	R25,0
     561 BD89      OUT	0x29,R24
(0398)  			 OCR1BL = pwm_duoji; 
     562 BCA8      OUT	0x28,R10
(0399) 			 /*OCR1BH = 0x03;
(0400)  			 OCR1BL = 0xF0;
(0401)  			 OCR1CH = 0x03;
(0402)  			 OCR1CL = 0xF0;
(0403) 			 */
(0404) 			PWM_ON
     563 B387      IN	R24,0x17
     564 6F80      ORI	R24,0xF0
     565 BB87      OUT	0x17,R24
(0405) 			//SEI();
(0406) 		  }
(0407) 		}
(0408) 		if (!(PINE & PREVSONG))
     566 990A      SBIC	0x01,2
     567 C018      RJMP	0x0580
(0409) 	     {delay_ms(500);
     568 EF04      LDI	R16,0xF4
     569 E011      LDI	R17,1
     56A 940E 06EA CALL	_delay_ms
(0410) 		  if (!(PINE & PREVSONG))
     56C 990A      SBIC	0x01,2
     56D C012      RJMP	0x0580
(0411) 		  {
(0412) 			 //CLI();
(0413) 		     if(pwm_duoji>200) pwm_duoji--;//0.5ms
     56E EC88      LDI	R24,0xC8
     56F E090      LDI	R25,0
     570 158A      CP	R24,R10
     571 059B      CPC	R25,R11
     572 F418      BCC	0x0576
     573 01C5      MOVW	R24,R10
     574 9701      SBIW	R24,1
     575 015C      MOVW	R10,R24
(0414)  			 OCR1BH = (pwm_duoji>>8)&0x07;
     576 01C5      MOVW	R24,R10
     577 2F89      MOV	R24,R25
     578 2799      CLR	R25
     579 7087      ANDI	R24,7
     57A 7090      ANDI	R25,0
     57B BD89      OUT	0x29,R24
(0415)  			 OCR1BL = pwm_duoji; 
     57C BCA8      OUT	0x28,R10
(0416) 			 /*OCR1BH = 0x03;
(0417)  			 OCR1BL = 0xF0;
(0418)  			 OCR1CH = 0x03;
(0419)  			 OCR1CL = 0xF0;
(0420) 			 */
(0421) 			PWM_ON
     57D B387      IN	R24,0x17
     57E 6F80      ORI	R24,0xF0
     57F BB87      OUT	0x17,R24
     580 CFCC      RJMP	0x054D
(0422) 			//SEI();
(0423) 		  }
(0424) 		}
(0425) 
(0426) }
(0427)   while(1)
(0428)   { //(unsigned char)jiaodu;
(0429)   	PORTF=juli;
     581 9020 0121 LDS	R2,juli
     583 9030 0122 LDS	R3,juli+1
     585 9220 0062 STS	0x0062,R2
(0430)   	if (!(PINE & STOP))jiaodu=100;//PWM_ON//PORTD=~PORTD;
     587 990E      SBIC	0x01,6
     588 C00C      RJMP	0x0595
     589 E644      LDI	R20,0x64
     58A E050      LDI	R21,0
     58B E060      LDI	R22,0
     58C E070      LDI	R23,0
     58D 9350 011E STS	jiaodu+1,R21
     58F 9340 011D STS	jiaodu,R20
     591 9370 0120 STS	jiaodu+3,R23
     593 9360 011F STS	jiaodu+2,R22
(0431)     if (ms==1)
     595 9180 0104 LDS	R24,ms
     597 9190 0105 LDS	R25,ms+1
     599 3081      CPI	R24,1
     59A E0A0      LDI	R26,0
     59B 079A      CPC	R25,R26
     59C F009      BEQ	0x059E
     59D C137      RJMP	0x06D5
(0432)    	   { //if (jiaodu!=n_jiaodu)//test
(0433) 	   	 if (jiaodu!=0)
     59E 9040 011F LDS	R4,jiaodu+2
     5A0 9050 0120 LDS	R5,jiaodu+3
     5A2 9020 011D LDS	R2,jiaodu
     5A4 9030 011E LDS	R3,jiaodu+1
     5A6 9488      BCLR	0
     5A7 2022      TST	R2
     5A8 0432      CPC	R3,R2
     5A9 0442      CPC	R4,R2
     5AA 0452      CPC	R5,R2
     5AB F409      BNE	0x05AD
     5AC C060      RJMP	0x060D
(0434) 	      {//PORTF=jiaodu;
(0435) 		    //if (jiaodu<0-20)//test  旋转
(0436) 			if (ADCjohu<jiaodu-20)
     5AD E144      LDI	R20,0x14
     5AE E050      LDI	R21,0
     5AF E060      LDI	R22,0
     5B0 E070      LDI	R23,0
     5B1 1A24      SUB	R2,R20
     5B2 0A35      SBC	R3,R21
     5B3 0A46      SBC	R4,R22
     5B4 0A57      SBC	R5,R23
     5B5 9080 0102 LDS	R8,ADCjohu+2
     5B7 9090 0103 LDS	R9,ADCjohu+3
     5B9 9060 0100 LDS	R6,ADCjohu
     5BB 9070 0101 LDS	R7,ADCjohu+1
     5BD 1462      CP	R6,R2
     5BE 0473      CPC	R7,R3
     5BF 0484      CPC	R8,R4
     5C0 0495      CPC	R9,R5
     5C1 F4AC      BGE	0x05D7
(0437) 	   	 	 {DDRB |=(R_pwm1 | L_pwm0);
     5C2 B387      IN	R24,0x17
     5C3 6680      ORI	R24,0x60
     5C4 BB87      OUT	0x17,R24
(0438) 			  DDRB &=~(R_pwm1 | L_pwm0);
     5C5 B387      IN	R24,0x17
     5C6 798F      ANDI	R24,0x9F
     5C7 BB87      OUT	0x17,R24
(0439) 			  PORTB &=~(R_pwm0 |R_pwm1| L_pwm1 | L_pwm0);
     5C8 B388      IN	R24,0x18
     5C9 708F      ANDI	R24,0xF
     5CA BB88      OUT	0x18,R24
(0440) 			  OCR1AL = pwm_pingjun;
     5CB 9020 0111 LDS	R2,pwm_pingjun
     5CD BC2A      OUT	0x2A,R2
(0441)  		  	  OCR1BL = pwm_pingjun;
     5CE BC28      OUT	0x28,R2
(0442)  		  	  OCR1CL = 0;
     5CF 2422      CLR	R2
     5D0 9220 0078 STS	0x0078,R2
(0443)  		  	  OCR0=0;
     5D2 BE21      OUT	0x31,R2
(0444) 			  PWM_ON
     5D3 B387      IN	R24,0x17
     5D4 6F80      ORI	R24,0xF0
     5D5 BB87      OUT	0x17,R24
(0445) 			 }
     5D6 C034      RJMP	0x060B
(0446) 		    //else if (jiaodu>0+20)//test
(0447) 			else if (ADCjohu>jiaodu+20)
     5D7 E144      LDI	R20,0x14
     5D8 E050      LDI	R21,0
     5D9 E060      LDI	R22,0
     5DA E070      LDI	R23,0
     5DB 9040 011F LDS	R4,jiaodu+2
     5DD 9050 0120 LDS	R5,jiaodu+3
     5DF 9020 011D LDS	R2,jiaodu
     5E1 9030 011E LDS	R3,jiaodu+1
     5E3 0E24      ADD	R2,R20
     5E4 1E35      ADC	R3,R21
     5E5 1E46      ADC	R4,R22
     5E6 1E57      ADC	R5,R23
     5E7 9080 0102 LDS	R8,ADCjohu+2
     5E9 9090 0103 LDS	R9,ADCjohu+3
     5EB 9060 0100 LDS	R6,ADCjohu
     5ED 9070 0101 LDS	R7,ADCjohu+1
     5EF 1426      CP	R2,R6
     5F0 0437      CPC	R3,R7
     5F1 0448      CPC	R4,R8
     5F2 0459      CPC	R5,R9
     5F3 F4A4      BGE	0x0608
(0448) 	   	 	 {DDRB |=(R_pwm0 | L_pwm1);
     5F4 B387      IN	R24,0x17
     5F5 6980      ORI	R24,0x90
     5F6 BB87      OUT	0x17,R24
(0449) 			  DDRB &=~(R_pwm0 | L_pwm1);
     5F7 B387      IN	R24,0x17
     5F8 768F      ANDI	R24,0x6F
     5F9 BB87      OUT	0x17,R24
(0450) 			  PORTB =0xf0;
     5FA EF80      LDI	R24,0xF0
     5FB BB88      OUT	0x18,R24
(0451) 			  OCR1AL = 0;
     5FC 2422      CLR	R2
     5FD BC2A      OUT	0x2A,R2
(0452)  		  	  OCR1BL = 0;
     5FE BC28      OUT	0x28,R2
(0453)  		  	  OCR1CL = pwm_pingjun;
     5FF 9020 0111 LDS	R2,pwm_pingjun
     601 9220 0078 STS	0x0078,R2
(0454)  		  	  OCR0=pwm_pingjun;
     603 BE21      OUT	0x31,R2
(0455) 			  PWM_ON
     604 B387      IN	R24,0x17
     605 6F80      ORI	R24,0xF0
     606 BB87      OUT	0x17,R24
(0456) 			 }
     607 C003      RJMP	0x060B
(0457) 		    else PWM_OFF
     608 B387      IN	R24,0x17
     609 708F      ANDI	R24,0xF
     60A BB87      OUT	0x17,R24
(0458) 		   n_jiaodu=jiaodu;
     60B 90A0 011D LDS	R10,jiaodu
(0459) 		  }
(0460) 		 if (juli!=0) 
     60D 9040 0123 LDS	R4,juli+2
     60F 9050 0124 LDS	R5,juli+3
     611 9020 0121 LDS	R2,juli
     613 9030 0122 LDS	R3,juli+1
     615 9488      BCLR	0
     616 2022      TST	R2
     617 0432      CPC	R3,R2
     618 0442      CPC	R4,R2
     619 0452      CPC	R5,R2
     61A F409      BNE	0x061C
     61B C089      RJMP	0x06A5
(0461) 		 if (sec!=n_sec)
     61C 9020 0127 LDS	R2,sec
     61E 142A      CP	R2,R10
     61F F409      BNE	0x0621
     620 C084      RJMP	0x06A5
(0462) 		    {
(0463) 			 if (juli>0)
     621 E040      LDI	R20,0

⌨️ 快捷键说明

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