📄 m128_test.lst
字号:
0637 930A ST R16,-Y
0638 940E0F18 CALL div32f
063A 93100102 STS R17,0x102
063C 93000101 STS R16,0x101
063E 93300104 STS R19,0x104
0640 93200103 STS R18,0x103
(0327) return 1;
0642 E001 LDI R16,1
0643 E010 LDI R17,0
0644 962A ADIW R28,0xA
0645 940E0FD3 CALL pop_gset4
0647 9508 RET
_relay_write:
p --> R20
data --> R16
0648 940E0FA6 CALL push_gset1
(0328)
(0329) }
(0330) ///////////////////////////////////////////////////////////////////////////////
(0331) void relay_write(unsigned char data)
(0332) {
(0333) unsigned char *p;
(0334) p = (unsigned char *) 0x2250;
064A E540 LDI R20,0x50
064B E252 LDI R21,0x22
(0335)
(0336) *p=data;
064C 01FA MOVW R30,R20
064D 8300 STD R16,0+Z
(0337)
(0338) }
064E 940E0FA9 CALL pop_gset1
0650 9508 RET
(0339)
(0340)
(0341) unsigned char relay_read(void)
(0342) {
(0343)
(0344) unsigned char *p;
(0345) p = (unsigned char *) 0x2250;
_relay_read:
p --> R16
0651 E500 LDI R16,0x50
0652 E212 LDI R17,0x22
(0346) return *p;
0653 01F8 MOVW R30,R16
0654 8100 LDD R16,0+Z
0655 9508 RET
(0347)
(0348) }
(0349) ////////////////////////////////////////////////////////////////////////////
(0350) /////////////
(0351) ///////// pwm
(0352) ///////
(0353) /////////////////////////////////////////////////////////////////////////////
(0354) void motor_pwm ( int left,int right )
(0355) {
(0356)
(0357) DDRB|=0XE0;
_motor_pwm:
right --> R18
left --> R16
0656 B387 IN R24,P17
0657 6E80 ORI R24,0xE0
0658 BB87 OUT P17,R24
(0358) TCCR1A=0xA8;
0659 EA88 LDI R24,0xA8
065A BD8F OUT P2F,R24
(0359) TCCR1B=0x11;
065B E181 LDI R24,0x11
065C BD8E OUT P2E,R24
(0360) ICR1 = 0x6000;
065D E080 LDI R24,0
065E E690 LDI R25,0x60
065F 93900047 STS R25,0x47
0661 93800046 STS R24,0x46
(0361) OCR1A = left; /////12288 is stop
0663 9310004B STS R17,0x4B
0665 9300004A STS R16,0x4A
(0362) OCR1B = right; //// range is from 0 to 24576
0667 93300049 STS R19,0x49
0669 93200048 STS R18,0x48
(0363)
(0364) //OCR1C = 0x3000 + mid;
(0365) }
066B 9508 RET
(0366)
(0367) void mainboard_pwm(int pwm1, int pwm2, int pwm3)
(0368) {
(0369) DDRE |= 0x38;
_mainboard_pwm:
pwm3 --> Y+0
pwm2 --> R18
pwm1 --> R16
066C B182 IN R24,P02
066D 6388 ORI R24,0x38
066E B982 OUT P02,R24
(0370) TCCR3A = 0xA8;
066F EA88 LDI R24,0xA8
0670 9380008B STS R24,0x8B
(0371) TCCR3B = 0x12;
0672 E182 LDI R24,0x12
0673 9380008A STS R24,0x8A
(0372) ICR3 = 0x4E20;
0675 E280 LDI R24,0x20
0676 E49E LDI R25,0x4E
0677 93900081 STS R25,0x81
0679 93800080 STS R24,0x80
(0373) OCR3A = pwm1;
067B 93100087 STS R17,0x87
067D 93000086 STS R16,0x86
(0374) OCR3B = pwm2;
067F 93300085 STS R19,0x85
0681 93200084 STS R18,0x84
(0375) OCR3C = pwm3;
0683 8008 LDD R0,0+Y
0684 8019 LDD R1,1+Y
0685 92100083 STS R1,0x83
0687 92000082 STS R0,0x82
(0376)
(0377) }
0689 9508 RET
_mainboard_pwm1:
frequ --> R20
068A 940E0FA6 CALL push_gset1
068C 01A8 MOVW R20,R16
(0378)
(0379) void mainboard_pwm1( int frequ)
(0380) {
(0381) DDRE |= 0x38;
068D B182 IN R24,P02
068E 6388 ORI R24,0x38
068F B982 OUT P02,R24
(0382) TCCR3A = 0xA8;
0690 EA88 LDI R24,0xA8
0691 9380008B STS R24,0x8B
(0383) TCCR3B = 0x12;
0693 E182 LDI R24,0x12
0694 9380008A STS R24,0x8A
(0384) ICR3 = frequ;
0696 93500081 STS R21,0x81
0698 93400080 STS R20,0x80
(0385) OCR3A = frequ/2;
069A E022 LDI R18,2
069B E030 LDI R19,0
069C 018A MOVW R16,R20
069D 940E0E29 CALL div16s
069F 93100087 STS R17,0x87
06A1 93000086 STS R16,0x86
(0386) OCR3B = frequ/2;
06A3 E022 LDI R18,2
06A4 E030 LDI R19,0
06A5 018A MOVW R16,R20
06A6 940E0E29 CALL div16s
06A8 93100085 STS R17,0x85
06AA 93000084 STS R16,0x84
(0387) OCR3C = frequ/2;
06AC E022 LDI R18,2
06AD E030 LDI R19,0
06AE 018A MOVW R16,R20
06AF 940E0E29 CALL div16s
06B1 93100083 STS R17,0x83
06B3 93000082 STS R16,0x82
(0388)
(0389) }
06B5 940E0FA9 CALL pop_gset1
06B7 9508 RET
(0390) //////////////////////////////////////////////////////////////////////////////
(0391) //
(0392) //
(0393) /////////////////////////////////////////////////////////////////////////////////
(0394)
(0395)
(0396)
(0397)
(0398)
(0399)
(0400)
(0401) //call this routine to initialize all peripherals
(0402) void init_devices(void)
(0403) {
(0404) //stop errant interrupts until set up
(0405) CLI(); //disable all interrupts
_init_devices:
06B8 94F8 BCLR 7
(0406) XDIV = 0x00; //xtal divider
06B9 2422 CLR R2
06BA BE2C OUT P3C,R2
(0407) XMCRA = 0x00; //external memory
06BB 9220006D STS R2,0x6D
(0408) init_isp_devices();
06BD 940E045B CALL _init_isp_devices
(0409) init_gyro();
06BF DEDC RCALL _init_gyro
(0410) uart0_init();
06C0 DDC9 RCALL _uart0_init
(0411) uart1_init();
06C1 DDD9 RCALL _uart1_init
(0412) MCUCR = 0x80;
06C2 E880 LDI R24,0x80
06C3 BF85 OUT P35,R24
(0413) EICRA = 0x00; //extended ext ints
06C4 2422 CLR R2
06C5 9220006A STS R2,0x6A
(0414) EICRB = 0x00; //extended ext ints
06C7 BE2A OUT P3A,R2
(0415) EIMSK = 0x00;
06C8 BE29 OUT P39,R2
(0416) TIMSK = 0x00; //timer interrupt sources
06C9 BE27 OUT P37,R2
(0417) ETIMSK = 0x00; //extended timer interrupt sources
06CA 9220007D STS R2,0x7D
(0418) SEI(); //re-enable interrupts
06CC 9478 BSET 7
(0419) //all peripherals are now initialized
(0420) }
06CD 9508 RET
(0421) void test_motor_pwm(void)
(0422) {
(0423) motor_pwm(12288,12288);
_test_motor_pwm:
06CE E020 LDI R18,0
06CF E330 LDI R19,0x30
06D0 E000 LDI R16,0
06D1 E310 LDI R17,0x30
06D2 DF83 RCALL _motor_pwm
(0424) do
(0425) {
(0426)
(0427) xy_set(0x01);
06D3 E001 LDI R16,1
06D4 DE22 RCALL _xy_set
(0428) printf_str(" inp value :");
06D5 EB0E LDI R16,0xBE
06D6 E011 LDI R17,1
06D7 DE94 RCALL _printf_str
(0429) delay_nms(100);
06D8 E604 LDI R16,0x64
06D9 E010 LDI R17,0
06DA DDA0 RCALL _delay_nms
(0430) xy_set(0x21);
06DB E201 LDI R16,0x21
06DC DE1A RCALL _xy_set
(0431) printf_str(" ");
06DD EA0F LDI R16,0xAF
06DE E011 LDI R17,1
06DF DE8C RCALL _printf_str
(0432) xy_set(0x21);
06E0 E201 LDI R16,0x21
06E1 DE15 RCALL _xy_set
(0433) left=scanf_int();
06E2 DDF1 RCALL _scanf_int
06E3 93100229 STS R17,_left+1
06E5 93000228 STS R16,_left
(0434) delay_nms(100);
06E7 E604 LDI R16,0x64
06E8 E010 LDI R17,0
06E9 DD91 RCALL _delay_nms
(0435) xy_set(0x31);
06EA E301 LDI R16,0x31
06EB DE0B RCALL _xy_set
(0436) printf_str(" ");
06EC EA0F LDI R16,0xAF
06ED E011 LDI R17,1
06EE DE7D RCALL _printf_str
(0437) xy_set(0x31);
06EF E301 LDI R16,0x31
06F0 DE06 RCALL _xy_set
(0438) delay_nms(100);
06F1 E604 LDI R16,0x64
06F2 E010 LDI R17,0
06F3 DD87 RCALL _delay_nms
(0439) printf_int(left);
06F4 91000228 LDS R16,_left
06F6 91100229 LDS R17,_left+1
06F8 DE64 RCALL _printf_int
(0440) right=left;
06F9 90200228 LDS R2,_left
06FB 90300229 LDS R3,_left+1
06FD 92300227 STS R3,_right+1
06FF 92200226 STS R2,_right
(0441) motor_pwm(right,left);
0701 0191 MOVW R18,R2
0702 0181 MOVW R16,R2
0703 DF52 RCALL _motor_pwm
(0442) }
(0443) while (1);
0704 CFCE RJMP 0x06D3
(0444)
(0445)
(0446) }
0705 9508 RET
(0447) void test_isp_cnt()
(0448) {
(0449) motor_pwm(12288,12288);
_test_isp_cnt:
0706 E020 LDI R18,0
0707 E330 LDI R19,0x30
0708 E000 LDI R16,0
0709 E310 LDI R17,0x30
070A DF4B RCALL _motor_pwm
(0450) xy_set(0x01);
070B E001 LDI R16,1
070C DDEA RCALL _xy_set
(0451) printf_str(" inp value :");
070D EB0E LDI R16,0xBE
070E E011 LDI R17,1
070F DE5C RCALL _printf_str
(0452) delay_nms(100);
0710 E604 LDI R16,0x64
0711 E010 LDI R17,0
0712 DD68 RCALL _delay_nms
(0453) xy_set(0x21);
0713 E201 LDI R16,0x21
0714 DDE2 RCALL _xy_set
(0454) printf_str(" ");
0715 EA06 LDI R16,0xA6
0716 E011 LDI R17,1
0717 DE54 RCALL _printf_str
(0455) xy_set(0x21);
0718 E201 LDI R16,0x21
0719 DDDD RCALL _xy_set
(0456) left=scanf_int();
071A DDB9 RCALL _scanf_int
071B 93100229 STS R17,_left+1
071D 93000228 STS R16,_left
(0457) delay_nms(100);
071F E604 LDI R16,0x64
0720 E010 LDI R17,0
0721 DD59 RCALL _delay_nms
(0458) xy_set(0x31);
0722 E301 LDI R16,0x31
0723 DDD3 RCALL _xy_set
(0459) printf_str(" ");
0724 EA06 LDI R16,0xA6
0725 E011 LDI R17,1
0726 DE45 RCALL _printf_str
(0460) xy_set(0x31);
0727 E301 LDI R16,0x31
0728 DDCE RCALL _xy_set
(0461) delay_nms(100);
0729 E604 LDI R16,0x64
072A E010 LDI R17,0
072B DD4F RCALL _delay_nms
(0462) printf_int(left);
072C 91000228 LDS R16,_left
072E 91100229 LDS R17,_left+1
0730 DE2C RCALL _printf_int
(0463) right=left;
0731 90200228 LDS R2,_left
0733 90300229 LDS R3,_left+1
0735 92300227 STS R3,_right+1
0737 92200226 STS R2,_right
(0464) motor_pwm(right,left);
0739 0191 MOVW R18,R2
073A 0181 MOVW R16,R2
073B DF1A RCALL _motor_pwm
(0465)
(0466) do
(0467) {
(0468) spi_cnt(CH1);
073C E001 LDI R16,1
073D E010 LDI R17,0
073E 940E023B CALL _spi_cnt
(0469) delay_nms(100);
0740 E604 LDI R16,0x64
0741 E010 LDI R17,0
0742 DD38 RCALL _delay_nms
(0470) xy_set(0x27);
0743 E207 LDI R16,0x27
0744 DDB2 RCALL _xy_set
(0471) printf_str(" ");
0745 EA0F LDI R16,0xAF
0746 E011 LDI R17,1
0747 DE24 RCALL _printf_str
(0472) xy_set(0x27);
0748 E207 LDI R16,0x27
0749 DDAD RCALL _xy_set
(0473) len_test=len/7168;
074A E080 LDI R24,0
074B E19C LDI R25,0x1C
074C E0A0 LDI R26,0
074D E0B0 LDI R27,0
074E 90400224 LDS R4,_len+2
0750 90500225 LDS R5,_len+3
0752 90200222 LDS R2,_len
0754 90300223 LDS R3,_len+1
0756 93BA ST R27,-Y
0757 93AA ST R26,-Y
0758 939A ST R25,-Y
0759 938A ST R24,-Y
075A 0181 MOVW R16,R2
075B 0192 MOVW R18,R4
075C 940E11DB CALL div32s
075E 93100106 STS R17,0x106
0760 93000105 STS R16,0x105
(0474) printf_int(len_test);
0762 DDFA RCALL _printf_int
(0475) xy_set(0x01);
0763 E001 LDI R16,1
0764 DD92 RCALL _xy_set
(0476) printf_hex(inp(0x250));
0765 E500 LDI R16,0x50
0766 E012 LDI R17,2
0767 DE2A RCALL _inp
0768 DDDC RCALL _printf_hex
(0477)
(0478) delay_nms(100);
0769 E604 LDI R16,0x64
076A E010 LDI R17,0
076B DD0F RCALL _delay_nms
(0479) }
(0480) while(1);
076C CFCF RJMP 0x073C
(0481) }
076D 9508 RET
_gogo:
k --> R22
j --> R20
speed --> Y+2
gowhere --> Y+0
i --> R10
076E 940E0FC9 CALL push_gset5
0770 9724 SBIW R28,4
(0482)
(0483) void gogo(void)
(0484) {
(0485) int speed = 0;
0771 2400 CLR R0
0772 2411 CLR R1
0773 820A STD R0,2+Y
0774 821B STD R1,3+Y
(0486) int gowhere = 0;
0775 8208 STD R0,0+Y
0776 8219 STD R1,1+Y
(0487)
(0488) int i=0,j=0,k=0;
0777 24AA CLR R10
0778 24BB CLR R11
0779 2744
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -