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

📄 m128_test.lst

📁 AVR单片机开发中
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0421 E004      LDI	R16,4
    0422 DE0B      RCALL	_spi_tranByte
    0423 2EA0      MOV	R10,R16
(0110) 						   temp+=buf;
    0424 2C2A      MOV	R2,R10
    0425 2433      CLR	R3
    0426 2444      CLR	R4
    0427 2455      CLR	R5
    0428 01FE      MOVW	R30,R28
    0429 8060      LDD	R6,0+Z
    042A 8071      LDD	R7,1+Z
    042B 8082      LDD	R8,2+Z
    042C 8093      LDD	R9,3+Z
    042D 0C62      ADD	R6,R2
    042E 1C73      ADC	R7,R3
    042F 1C84      ADC	R8,R4
    0430 1C95      ADC	R9,R5
    0431 8260      STD	R6,0+Z
    0432 8271      STD	R7,1+Z
    0433 8282      STD	R8,2+Z
    0434 8293      STD	R9,3+Z
(0111) 						   break;
(0112) 						  
(0113) 
(0114) 			
(0115) 	  }
(0116) 	  len=temp;
    0435 01FE      MOVW	R30,R28
    0436 8020      LDD	R2,0+Z
    0437 8031      LDD	R3,1+Z
    0438 8042      LDD	R4,2+Z
    0439 8053      LDD	R5,3+Z
    043A 92300223  STS	R3,_len+1
    043C 92200222  STS	R2,_len
    043E 92500225  STS	R5,_len+3
    0440 92400224  STS	R4,_len+2
(0117) 	 
(0118) 	  return  temp;
    0442 8100      LDD	R16,0+Z
    0443 8111      LDD	R17,1+Z
    0444 8122      LDD	R18,2+Z
    0445 8133      LDD	R19,3+Z
    0446 9624      ADIW	R28,4
    0447 940E0FD3  CALL	pop_gset4
    0449 9508      RET
(0119) }
(0120) 
(0121) 
(0122) void port_init(void)
(0123) {
(0124)  DDRB  = 0x07;
_port_init:
    044A E087      LDI	R24,7
    044B BB87      OUT	P17,R24
(0125)  MCUCR |= 0X80;
    044C B785      IN	R24,P35
    044D 6880      ORI	R24,0x80
    044E BF85      OUT	P35,R24
(0126)  XMCRA = 0X00;
    044F 2422      CLR	R2
    0450 9220006D  STS	R2,0x6D
(0127)  XMCRB = 0X80;
    0452 E880      LDI	R24,0x80
    0453 9380006C  STS	R24,0x6C
(0128)  
(0129) }
    0455 9508      RET
(0130) //SPI initialize
(0131) // clock rate: 4000000hz
(0132) 
(0133) 
(0134) 
(0135) 
(0136) void spi_init(void)
(0137) {
(0138)  SPCR = 0x50;    //setup SPI
_spi_init:
    0456 E580      LDI	R24,0x50
    0457 B98D      OUT	P0D,R24
(0139)  SPSR = 0x00;    //setup SPI
    0458 2422      CLR	R2
    0459 B82E      OUT	P0E,R2
(0140) }
    045A 9508      RET
(0141) 
(0142) 
(0143) void init_isp_devices(void)
(0144) {
(0145)  
(0146)  port_init();
_init_isp_devices:
    045B DFEE      RCALL	_port_init
(0147)  spi_init();
(0148)  
(0149) }
    045C CFF9      RJMP	_spi_init
FILE: H:\m128_test\test_pc10_main.c
(0001) //ICC-AVR application builder : 2005-3-21 10:06:01
(0002) // Target : M128
(0003) // Crystal: 16.000Mhz
(0004) 
(0005) #include <iom128v.h>
(0006) #include <macros.h>
(0007) #include  <stdio.h>
(0008) 
(0009) 
(0010) 
(0011) #define BUFF_SIZE       20
(0012) #define EN_ADDR        	7
(0013) #define CLR_ADDR    	6
(0014) #define CH1    		    1
(0015) #define CH2    		    2
(0016) #define CH3    		    4
(0017) #define DA1    		    8
(0018) #define DA2    		    10
(0019) #define  LIGHT_CN      8
(0020) #define OK          	1
(0021) #define PARAMETER_ERR   0
(0022) #define HBYTE  		    1
(0023) #define LBYTE  		    0
(0024) #define CNT_BASE        0x270
(0025) #define  WRB_BASE	    0x240
(0026) #define FLIGHT_BASE     0x240
(0027) #define GYRO_BASE       0x290
(0028) 
(0029) 
(0030) 
(0031) union  char_int{
(0032)         unsigned char half[2];
(0033)         unsigned int i1;
(0034)     };
(0035) union char_int kk;
(0036) unsigned char send_buffer[BUFF_SIZE];    //发宋缓冲区
(0037) unsigned char  rec0;                     // 接收到的字符
(0038) unsigned char  char_len=0;
(0039) float rob_angle=0.0;
(0040) int left,right;
(0041) long len;
(0042) int  len_test=0;
(0043) //SPI initialize
(0044) // clock rate: 2000000hz
(0045) 
(0046) //call this routine to initialize all peripherals
(0047) void delay_1us(void)                 //1us延时函数
(0048)   {
(0049)    asm("nop");
_delay_1us:
    045D 0000      NOP
(0050)    asm("nop");
    045E 0000      NOP
(0051)    asm("nop");
    045F 0000      NOP
(0052)    asm("nop");
    0460 0000      NOP
(0053)   }
    0461 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    0462 940E0FBD  CALL	push_gset2
    0464 01B8      MOVW	R22,R16
(0054) 
(0055) void delay_nus(unsigned int n)       //N us延时函数
(0056)   {
(0057)    unsigned int i=0;
    0465 2744      CLR	R20
    0466 2755      CLR	R21
(0058)    for (i=0;i<n;i++)
    0467 C003      RJMP	0x046B
(0059)    delay_1us();
    0468 DFF4      RCALL	_delay_1us
    0469 5F4F      SUBI	R20,0xFF
    046A 4F5F      SBCI	R21,0xFF
    046B 1746      CP	R20,R22
    046C 0757      CPC	R21,R23
    046D F3D0      BCS	0x0468
(0060)   }
    046E 940E0FCD  CALL	pop_gset2
    0470 9508      RET
(0061)   
(0062) void delay_1ms(void)                 //1ms延时函数
(0063)   {
(0064)    unsigned int i;
(0065)    for (i=0;i<1716;i++);
_delay_1ms:
  i                    --> R16
    0471 2700      CLR	R16
    0472 2711      CLR	R17
    0473 C002      RJMP	0x0476
    0474 5F0F      SUBI	R16,0xFF
    0475 4F1F      SBCI	R17,0xFF
    0476 3B04      CPI	R16,0xB4
    0477 E0E6      LDI	R30,6
    0478 071E      CPC	R17,R30
    0479 F3D0      BCS	0x0474
(0066)   }
    047A 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    047B 940E0FBD  CALL	push_gset2
    047D 01B8      MOVW	R22,R16
(0067)   
(0068) void delay_nms(unsigned int n)       //N ms延时函数
(0069)   {
(0070)    unsigned int i=0;
    047E 2744      CLR	R20
    047F 2755      CLR	R21
(0071)    for (i=0;i<n;i++)
    0480 C003      RJMP	0x0484
(0072)    delay_1ms();
    0481 DFEF      RCALL	_delay_1ms
    0482 5F4F      SUBI	R20,0xFF
    0483 4F5F      SBCI	R21,0xFF
    0484 1746      CP	R20,R22
    0485 0757      CPC	R21,R23
    0486 F3D0      BCS	0x0481
(0073)   }
    0487 940E0FCD  CALL	pop_gset2
    0489 9508      RET
(0074)   
(0075) //////////////////////////////////////////////////////////////////////////////////  
(0076) /////////////////////////////////////////////////////////////////////////////////
(0077) /////////////////////串口UCSR0
(0078) ////////////////////////////////////////////////////////////////////////////////
(0079) void uart0_init(void)
(0080) {
(0081)  UCSR0B = 0x00;     //disable while setting baud rate
_uart0_init:
    048A 2422      CLR	R2
    048B B82A      OUT	P0A,R2
(0082)  UCSR0A = 0x00;
    048C B82B      OUT	P0B,R2
(0083)  UCSR0C = 0x06;
    048D E086      LDI	R24,6
    048E 93800095  STS	R24,0x95
(0084)  UBRR0L = 0x67;     //set baud rate lo
    0490 E687      LDI	R24,0x67
    0491 B989      OUT	P09,R24
(0085)  UBRR0H = 0x00;     //set baud rate hi
    0492 92200090  STS	R2,0x90
(0086)  UCSR0B = 0x18;
    0494 E188      LDI	R24,0x18
    0495 B98A      OUT	P0A,R24
(0087)  
(0088) 
(0089) }
    0496 9508      RET
(0090) 
(0091) 
(0092) 
(0093) void USART_Transmit( unsigned char data )
(0094) {
(0095)  
(0096) 
(0097) while ( !( UCSR0A & (1<<UDRE0)) );
_USART_Transmit:
  data                 --> R16
    0497 9B5D      SBIS	P0B,5
    0498 CFFE      RJMP	_USART_Transmit
(0098) 
(0099) UDR0 = data;
    0499 B90C      OUT	P0C,R16
(0100) 
(0101)  
(0102) 
(0103) }
    049A 9508      RET
(0104) //////////////////////////////////////////////////////////////////////////////////
(0105) /////////////////串口UCSR1
(0106) ///////////////////////////////////////////////////////////////////////////////////
(0107) void uart1_init(void)
(0108) {
(0109)  UCSR1B = 0x00; //disable while setting baud rate
_uart1_init:
    049B 2422      CLR	R2
    049C 9220009A  STS	R2,0x9A
(0110)  UCSR1A = 0x00;
    049E 9220009B  STS	R2,0x9B
(0111)  UCSR1C = 0x06;
    04A0 E086      LDI	R24,6
    04A1 9380009D  STS	R24,0x9D
(0112)  UBRR1L = 0x19; //set baud rate lo
    04A3 E189      LDI	R24,0x19
    04A4 93800099  STS	R24,0x99
(0113)  UBRR1H = 0x00; //set baud rate hi
    04A6 92200098  STS	R2,0x98
(0114)  UCSR1B = 0x1C;
    04A8 E18C      LDI	R24,0x1C
    04A9 9380009A  STS	R24,0x9A
(0115) }
    04AB 9508      RET
_serial_send:
  i                    --> R20
  command              --> R16
    04AC 940E0FA6  CALL	push_gset1
(0116) 
(0117) 
(0118) 
(0119) 
(0120) void serial_send(unsigned char command){
(0121) unsigned char i=0;
    04AE 2744      CLR	R20
    04AF C01A      RJMP	0x04CA
(0122)    while( i < char_len){
(0123)    		  while ( !( UCSR1A & (1<<UDRE1)) );
    04B0 9020009B  LDS	R2,0x9B
    04B2 FE25      SBRS	R2,5
    04B3 CFFC      RJMP	0x04B0
(0124)    		  UCSR1B &= ~(1<<TXB81);  
    04B4 9180009A  LDS	R24,0x9A
    04B6 7F8E      ANDI	R24,0xFE
    04B7 9380009A  STS	R24,0x9A
(0125) 		  if ( command & 0x01 )
    04B9 FF00      SBRS	R16,0
    04BA C005      RJMP	0x04C0
(0126)               UCSR1B |= (1<<TXB81);
    04BB 9180009A  LDS	R24,0x9A
    04BD 6081      ORI	R24,1
    04BE 9380009A  STS	R24,0x9A
(0127)    		  UDR1 = send_buffer[i];
    04C0 E28B      LDI	R24,0x2B
    04C1 E092      LDI	R25,2
    04C2 2FE4      MOV	R30,R20
    04C3 27FF      CLR	R31
    04C4 0FE8      ADD	R30,R24
    04C5 1FF9      ADC	R31,R25
    04C6 8020      LDD	R2,0+Z
    04C7 9220009C  STS	R2,0x9C
(0128)    		  i++;
    04C9 9543      INC	R20
    04CA 90200100  LDS	R2,0x100
    04CC 1542      CP	R20,R2
    04CD F310      BCS	0x04B0
(0129)    }
(0130) 
(0131)    char_len = 0 ;  
    04CE 2422      CLR	R2
    04CF 92200100  STS	R2,0x100
(0132)    return;  
    04D1 940E0FA9  CALL	pop_gset1
    04D3 9508      RET
(0133) }
(0134) 
(0135) 
(0136) int scanf_int(void)
(0137) {
(0138)    unsigned char i=0;
_scanf_int:
  i                    --> R16
    04D4 2700      CLR	R16
    04D5 C01A      RJMP	0x04F0
(0139)    
(0140)    while( i < 2){
(0141)    		  while ( !(UCSR1A& (1<<RXC1)));
    04D6 9020009B  LDS	R2,0x9B
    04D8 FE27      SBRS	R2,7
    04D9 CFFC      RJMP	0x04D6
(0142)    		  rec0 = UCSR1B;
    04DA 9020009A  LDS	R2,0x9A
    04DC 9220022A  STS	R2,_rec0
(0143) 	      rec0 = UDR1;
    04DE 9020009C  LDS	R2,0x9C
    04E0 9220022A  STS	R2,_rec0
(0144) 		  kk.half[1 - i] = rec0;
    04E2 2E20      MOV	R2,R16
    04E3 2433      CLR	R3
    04E4 E0E1      LDI	R30,1
    04E5 E0F0      LDI	R31,0
    04E6 19E2      SUB	R30,R2
    04E7 09F3      SBC	R31,R3
    04E8 E38F      LDI	R24,0x3F
    04E9 E092      LDI	R25,2
    04EA 0FE8      ADD	R30,R24
    04EB 1FF9      ADC	R31,R25
    04EC 9020022A  LDS	R2,_rec0
    04EE 8220      STD	R2,0+Z
(0145) 		  i++;
    04EF 9503      INC	R16
    04F0 3002      CPI	R16,2
    04F1 F320      BCS	0x04D6
(0146)    }  
(0147)    return kk.i1;  
    04F2 9100023F  LDS	R16,_kk
    04F4 91100240  LDS	R17,_kk+1
    04F6 9508      RET
_xy_set:
  address              --> R20
  x                    --> R22
  y                    --> R10
  xy                   --> R20
    04F7 940E0FC1  CALL	push_gset3
    04F9 2F40      MOV	R20,R16
(0148) }
(0149) /*----------------------------------------------------------------------------
(0150) 0x01    //清屏,AC自动加1,光标归位,但并不改变设置
(0151) 0x02    //归位
(0152) 0x06    //自动加一
(0153) 0x04    //自动减一
(0154) 0x0f    //开显示,开光标,光标闪烁
(0155) 0x0e    //光标开
(0156) 0x0d    //光标所在字符闪烁  
(0157) 0x0c    //光标关  
(0158) 0x18    //光标,字符一起左移
(0159) 0x1c    //光标,字符一起右移
(0160) 0x38    //8位数据宽度
(0161) LCD第一行显示寄存器地址:0X80-0X8f
(0162) LCD第二行显示寄存器地址:0XC0-0Xcf
(0163) LCD第三行显示寄存器地址:0x90-0x9f
(0164) LCD第四行显示寄存器地址:0xd0-0xdf
(0165) -----------------------------------------------------------------------------*/
(0166) void xy_set(unsigned char xy)
(0167) {
(0168) unsigned char x,y,address;
(0169) 		x = xy;
    04FA 2F64      MOV	R22,R20
(0170) 	    x = x & 0x0f;
    04FB 706F      ANDI	R22,0xF
(0171) 	    y = xy;
    04FC 2EA4      MOV	R10,R20
(0172) 		y = y >> 4; 
    04FD 2D8A      MOV	R24,R10
    04FE 9582      SWAP	R24
    04FF 708F      ANDI	R24,0xF
    0500 2EA8      MOV	R10,R24
(0173) 		
(0174)     if (y == 0) 
    0501 2388      TST	R24
    0502 F419      BNE	0x0506
(0175) 	   address = 0x80 + x;
    0503 2F46      MOV	R20,R22
    0504 5840      SUBI	R20,0x80
    0505 C011      RJMP	0x0517
(0176)     else if(y == 1) 
    0506 2D8A      MOV	R24,R10
    0507 3081      CPI	R24,1
    0508 F419      BNE	0x050C
(0177)        address = 0xc0 + x;
    0509 2F46      MOV	R20,R22
    050A 5440      SUBI	R20,0x40

⌨️ 快捷键说明

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