📄 m128_test.lst
字号:
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 + -