📄 步进马达.lst
字号:
C51 COMPILER V7.10 步絖马达 11/26/2011 17:02:01 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE 步絖马达
OBJECT MODULE PLACED IN 步进马达.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 步进马达.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*************************************************************************************
2 * 标题: 步进电机试验一 *
3 * *
4 * 通过本例程了解步进马达使用及驱动程序编写 *
5 *; 单双八拍工作方式: *
6 *; A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度) *
7 * J14短路冒需断开 *
8 * 请学员一定要消化掉本例程 *
9 *
10 **************************************************************************************/
11 #include "reg52.h"
12 //Motor
13 sbit A = P1^0; //定义管脚
14 sbit b = P1^1;
15 sbit C = P1^2;
16 sbit D = P1^3;
17
18 sbit A1 = P1^4; //定义管脚
19 sbit b1 = P1^5;
20 sbit C1 = P1^6;
21 sbit D1 = P1^7;
22
23 ///////////////////////////////////////
24 //步进电机驱动
25 unsigned char MotorStep=0; //步进马达步序
26 unsigned int MotorDelay,Speed=1,TIM,CT;
27
28 #define speed 35 // 调整速度 数值不要设的太低 低了会引起震动。
29
30 /*****************************************************
31 * 初始化马达 *
32 ******************************************************/
33 void InitMotor()
34 {
35 1 A = 1;
36 1 b = 1;
37 1 C = 1;
38 1 D = 1;
39 1 }
40
41
42
43 void SetMotor()
44 {
45 1 // if(Speed == 0) return;
46 1
47 1 MotorDelay=Speed; //调整速度
48 1 switch(MotorStep)
49 1 {
50 2 case 0:
51 2 if(TIM) // A
52 2 {
53 3 A = 0; //0xf1
54 3 b = 1;
55 3 C = 1;
C51 COMPILER V7.10 步絖马达 11/26/2011 17:02:01 PAGE 2
56 3 D = 1;
57 3 MotorStep = 1;
58 3 TIM=0;
59 3 }
60 2 break;
61 2
62 2 case 1: // AB
63 2 if(TIM)
64 2 {
65 3 A = 0; //0xf3
66 3 b = 0;
67 3 C = 1;
68 3 D = 1;
69 3 MotorStep = 2;
70 3 TIM=0;
71 3 }
72 2 break;
73 2
74 2 case 2: //B
75 2 if(TIM)
76 2 {
77 3
78 3 A = 1;
79 3 b = 0; //0xf2
80 3 C = 1;
81 3 D = 1;
82 3
83 3 MotorStep = 3;
84 3 TIM=0;
85 3 }
86 2 break;
87 2
88 2
89 2 case 3: //BC
90 2 if(TIM)
91 2 {
92 3 A = 1;
93 3 b = 0; //0xf6
94 3 C = 0;
95 3 D = 1;
96 3 MotorStep = 4;
97 3 TIM=0;
98 3 }
99 2 break;
100 2 case 4: //C
101 2 if(TIM)
102 2 {
103 3 A = 1;
104 3 b = 1; //0xf4
105 3 C = 0;
106 3 D = 1;
107 3 MotorStep = 5;
108 3 TIM=0;
109 3 }
110 2 break;
111 2 case 5: //CD
112 2 if(TIM)
113 2 {
114 3 A = 1;
115 3 b = 1; //0xfc
116 3 C = 0;
117 3 D = 0;
C51 COMPILER V7.10 步絖马达 11/26/2011 17:02:01 PAGE 3
118 3 MotorStep = 6;
119 3 TIM=0;
120 3 }
121 2 break;
122 2 case 6: //D
123 2 if(TIM)
124 2 {
125 3 A = 1;
126 3 b = 1; //0xf8
127 3 C = 1;
128 3 D = 0;
129 3 MotorStep = 7;
130 3 TIM=0;
131 3 }
132 2 break;
133 2 case 7: //DA
134 2 if(TIM)
135 2 {
136 3 A = 0;
137 3 b = 1; //0xf9
138 3 C = 1;
139 3 D = 0;
140 3 MotorStep = 0;
141 3 TIM=0;
142 3 }
143 2 break;
144 2
145 2 }
146 1
147 1 }
148
149
150 void system_Ini()
151 {
152 1 TMOD|= 0x11;
153 1 TH0=0xDC; //11.0592M
154 1 TL0=0x00;
155 1 IE = 0x8A;
156 1 TR0 = 1;
157 1
158 1
159 1 }
160
161 main()
162 { system_Ini();
163 1 InitMotor();
164 1 while(1)
165 1 {
166 2 SetMotor();
167 2
168 2 }
169 1
170 1
171 1
172 1 }
173
174 /************************************************
175 * *
176 * 定时中断延时 *
177 ************************************************/
178 void Tzd(void) interrupt 1
179 {
C51 COMPILER V7.10 步絖马达 11/26/2011 17:02:01 PAGE 4
180 1 TH0 = 0xfe; //11.0592
181 1 TL0 = 0x33;
182 1
183 1 if( CT++==speed)
184 1 {TIM=1;
185 2 CT=0;
186 2 }
187 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 291 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -