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

📄 stepmotor.lst

📁 用M16驱动步进电机 实现三种驱动方式 单四拍驱动、双四拍驱动 单双八拍驱动
💻 LST
📖 第 1 页 / 共 2 页
字号:
     1AD BC2D      OUT	0x2D,R2
(0137)    TCNT1L = zhuansu&0xFF;
     1AE 9180 0063 LDS	R24,zhuansu
     1B0 9190 0064 LDS	R25,zhuansu+1
     1B2 7090      ANDI	R25,0
     1B3 BD8C      OUT	0x2C,R24
(0138)    TCCR1A = 0x00;
     1B4 2422      CLR	R2
     1B5 BC2F      OUT	0x2F,R2
(0139)    TCCR1B = 0x02;
     1B6 E082      LDI	R24,2
     1B7 BD8E      OUT	0x2E,R24
     1B8 9508      RET
_timer1_ovf_isr:
     1B9 920A      ST	R0,-Y
     1BA 921A      ST	R1,-Y
     1BB 922A      ST	R2,-Y
     1BC 923A      ST	R3,-Y
     1BD 924A      ST	R4,-Y
     1BE 925A      ST	R5,-Y
     1BF 926A      ST	R6,-Y
     1C0 927A      ST	R7,-Y
     1C1 928A      ST	R8,-Y
     1C2 929A      ST	R9,-Y
     1C3 930A      ST	R16,-Y
     1C4 931A      ST	R17,-Y
     1C5 932A      ST	R18,-Y
     1C6 933A      ST	R19,-Y
     1C7 938A      ST	R24,-Y
     1C8 939A      ST	R25,-Y
     1C9 93AA      ST	R26,-Y
     1CA 93BA      ST	R27,-Y
     1CB 93EA      ST	R30,-Y
     1CC 93FA      ST	R31,-Y
     1CD B60F      IN	R0,0x3F
     1CE 920A      ST	R0,-Y
(0140)    }
(0141) /****************************
(0142) *        定时器1中断函数        *
(0143) ****************************/
(0144) #pragma interrupt_handler timer1_ovf_isr:9
(0145) void timer1_ovf_isr(void)
(0146)    {
(0147)    TCNT1H = zhuansu>>8;
     1CF 9020 0063 LDS	R2,zhuansu
     1D1 9030 0064 LDS	R3,zhuansu+1
     1D3 2C23      MOV	R2,R3
     1D4 2433      CLR	R3
     1D5 BC2D      OUT	0x2D,R2
(0148)    TCNT1L = zhuansu&0xFF;
     1D6 9180 0063 LDS	R24,zhuansu
     1D8 9190 0064 LDS	R25,zhuansu+1
     1DA 7090      ANDI	R25,0
     1DB BD8C      OUT	0x2C,R24
(0149)    PORTC &= 0xF0;
     1DC B385      IN	R24,0x15
     1DD 7F80      ANDI	R24,0xF0
     1DE BB85      OUT	0x15,R24
(0150)    if(n)
     1DF 9020 0062 LDS	R2,n
     1E1 2022      TST	R2
     1E2 F021      BEQ	0x01E7
(0151)        bj_fsf(m);            //反转
     1E3 9100 0061 LDS	R16,m
     1E5 DF13      RCALL	_bj_fsf
     1E6 C003      RJMP	0x01EA
(0152)    else
(0153)        bj_fs(m);            //正转
     1E7 9100 0061 LDS	R16,m
     1E9 DE73      RCALL	_bj_fs
     1EA 9009      LD	R0,Y+
     1EB BE0F      OUT	0x3F,R0
     1EC 91F9      LD	R31,Y+
     1ED 91E9      LD	R30,Y+
     1EE 91B9      LD	R27,Y+
     1EF 91A9      LD	R26,Y+
     1F0 9199      LD	R25,Y+
     1F1 9189      LD	R24,Y+
     1F2 9139      LD	R19,Y+
     1F3 9129      LD	R18,Y+
     1F4 9119      LD	R17,Y+
     1F5 9109      LD	R16,Y+
     1F6 9099      LD	R9,Y+
     1F7 9089      LD	R8,Y+
     1F8 9079      LD	R7,Y+
     1F9 9069      LD	R6,Y+
     1FA 9059      LD	R5,Y+
     1FB 9049      LD	R4,Y+
     1FC 9039      LD	R3,Y+
     1FD 9029      LD	R2,Y+
     1FE 9019      LD	R1,Y+
     1FF 9009      LD	R0,Y+
     200 9518      RETI
(0154)    }
(0155) 
(0156) /****************************
(0157) *        器件初始化函数        *
(0158) ****************************/
(0159) void init_devices(void)
(0160)    {
(0161)    CLI();
_init_devices:
     201 94F8      BCLR	7
(0162)    port_init();
     202 DE4D      RCALL	_port_init
(0163)    timer1_init();
     203 DFA1      RCALL	_timer1_init
(0164) 
(0165)    MCUCR = 0x00;
     204 2422      CLR	R2
     205 BE25      OUT	0x35,R2
(0166)    GICR = 0x00;
     206 BE2B      OUT	0x3B,R2
(0167)    TIMSK = 0x04;
     207 E084      LDI	R24,4
     208 BF89      OUT	0x39,R24
(0168)    SEI();
     209 9478      BSET	7
     20A 9508      RET
(0169)    }
(0170) 
(0171) /****************************
(0172) *            主函数            *
(0173) ****************************/
(0174) void main(void)
(0175)    {
(0176)    unsigned char key,key1;
(0177)    init_devices();
_main:
  key1                 --> R22
  key                  --> R20
     20B DFF5      RCALL	_init_devices
     20C C080      RJMP	0x028D
(0178)    
(0179)    while(1)
(0180)        {
(0181)        key=RD_KEY();        //按键扫描
     20D B343      IN	R20,0x13
     20E 604F      ORI	R20,0xF
     20F 9540      COM	R20
     210 9542      SWAP	R20
     211 704F      ANDI	R20,0xF
(0182)        if(key)
     212 F409      BNE	0x0214
     213 C079      RJMP	0x028D
(0183)            {
(0184)            delay_nms(200);
     214 EC08      LDI	R16,0xC8
     215 E010      LDI	R17,0
     216 940E 02AA CALL	_delay_nms
(0185)            key1=RD_KEY();
     218 B363      IN	R22,0x13
     219 606F      ORI	R22,0xF
     21A 9560      COM	R22
     21B 9562      SWAP	R22
     21C 706F      ANDI	R22,0xF
(0186)            if(key==key1)
     21D 1746      CP	R20,R22
     21E F009      BEQ	0x0220
     21F C06B      RJMP	0x028B
(0187)                {
(0188)                switch(key)        //按键有效,相应处理
     220 2F64      MOV	R22,R20
     221 2777      CLR	R23
     222 3061      CPI	R22,1
     223 E0E0      LDI	R30,0
     224 077E      CPC	R23,R30
     225 F079      BEQ	0x0235
     226 3062      CPI	R22,2
     227 E0E0      LDI	R30,0
     228 077E      CPC	R23,R30
     229 F161      BEQ	0x0256
     22A 3064      CPI	R22,4
     22B E0E0      LDI	R30,0
     22C 077E      CPC	R23,R30
     22D F409      BNE	0x022F
     22E C03C      RJMP	0x026B
     22F 3068      CPI	R22,0x8
     230 E0E0      LDI	R30,0
     231 077E      CPC	R23,R30
     232 F409      BNE	0x0234
     233 C042      RJMP	0x0276
     234 C056      RJMP	0x028B
(0189)                    {
(0190)                    case 0x01:    //S1键处理:转速增加
(0191)                        zhuansu += 100;
     235 9180 0063 LDS	R24,zhuansu
     237 9190 0064 LDS	R25,zhuansu+1
     239 598C      SUBI	R24,0x9C
     23A 4F9F      SBCI	R25,0xFF
     23B 9390 0064 STS	zhuansu+1,R25
     23D 9380 0063 STS	zhuansu,R24
(0192)                        if(zhuansu>62000)zhuansu=62000;
     23F E380      LDI	R24,0x30
     240 EF92      LDI	R25,0xF2
     241 E0A0      LDI	R26,0
     242 E0B0      LDI	R27,0
     243 9020 0063 LDS	R2,zhuansu
     245 9030 0064 LDS	R3,zhuansu+1
     247 2444      CLR	R4
     248 2455      CLR	R5
     249 1582      CP	R24,R2
     24A 0593      CPC	R25,R3
     24B 05A4      CPC	R26,R4
     24C 05B5      CPC	R27,R5
     24D F00C      BLT	0x024F
     24E C03C      RJMP	0x028B
     24F E380      LDI	R24,0x30
     250 EF92      LDI	R25,0xF2
     251 9390 0064 STS	zhuansu+1,R25
     253 9380 0063 STS	zhuansu,R24
(0193)                        break;
     255 C035      RJMP	0x028B
(0194)                    case 0x02:    //S2键处理:转速降低
(0195)                        zhuansu -= 100;
     256 9180 0063 LDS	R24,zhuansu
     258 9190 0064 LDS	R25,zhuansu+1
     25A 5684      SUBI	R24,0x64
     25B 4090      SBCI	R25,0
     25C 9390 0064 STS	zhuansu+1,R25
     25E 9380 0063 STS	zhuansu,R24
(0196)                        if(zhuansu<5000)zhuansu=5000;
     260 3888      CPI	R24,0x88
     261 E1E3      LDI	R30,0x13
     262 079E      CPC	R25,R30
     263 F538      BCC	0x028B
     264 E888      LDI	R24,0x88
     265 E193      LDI	R25,0x13
     266 9390 0064 STS	zhuansu+1,R25
     268 9380 0063 STS	zhuansu,R24
(0197)                        break;
     26A C020      RJMP	0x028B
(0198)                    case 0x04:    //S3键处理:转换驱动方式
(0199)                        m++;
     26B 9180 0061 LDS	R24,m
     26D 5F8F      SUBI	R24,0xFF
     26E 9380 0061 STS	m,R24
(0200)                        if(m>=4)m=1;
     270 3084      CPI	R24,4
     271 F0C8      BCS	0x028B
     272 E081      LDI	R24,1
     273 9380 0061 STS	m,R24
(0201)                        break;
     275 C015      RJMP	0x028B
(0202)                    case 0x08:    //S4键处理:正反转控制
(0203)                        if(n)
     276 9020 0062 LDS	R2,n
     278 2022      TST	R2
     279 F021      BEQ	0x027E
(0204)                            n=0;
     27A 2422      CLR	R2
     27B 9220 0062 STS	n,R2
     27D C00D      RJMP	0x028B
(0205)                        else
(0206)                            n=1;
     27E E081      LDI	R24,1
     27F 9380 0062 STS	n,R24
(0207)                        break;
(0208)                    default:break;
(0209)                    }
(0210)                }
     281 C009      RJMP	0x028B
(0211)            while(key)            //等待按键释放
(0212)                {
(0213)                delay_nms(100);
     282 E604      LDI	R16,0x64
     283 E010      LDI	R17,0
     284 940E 02AA CALL	_delay_nms
(0214)                key=RD_KEY();
     286 B343      IN	R20,0x13
     287 604F      ORI	R20,0xF
     288 9540      COM	R20
     289 9542      SWAP	R20
     28A 704F      ANDI	R20,0xF
     28B 2344      TST	R20
     28C F7A9      BNE	0x0282
     28D CF7F      RJMP	0x020D
     28E 9508      RET
FILE: F:\ziliao\新建文件夹\horselight_icc\cfile\delay.c
(0001) #define DELAY_C
(0002) //#include "includes.h"
(0003) #define XTAL 4    //晶振频率,单位MHz
(0004) void delay_1us(void)                 //1us延时函数
(0005)   {
(0006)    asm("nop");
_delay_1us:
     28F 0000      NOP
     290 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R10
     291 940E 030A CALL	push_xgset300C
     293 0158      MOVW	R10,R16
(0007)   }
(0008) 
(0009) void delay_nus(unsigned int n)       //N us延时函数
(0010)   {
(0011)    unsigned int i=0;
(0012)    for (i=0;i<n;i++)
     294 2744      CLR	R20
     295 2755      CLR	R21
     296 C003      RJMP	0x029A
(0013)    delay_1us();
     297 DFF7      RCALL	_delay_1us
     298 5F4F      SUBI	R20,0xFF
     299 4F5F      SBCI	R21,0xFF
     29A 154A      CP	R20,R10
     29B 055B      CPC	R21,R11
     29C F3D0      BCS	0x0297
     29D 940C 030F JMP	pop_xgset300C
(0014)   }
(0015)   
(0016) void delay_1ms(void)                 //1ms延时函数
(0017)   {
(0018)    unsigned int i;
(0019)    for (i=0;i<(unsigned int)(XTAL*143-2);i++);
_delay_1ms:
  i                    --> R16
     29F 2700      CLR	R16
     2A0 2711      CLR	R17
     2A1 C002      RJMP	0x02A4
     2A2 5F0F      SUBI	R16,0xFF
     2A3 4F1F      SBCI	R17,0xFF
     2A4 E38A      LDI	R24,0x3A
     2A5 E092      LDI	R25,2
     2A6 1708      CP	R16,R24
     2A7 0719      CPC	R17,R25
     2A8 F3C8      BCS	0x02A2
     2A9 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R10
     2AA 940E 030A CALL	push_xgset300C
     2AC 0158      MOVW	R10,R16
(0020)   }
(0021)   
(0022) void delay_nms(unsigned int n)       //N ms延时函数
(0023)   {
(0024)    unsigned int i=0;
(0025)    for (i=0;i<n;i++)
     2AD 2744      CLR	R20
     2AE 2755      CLR	R21
     2AF C003      RJMP	0x02B3
(0026)    {
(0027)       delay_1ms();
FILE: <library>
     2B0 DFEE      RCALL	_delay_1ms
     2B1 5F4F      SUBI	R20,0xFF
     2B2 4F5F      SBCI	R21,0xFF
     2B3 154A      CP	R20,R10
     2B4 055B      CPC	R21,R11
     2B5 F3D0      BCS	0x02B0
     2B6 940C 030F JMP	pop_xgset300C
mod16s:
     2B8 9468      BSET	6
     2B9 92DA      ST	R13,-Y
     2BA 2ED1      MOV	R13,R17
     2BB C004      RJMP	0x02C0
div16s:
     2BC 94E8      BCLR	6
     2BD 92DA      ST	R13,-Y
     2BE 2ED1      MOV	R13,R17
     2BF 26D3      EOR	R13,R19
     2C0 FF17      SBRS	R17,7
     2C1 C004      RJMP	0x02C6
     2C2 9510      COM	R17
     2C3 9500      COM	R16
     2C4 5F0F      SUBI	R16,0xFF
     2C5 4F1F      SBCI	R17,0xFF
     2C6 FF37      SBRS	R19,7
     2C7 C004      RJMP	0x02CC
     2C8 9530      COM	R19
     2C9 9520      COM	R18
     2CA 5F2F      SUBI	R18,0xFF
     2CB 4F3F      SBCI	R19,0xFF
     2CC 940E 02D9 CALL	xdiv16u
     2CE FED7      SBRS	R13,7
     2CF C004      RJMP	0x02D4
     2D0 9510      COM	R17
     2D1 9500      COM	R16
     2D2 5F0F      SUBI	R16,0xFF
     2D3 4F1F      SBCI	R17,0xFF
     2D4 90D9      LD	R13,Y+
     2D5 9508      RET
mod16u:
     2D6 9468      BSET	6
     2D7 C001      RJMP	xdiv16u
div16u:
     2D8 94E8      BCLR	6
xdiv16u:
     2D9 92EA      ST	R14,-Y
     2DA 92FA      ST	R15,-Y
     2DB 938A      ST	R24,-Y
     2DC 24EE      CLR	R14
     2DD 24FF      CLR	R15
     2DE E180      LDI	R24,0x10
     2DF 0F00      LSL	R16
     2E0 1F11      ROL	R17
     2E1 1CEE      ROL	R14
     2E2 1CFF      ROL	R15
     2E3 16E2      CP	R14,R18
     2E4 06F3      CPC	R15,R19
     2E5 F018      BCS	0x02E9
     2E6 1AE2      SUB	R14,R18
     2E7 0AF3      SBC	R15,R19
     2E8 9503      INC	R16
     2E9 958A      DEC	R24
     2EA F7A1      BNE	0x02DF
     2EB F416      BRTC	0x02EE
     2EC 2D0E      MOV	R16,R14
     2ED 2D1F      MOV	R17,R15
     2EE 9189      LD	R24,Y+
     2EF 90F9      LD	R15,Y+
     2F0 90E9      LD	R14,Y+
     2F1 9508      RET
mod8u:
     2F2 9468      BSET	6
     2F3 C001      RJMP	xdiv8u
div8u:
     2F4 94E8      BCLR	6
xdiv8u:
     2F5 932A      ST	R18,-Y
     2F6 92FA      ST	R15,-Y
     2F7 92EA      ST	R14,-Y
     2F8 24FF      CLR	R15
     2F9 24EE      CLR	R14
     2FA E120      LDI	R18,0x10
     2FB 0F00      LSL	R16
     2FC 1CFF      ROL	R15
     2FD 1CEE      ROL	R14
     2FE 16E1      CP	R14,R17
     2FF F010      BCS	0x0302
     300 1AE1      SUB	R14,R17
     301 9503      INC	R16
     302 952A      DEC	R18
     303 F7B9      BNE	0x02FB
     304 F40E      BRTC	0x0306
     305 2D0E      MOV	R16,R14
     306 90E9      LD	R14,Y+
     307 90F9      LD	R15,Y+
     308 9129      LD	R18,Y+
     309 9508      RET
push_xgset300C:
     30A 935A      ST	R21,-Y
     30B 934A      ST	R20,-Y
     30C 92BA      ST	R11,-Y
     30D 92AA      ST	R10,-Y
     30E 9508      RET
pop_xgset300C:
     30F 90A9      LD	R10,Y+
     310 90B9      LD	R11,Y+
     311 9149      LD	R20,Y+
     312 9159      LD	R21,Y+
     313 9508      RET
lsl16:
     314 2322      TST	R18
     315 F021      BEQ	0x031A
     316 0F00      LSL	R16
     317 1F11      ROL	R17
     318 952A      DEC	R18
     319 CFFA      RJMP	lsl16
     31A 9508      RET
lsl8:
     31B 2311      TST	R17
     31C F019      BEQ	0x0320
     31D 0F00      LSL	R16
     31E 951A      DEC	R17
     31F CFFB      RJMP	lsl8
     320 9508      RET

⌨️ 快捷键说明

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