📄 motor.lst
字号:
(0007) /* 定义上拉电阻和设置高电平输出 */
(0008) /* 为端口引脚定义方向 */
(0009) PORTC = 0XFF;
_ReadPin:
i --> R16
0119 EF8F LDI R24,0xFF
011A BB85 OUT 0x15,R24
(0010) DDRC = 0X00;
011B 2422 CLR R2
011C BA24 OUT 0x14,R2
(0011) /* 为了同步插入nop 指令*/
(0012) _NOP();
011D 0000 NOP
(0013) /* 读取端口引脚*/
(0014) i = PINC;
011E B303 IN R16,0x13
011F 9508 RET
_car_turn:
mes --> R20
0120 940E01CD CALL push_gset1
0122 2F40 MOV R20,R16
(0015) }
(0016)
(0017) void car_turn(unsigned char mes)
(0018) {
(0019) switch(mes)
0123 2755 CLR R21
0124 3F48 CPI R20,0xF8
0125 E0E0 LDI R30,0
0126 075E CPC R21,R30
0127 F111 BEQ 0x014A
0128 3F49 CPI R20,0xF9
0129 E0E0 LDI R30,0
012A 075E CPC R21,R30
012B F109 BEQ 0x014D
012C 3F4A CPI R20,0xFA
012D E0E0 LDI R30,0
012E 075E CPC R21,R30
012F F181 BEQ 0x0160
0130 3F4B CPI R20,0xFB
0131 E0E0 LDI R30,0
0132 075E CPC R21,R30
0133 F409 BNE 0x0135
0134 C038 RJMP 0x016D
0135 3F4C CPI R20,0xFC
0136 E0E0 LDI R30,0
0137 075E CPC R21,R30
0138 F409 BNE 0x013A
0139 C046 RJMP 0x0180
013A 3F4D CPI R20,0xFD
013B E0E0 LDI R30,0
013C 075E CPC R21,R30
013D F409 BNE 0x013F
013E C054 RJMP 0x0193
013F 3F4E CPI R20,0xFE
0140 E0E0 LDI R30,0
0141 075E CPC R21,R30
0142 F409 BNE 0x0144
0143 C052 RJMP 0x0196
0144 3F4F CPI R20,0xFF
0145 E0E0 LDI R30,0
0146 075E CPC R21,R30
0147 F409 BNE 0x0149
0148 C060 RJMP 0x01A9
0149 C06B RJMP 0x01B5
(0020) {
(0021) case 0xf8: forward(); break;
014A 940E004B CALL _forward
014C C068 RJMP 0x01B5
(0022)
(0023) case 0xf9: {
(0024) back_left();
014D 940E005A CALL _back_left
(0025) delay(1000);
014F EE08 LDI R16,0xE8
0150 E013 LDI R17,3
0151 940E006E CALL _delay
(0026) car_stop();
0153 940E0069 CALL _car_stop
(0027) delay(1000);
0155 EE08 LDI R16,0xE8
0156 E013 LDI R17,3
0157 940E006E CALL _delay
(0028) for_right();
0159 940E005F CALL _for_right
(0029) delay(1000);
015B EE08 LDI R16,0xE8
015C E013 LDI R17,3
015D 940E006E CALL _delay
(0030) }; break;
015F C055 RJMP 0x01B5
(0031)
(0032) case 0xfa: {
(0033) backward();
0160 940E0050 CALL _backward
(0034) delay(1000);
0162 EE08 LDI R16,0xE8
0163 E013 LDI R17,3
0164 940E006E CALL _delay
(0035) for_left();
0166 940E0055 CALL _for_left
(0036) delay(1000);
0168 EE08 LDI R16,0xE8
0169 E013 LDI R17,3
016A 940E006E CALL _delay
(0037) }; break;
016C C048 RJMP 0x01B5
(0038)
(0039)
(0040) case 0xfb: {
(0041) back_left();
016D 940E005A CALL _back_left
(0042) delay(1000);
016F EE08 LDI R16,0xE8
0170 E013 LDI R17,3
0171 940E006E CALL _delay
(0043) car_stop();
0173 940E0069 CALL _car_stop
(0044) delay(1000);
0175 EE08 LDI R16,0xE8
0176 E013 LDI R17,3
0177 940E006E CALL _delay
(0045) for_right();
0179 940E005F CALL _for_right
(0046) delay(1000);
017B EE08 LDI R16,0xE8
017C E013 LDI R17,3
017D 940E006E CALL _delay
(0047) }; break;
017F C035 RJMP 0x01B5
(0048)
(0049) case 0xfc: {
(0050) back_right();
0180 940E0064 CALL _back_right
(0051) delay(1000);
0182 EE08 LDI R16,0xE8
0183 E013 LDI R17,3
0184 940E006E CALL _delay
(0052) car_stop();
0186 940E0069 CALL _car_stop
(0053) delay(1000);
0188 EE08 LDI R16,0xE8
0189 E013 LDI R17,3
018A 940E006E CALL _delay
(0054) for_left();
018C 940E0055 CALL _for_left
(0055) delay(1000);
018E EE08 LDI R16,0xE8
018F E013 LDI R17,3
0190 940E006E CALL _delay
(0056) }; break;
0192 C022 RJMP 0x01B5
(0057)
(0058) case 0xfd: forward(); break;
0193 940E004B CALL _forward
0195 C01F RJMP 0x01B5
(0059)
(0060) case 0xfe: {
(0061) back_right();
0196 940E0064 CALL _back_right
(0062) delay(1000);
0198 EE08 LDI R16,0xE8
0199 E013 LDI R17,3
019A 940E006E CALL _delay
(0063) car_stop();
019C 940E0069 CALL _car_stop
(0064) delay(1000);
019E EE08 LDI R16,0xE8
019F E013 LDI R17,3
01A0 940E006E CALL _delay
(0065) for_left();
01A2 940E0055 CALL _for_left
(0066) delay(1000);
01A4 EE08 LDI R16,0xE8
01A5 E013 LDI R17,3
01A6 940E006E CALL _delay
(0067) }; break;
01A8 C00C RJMP 0x01B5
(0068)
(0069) case 0xff: {
(0070) backward();
01A9 940E0050 CALL _backward
(0071) delay(1000);
01AB EE08 LDI R16,0xE8
01AC E013 LDI R17,3
01AD 940E006E CALL _delay
(0072) for_left();
01AF 940E0055 CALL _for_left
(0073) delay(1000);
01B1 EE08 LDI R16,0xE8
01B2 E013 LDI R17,3
01B3 940E006E CALL _delay
(0074) } break;
(0075)
(0076) default: break;
01B5 940E01D0 CALL pop_gset1
01B7 9508 RET
(0077)
(0078) }
(0079) }
(0080)
(0081)
(0082) void main()
(0083) {
(0084) unsigned char pin = 0x00;
_main:
pin --> R20
01B8 2744 CLR R20
01B9 C003 RJMP 0x01BD
(0085) while(1)
(0086) {
(0087) pin = ReadPin();
01BA DF5E RCALL _ReadPin
01BB 2F40 MOV R20,R16
(0088) car_turn(pin);
FILE: <library>
01BC DF63 RCALL _car_turn
01BD CFFC RJMP 0x01BA
01BE 9508 RET
pop_gset2:
01BF E0E2 LDI R30,2
01C0 940C01D1 JMP pop
pop_gset3:
01C2 E0E4 LDI R30,4
01C3 940C01D1 JMP pop
push_gset5:
01C5 92FA ST R15,-Y
01C6 92EA ST R14,-Y
push_gset4:
01C7 92DA ST R13,-Y
01C8 92CA ST R12,-Y
push_gset3:
01C9 92BA ST R11,-Y
01CA 92AA ST R10,-Y
push_gset2:
01CB 937A ST R23,-Y
01CC 936A ST R22,-Y
push_gset1:
01CD 935A ST R21,-Y
01CE 934A ST R20,-Y
01CF 9508 RET
pop_gset1:
01D0 E0E1 LDI R30,1
pop:
01D1 9149 LD R20,Y+
01D2 9159 LD R21,Y+
01D3 FDE0 SBRC R30,0
01D4 9508 RET
01D5 9169 LD R22,Y+
01D6 9179 LD R23,Y+
01D7 FDE1 SBRC R30,1
01D8 9508 RET
01D9 90A9 LD R10,Y+
01DA 90B9 LD R11,Y+
01DB FDE2 SBRC R30,2
01DC 9508 RET
01DD 90C9 LD R12,Y+
01DE 90D9 LD R13,Y+
01DF FDE3 SBRC R30,3
01E0 9508 RET
01E1 90E9 LD R14,Y+
01E2 90F9 LD R15,Y+
01E3 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -