main.lst
来自「51单片机驱动2相步进电机程序。 keil 开发软件。」· LST 代码 · 共 138 行
LST
138 行
C51 COMPILER V8.16 MAIN 02/13/2009 19:04:37 PAGE 1
C51 COMPILER V8.16, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\OBJ\main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SRC\main.C BROWSE DEBUG OBJECTEXTEND PRINT(.\LST\main.lst) OBJECT(.\OBJ\mai
-n.obj)
line level source
1 //QQ:228939191.
2 //两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA
3 //四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍
4 //#include <reg51.h>
5 #include "STC89C52.H"
6 #include <intrins.h>
7 //定义两相电机的四组线,
8 sbit LA1=P0^0; //为 A相
9 sbit LB1=P0^1; //为 B相
10 sbit LA2=P0^2; //为/A相
11 sbit LB2=P0^3; //为/B相
12 #define uchar unsigned char
13
14 void mDelay(unsigned int DelayTime); //延时函数
15
16
17 //2相4拍
18 /************************************************************************************/
19 //两个参数代表步进步数和转速
20 void Right1(unsigned int BuShu,unsigned int SuDu)
21 {
22 1 //步进节拍:A-AC-C-CB-B-BD-D-DA
23 1 while(1)
24 1 {
25 2 LA1=0;LB1=1;LA2=1;LB2=1;
26 2 mDelay(SuDu); //这里的延时就可控制转速
27 2 if(!BuShu--)break; //判断步进量走完没?以下都是,每走一步,判断一次
28 2
29 2 LA1=0;LB1=0;LA2=1;LB2=1;
30 2 mDelay(SuDu);
31 2 if(!BuShu--)break;
32 2
33 2 LA1=1;LB1=0;LA2=1;LB2=1;
34 2 mDelay(SuDu);
35 2 if(!BuShu--)break;
36 2
37 2 LA1=1;LB1=0;LA2=0;LB2=1;
38 2 mDelay(SuDu);
39 2 if(!BuShu--)break;
40 2
41 2 LA1=1;LB1=1;LA2=0;LB2=1;
42 2 mDelay(SuDu);
43 2 if(!BuShu--)break;
44 2
45 2 LA1=1;LB1=1;LA2=0;LB2=0;
46 2 mDelay(SuDu);
47 2 if(!BuShu--)break;
48 2
49 2 LA1=1;LB1=1;LA2=1;LB2=0;
50 2 mDelay(SuDu);
51 2 if(!BuShu--)break;
52 2
53 2 LA1=0;LB1=1;LA2=1;LB2=0;
54 2 mDelay(SuDu);
C51 COMPILER V8.16 MAIN 02/13/2009 19:04:37 PAGE 2
55 2 if(!BuShu--)break;
56 2 }
57 1 // P0=0xFF;
58 1 }
59 //2相4拍
60 /************************************************************************************/
61 void Right2(unsigned int BuShu,unsigned int SuDu)
62 {
63 1 //步进节拍:A1B1-B1A2-A2B2-B2A1
64 1 while(1)
65 1 {
66 2 LA1=0;LB1=0;LA2=1;LB2=1;
67 2 mDelay(SuDu);//这里的延时就可控制转速
68 2 if(!BuShu--)break;
69 2
70 2 LA1=1;LB1=0;LA2=0;LB2=1;
71 2 mDelay(SuDu);
72 2 if(!BuShu--)break;
73 2
74 2 LA1=1;LB1=1;LA2=0;LB2=0;
75 2 mDelay(SuDu);
76 2 if(!BuShu--)break;
77 2
78 2 LA1=0;LB1=1;LA2=1;LB2=0;
79 2 mDelay(SuDu);
80 2 if(!BuShu--)break;
81 2 }
82 1
83 1 }
84 /************************************************************************************/
85 void mDelay(unsigned int DelayTime) //延时函数
86 {
87 1 unsigned char j=0;
88 1 while(DelayTime--)
89 1 {
90 2 for(j=0;j<20;j++){}
91 2 }
92 1 }
93 /************************************************************************************/
94 void main()
95 {
96 1
97 1 while(1)
98 1 {
99 2
100 2 //如果控制方式为2相4拍,一圈是200个脉冲。那一个脉冲是1.8度。
101 2 //如果电机连接机械运行一圈是100mm,那一个脉冲是0.5mm。
102 2 //如果你要电机运行248mm,知道给几个脉冲了吧?如果不知道安就撞墙了。
103 2 if(P1_0==0)Right2(800,12); //P1_0按下,电机运行800个脉冲。12是延时,数越大速度就越慢。
104 2 else P0=0x0F;//停止后将四个脚输出置高
105 2 }
106 1 }
107
108
109
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 364 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V8.16 MAIN 02/13/2009 19:04:37 PAGE 3
DATA SIZE = ---- 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?