⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 step.lis

📁 用M16驱动步进电机 实现三种驱动方式 单四拍驱动、双四拍驱动 单双八拍驱动
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 030A 2DBC              out 0x2d,R2
 030C                   .dbline 148
 030C           ;    TCNT1L = zhuansu&0xFF;
 030C 80910300          lds R24,_zhuansu
 0310 90910400          lds R25,_zhuansu+1
 0314 9070              andi R25,0
 0316 8CBD              out 0x2c,R24
 0318                   .dbline 149
 0318           ;    PORTC &= 0xF0;
 0318 85B3              in R24,0x15
 031A 807F              andi R24,240
 031C 85BB              out 0x15,R24
 031E                   .dbline 150
 031E           ;    if(n)
 031E 20900200          lds R2,_n
 0322 2220              tst R2
 0324 21F0              breq L43
 0326           X26:
 0326                   .dbline 151
 0326           ;        bj_fsf(m);            //反转
 0326 00910100          lds R16,_m
 032A 13DF              xcall _bj_fsf
 032C 03C0              xjmp L44
 032E           L43:
 032E                   .dbline 153
 032E           ;    else
 032E           ;        bj_fs(m);            //正转
 032E 00910100          lds R16,_m
 0332 73DE              xcall _bj_fs
 0334           L44:
 0334                   .dbline -2
 0334           L42:
 0334                   .dbline 0 ; func end
 0334 0990              ld R0,y+
 0336 0FBE              out 0x3f,R0
 0338 F991              ld R31,y+
 033A E991              ld R30,y+
 033C B991              ld R27,y+
 033E A991              ld R26,y+
 0340 9991              ld R25,y+
 0342 8991              ld R24,y+
 0344 3991              ld R19,y+
 0346 2991              ld R18,y+
 0348 1991              ld R17,y+
 034A 0991              ld R16,y+
 034C 9990              ld R9,y+
 034E 8990              ld R8,y+
 0350 7990              ld R7,y+
 0352 6990              ld R6,y+
 0354 5990              ld R5,y+
 0356 4990              ld R4,y+
 0358 3990              ld R3,y+
 035A 2990              ld R2,y+
 035C 1990              ld R1,y+
 035E 0990              ld R0,y+
 0360 1895              reti
 0362                   .dbend
 0362                   .dbfunc e init_devices _init_devices fV
                        .even
 0362           _init_devices::
 0362                   .dbline -1
 0362                   .dbline 160
 0362           ;    }
 0362           ; 
 0362           ; /****************************
 0362           ; *        器件初始化函数        *
 0362           ; ****************************/
 0362           ; void init_devices(void)
 0362           ;    {
 0362                   .dbline 161
 0362           ;    CLI();
 0362 F894              cli
 0364                   .dbline 162
 0364           ;    port_init();
 0364 4DDE              xcall _port_init
 0366                   .dbline 163
 0366           ;    timer1_init();
 0366 A1DF              xcall _timer1_init
 0368                   .dbline 165
 0368           ; 
 0368           ;    MCUCR = 0x00;
 0368 2224              clr R2
 036A 25BE              out 0x35,R2
 036C                   .dbline 166
 036C           ;    GICR = 0x00;
 036C 2BBE              out 0x3b,R2
 036E                   .dbline 167
 036E           ;    TIMSK = 0x04;
 036E 84E0              ldi R24,4
 0370 89BF              out 0x39,R24
 0372                   .dbline 168
 0372           ;    SEI();
 0372 7894              sei
 0374                   .dbline -2
 0374           L45:
 0374                   .dbline 0 ; func end
 0374 0895              ret
 0376                   .dbend
 0376                   .dbfunc e main _main fV
 0376           ;           key1 -> R22
 0376           ;            key -> R20
                        .even
 0376           _main::
 0376                   .dbline -1
 0376                   .dbline 175
 0376           ;    }
 0376           ; 
 0376           ; /****************************
 0376           ; *            主函数            *
 0376           ; ****************************/
 0376           ; void main(void)
 0376           ;    {
 0376                   .dbline 177
 0376           ;    unsigned char key,key1;
 0376           ;    init_devices();
 0376 F5DF              xcall _init_devices
 0378 80C0              xjmp L48
 037A           L47:
 037A                   .dbline 180
 037A           ;    
 037A           ;    while(1)
 037A           ;        {
 037A                   .dbline 181
 037A           ;        key=RD_KEY();        //按键扫描
 037A 43B3              in R20,0x13
 037C 4F60              ori R20,15
 037E 4095              com R20
 0380 4295              swap R20
 0382 4F70              andi R20,#0x0F
 0384                   .dbline 182
 0384           ;        if(key)
 0384 09F4              brne X39
 0386 79C0              xjmp L50
 0388           X39:
 0388           X27:
 0388                   .dbline 183
 0388           ;            {
 0388                   .dbline 184
 0388           ;            delay_nms(200);
 0388 08EC              ldi R16,200
 038A 10E0              ldi R17,0
 038C 0E940000          xcall _delay_nms
 0390                   .dbline 185
 0390           ;            key1=RD_KEY();
 0390 63B3              in R22,0x13
 0392 6F60              ori R22,15
 0394 6095              com R22
 0396 6295              swap R22
 0398 6F70              andi R22,#0x0F
 039A                   .dbline 186
 039A           ;            if(key==key1)
 039A 4617              cp R20,R22
 039C 09F0              breq X40
 039E 6BC0              xjmp L70
 03A0           X40:
 03A0           X28:
 03A0                   .dbline 187
 03A0           ;                {
 03A0                   .dbline 188
 03A0           ;                switch(key)        //按键有效,相应处理
 03A0 642F              mov R22,R20
 03A2 7727              clr R23
 03A4 6130              cpi R22,1
 03A6 E0E0              ldi R30,0
 03A8 7E07              cpc R23,R30
 03AA 79F0              breq L57
 03AC           X29:
 03AC 6230              cpi R22,2
 03AE E0E0              ldi R30,0
 03B0 7E07              cpc R23,R30
 03B2 61F1              breq L60
 03B4           X30:
 03B4 6430              cpi R22,4
 03B6 E0E0              ldi R30,0
 03B8 7E07              cpc R23,R30
 03BA 09F4              brne X41
 03BC 3CC0              xjmp L63
 03BE           X41:
 03BE           X31:
 03BE 6830              cpi R22,8
 03C0 E0E0              ldi R30,0
 03C2 7E07              cpc R23,R30
 03C4 09F4              brne X42
 03C6 42C0              xjmp L66
 03C8           X42:
 03C8           X32:
 03C8 56C0              xjmp L70
 03CA           L57:
 03CA                   .dbline 191
 03CA           ;                    {
 03CA           ;                    case 0x01:    //S1键处理:转速增加
 03CA           ;                        zhuansu += 100;
 03CA 80910300          lds R24,_zhuansu
 03CE 90910400          lds R25,_zhuansu+1
 03D2 8C59              subi R24,156  ; offset = 100
 03D4 9F4F              sbci R25,255
 03D6 90930400          sts _zhuansu+1,R25
 03DA 80930300          sts _zhuansu,R24
 03DE                   .dbline 192
 03DE           ;                        if(zhuansu>62000)zhuansu=62000;
 03DE 80E3              ldi R24,48
 03E0 92EF              ldi R25,242
 03E2 A0E0              ldi R26,0
 03E4 B0E0              ldi R27,0
 03E6 20900300          lds R2,_zhuansu
 03EA 30900400          lds R3,_zhuansu+1
 03EE 4424              clr R4
 03F0 5524              clr R5
 03F2 8215              cp R24,R2
 03F4 9305              cpc R25,R3
 03F6 A405              cpc R26,R4
 03F8 B505              cpc R27,R5
 03FA 0CF0              brlt X43
 03FC 3CC0              xjmp L70
 03FE           X43:
 03FE           X33:
 03FE                   .dbline 192
 03FE 80E3              ldi R24,62000
 0400 92EF              ldi R25,242
 0402 90930400          sts _zhuansu+1,R25
 0406 80930300          sts _zhuansu,R24
 040A                   .dbline 193
 040A           ;                        break;
 040A 35C0              xjmp L70
 040C           L60:
 040C                   .dbline 195
 040C           ;                    case 0x02:    //S2键处理:转速降低
 040C           ;                        zhuansu -= 100;
 040C 80910300          lds R24,_zhuansu
 0410 90910400          lds R25,_zhuansu+1
 0414 8456              subi R24,100
 0416 9040              sbci R25,0
 0418 90930400          sts _zhuansu+1,R25
 041C 80930300          sts _zhuansu,R24
 0420                   .dbline 196
 0420           ;                        if(zhuansu<5000)zhuansu=5000;
 0420 8838              cpi R24,136
 0422 E3E1              ldi R30,19
 0424 9E07              cpc R25,R30
 0426 38F5              brsh L70
 0428           X34:
 0428                   .dbline 196
 0428 88E8              ldi R24,5000
 042A 93E1              ldi R25,19
 042C 90930400          sts _zhuansu+1,R25
 0430 80930300          sts _zhuansu,R24
 0434                   .dbline 197
 0434           ;                        break;
 0434 20C0              xjmp L70
 0436           L63:
 0436                   .dbline 199
 0436           ;                    case 0x04:    //S3键处理:转换驱动方式
 0436           ;                        m++;
 0436 80910100          lds R24,_m
 043A 8F5F              subi R24,255    ; addi 1
 043C 80930100          sts _m,R24
 0440                   .dbline 200
 0440           ;                        if(m>=4)m=1;
 0440 8430              cpi R24,4
 0442 C8F0              brlo L70
 0444           X35:
 0444                   .dbline 200
 0444 81E0              ldi R24,1
 0446 80930100          sts _m,R24
 044A                   .dbline 201
 044A           ;                        break;
 044A 15C0              xjmp L70
 044C           L66:
 044C                   .dbline 203
 044C           ;                    case 0x08:    //S4键处理:正反转控制
 044C           ;                        if(n)
 044C 20900200          lds R2,_n
 0450 2220              tst R2
 0452 21F0              breq L67
 0454           X36:
 0454                   .dbline 204
 0454           ;                            n=0;
 0454 2224              clr R2
 0456 20920200          sts _n,R2
 045A 0DC0              xjmp L70
 045C           L67:
 045C                   .dbline 206
 045C           ;                        else
 045C           ;                            n=1;
 045C 81E0              ldi R24,1
 045E 80930200          sts _n,R24
 0462                   .dbline 207
 0462           ;                        break;
 0462                   .dbline 208
 0462           ;                    default:break;
 0462                   .dbline 210
 0462           ;                    }
 0462           ;                }
 0462 09C0              xjmp L70
 0464           L69:
 0464                   .dbline 212
 0464           ;            while(key)            //等待按键释放
 0464           ;                {
 0464                   .dbline 213
 0464           ;                delay_nms(100);
 0464 04E6              ldi R16,100
 0466 10E0              ldi R17,0
 0468 0E940000          xcall _delay_nms
 046C                   .dbline 214
 046C           ;                key=RD_KEY();
 046C 43B3              in R20,0x13
 046E 4F60              ori R20,15
 0470 4095              com R20
 0472 4295              swap R20
 0474 4F70              andi R20,#0x0F
 0476                   .dbline 215
 0476           ;                }
 0476           L70:
 0476                   .dbline 211
 0476 4423              tst R20
 0478 A9F7              brne L69
 047A           X37:
 047A                   .dbline 216
 047A           ;            }
 047A           L50:
 047A                   .dbline 217
 047A           ;        }
 047A           L48:
 047A                   .dbline 179
 047A 7FCF              xjmp L47
 047C           X38:
 047C                   .dbline -2
 047C           L46:
 047C                   .dbline 0 ; func end
 047C 0895              ret
 047E                   .dbsym r key1 22 c
 047E                   .dbsym r key 20 c
 047E                   .dbend
 047E           ;    }
 047E           ; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -