📄 stepmotor.lst
字号:
1AD BC2D OUT 0x2D,R2
(0137) TCNT1L = zhuansu&0xFF;
1AE 9180 0063 LDS R24,zhuansu
1B0 9190 0064 LDS R25,zhuansu+1
1B2 7090 ANDI R25,0
1B3 BD8C OUT 0x2C,R24
(0138) TCCR1A = 0x00;
1B4 2422 CLR R2
1B5 BC2F OUT 0x2F,R2
(0139) TCCR1B = 0x02;
1B6 E082 LDI R24,2
1B7 BD8E OUT 0x2E,R24
1B8 9508 RET
_timer1_ovf_isr:
1B9 920A ST R0,-Y
1BA 921A ST R1,-Y
1BB 922A ST R2,-Y
1BC 923A ST R3,-Y
1BD 924A ST R4,-Y
1BE 925A ST R5,-Y
1BF 926A ST R6,-Y
1C0 927A ST R7,-Y
1C1 928A ST R8,-Y
1C2 929A ST R9,-Y
1C3 930A ST R16,-Y
1C4 931A ST R17,-Y
1C5 932A ST R18,-Y
1C6 933A ST R19,-Y
1C7 938A ST R24,-Y
1C8 939A ST R25,-Y
1C9 93AA ST R26,-Y
1CA 93BA ST R27,-Y
1CB 93EA ST R30,-Y
1CC 93FA ST R31,-Y
1CD B60F IN R0,0x3F
1CE 920A ST R0,-Y
(0140) }
(0141) /****************************
(0142) * 定时器1中断函数 *
(0143) ****************************/
(0144) #pragma interrupt_handler timer1_ovf_isr:9
(0145) void timer1_ovf_isr(void)
(0146) {
(0147) TCNT1H = zhuansu>>8;
1CF 9020 0063 LDS R2,zhuansu
1D1 9030 0064 LDS R3,zhuansu+1
1D3 2C23 MOV R2,R3
1D4 2433 CLR R3
1D5 BC2D OUT 0x2D,R2
(0148) TCNT1L = zhuansu&0xFF;
1D6 9180 0063 LDS R24,zhuansu
1D8 9190 0064 LDS R25,zhuansu+1
1DA 7090 ANDI R25,0
1DB BD8C OUT 0x2C,R24
(0149) PORTC &= 0xF0;
1DC B385 IN R24,0x15
1DD 7F80 ANDI R24,0xF0
1DE BB85 OUT 0x15,R24
(0150) if(n)
1DF 9020 0062 LDS R2,n
1E1 2022 TST R2
1E2 F021 BEQ 0x01E7
(0151) bj_fsf(m); //反转
1E3 9100 0061 LDS R16,m
1E5 DF13 RCALL _bj_fsf
1E6 C003 RJMP 0x01EA
(0152) else
(0153) bj_fs(m); //正转
1E7 9100 0061 LDS R16,m
1E9 DE73 RCALL _bj_fs
1EA 9009 LD R0,Y+
1EB BE0F OUT 0x3F,R0
1EC 91F9 LD R31,Y+
1ED 91E9 LD R30,Y+
1EE 91B9 LD R27,Y+
1EF 91A9 LD R26,Y+
1F0 9199 LD R25,Y+
1F1 9189 LD R24,Y+
1F2 9139 LD R19,Y+
1F3 9129 LD R18,Y+
1F4 9119 LD R17,Y+
1F5 9109 LD R16,Y+
1F6 9099 LD R9,Y+
1F7 9089 LD R8,Y+
1F8 9079 LD R7,Y+
1F9 9069 LD R6,Y+
1FA 9059 LD R5,Y+
1FB 9049 LD R4,Y+
1FC 9039 LD R3,Y+
1FD 9029 LD R2,Y+
1FE 9019 LD R1,Y+
1FF 9009 LD R0,Y+
200 9518 RETI
(0154) }
(0155)
(0156) /****************************
(0157) * 器件初始化函数 *
(0158) ****************************/
(0159) void init_devices(void)
(0160) {
(0161) CLI();
_init_devices:
201 94F8 BCLR 7
(0162) port_init();
202 DE4D RCALL _port_init
(0163) timer1_init();
203 DFA1 RCALL _timer1_init
(0164)
(0165) MCUCR = 0x00;
204 2422 CLR R2
205 BE25 OUT 0x35,R2
(0166) GICR = 0x00;
206 BE2B OUT 0x3B,R2
(0167) TIMSK = 0x04;
207 E084 LDI R24,4
208 BF89 OUT 0x39,R24
(0168) SEI();
209 9478 BSET 7
20A 9508 RET
(0169) }
(0170)
(0171) /****************************
(0172) * 主函数 *
(0173) ****************************/
(0174) void main(void)
(0175) {
(0176) unsigned char key,key1;
(0177) init_devices();
_main:
key1 --> R22
key --> R20
20B DFF5 RCALL _init_devices
20C C080 RJMP 0x028D
(0178)
(0179) while(1)
(0180) {
(0181) key=RD_KEY(); //按键扫描
20D B343 IN R20,0x13
20E 604F ORI R20,0xF
20F 9540 COM R20
210 9542 SWAP R20
211 704F ANDI R20,0xF
(0182) if(key)
212 F409 BNE 0x0214
213 C079 RJMP 0x028D
(0183) {
(0184) delay_nms(200);
214 EC08 LDI R16,0xC8
215 E010 LDI R17,0
216 940E 02AA CALL _delay_nms
(0185) key1=RD_KEY();
218 B363 IN R22,0x13
219 606F ORI R22,0xF
21A 9560 COM R22
21B 9562 SWAP R22
21C 706F ANDI R22,0xF
(0186) if(key==key1)
21D 1746 CP R20,R22
21E F009 BEQ 0x0220
21F C06B RJMP 0x028B
(0187) {
(0188) switch(key) //按键有效,相应处理
220 2F64 MOV R22,R20
221 2777 CLR R23
222 3061 CPI R22,1
223 E0E0 LDI R30,0
224 077E CPC R23,R30
225 F079 BEQ 0x0235
226 3062 CPI R22,2
227 E0E0 LDI R30,0
228 077E CPC R23,R30
229 F161 BEQ 0x0256
22A 3064 CPI R22,4
22B E0E0 LDI R30,0
22C 077E CPC R23,R30
22D F409 BNE 0x022F
22E C03C RJMP 0x026B
22F 3068 CPI R22,0x8
230 E0E0 LDI R30,0
231 077E CPC R23,R30
232 F409 BNE 0x0234
233 C042 RJMP 0x0276
234 C056 RJMP 0x028B
(0189) {
(0190) case 0x01: //S1键处理:转速增加
(0191) zhuansu += 100;
235 9180 0063 LDS R24,zhuansu
237 9190 0064 LDS R25,zhuansu+1
239 598C SUBI R24,0x9C
23A 4F9F SBCI R25,0xFF
23B 9390 0064 STS zhuansu+1,R25
23D 9380 0063 STS zhuansu,R24
(0192) if(zhuansu>62000)zhuansu=62000;
23F E380 LDI R24,0x30
240 EF92 LDI R25,0xF2
241 E0A0 LDI R26,0
242 E0B0 LDI R27,0
243 9020 0063 LDS R2,zhuansu
245 9030 0064 LDS R3,zhuansu+1
247 2444 CLR R4
248 2455 CLR R5
249 1582 CP R24,R2
24A 0593 CPC R25,R3
24B 05A4 CPC R26,R4
24C 05B5 CPC R27,R5
24D F00C BLT 0x024F
24E C03C RJMP 0x028B
24F E380 LDI R24,0x30
250 EF92 LDI R25,0xF2
251 9390 0064 STS zhuansu+1,R25
253 9380 0063 STS zhuansu,R24
(0193) break;
255 C035 RJMP 0x028B
(0194) case 0x02: //S2键处理:转速降低
(0195) zhuansu -= 100;
256 9180 0063 LDS R24,zhuansu
258 9190 0064 LDS R25,zhuansu+1
25A 5684 SUBI R24,0x64
25B 4090 SBCI R25,0
25C 9390 0064 STS zhuansu+1,R25
25E 9380 0063 STS zhuansu,R24
(0196) if(zhuansu<5000)zhuansu=5000;
260 3888 CPI R24,0x88
261 E1E3 LDI R30,0x13
262 079E CPC R25,R30
263 F538 BCC 0x028B
264 E888 LDI R24,0x88
265 E193 LDI R25,0x13
266 9390 0064 STS zhuansu+1,R25
268 9380 0063 STS zhuansu,R24
(0197) break;
26A C020 RJMP 0x028B
(0198) case 0x04: //S3键处理:转换驱动方式
(0199) m++;
26B 9180 0061 LDS R24,m
26D 5F8F SUBI R24,0xFF
26E 9380 0061 STS m,R24
(0200) if(m>=4)m=1;
270 3084 CPI R24,4
271 F0C8 BCS 0x028B
272 E081 LDI R24,1
273 9380 0061 STS m,R24
(0201) break;
275 C015 RJMP 0x028B
(0202) case 0x08: //S4键处理:正反转控制
(0203) if(n)
276 9020 0062 LDS R2,n
278 2022 TST R2
279 F021 BEQ 0x027E
(0204) n=0;
27A 2422 CLR R2
27B 9220 0062 STS n,R2
27D C00D RJMP 0x028B
(0205) else
(0206) n=1;
27E E081 LDI R24,1
27F 9380 0062 STS n,R24
(0207) break;
(0208) default:break;
(0209) }
(0210) }
281 C009 RJMP 0x028B
(0211) while(key) //等待按键释放
(0212) {
(0213) delay_nms(100);
282 E604 LDI R16,0x64
283 E010 LDI R17,0
284 940E 02AA CALL _delay_nms
(0214) key=RD_KEY();
286 B343 IN R20,0x13
287 604F ORI R20,0xF
288 9540 COM R20
289 9542 SWAP R20
28A 704F ANDI R20,0xF
28B 2344 TST R20
28C F7A9 BNE 0x0282
28D CF7F RJMP 0x020D
28E 9508 RET
FILE: F:\ziliao\新建文件夹\horselight_icc\cfile\delay.c
(0001) #define DELAY_C
(0002) //#include "includes.h"
(0003) #define XTAL 4 //晶振频率,单位MHz
(0004) void delay_1us(void) //1us延时函数
(0005) {
(0006) asm("nop");
_delay_1us:
28F 0000 NOP
290 9508 RET
_delay_nus:
i --> R20
n --> R10
291 940E 030A CALL push_xgset300C
293 0158 MOVW R10,R16
(0007) }
(0008)
(0009) void delay_nus(unsigned int n) //N us延时函数
(0010) {
(0011) unsigned int i=0;
(0012) for (i=0;i<n;i++)
294 2744 CLR R20
295 2755 CLR R21
296 C003 RJMP 0x029A
(0013) delay_1us();
297 DFF7 RCALL _delay_1us
298 5F4F SUBI R20,0xFF
299 4F5F SBCI R21,0xFF
29A 154A CP R20,R10
29B 055B CPC R21,R11
29C F3D0 BCS 0x0297
29D 940C 030F JMP pop_xgset300C
(0014) }
(0015)
(0016) void delay_1ms(void) //1ms延时函数
(0017) {
(0018) unsigned int i;
(0019) for (i=0;i<(unsigned int)(XTAL*143-2);i++);
_delay_1ms:
i --> R16
29F 2700 CLR R16
2A0 2711 CLR R17
2A1 C002 RJMP 0x02A4
2A2 5F0F SUBI R16,0xFF
2A3 4F1F SBCI R17,0xFF
2A4 E38A LDI R24,0x3A
2A5 E092 LDI R25,2
2A6 1708 CP R16,R24
2A7 0719 CPC R17,R25
2A8 F3C8 BCS 0x02A2
2A9 9508 RET
_delay_nms:
i --> R20
n --> R10
2AA 940E 030A CALL push_xgset300C
2AC 0158 MOVW R10,R16
(0020) }
(0021)
(0022) void delay_nms(unsigned int n) //N ms延时函数
(0023) {
(0024) unsigned int i=0;
(0025) for (i=0;i<n;i++)
2AD 2744 CLR R20
2AE 2755 CLR R21
2AF C003 RJMP 0x02B3
(0026) {
(0027) delay_1ms();
FILE: <library>
2B0 DFEE RCALL _delay_1ms
2B1 5F4F SUBI R20,0xFF
2B2 4F5F SBCI R21,0xFF
2B3 154A CP R20,R10
2B4 055B CPC R21,R11
2B5 F3D0 BCS 0x02B0
2B6 940C 030F JMP pop_xgset300C
mod16s:
2B8 9468 BSET 6
2B9 92DA ST R13,-Y
2BA 2ED1 MOV R13,R17
2BB C004 RJMP 0x02C0
div16s:
2BC 94E8 BCLR 6
2BD 92DA ST R13,-Y
2BE 2ED1 MOV R13,R17
2BF 26D3 EOR R13,R19
2C0 FF17 SBRS R17,7
2C1 C004 RJMP 0x02C6
2C2 9510 COM R17
2C3 9500 COM R16
2C4 5F0F SUBI R16,0xFF
2C5 4F1F SBCI R17,0xFF
2C6 FF37 SBRS R19,7
2C7 C004 RJMP 0x02CC
2C8 9530 COM R19
2C9 9520 COM R18
2CA 5F2F SUBI R18,0xFF
2CB 4F3F SBCI R19,0xFF
2CC 940E 02D9 CALL xdiv16u
2CE FED7 SBRS R13,7
2CF C004 RJMP 0x02D4
2D0 9510 COM R17
2D1 9500 COM R16
2D2 5F0F SUBI R16,0xFF
2D3 4F1F SBCI R17,0xFF
2D4 90D9 LD R13,Y+
2D5 9508 RET
mod16u:
2D6 9468 BSET 6
2D7 C001 RJMP xdiv16u
div16u:
2D8 94E8 BCLR 6
xdiv16u:
2D9 92EA ST R14,-Y
2DA 92FA ST R15,-Y
2DB 938A ST R24,-Y
2DC 24EE CLR R14
2DD 24FF CLR R15
2DE E180 LDI R24,0x10
2DF 0F00 LSL R16
2E0 1F11 ROL R17
2E1 1CEE ROL R14
2E2 1CFF ROL R15
2E3 16E2 CP R14,R18
2E4 06F3 CPC R15,R19
2E5 F018 BCS 0x02E9
2E6 1AE2 SUB R14,R18
2E7 0AF3 SBC R15,R19
2E8 9503 INC R16
2E9 958A DEC R24
2EA F7A1 BNE 0x02DF
2EB F416 BRTC 0x02EE
2EC 2D0E MOV R16,R14
2ED 2D1F MOV R17,R15
2EE 9189 LD R24,Y+
2EF 90F9 LD R15,Y+
2F0 90E9 LD R14,Y+
2F1 9508 RET
mod8u:
2F2 9468 BSET 6
2F3 C001 RJMP xdiv8u
div8u:
2F4 94E8 BCLR 6
xdiv8u:
2F5 932A ST R18,-Y
2F6 92FA ST R15,-Y
2F7 92EA ST R14,-Y
2F8 24FF CLR R15
2F9 24EE CLR R14
2FA E120 LDI R18,0x10
2FB 0F00 LSL R16
2FC 1CFF ROL R15
2FD 1CEE ROL R14
2FE 16E1 CP R14,R17
2FF F010 BCS 0x0302
300 1AE1 SUB R14,R17
301 9503 INC R16
302 952A DEC R18
303 F7B9 BNE 0x02FB
304 F40E BRTC 0x0306
305 2D0E MOV R16,R14
306 90E9 LD R14,Y+
307 90F9 LD R15,Y+
308 9129 LD R18,Y+
309 9508 RET
push_xgset300C:
30A 935A ST R21,-Y
30B 934A ST R20,-Y
30C 92BA ST R11,-Y
30D 92AA ST R10,-Y
30E 9508 RET
pop_xgset300C:
30F 90A9 LD R10,Y+
310 90B9 LD R11,Y+
311 9149 LD R20,Y+
312 9159 LD R21,Y+
313 9508 RET
lsl16:
314 2322 TST R18
315 F021 BEQ 0x031A
316 0F00 LSL R16
317 1F11 ROL R17
318 952A DEC R18
319 CFFA RJMP lsl16
31A 9508 RET
lsl8:
31B 2311 TST R17
31C F019 BEQ 0x0320
31D 0F00 LSL R16
31E 951A DEC R17
31F CFFB RJMP lsl8
320 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -