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

📄 m64.lst

📁 avr的视频采集
💻 LST
📖 第 1 页 / 共 4 页
字号:
    03BB E050      LDI	R21,0
    03BC E060      LDI	R22,0
    03BD E070      LDI	R23,0
    03BE 0E24      ADD	R2,R20
    03BF 1E35      ADC	R3,R21
    03C0 1E46      ADC	R4,R22
    03C1 1E57      ADC	R5,R23
    03C2 9220009C  STS	0x9C,R2
(0260) 			 while(!(UCSR1A&(1<<UDRE1)));
    03C4 9020009B  LDS	R2,0x9B
    03C6 FE25      SBRS	R2,5
    03C7 CFFC      RJMP	0x03C4
(0261) 		     UDR1=(n/10)%10+48;
    03C8 E04A      LDI	R20,0xA
    03C9 E050      LDI	R21,0
    03CA E060      LDI	R22,0
    03CB E070      LDI	R23,0
    03CC 01FE      MOVW	R30,R28
    03CD 8020      LDD	R2,Z+0
    03CE 8031      LDD	R3,Z+1
    03CF 8042      LDD	R4,Z+2
    03D0 8053      LDD	R5,Z+3
    03D1 937A      ST	R23,-Y
    03D2 936A      ST	R22,-Y
    03D3 935A      ST	R21,-Y
    03D4 934A      ST	R20,-Y
    03D5 0181      MOVW	R16,R2
    03D6 0192      MOVW	R18,R4
    03D7 940E0612  CALL	div32s
    03D9 E04A      LDI	R20,0xA
    03DA E050      LDI	R21,0
    03DB E060      LDI	R22,0
    03DC E070      LDI	R23,0
    03DD 937A      ST	R23,-Y
    03DE 936A      ST	R22,-Y
    03DF 935A      ST	R21,-Y
    03E0 934A      ST	R20,-Y
    03E1 940E0614  CALL	mod32s
    03E3 0118      MOVW	R2,R16
    03E4 0129      MOVW	R4,R18
    03E5 E340      LDI	R20,0x30
    03E6 E050      LDI	R21,0
    03E7 E060      LDI	R22,0
    03E8 E070      LDI	R23,0
    03E9 0E24      ADD	R2,R20
    03EA 1E35      ADC	R3,R21
    03EB 1E46      ADC	R4,R22
    03EC 1E57      ADC	R5,R23
    03ED 9220009C  STS	0x9C,R2
(0262) 			 while(!(UCSR1A&(1<<UDRE1)));
    03EF 9020009B  LDS	R2,0x9B
    03F1 FE25      SBRS	R2,5
    03F2 CFFC      RJMP	0x03EF
(0263) 		     UDR1=n%10+48;
    03F3 E04A      LDI	R20,0xA
    03F4 E050      LDI	R21,0
    03F5 E060      LDI	R22,0
    03F6 E070      LDI	R23,0
    03F7 01FE      MOVW	R30,R28
    03F8 8020      LDD	R2,Z+0
    03F9 8031      LDD	R3,Z+1
    03FA 8042      LDD	R4,Z+2
    03FB 8053      LDD	R5,Z+3
    03FC 937A      ST	R23,-Y
    03FD 936A      ST	R22,-Y
    03FE 935A      ST	R21,-Y
    03FF 934A      ST	R20,-Y
    0400 0181      MOVW	R16,R2
    0401 0192      MOVW	R18,R4
    0402 940E0614  CALL	mod32s
    0404 0118      MOVW	R2,R16
    0405 0129      MOVW	R4,R18
    0406 E340      LDI	R20,0x30
    0407 E050      LDI	R21,0
    0408 E060      LDI	R22,0
    0409 E070      LDI	R23,0
    040A 0E24      ADD	R2,R20
    040B 1E35      ADC	R3,R21
    040C 1E46      ADC	R4,R22
    040D 1E57      ADC	R5,R23
    040E 9220009C  STS	0x9C,R2
(0264) 			if (huanhang)
    0410 20AA      TST	R10
    0411 F079      BEQ	0x0421
(0265) 			 {
(0266) 			  while(!(UCSR1A&(1<<UDRE1)));
    0412 9020009B  LDS	R2,0x9B
    0414 FE25      SBRS	R2,5
    0415 CFFC      RJMP	0x0412
(0267) 		      UDR1=0x0d;
    0416 E08D      LDI	R24,0xD
    0417 9380009C  STS	0x9C,R24
(0268) 			  while(!(UCSR1A&(1<<UDRE1)));
    0419 9020009B  LDS	R2,0x9B
    041B FE25      SBRS	R2,5
    041C CFFC      RJMP	0x0419
(0269) 		      UDR1=0x0a;
    041D E08A      LDI	R24,0xA
    041E 9380009C  STS	0x9C,R24
(0270) 			 }
    0420 C00E      RJMP	0x042F
(0271) 			 else
(0272) 			 {
(0273) 			  while(!(UCSR1A&(1<<UDRE1)));
    0421 9020009B  LDS	R2,0x9B
    0423 FE25      SBRS	R2,5
    0424 CFFC      RJMP	0x0421
(0274) 		      UDR1=0x20;
    0425 E280      LDI	R24,0x20
    0426 9380009C  STS	0x9C,R24
(0275) 			  while(!(UCSR1A&(1<<UDRE1)));
    0428 9020009B  LDS	R2,0x9B
    042A FE25      SBRS	R2,5
    042B CFFC      RJMP	0x0428
(0276) 		      UDR1=0x20;
    042C E280      LDI	R24,0x20
    042D 9380009C  STS	0x9C,R24
(0277) 			 } 
    042F 9624      ADIW	R28,4
    0430 940E0690  CALL	pop_gset3
    0432 9624      ADIW	R28,4
    0433 9508      RET
(0278) }
(0279) 
(0280) 
(0281) 
(0282) //TIMER0 initialize - prescale:64
(0283) // WGM: PWM Fast
(0284) // desired value: 1KHz
(0285) // actual value:  0.488KHz (-104.8%)
(0286) void timer0_init(void)
(0287) {
(0288)  TCCR0 = 0x00; //stop
_timer0_init:
    0434 2422      CLR	R2
    0435 BE23      OUT	0x33,R2
(0289)  ASSR  = 0x00; //set async mode
    0436 BE20      OUT	0x30,R2
(0290)  TCNT0 = 0x01; //set count
    0437 E081      LDI	R24,1
    0438 BF82      OUT	0x32,R24
(0291)  OCR0  = 0x0f;
    0439 E08F      LDI	R24,0xF
    043A BF81      OUT	0x31,R24
(0292)  TCCR0 = 0x6C; //start timer
    043B E68C      LDI	R24,0x6C
    043C BF83      OUT	0x33,R24
    043D 9508      RET
(0293) }
(0294) 
(0295) //TIMER1 initialize - prescale:64
(0296) // WGM: 5) PWM 8bit fast, TOP=0x00FF
(0297) // desired value: 1KHz
(0298) // actual value:  0.488KHz (104.8%)
(0299) void timer1_init(void)
(0300) {
(0301)  TCCR1B = 0x00; //stop
_timer1_init:
    043E 2422      CLR	R2
    043F BC2E      OUT	0x2E,R2
(0302)  TCNT1H = 0xFF; //setup
    0440 EF8F      LDI	R24,0xFF
    0441 BD8D      OUT	0x2D,R24
(0303)  TCNT1L = 0x01;
    0442 E081      LDI	R24,1
    0443 BD8C      OUT	0x2C,R24
(0304)  OCR1AH = 0x00;
    0444 BC2B      OUT	0x2B,R2
(0305)  OCR1AL = 0x0f;
    0445 E08F      LDI	R24,0xF
    0446 BD8A      OUT	0x2A,R24
(0306)  OCR1BH = 0x00;
    0447 BC29      OUT	0x29,R2
(0307)  OCR1BL = 0x0f;
    0448 BD88      OUT	0x28,R24
(0308)  OCR1CH = 0x00;
    0449 92200079  STS	0x79,R2
(0309)  OCR1CL = 0x0f;
    044B 93800078  STS	0x78,R24
(0310)  ICR1H  = 0x00;
    044D BC27      OUT	0x27,R2
(0311)  ICR1L  = 0xFF;
    044E EF8F      LDI	R24,0xFF
    044F BD86      OUT	0x26,R24
(0312)  TCCR1A = 0xA9;
    0450 EA89      LDI	R24,0xA9
    0451 BD8F      OUT	0x2F,R24
(0313)  TCCR1B = 0x0B; //start Timer
    0452 E08B      LDI	R24,0xB
    0453 BD8E      OUT	0x2E,R24
    0454 9508      RET
_int0_isr:
    0455 922A      ST	R2,-Y
    0456 923A      ST	R3,-Y
    0457 938A      ST	R24,-Y
    0458 B62F      IN	R2,0x3F
    0459 922A      ST	R2,-Y
(0314) }
(0315) unsigned char shuliang=0;
(0316) unsigned char xuanze=0;
(0317) #pragma interrupt_handler int0_isr:2
(0318) void int0_isr(void)
(0319) {
(0320)  //external interupt on INT0
(0321)  
(0322) x_adc=0;y_adc=0;
    045A 2422      CLR	R2
    045B 9220012E  STS	x_adc,R2
    045D 9220012D  STS	y_adc,R2
(0323) chang=1;
    045F E081      LDI	R24,1
    0460 93800128  STS	chang,R24
(0324)  shuliang=ms;
    0462 90200104  LDS	R2,ms
    0464 90300105  LDS	R3,ms+1
    0466 9220012B  STS	shuliang,R2
(0325)  ms=0;
    0468 2422      CLR	R2
    0469 2433      CLR	R3
    046A 92300105  STS	ms+1,R3
    046C 92200104  STS	ms,R2
    046E 9029      LD	R2,Y+
    046F BE2F      OUT	0x3F,R2
    0470 9189      LD	R24,Y+
    0471 9039      LD	R3,Y+
    0472 9029      LD	R2,Y+
    0473 9518      RETI
_int1_isr:
    0474 922A      ST	R2,-Y
    0475 923A      ST	R3,-Y
    0476 938A      ST	R24,-Y
    0477 939A      ST	R25,-Y
    0478 B62F      IN	R2,0x3F
    0479 922A      ST	R2,-Y
(0326) 
(0327) }
(0328) 
(0329) #pragma interrupt_handler int1_isr:3
(0330) void int1_isr(void)
(0331) {//CLI();
(0332)  //external interupt on INT1
(0333) /*while(x_adc<video_x)
(0334) { v_temp[y_adc*video_x  +  x_adc] =0;x_adc++;}*/
(0335) if(xuanze++>5){xuanze=0;x_adc=0;y_adc++;}
    047A 9020012C  LDS	R2,xuanze
    047C 2433      CLR	R3
    047D 2D82      MOV	R24,R2
    047E 5F8F      SUBI	R24,0xFF
    047F 9380012C  STS	xuanze,R24
    0481 E085      LDI	R24,5
    0482 1582      CP	R24,R2
    0483 F450      BCC	0x048E
    0484 2422      CLR	R2
    0485 9220012C  STS	xuanze,R2
    0487 9220012E  STS	x_adc,R2
    0489 9180012D  LDS	R24,y_adc
    048B 5F8F      SUBI	R24,0xFF
    048C 9380012D  STS	y_adc,R24
(0336) 
(0337) x_adc=video_x+1;
    048E E281      LDI	R24,0x21
    048F 9380012E  STS	x_adc,R24
(0338) //v_num=(v_num/video_x+1)*video_x;
(0339) ms++;
    0491 91800104  LDS	R24,ms
    0493 91900105  LDS	R25,ms+1
    0495 9601      ADIW	R24,1
    0496 93900105  STS	ms+1,R25
    0498 93800104  STS	ms,R24
    049A 9029      LD	R2,Y+
    049B BE2F      OUT	0x3F,R2
    049C 9199      LD	R25,Y+
    049D 9189      LD	R24,Y+
    049E 9039      LD	R3,Y+
    049F 9029      LD	R2,Y+
    04A0 9518      RETI
_main:
  n                    --> Y+2
  v_num_now            --> R10
  n_sec                --> R10
  n_juli               --> R10
  n_jiaodu             --> R10
  yv                   --> R10
  xv                   --> R12
    04A1 9721      SBIW	R28,1
(0340)  //hang=1;
(0341)  //SEI();
(0342) }
(0343) 
(0344) #define PWM_ON    DDRB|=   R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1;
(0345) #define PWM_OFF   DDRB&= ~(R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1);
(0346) 
(0347) main()
(0348) {int n;
(0349) unsigned char n_jiaodu=0,n_juli=0;
    04A2 24AA      CLR	R10
(0350) unsigned char n_sec=0;
(0351) 
(0352) unsigned int v_num_now=0;//x_now,y_now;
    04A3 24BB      CLR	R11
(0353) unsigned char xv,yv;
(0354) 
(0355) init_devices();
    04A4 DC14      RCALL	_init_devices
(0356) //timer1_init();timer0_init();
(0357)  //OCR1AH = 0x00;
(0358) /* OCR1AL = 64;
(0359)  //OCR1BH = 0x00;
(0360)  OCR1BL = 64;
(0361)  //OCR1CH = 0x00;
(0362)  OCR1CL = 64;
(0363)  OCR0=64;*/
(0364) PORTD|=0x03;//外部中断
    04A5 B382      IN	R24,0x12
    04A6 6083      ORI	R24,3
    04A7 BB82      OUT	0x12,R24
(0365) DDRD&=~03; 
    04A8 B381      IN	R24,0x11
    04A9 7F8C      ANDI	R24,0xFC
    04AA BB81      OUT	0x11,R24
(0366) //while(1);
(0367) DDRE|=0x38;//while(1);
    04AB B182      IN	R24,0x02
    04AC 6388      ORI	R24,0x38
    04AD B982      OUT	0x02,R24
(0368) /////////LCD
(0369) 	/* DDRB = 0xBF;    //SI输入,SO,SCK,SS输出
(0370) 	 SPCR = 0x50;  //setup SPI
(0371) 	 SPSR = 0x01;  //setup SPI*/
(0372) /*while(!(UCSR0A&(1<<UDRE0)));
(0373) UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
(0374) UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
(0375) UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
(0376) UDR0='a';*/
(0377) delay_ms(3000);
    04AE EB08      LDI	R16,0xB8
    04AF E01B      LDI	R17,0xB
    04B0 940E05BA  CALL	_delay_ms
(0378) number_uart1(1010,1);
    04B2 E081      LDI	R24,1
    04B3 8388      STD	Y+0,R24
    04B4 EF02      LDI	R16,0xF2
    04B5 E013      LDI	R17,3
    04B6 E020      LDI	R18,0
    04B7 E030      LDI	R19,0
    04B8 DE48      RCALL	_number_uart1
(0379) 			number_uart1(xx,0);
    04B9 2422      CLR	R2
    04BA 8228      STD	Y+0,R2
    04BB 91200108  LDS	R18,xx+2
    04BD 91300109  LDS	R19,xx+3
    04BF 91000106  LDS	R16,xx
    04C1 91100107  LDS	R17,xx+1
    04C3 DE3D      RCALL	_number_uart1
(0380) 			number_uart1(ADCjohu,1);
    04C4 E081      LDI	R24,1
    04C5 8388      STD	Y+0,R24
    04C6 91200102  LDS	R18,ADCjohu+2
    04C8 91300103  LDS	R19,ADCjohu+3
    04CA 91000100  LDS	R16,ADCjohu
    04CC 91100101  LDS	R17,ADCjohu+1
    04CE DE32      RCALL	_number_uart1
(0381) delay_ms(3000);	
    04CF EB08      LDI	R16,0xB8
    04D0 E01B      LDI	R17,0xB
    04D1 940E05BA  CALL	_delay_ms
(0382) xx=0;
    04D3 E040      LDI	R20,0
    04D4 E050      LDI	R21,0
    04D5 E060      LDI	R22,0
    04D6 E070      LDI	R23,0
    04D7 93500107  STS	xx+1,R21
    04D9 93400106  STS	xx,R20
    04DB 93700109  STS	xx+3,R23
    04DD 93600108  STS	xx+2,R22
(0383) //LCD_Init();
(0384) //LCD_clear();
(0385) DDRE &= ~0x7c;//if (!(PORTE & STOP))  if (!(PORTE & VOLDOWN))  if (!(PORTE & VOLUP))  if (!(PORTE & NEXTSONG))  if (!(PORTE & PREVSONG))
    04DF B182      IN	R24,0x02
    04E0 7883      ANDI	R24,0x83
    04E1 B982      OUT	0x02,R24
(0386) PORTE |=0x7c;
    04E2 B183      IN	R24,0x03
    04E3 678C      ORI	R24,0x7C
    04E4 B983      OUT	0x03,R24
(0387) DDRE=0x00;PORTE=0xff;
    04E5 2422      CLR	R2
    04E6 B822      OUT	0x02,R2
    04E7 EF8F      LDI	R24,0xFF
    04E8 B983      OUT	0x03,R24
    04E9 C0BB      RJMP	0x05A5
(0388) //number(0,0,4,-999,1);
(0389) 	     /* OCR1AL = pwm_pingjun;
(0390)  		  OCR1BL = pwm_pingjun;
(0391)  		  OCR1CL = pwm_pingjun;
(0392)  		  OCR0=pwm_pingjun;*/
(0393)   while(1)
(0394)   { 	   	
(0395) 			   
(0396) 	//for(xv=0;xv<video_x;xv++)		   	  
(0397)   	ADMUX = 0x01;                           // A/D converter input pin number = 0
    04EA E081      LDI	R24,1
    04EB B987      OUT	0x07,R24
(0398)     ADCSRA = 0xc2;//|ADATE;                           // single A/D conversion, fCK/32, conversion now started 
    04EC EC82      LDI	R24,0xC2
    04ED B986      OUT	0x06,R24
(0399)     //for(y_adc=0;y_adc<video_y;y_adc++)
(0400) //while(PINE!=0xff)
(0401)  if (xuanze==0)
    04EE 9020012C  LDS	R2,xuanze
    04F0 2022      TST	R2
    04F1 F009      BEQ	0x04F3
    04F2 C04C      RJMP	0x053F
(0402) {
(0403) 	for(x_adc=0;x_adc<video_x;x_adc++)
    04F3 2422      CLR	R2
    04F4 9220012E  STS	x_adc,R2
    04F6 C043      RJMP	0x053A
(0404)     {
(0405)         do
(0406)         {
(0407) 		 //PORTE=~PORTE;
(0408)         } while(!(ADCSRA&(1<<ADIF)));// ADSC        // Wait for A/D conversion to finish
    04F7 9B34      SBIS	0x06,4
    04F8 CFFE      RJMP	0x04F7
(0409)         /*count = 6;                          
(0410)         do                                   // Customize this loop to 66 cycles !!
(0411)         {
(0412)         } while(--count);*/                   // wait some cycles
(0413)         ADCSRA |= 0x40;                      // start new A/D conversion 
    04F9 9A36      SBI	0x06,6
(0414)         //write_to_flash(ADC-0x1D5);          // read data, convert to 8 bit and store in flash
(0415) 		if (  (xuanze!=0) &&  (xuanze<2)  )//滤波均值
    04FA 9020012C  LDS	R2,xuanze
    04FC 2022      TST	R2
    04FD F121      BEQ	0x0522
    04FE 2D82      MOV	R24,R2
    04FF 3082      CPI	R24,2
    0500 F508      BCC	0x0522
(0416) 		  v_temp[y_adc][x_adc]=v_temp[y_adc][x_adc]/4+ADC/4;
    0501 9020012D  LDS	R2,y_adc
    0503 E280      LDI	R24,0x20
    0504 9D82      MUL	R24,R2
    0505 0110      MOVW	R2,R0
    0506 E28F      LDI	R24,0x2F
    0507 E091      LDI	R25,1
    0508 0E28      ADD	R2,R24
    0509 1E39      ADC	R3,R25
    050A 9040012E  LDS	R4,x_adc
    050C 2455      CLR	R5
    050D 0C42      ADD	R4,R2
    050E 1C53      ADC	R5,R3
    050F E024      LDI	R18,4
    0510 E030      LDI	R19,0
    0511 01F2      MOVW	R30,R4
    0512 8100      LDD	R16,Z+0
    0513 2711      CLR	R17
    0514 940E05D6  CALL	div16s
    0516 0118      MOVW	R2,R16
    0517 B064      IN	R6,0x04
    0518 B075      IN	R7,0x05
    0519 9476      LSR	R7
    051A 9467      ROR	R6
    051B 9476      LSR	R7
    051C 9467      ROR	R6
    051D 0C26      ADD	R2,R6
    051E 1C37      ADC	R3,R7
    051F 01F2      MOVW	R30,R4
    0520 8220      STD	Z+0,R2
    0521 C013      RJMP	0x0535
(0417) 		else /**/
(0418) 		  v_temp[y_adc][x_adc]=ADC>>1;
    0522 9020012D  LDS	R2,y_adc
    0524 E280      LDI	R24,0x20
    0525 9D82      MUL	R24,R2
    0526 0110      MOVW	R2,R0
    0527 E28F      LDI	R24,0x2F
    0528 E091      LDI	R25,1
    0529 0E28      ADD	R2,R24
    052A 1E39      ADC	R3,R25
    052B 91E0012E  LDS	R30,x_adc
    052D 27FF      CLR	R31
    052E 0DE2      ADD	R30,R2
    052F 1DF3      ADC	R31,R3
    0530 B024      IN	R2,0x04
    0531 B035      IN	R3,0x05
    0532 9436      LSR	R3

⌨️ 快捷键说明

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