📄 step.lis
字号:
.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 + -