📄 step.lis
字号:
.module step.c
.area data(ram, con, rel)
0000 _Pnum::
0000 .blkb 2
.area idata
0000 4010 .word 4160
.area data(ram, con, rel)
0002 .dbfile F:\单片机教学\调试程序\stepmotor\step.c
0002 .dbsym e Pnum _Pnum i
0002 _Freq::
0002 .blkb 1
.area idata
0002 32 .byte 50
.area data(ram, con, rel)
0003 .dbfile F:\单片机教学\调试程序\stepmotor\step.c
0003 .dbsym e Freq _Freq c
0003 _pcont::
0003 .blkb 2
.area idata
0003 0000 .word 0
.area data(ram, con, rel)
0005 .dbfile F:\单片机教学\调试程序\stepmotor\step.c
0005 .dbsym e pcont _pcont i
0005 _step::
0005 .blkb 1
.area idata
0005 00 .byte 0
.area data(ram, con, rel)
0006 .dbfile F:\单片机教学\调试程序\stepmotor\step.c
0006 .dbsym e step _step c
0006 _dirc::
0006 .blkb 1
.area idata
0006 00 .byte 0
.area data(ram, con, rel)
0007 .dbfile F:\单片机教学\调试程序\stepmotor\step.c
0007 .dbsym e dirc _dirc c
.area text(rom, con, rel)
0000 .dbfile F:\单片机教学\调试程序\stepmotor\step.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 32
0000 ; //Designed by Buaa Alf
0000 ; //通过定时器实现了步进电机的运转,仅仅是一演示程序;
0000 ; //烧写程序后,断开电源开关,闭合SW9的1、2、3、4和7、8管角,然后闭合电源开关即可看到电机的运转一周。
0000 ; //按复位可以重起单片机,使电机再旋转一周;
0000 ; //可参考设计自己的电机控制程序。
0000 ;
0000 ; //ICC-AVR application builder : 2005-3-31 上午 11:35:43
0000 ; // Target : M8
0000 ; // Crystal: 11.059Mhz
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define aon PORTB =0x01
0000 ; #define bon PORTB =0x02
0000 ; #define con PORTB =0x04
0000 ; #define don PORTB =0x08
0000 ;
0000 ; #define abon PORTB =0x03
0000 ; #define bcon PORTB =0x06
0000 ; #define cdon PORTB =0x0C
0000 ; #define daon PORTB =0x09
0000 ;
0000 ; unsigned int Pnum=4160;//总脉冲个数,包含减速比
0000 ; char Freq=50;//脉冲频率
0000 ;
0000 ; unsigned int pcont=0;
0000 ; char step =0;
0000 ; char dirc=0;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 33
0000 ; PORTB = 0xFF;
0000 8FEF ldi R24,255
0002 88BB out 0x18,R24
0004 .dbline 34
0004 ; DDRB = 0x0F;
0004 8FE0 ldi R24,15
0006 87BB out 0x17,R24
0008 .dbline 35
0008 ; PORTC = 0x7F; //m103 output only
0008 8FE7 ldi R24,127
000A 85BB out 0x15,R24
000C .dbline 36
000C ; DDRC = 0x00;
000C 2224 clr R2
000E 24BA out 0x14,R2
0010 .dbline 37
0010 ; PORTD = 0xFF;
0010 8FEF ldi R24,255
0012 82BB out 0x12,R24
0014 .dbline 38
0014 ; DDRD = 0x00;
0014 21BA out 0x11,R2
0016 .dbline -2
0016 .dbline 39
0016 ; }
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e timer1_init _timer1_init fV
.even
0018 _timer1_init::
0018 .dbline -1
0018 .dbline 46
0018 ;
0018 ; //TIMER1 initialisation - prescale:8
0018 ; // WGM: 0) Normal, TOP=0xFFFF
0018 ; // desired value: 50Hz
0018 ; // actual value: 50.001Hz (0.0%)
0018 ; void timer1_init(void)
0018 ; {
0018 .dbline 47
0018 ; TCCR1B = 0x00; //stop
0018 2224 clr R2
001A 2EBC out 0x2e,R2
001C .dbline 48
001C ; TCNT1H = 0x90; //setup
001C 80E9 ldi R24,144
001E 8DBD out 0x2d,R24
0020 .dbline 49
0020 ; TCNT1L = 0xF0;
0020 80EF ldi R24,240
0022 8CBD out 0x2c,R24
0024 .dbline 50
0024 ; OCR1AH = 0x6B;
0024 8BE6 ldi R24,107
0026 8BBD out 0x2b,R24
0028 .dbline 51
0028 ; OCR1AL = 0xFF;
0028 8FEF ldi R24,255
002A 8ABD out 0x2a,R24
002C .dbline 52
002C ; OCR1BH = 0x6B;
002C 8BE6 ldi R24,107
002E 89BD out 0x29,R24
0030 .dbline 53
0030 ; OCR1BL = 0xFF;
0030 8FEF ldi R24,255
0032 88BD out 0x28,R24
0034 .dbline 54
0034 ; ICR1H = 0x6B;
0034 8BE6 ldi R24,107
0036 87BD out 0x27,R24
0038 .dbline 55
0038 ; ICR1L = 0xFF;
0038 8FEF ldi R24,255
003A 86BD out 0x26,R24
003C .dbline 56
003C ; TCCR1A = 0x00;
003C 2FBC out 0x2f,R2
003E .dbline 57
003E ; TCCR1B = 0x02; //start Timer
003E 82E0 ldi R24,2
0040 8EBD out 0x2e,R24
0042 .dbline -2
0042 .dbline 58
0042 ; }
0042 L2:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbend
.area vector(rom, abs)
.org 16
0010 22C0 rjmp _timer1_ovf_isr
.area text(rom, con, rel)
0044 .dbfile F:\单片机教学\调试程序\stepmotor\step.c
0044 .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
0044 _timer1_ovf_isr::
0044 2A92 st -y,R2
0046 3A92 st -y,R3
0048 4A92 st -y,R4
004A 5A92 st -y,R5
004C 8A93 st -y,R24
004E 9A93 st -y,R25
0050 2FB6 in R2,0x3f
0052 2A92 st -y,R2
0054 .dbline -1
0054 .dbline 62
0054 ;
0054 ; #pragma interrupt_handler timer1_ovf_isr:9
0054 ; void timer1_ovf_isr(void)
0054 ; {
0054 .dbline 64
0054 ; //TIMER1 has overflowed
0054 ; if(pcont <=Pnum)
0054 20900000 lds R2,_Pnum
0058 30900100 lds R3,_Pnum+1
005C 40900300 lds R4,_pcont
0060 50900400 lds R5,_pcont+1
0064 2414 cp R2,R4
0066 3504 cpc R3,R5
0068 08F4 brsh X0
006A 87C0 rjmp L4
006C X0:
006C .dbline 65
006C ; {
006C .dbline 66
006C ; if(dirc == 0)
006C 20900600 lds R2,_dirc
0070 2220 tst R2
0072 A1F5 brne L6
0074 .dbline 67
0074 ; { if(step == 0)
0074 .dbline 67
0074 20900500 lds R2,_step
0078 2220 tst R2
007A 19F4 brne L8
007C .dbline 68
007C ; aon;
007C 81E0 ldi R24,1
007E 88BB out 0x18,R24
0080 60C0 rjmp L7
0082 L8:
0082 .dbline 69
0082 ; else if(step == 1)
0082 80910500 lds R24,_step
0086 8130 cpi R24,1
0088 19F4 brne L10
008A .dbline 70
008A ; abon;
008A 83E0 ldi R24,3
008C 88BB out 0x18,R24
008E 59C0 rjmp L7
0090 L10:
0090 .dbline 71
0090 ; else if(step == 2)
0090 80910500 lds R24,_step
0094 8230 cpi R24,2
0096 19F4 brne L12
0098 .dbline 72
0098 ; bon;
0098 82E0 ldi R24,2
009A 88BB out 0x18,R24
009C 52C0 rjmp L7
009E L12:
009E .dbline 73
009E ; else if(step == 3)
009E 80910500 lds R24,_step
00A2 8330 cpi R24,3
00A4 19F4 brne L14
00A6 .dbline 74
00A6 ; bcon;
00A6 86E0 ldi R24,6
00A8 88BB out 0x18,R24
00AA 4BC0 rjmp L7
00AC L14:
00AC .dbline 75
00AC ; else if(step == 4)
00AC 80910500 lds R24,_step
00B0 8430 cpi R24,4
00B2 19F4 brne L16
00B4 .dbline 76
00B4 ; con;
00B4 84E0 ldi R24,4
00B6 88BB out 0x18,R24
00B8 44C0 rjmp L7
00BA L16:
00BA .dbline 77
00BA ; else if(step == 5)
00BA 80910500 lds R24,_step
00BE 8530 cpi R24,5
00C0 19F4 brne L18
00C2 .dbline 78
00C2 ; cdon;
00C2 8CE0 ldi R24,12
00C4 88BB out 0x18,R24
00C6 3DC0 rjmp L7
00C8 L18:
00C8 .dbline 79
00C8 ; else if(step == 6)
00C8 80910500 lds R24,_step
00CC 8630 cpi R24,6
00CE 19F4 brne L20
00D0 .dbline 80
00D0 ; don;
00D0 88E0 ldi R24,8
00D2 88BB out 0x18,R24
00D4 36C0 rjmp L7
00D6 L20:
00D6 .dbline 82
00D6 ; else
00D6 ; daon;
00D6 89E0 ldi R24,9
00D8 88BB out 0x18,R24
00DA .dbline 83
00DA ; }
00DA 33C0 rjmp L7
00DC L6:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -