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

📄 m128_test.lst

📁 AVR单片机开发中
💻 LST
📖 第 1 页 / 共 5 页
字号:
    050B C00B      RJMP	0x0517
(0178) 	else if(y == 2) 
    050C 2D8A      MOV	R24,R10
    050D 3082      CPI	R24,2
    050E F419      BNE	0x0512
(0179)        address = 0x90 + x;
    050F 2F46      MOV	R20,R22
    0510 5740      SUBI	R20,0x70
    0511 C005      RJMP	0x0517
(0180) 	else if(y == 3) 
    0512 2D8A      MOV	R24,R10
    0513 3083      CPI	R24,3
    0514 F411      BNE	0x0517
(0181)        address = 0xd0 + x; 
    0515 2F46      MOV	R20,R22
    0516 5340      SUBI	R20,0x30
(0182) 	
(0183)     send_buffer[0] = address;
    0517 9340022B  STS	R20,_send_buffer
(0184) 	
(0185) 	char_len = 1;
    0519 E081      LDI	R24,1
    051A 93800100  STS	R24,0x100
(0186) 	serial_send(1);  
    051C E001      LDI	R16,1
    051D DF8E      RCALL	_serial_send
(0187) 	return ;
    051E 940E0FD0  CALL	pop_gset3
    0520 9508      RET
(0188) }
(0189) 
(0190) void init_lcd ()
(0191) {
(0192)     send_buffer[0] = 0x01;
_init_lcd:
    0521 E081      LDI	R24,1
    0522 9380022B  STS	R24,_send_buffer
(0193) 	char_len = 1;
    0524 93800100  STS	R24,0x100
(0194) 	serial_send(1);  
    0526 E001      LDI	R16,1
(0195) 	return ;
    0527 CF84      RJMP	_serial_send
(0196) }
(0197) 
(0198) void shift_r()
(0199) {
(0200)     send_buffer[0] = 0x1c ;
_shift_r:
    0528 E18C      LDI	R24,0x1C
    0529 9380022B  STS	R24,_send_buffer
(0201) 	char_len = 1;
    052B E081      LDI	R24,1
    052C 93800100  STS	R24,0x100
(0202) 	serial_send(1);  
    052E E001      LDI	R16,1
(0203) 	return ;
    052F CF7C      RJMP	_serial_send
(0204) }
(0205) 
(0206) void shift_l()
(0207) {
(0208)     send_buffer[0] =  0x18;
_shift_l:
    0530 E188      LDI	R24,0x18
    0531 9380022B  STS	R24,_send_buffer
(0209) 	char_len = 1;
    0533 E081      LDI	R24,1
    0534 93800100  STS	R24,0x100
(0210) 	serial_send(1); 
    0536 E001      LDI	R16,1
(0211) 	return ;
    0537 CF74      RJMP	_serial_send
_printf_char:
  s                    --> R20
    0538 940E0FA6  CALL	push_gset1
    053A 2F40      MOV	R20,R16
(0212) }
(0213) void printf_char(char s){
(0214) 
(0215)     send_buffer[0] = s;
    053B 9340022B  STS	R20,_send_buffer
(0216)     char_len = 1;
    053D E081      LDI	R24,1
    053E 93800100  STS	R24,0x100
(0217) 	serial_send(0);  
    0540 2700      CLR	R16
    0541 DF6A      RCALL	_serial_send
(0218) 	return ;
    0542 940E0FA9  CALL	pop_gset1
    0544 9508      RET
_printf_hex:
  temp                 --> R20
  s                    --> R22
    0545 940E0FBD  CALL	push_gset2
    0547 2F60      MOV	R22,R16
(0219) 	
(0220) }
(0221) 
(0222) 
(0223) void printf_hex(unsigned char s){
(0224)      unsigned int temp = 0;
    0548 2744      CLR	R20
    0549 2755      CLR	R21
(0225) 	 
(0226) 	 temp = hextochar(s);
    054A 2F06      MOV	R16,R22
    054B 2711      CLR	R17
    054C 940E017C  CALL	_hextochar
    054E 01A8      MOVW	R20,R16
(0227) 	 send_buffer[1] = temp;
    054F 9340022C  STS	R20,_send_buffer+1
(0228) 	 temp = temp >> 8;
    0551 2F45      MOV	R20,R21
    0552 2755      CLR	R21
(0229)      send_buffer[0] = temp;
    0553 9340022B  STS	R20,_send_buffer
(0230)      char_len = 2;
    0555 E082      LDI	R24,2
    0556 93800100  STS	R24,0x100
(0231) 	 serial_send(0);
    0558 2700      CLR	R16
    0559 DF52      RCALL	_serial_send
(0232) 	 return;
    055A 940E0FCD  CALL	pop_gset2
    055C 9508      RET
_printf_int:
  c                    --> R20
    055D 940E0FA6  CALL	push_gset1
    055F 01A8      MOVW	R20,R16
(0233) }
(0234) 
(0235) 
(0236) void printf_int(int c )
(0237) {
(0238)     char_len = bcd_char( c, send_buffer);
    0560 E22B      LDI	R18,0x2B
    0561 E032      LDI	R19,2
    0562 018A      MOVW	R16,R20
    0563 940E01A9  CALL	_bcd_char
    0565 93000100  STS	R16,0x100
(0239) 	serial_send(0);
    0567 2700      CLR	R16
    0568 DF43      RCALL	_serial_send
(0240)     return;
    0569 940E0FA9  CALL	pop_gset1
    056B 9508      RET
_printf_str:
  i                    --> R20
  s                    --> R22
    056C 940E0FBD  CALL	push_gset2
    056E 01B8      MOVW	R22,R16
(0241) }
(0242) 
(0243) 
(0244) void printf_str(char *s ){
(0245)     unsigned char i=0;
    056F 2744      CLR	R20
    0570 C00C      RJMP	0x057D
(0246) 	
(0247) 	while( *s ){
(0248) 	   
(0249) 	   send_buffer[i] = *s ;
    0571 E28B      LDI	R24,0x2B
    0572 E092      LDI	R25,2
    0573 2FE4      MOV	R30,R20
    0574 27FF      CLR	R31
    0575 0FE8      ADD	R30,R24
    0576 1FF9      ADC	R31,R25
    0577 01DB      MOVW	R26,R22
    0578 902C      LD	R2,0(X)
    0579 8220      STD	R2,0+Z
(0250) 	   i ++;
    057A 9543      INC	R20
(0251) 	   s++;
    057B 5F6F      SUBI	R22,0xFF
    057C 4F7F      SBCI	R23,0xFF
    057D 01FB      MOVW	R30,R22
    057E 8020      LDD	R2,0+Z
    057F 2022      TST	R2
    0580 F781      BNE	0x0571
(0252) 	}
(0253)     char_len = i;
    0581 93400100  STS	R20,0x100
(0254) 	serial_send( 0 );
    0583 2700      CLR	R16
    0584 DF27      RCALL	_serial_send
(0255) 	
(0256)     return;
    0585 940E0FCD  CALL	pop_gset2
    0587 9508      RET
_outp:
  p                    --> R20
  data                 --> R18
  add                  --> R16
    0588 940E0FA6  CALL	push_gset1
(0257) }
(0258) /////////////////////////////////////////////////////////////////////////////////
(0259) 
(0260) /////////////////////////////////////////////////////////////////////////////
(0261) //////            104bus io 操作
(0262) //////////////////////////////////////////////////////////////////////////////
(0263) void outp(unsigned int add,unsigned char data)
(0264) 	  {
(0265) 	         unsigned char *p;
(0266) 	         p = (unsigned char *) (add+0x2000);
    058A 01A8      MOVW	R20,R16
    058B 5040      SUBI	R20,0
    058C 4E50      SBCI	R21,0xE0
(0267) 	         
(0268) 	              *p=data;
    058D 01FA      MOVW	R30,R20
    058E 8320      STD	R18,0+Z
(0269)    
(0270) 	   }
    058F 940E0FA9  CALL	pop_gset1
    0591 9508      RET
_inp:
  p                    --> R20
  add                  --> R16
    0592 940E0FA6  CALL	push_gset1
(0271) 
(0272) 
(0273) unsigned char inp(unsigned int add)	  
(0274) {
(0275) 
(0276)        unsigned char *p;
(0277) 	   p = (unsigned char *) (add+0x2000);
    0594 01A8      MOVW	R20,R16
    0595 5040      SUBI	R20,0
    0596 4E50      SBCI	R21,0xE0
(0278)        return   *p;
    0597 01FA      MOVW	R30,R20
    0598 8100      LDD	R16,0+Z
    0599 940E0FA9  CALL	pop_gset1
    059B 9508      RET
(0279) 
(0280) } 
(0281) 	
(0282) ////////////////////////////////////////////////////////////////////////////////	
(0283) //////////////////////////////////////////////////////////////////////
(0284) //
(0285) //	gyro_sample
(0286) //
(0287) //	参数    无
(0288) //
(0289) //	说明    陀螺仪采样函数,首先运行500次,求得零漂平均值,然后处理
(0290) //              陀螺仪数据,最终用算出的角度更新全局变量rob_angle
(0291) //
(0292) //	返回值  无
(0293) //
(0294) //	创建人  张辉
(0295) //
(0296) //////////////////////////////////////////////////////////////////////	
(0297) 
(0298) void init_gyro(){
(0299) 	outp(GYRO_BASE+4,0x00); 			/*陀螺仪标志位置0*/  	
_init_gyro:
    059C 2722      CLR	R18
    059D E904      LDI	R16,0x94
    059E E012      LDI	R17,2
(0300) 	
(0301) 	}
    059F CFE8      RJMP	_outp
_gyro_sample:
  angle                --> Y+6
  cmplt                --> R10
  low_byte             --> R10
  mid_byte             --> R12
  high_byte            --> Y+2
    05A0 940E0FC5  CALL	push_gset4
    05A2 972A      SBIW	R28,0xA
(0302) int gyro_sample()
(0303) {
(0304) 	int	cmplt;
(0305) 	long	angle;
(0306) 	unsigned long high_byte;
(0307) 	unsigned int  mid_byte,low_byte;
(0308) 	high_byte = 0;
    05A3 E040      LDI	R20,0
    05A4 E050      LDI	R21,0
    05A5 E060      LDI	R22,0
    05A6 E070      LDI	R23,0
    05A7 01FE      MOVW	R30,R28
    05A8 8342      STD	R20,2+Z
    05A9 8353      STD	R21,3+Z
    05AA 8364      STD	R22,4+Z
    05AB 8375      STD	R23,5+Z
(0309) 	cmplt=inp(GYRO_BASE+0);
    05AC E900      LDI	R16,0x90
    05AD E012      LDI	R17,2
    05AE DFE3      RCALL	_inp
    05AF 2EA0      MOV	R10,R16
    05B0 24BB      CLR	R11
(0310) 
(0311) 	if((cmplt&0x01)==0x01)
    05B1 01C5      MOVW	R24,R10
    05B2 7081      ANDI	R24,1
    05B3 7090      ANDI	R25,0
    05B4 3081      CPI	R24,1
    05B5 E0E0      LDI	R30,0
    05B6 079E      CPC	R25,R30
    05B7 F419      BNE	0x05BB
(0312) 	{    
(0313) 		return 0;
    05B8 2700      CLR	R16
    05B9 2711      CLR	R17
    05BA C089      RJMP	0x0644
(0314) 	}
(0315) 	outp(GYRO_BASE+4,0x01);
    05BB E021      LDI	R18,1
    05BC E904      LDI	R16,0x94
    05BD E012      LDI	R17,2
    05BE DFC9      RCALL	_outp
(0316) 	high_byte=inp(GYRO_BASE+1);
    05BF E901      LDI	R16,0x91
    05C0 E012      LDI	R17,2
    05C1 DFD0      RCALL	_inp
    05C2 2E20      MOV	R2,R16
    05C3 2433      CLR	R3
    05C4 2444      CLR	R4
    05C5 2455      CLR	R5
    05C6 01FE      MOVW	R30,R28
    05C7 8222      STD	R2,2+Z
    05C8 8233      STD	R3,3+Z
    05C9 8244      STD	R4,4+Z
    05CA 8255      STD	R5,5+Z
(0317) 	printf("%d    ",high_byte);
    05CB 8248      STD	R4,0+Y
    05CC 8259      STD	R5,1+Y
    05CD 2D22      MOV	R18,R2
    05CE 2D33      MOV	R19,R3
    05CF EC0C      LDI	R16,0xCC
    05D0 E011      LDI	R17,1
    05D1 940E113B  CALL	_printf
(0318) 	mid_byte=inp(GYRO_BASE+2);
    05D3 E902      LDI	R16,0x92
    05D4 E012      LDI	R17,2
    05D5 DFBC      RCALL	_inp
    05D6 2EC0      MOV	R12,R16
    05D7 24DD      CLR	R13
(0319) 	printf("%d    ",mid_byte);
    05D8 0196      MOVW	R18,R12
    05D9 EC0C      LDI	R16,0xCC
    05DA E011      LDI	R17,1
    05DB 940E113B  CALL	_printf
(0320) 	low_byte=inp(GYRO_BASE+3);
    05DD E903      LDI	R16,0x93
    05DE E012      LDI	R17,2
    05DF DFB2      RCALL	_inp
    05E0 2EA0      MOV	R10,R16
    05E1 24BB      CLR	R11
(0321) 	printf("%d    ",low_byte);
    05E2 0195      MOVW	R18,R10
    05E3 EC0C      LDI	R16,0xCC
    05E4 E011      LDI	R17,1
    05E5 940E113B  CALL	_printf
(0322) 	outp(GYRO_BASE+4,0x00);
    05E7 2722      CLR	R18
    05E8 E904      LDI	R16,0x94
    05E9 E012      LDI	R17,2
    05EA DF9D      RCALL	_outp
(0323) 	if(high_byte>=0x80)
    05EB E840      LDI	R20,0x80
    05EC E050      LDI	R21,0
    05ED E060      LDI	R22,0
    05EE E070      LDI	R23,0
    05EF 01FE      MOVW	R30,R28
    05F0 8022      LDD	R2,2+Z
    05F1 8033      LDD	R3,3+Z
    05F2 8044      LDD	R4,4+Z
    05F3 8055      LDD	R5,5+Z
    05F4 1624      CP	R2,R20
    05F5 0635      CPC	R3,R21
    05F6 0646      CPC	R4,R22
    05F7 0657      CPC	R5,R23
    05F8 F060      BCS	0x0605
(0324) 	high_byte |= 0xffffff00;
    05F9 E040      LDI	R20,0
    05FA EF5F      LDI	R21,0xFF
    05FB EF6F      LDI	R22,0xFF
    05FC EF7F      LDI	R23,0xFF
    05FD 2A24      OR	R2,R20
    05FE 2A35      OR	R3,R21
    05FF 2A46      OR	R4,R22
    0600 2A57      OR	R5,R23
    0601 8222      STD	R2,2+Z
    0602 8233      STD	R3,3+Z
    0603 8244      STD	R4,4+Z
    0604 8255      STD	R5,5+Z
(0325) 	angle=(long)(((high_byte)<<16)+((mid_byte&0x00ff)<<8)+(low_byte&0x00ff));
    0605 01C6      MOVW	R24,R12
    0606 7090      ANDI	R25,0
    0607 2F98      MOV	R25,R24
    0608 2788      CLR	R24
    0609 011C      MOVW	R2,R24
    060A 2444      CLR	R4
    060B 2455      CLR	R5
    060C 01FE      MOVW	R30,R28
    060D 8062      LDD	R6,2+Z
    060E 8073      LDD	R7,3+Z
    060F 8084      LDD	R8,4+Z
    0610 8095      LDD	R9,5+Z
    0611 2C86      MOV	R8,R6
    0612 2C97      MOV	R9,R7
    0613 2466      CLR	R6
    0614 2477      CLR	R7
    0615 0C62      ADD	R6,R2
    0616 1C73      ADC	R7,R3
    0617 1C84      ADC	R8,R4
    0618 1C95      ADC	R9,R5
    0619 01C5      MOVW	R24,R10
    061A 7090      ANDI	R25,0
    061B 011C      MOVW	R2,R24
    061C 2444      CLR	R4
    061D 2455      CLR	R5
    061E 0C62      ADD	R6,R2
    061F 1C73      ADC	R7,R3
    0620 1C84      ADC	R8,R4
    0621 1C95      ADC	R9,R5
    0622 8266      STD	R6,6+Z
    0623 8277      STD	R7,7+Z
    0624 8680      STD	R8,8+Z
    0625 8691      STD	R9,9+Z
(0326) 	rob_angle=angle/2742.9797399;
    0626 8106      LDD	R16,6+Z
    0627 8117      LDD	R17,7+Z
    0628 8520      LDD	R18,8+Z
    0629 8531      LDD	R19,9+Z
    062A 940E0E9D  CALL	long2fp
    062C 933A      ST	R19,-Y
    062D 932A      ST	R18,-Y
    062E 931A      ST	R17,-Y
    062F 930A      ST	R16,-Y
    0630 E80E      LDI	R16,0x8E
    0631 E010      LDI	R17,0
    0632 940E118B  CALL	lpm32
    0634 933A      ST	R19,-Y
    0635 932A      ST	R18,-Y
    0636 931A      ST	R17,-Y

⌨️ 快捷键说明

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