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

📄 step.lis

📁 用M16驱动步进电机 实现三种驱动方式 单四拍驱动、双四拍驱动 单双八拍驱动
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module step.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\ziliao\新建文件夹\stepmotor\step.c
                        .area data(ram, con, rel)
 0000                   .dbfile F:\ziliao\新建文件夹\stepmotor\step.c
 0000           _i::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile F:\ziliao\新建文件夹\stepmotor\step.c
 0001                   .dbsym e i _i c
 0001           _m::
 0001                   .blkb 1
                        .area idata
 0001 01                .byte 1
                        .area data(ram, con, rel)
 0002                   .dbfile F:\ziliao\新建文件夹\stepmotor\step.c
 0002                   .dbsym e m _m c
 0002           _n::
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003                   .dbfile F:\ziliao\新建文件夹\stepmotor\step.c
 0003                   .dbsym e n _n c
 0003           _zhuansu::
 0003                   .blkb 2
                        .area idata
 0003 3CF0              .word 61500
                        .area data(ram, con, rel)
 0005                   .dbfile F:\ziliao\新建文件夹\stepmotor\step.c
 0005                   .dbsym e zhuansu _zhuansu i
                        .area text(rom, con, rel)
 0000                   .dbfile F:\ziliao\新建文件夹\stepmotor\step.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 33
 0000           ; /************************************
 0000           ; *        步进电机的M16驱动程序        *
 0000           ; * 功   能:用M16驱动步进电机        *
 0000           ; *            实现三种驱动方式        *
 0000           ; *            单四拍驱动、双四拍驱动    *
 0000           ; *            单双八拍驱动            *
 0000           ; * 驱动芯片:ULN2803                    *
 0000           ; * 联接方式:PC0-3分别通过2803接A-D    *
 0000           ; *            步进电机公共端接+5V电源    *
 0000           ; * 建立日期:2008年04月10日            *
 0000           ; * 作   者:弋蔚辉                   *
 0000           ; * 版   本:V1.0                    *
 0000           ; * 修改日期:2008年04月15日            *
 0000           ; * 主控芯片:M16                        *
 0000           ; * 时钟频率:外部晶体 7.3728MHZ        *
 0000           ; * 编 译 器:ICCAVR 6.31A            *
 0000           ; ************************************/
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; //#include "delay.h"
 0000           ; 
 0000           ; #define RD_KEY() ((~(PINC|0x0F))>>4)//四按键接于PC4-PC7
 0000           ; 
 0000           ; unsigned char i=0;            //转动计数
 0000           ; unsigned char m=1;            //驱动方式参数
 0000           ; unsigned char n=0;            //转动方向参数
 0000           ; unsigned int zhuansu=61500;    //转速数据
 0000           ; 
 0000           ; /****************************
 0000           ; *        端口配置函数        *
 0000           ; ****************************/
 0000           ; void port_init(void)
 0000           ;    {
 0000                   .dbline 34
 0000           ;    PORTA = 0x40;
 0000 80E4              ldi R24,64
 0002 8BBB              out 0x1b,R24
 0004                   .dbline 35
 0004           ;    DDRA = 0x40;
 0004 8ABB              out 0x1a,R24
 0006                   .dbline 36
 0006           ;    PORTB = 0x00;
 0006 2224              clr R2
 0008 28BA              out 0x18,R2
 000A                   .dbline 37
 000A           ;    DDRB = 0x00;
 000A 27BA              out 0x17,R2
 000C                   .dbline 38
 000C           ;    PORTC = 0xF0;
 000C 80EF              ldi R24,240
 000E 85BB              out 0x15,R24
 0010                   .dbline 39
 0010           ;    DDRC = 0x0F;
 0010 8FE0              ldi R24,15
 0012 84BB              out 0x14,R24
 0014                   .dbline 40
 0014           ;    PORTD = 0x00;
 0014 22BA              out 0x12,R2
 0016                   .dbline 41
 0016           ;    DDRD = 0x00;
 0016 21BA              out 0x11,R2
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbend
 001A                   .dbfunc e bj_fs _bj_fs fV
 001A           ;              a -> R10
                        .even
 001A           _bj_fs::
 001A 0E940000          xcall push_xgset300C
 001E A02E              mov R10,R16
 0020                   .dbline -1
 0020                   .dbline 49
 0020           ;    }
 0020           ; 
 0020           ; /****************************
 0020           ; *        正转操作函数        *
 0020           ; * 入   口:a 三种工作方式    *
 0020           ; ****************************/
 0020           ; void bj_fs(unsigned char a)
 0020           ;    {
 0020                   .dbline 50
 0020           ;    switch(a)
 0020 4A2D              mov R20,R10
 0022 5527              clr R21
 0024 4130              cpi R20,1
 0026 E0E0              ldi R30,0
 0028 5E07              cpc R21,R30
 002A 51F0              breq L6
 002C           X0:
 002C 4230              cpi R20,2
 002E E0E0              ldi R30,0
 0030 5E07              cpc R21,R30
 0032 D1F0              breq L9
 0034           X1:
 0034 4330              cpi R20,3
 0036 E0E0              ldi R30,0
 0038 5E07              cpc R21,R30
 003A 09F4              brne X9
 003C 41C0              xjmp L14
 003E           X9:
 003E           X2:
 003E 87C0              xjmp L4
 0040           L6:
 0040                   .dbline 53
 0040           ;        {
 0040           ;        case 1:                //单四拍方式驱动
 0040           ;            PORTC |= 1<<i;    //A、B、C、D驱动
 0040 10910000          lds R17,_i
 0044 01E0              ldi R16,1
 0046 0E940000          xcall lsl8
 004A 25B2              in R2,0x15
 004C 202A              or R2,R16
 004E 25BA              out 0x15,R2
 0050                   .dbline 54
 0050           ;            i++;
 0050 80910000          lds R24,_i
 0054 8F5F              subi R24,255    ; addi 1
 0056 80930000          sts _i,R24
 005A                   .dbline 55
 005A           ;            if(i>=4)i=0;
 005A 8430              cpi R24,4
 005C 08F4              brsh X10
 005E 77C0              xjmp L4
 0060           X10:
 0060           X3:
 0060                   .dbline 55
 0060 2224              clr R2
 0062 20920000          sts _i,R2
 0066                   .dbline 56
 0066           ;            break;
 0066 73C0              xjmp L4
 0068           L9:
 0068                   .dbline 58
 0068           ;        case 2:                //双四拍方式驱动
 0068           ;            if(i!=4)        //AB、BC、CD、DA驱动
 0068 80910000          lds R24,_i
 006C 8430              cpi R24,4
 006E 89F0              breq L10
 0070           X4:
 0070                   .dbline 59
 0070           ;                PORTC |= (1<<i)|(1<<(i-1));
 0070 382E              mov R3,R24
 0072 182F              mov R17,R24
 0074 1150              subi R17,1
 0076 01E0              ldi R16,1
 0078 0E940000          xcall lsl8
 007C 202E              mov R2,R16
 007E 01E0              ldi R16,1
 0080 132D              mov R17,R3
 0082 0E940000          xcall lsl8
 0086 302E              mov R3,R16
 0088 3228              or R3,R2
 008A 25B2              in R2,0x15
 008C 2328              or R2,R3
 008E 25BA              out 0x15,R2
 0090 0BC0              xjmp L11
 0092           L10:
 0092                   .dbline 61
 0092           ;            else
 0092           ;                PORTC |= (1<<(i-1))|1;
 0092 10910000          lds R17,_i
 0096 1150              subi R17,1
 0098 01E0              ldi R16,1
 009A 0E940000          xcall lsl8
 009E 802F              mov R24,R16
 00A0 8160              ori R24,1
 00A2 25B2              in R2,0x15
 00A4 282A              or R2,R24
 00A6 25BA              out 0x15,R2
 00A8           L11:
 00A8                   .dbline 62
 00A8           ;            i++;
 00A8 80910000          lds R24,_i
 00AC 8F5F              subi R24,255    ; addi 1
 00AE 80930000          sts _i,R24
 00B2                   .dbline 63
 00B2           ;            if(i>=5)i=1;
 00B2 8530              cpi R24,5
 00B4 08F4              brsh X11
 00B6 4BC0              xjmp L4
 00B8           X11:
 00B8           X5:
 00B8                   .dbline 63
 00B8 81E0              ldi R24,1
 00BA 80930000          sts _i,R24
 00BE                   .dbline 64
 00BE           ;            break;
 00BE 47C0              xjmp L4
 00C0           L14:
 00C0                   .dbline 66
 00C0           ;        case 3:                //单双八拍方式驱动
 00C0           ;            if(i%2)            //A、AB、B、BC、C、CD、D、DA驱动
 00C0 12E0              ldi R17,2
 00C2 00910000          lds R16,_i
 00C6 0E940000          xcall mod8u
 00CA 0023              tst R16
 00CC 69F1              breq L15
 00CE           X6:
 00CE                   .dbline 67
 00CE           ;                {
 00CE                   .dbline 68
 00CE           ;                if(i!=7)
 00CE 80910000          lds R24,_i
 00D2 8730              cpi R24,7
 00D4 E9F0              breq L17
 00D6           X7:
 00D6                   .dbline 69
 00D6           ;                    PORTC |= (1<<(i/2))|(1<<(i/2+1));
 00D6 22E0              ldi R18,2
 00D8 30E0              ldi R19,0
 00DA 082F              mov R16,R24
 00DC 1127              clr R17
 00DE 0E940000          xcall div16s
 00E2 2801              movw R4,R16
 00E4 9201              movw R18,R4
 00E6 2F5F              subi R18,255  ; offset = 1
 00E8 3F4F              sbci R19,255
 00EA 01E0              ldi R16,1
 00EC 10E0              ldi R17,0
 00EE 0E940000          xcall lsl16
 00F2 1801              movw R2,R16
 00F4 01E0              ldi R16,1
 00F6 10E0              ldi R17,0
 00F8 9201              movw R18,R4
 00FA 0E940000          xcall lsl16
 00FE 2801              movw R4,R16
 0100 4228              or R4,R2
 0102 5328              or R5,R3
 0104 25B2              in R2,0x15
 0106 3324              clr R3
 0108 2428              or R2,R4
 010A 3528              or R3,R5
 010C 25BA              out 0x15,R2
 010E 15C0              xjmp L16
 0110           L17:
 0110                   .dbline 71
 0110           ;                else
 0110           ;                    PORTC |= (1<<(i/2))|1;
 0110 10910000          lds R17,_i
 0114 1695              lsr R17
 0116 01E0              ldi R16,1
 0118 0E940000          xcall lsl8
 011C 802F              mov R24,R16
 011E 8160              ori R24,1
 0120 25B2              in R2,0x15
 0122 282A              or R2,R24
 0124 25BA              out 0x15,R2
 0126                   .dbline 72
 0126           ;                }
 0126 09C0              xjmp L16
 0128           L15:
 0128                   .dbline 74
 0128           ;            else
 0128           ;                {
 0128                   .dbline 75
 0128           ;                PORTC |= 1<<(i/2);
 0128 10910000          lds R17,_i
 012C 1695              lsr R17
 012E 01E0              ldi R16,1
 0130 0E940000          xcall lsl8
 0134 25B2              in R2,0x15
 0136 202A              or R2,R16
 0138 25BA              out 0x15,R2
 013A                   .dbline 76
 013A           ;                }
 013A           L16:
 013A                   .dbline 77
 013A           ;            i++;
 013A 80910000          lds R24,_i
 013E 8F5F              subi R24,255    ; addi 1
 0140 80930000          sts _i,R24
 0144                   .dbline 78
 0144           ;            if(i>=8)i=0;
 0144 8830              cpi R24,8
 0146 18F0              brlo L4
 0148           X8:
 0148                   .dbline 78
 0148 2224              clr R2
 014A 20920000          sts _i,R2
 014E                   .dbline 79
 014E           ;            break;
 014E                   .dbline 80
 014E           ;        default:break;
 014E           L4:
 014E                   .dbline -2
 014E           L2:
 014E                   .dbline 0 ; func end
 014E 0C940000          xjmp pop_xgset300C
 0152                   .dbsym r a 10 c
 0152                   .dbend
 0152                   .dbfunc e bj_fsf _bj_fsf fV
 0152           ;              a -> R10
                        .even
 0152           _bj_fsf::

⌨️ 快捷键说明

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