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

📄 step.lis

📁 用M16驱动步进电机 实现三种驱动方式 单四拍驱动、双四拍驱动 单双八拍驱动
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -