📄 step.lis
字号:
0152 0E940000 xcall push_xgset300C
0156 A02E mov R10,R16
0158 .dbline -1
0158 .dbline 89
0158 ; }
0158 ; }
0158 ;
0158 ; /****************************
0158 ; * 反转操作函数 *
0158 ; * 入 口:a 三种工作方式 *
0158 ; ****************************/
0158 ; void bj_fsf(unsigned char a)
0158 ; {
0158 .dbline 90
0158 ; switch(a)
0158 4A2D mov R20,R10
015A 5527 clr R21
015C 4130 cpi R20,1
015E E0E0 ldi R30,0
0160 5E07 cpc R21,R30
0162 79F0 breq L25
0164 X12:
0164 4230 cpi R20,2
0166 E0E0 ldi R30,0
0168 5E07 cpc R21,R30
016A 09F1 breq L28
016C X13:
016C 4330 cpi R20,3
016E E0E0 ldi R30,0
0170 5E07 cpc R21,R30
0172 09F4 brne X22
0174 49C0 xjmp L33
0176 X22:
0176 X14:
0176 4430 cpi R20,4
0178 E0E0 ldi R30,0
017A 5E07 cpc R21,R30
017C 09F4 brne X23
017E 93C0 xjmp L23
0180 X23:
0180 X15:
0180 92C0 xjmp L23
0182 L25:
0182 .dbline 93
0182 ; {
0182 ; case 1: //单四拍方式驱动
0182 ; PORTC |= 1<<(3-i); //D、C、B、A驱动
0182 20900000 lds R2,_i
0186 13E0 ldi R17,3
0188 1219 sub R17,R2
018A 01E0 ldi R16,1
018C 0E940000 xcall lsl8
0190 25B2 in R2,0x15
0192 202A or R2,R16
0194 25BA out 0x15,R2
0196 .dbline 94
0196 ; i++;
0196 80910000 lds R24,_i
019A 8F5F subi R24,255 ; addi 1
019C 80930000 sts _i,R24
01A0 .dbline 95
01A0 ; if(i>=4)i=0;
01A0 8430 cpi R24,4
01A2 08F4 brsh X24
01A4 80C0 xjmp L23
01A6 X24:
01A6 X16:
01A6 .dbline 95
01A6 2224 clr R2
01A8 20920000 sts _i,R2
01AC .dbline 96
01AC ; break;
01AC 7CC0 xjmp L23
01AE L28:
01AE .dbline 98
01AE ; case 2: //双四拍方式驱动
01AE ; if(i!=4) //AD、CD、BC、AB驱动
01AE 80910000 lds R24,_i
01B2 8430 cpi R24,4
01B4 91F0 breq L29
01B6 X17:
01B6 .dbline 99
01B6 ; PORTC |= (1<<(3-i))|(1<<(4-i));
01B6 382E mov R3,R24
01B8 14E0 ldi R17,4
01BA 181B sub R17,R24
01BC 01E0 ldi R16,1
01BE 0E940000 xcall lsl8
01C2 202E mov R2,R16
01C4 13E0 ldi R17,3
01C6 1319 sub R17,R3
01C8 01E0 ldi R16,1
01CA 0E940000 xcall lsl8
01CE 302E mov R3,R16
01D0 3228 or R3,R2
01D2 25B2 in R2,0x15
01D4 2328 or R2,R3
01D6 25BA out 0x15,R2
01D8 0BC0 xjmp L30
01DA L29:
01DA .dbline 101
01DA ; else
01DA ; PORTC |= (1<<(i-1))|1;
01DA 10910000 lds R17,_i
01DE 1150 subi R17,1
01E0 01E0 ldi R16,1
01E2 0E940000 xcall lsl8
01E6 802F mov R24,R16
01E8 8160 ori R24,1
01EA 25B2 in R2,0x15
01EC 282A or R2,R24
01EE 25BA out 0x15,R2
01F0 L30:
01F0 .dbline 102
01F0 ; i++;
01F0 80910000 lds R24,_i
01F4 8F5F subi R24,255 ; addi 1
01F6 80930000 sts _i,R24
01FA .dbline 103
01FA ; if(i>=5)i=1;
01FA 8530 cpi R24,5
01FC 08F4 brsh X25
01FE 53C0 xjmp L23
0200 X25:
0200 X18:
0200 .dbline 103
0200 81E0 ldi R24,1
0202 80930000 sts _i,R24
0206 .dbline 104
0206 ; break;
0206 4FC0 xjmp L23
0208 L33:
0208 .dbline 106
0208 ; case 3: //单双八拍方式驱动
0208 ; if(i%2) //DA、D、CD、C、BC、B、AB、A驱动
0208 12E0 ldi R17,2
020A 00910000 lds R16,_i
020E 0E940000 xcall mod8u
0212 0023 tst R16
0214 61F0 breq L34
0216 X19:
0216 .dbline 107
0216 ; {
0216 .dbline 108
0216 ; PORTC |= 1<<(3-i/2);
0216 20900000 lds R2,_i
021A 2694 lsr R2
021C 13E0 ldi R17,3
021E 1219 sub R17,R2
0220 01E0 ldi R16,1
0222 0E940000 xcall lsl8
0226 25B2 in R2,0x15
0228 202A or R2,R16
022A 25BA out 0x15,R2
022C .dbline 109
022C ; }
022C 32C0 xjmp L35
022E L34:
022E .dbline 111
022E ; else
022E ; {
022E .dbline 112
022E ; if(i)
022E 20900000 lds R2,_i
0232 2220 tst R2
0234 09F1 breq L36
0236 X20:
0236 .dbline 113
0236 ; PORTC |= (1<<(3-i/2))|(1<<(4-i/2));
0236 22E0 ldi R18,2
0238 30E0 ldi R19,0
023A 022D mov R16,R2
023C 1127 clr R17
023E 0E940000 xcall div16s
0242 2801 movw R4,R16
0244 24E0 ldi R18,4
0246 30E0 ldi R19,0
0248 201B sub R18,R16
024A 310B sbc R19,R17
024C 01E0 ldi R16,1
024E 10E0 ldi R17,0
0250 0E940000 xcall lsl16
0254 1801 movw R2,R16
0256 23E0 ldi R18,3
0258 30E0 ldi R19,0
025A 2419 sub R18,R4
025C 3509 sbc R19,R5
025E 01E0 ldi R16,1
0260 10E0 ldi R17,0
0262 0E940000 xcall lsl16
0266 2801 movw R4,R16
0268 4228 or R4,R2
026A 5328 or R5,R3
026C 25B2 in R2,0x15
026E 3324 clr R3
0270 2428 or R2,R4
0272 3528 or R3,R5
0274 25BA out 0x15,R2
0276 0DC0 xjmp L37
0278 L36:
0278 .dbline 115
0278 ; else
0278 ; PORTC |= (1<<(3-i/2))|1;
0278 20900000 lds R2,_i
027C 2694 lsr R2
027E 13E0 ldi R17,3
0280 1219 sub R17,R2
0282 01E0 ldi R16,1
0284 0E940000 xcall lsl8
0288 802F mov R24,R16
028A 8160 ori R24,1
028C 25B2 in R2,0x15
028E 282A or R2,R24
0290 25BA out 0x15,R2
0292 L37:
0292 .dbline 116
0292 ; }
0292 L35:
0292 .dbline 117
0292 ; i++;
0292 80910000 lds R24,_i
0296 8F5F subi R24,255 ; addi 1
0298 80930000 sts _i,R24
029C .dbline 118
029C ; if(i>=8)i=0;
029C 8830 cpi R24,8
029E 18F0 brlo L23
02A0 X21:
02A0 .dbline 118
02A0 2224 clr R2
02A2 20920000 sts _i,R2
02A6 .dbline 119
02A6 ; break;
02A6 .dbline 122
02A6 ; case 4:
02A6 ;
02A6 ; default:break;
02A6 L23:
02A6 .dbline -2
02A6 L21:
02A6 .dbline 0 ; func end
02A6 0C940000 xjmp pop_xgset300C
02AA .dbsym r a 10 c
02AA .dbend
02AA .dbfunc e timer1_init _timer1_init fV
.even
02AA _timer1_init::
02AA .dbline -1
02AA .dbline 134
02AA ; }
02AA ; }
02AA ;
02AA ; /****************************
02AA ; * 定时器1配置函数 *
02AA ; * 工作模式:普通模式 *
02AA ; * 工作方式:溢出中断 *
02AA ; * 预 分 频:64 *
02AA ; * 时钟频率:外部7.3728MHZ *
02AA ; ****************************/
02AA ; void timer1_init(void)
02AA ; {
02AA .dbline 135
02AA ; TCCR1B = 0x00;
02AA 2224 clr R2
02AC 2EBC out 0x2e,R2
02AE .dbline 136
02AE ; TCNT1H = zhuansu>>8;
02AE 20900300 lds R2,_zhuansu
02B2 30900400 lds R3,_zhuansu+1
02B6 232C mov R2,R3
02B8 3324 clr R3
02BA 2DBC out 0x2d,R2
02BC .dbline 137
02BC ; TCNT1L = zhuansu&0xFF;
02BC 80910300 lds R24,_zhuansu
02C0 90910400 lds R25,_zhuansu+1
02C4 9070 andi R25,0
02C6 8CBD out 0x2c,R24
02C8 .dbline 138
02C8 ; TCCR1A = 0x00;
02C8 2224 clr R2
02CA 2FBC out 0x2f,R2
02CC .dbline 139
02CC ; TCCR1B = 0x02;
02CC 82E0 ldi R24,2
02CE 8EBD out 0x2e,R24
02D0 .dbline -2
02D0 L41:
02D0 .dbline 0 ; func end
02D0 0895 ret
02D2 .dbend
.area vector(rom, abs)
.org 32
0020 0C946901 jmp _timer1_ovf_isr
.area text(rom, con, rel)
02D2 .dbfile F:\ziliao\新建文件夹\stepmotor\step.c
02D2 .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
02D2 _timer1_ovf_isr::
02D2 0A92 st -y,R0
02D4 1A92 st -y,R1
02D6 2A92 st -y,R2
02D8 3A92 st -y,R3
02DA 4A92 st -y,R4
02DC 5A92 st -y,R5
02DE 6A92 st -y,R6
02E0 7A92 st -y,R7
02E2 8A92 st -y,R8
02E4 9A92 st -y,R9
02E6 0A93 st -y,R16
02E8 1A93 st -y,R17
02EA 2A93 st -y,R18
02EC 3A93 st -y,R19
02EE 8A93 st -y,R24
02F0 9A93 st -y,R25
02F2 AA93 st -y,R26
02F4 BA93 st -y,R27
02F6 EA93 st -y,R30
02F8 FA93 st -y,R31
02FA 0FB6 in R0,0x3f
02FC 0A92 st -y,R0
02FE .dbline -1
02FE .dbline 146
02FE ; }
02FE ; /****************************
02FE ; * 定时器1中断函数 *
02FE ; ****************************/
02FE ; #pragma interrupt_handler timer1_ovf_isr:9
02FE ; void timer1_ovf_isr(void)
02FE ; {
02FE .dbline 147
02FE ; TCNT1H = zhuansu>>8;
02FE 20900300 lds R2,_zhuansu
0302 30900400 lds R3,_zhuansu+1
0306 232C mov R2,R3
0308 3324 clr R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -