📄 步进电机按键控制.lst
字号:
C51 COMPILER V7.06 步进_缁___键控制 05/20/2010 15:57:19 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 步进_缁___键控制
OBJECT MODULE PLACED IN .\obj\步进电机按键控制.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 步进电机按键控制.c BROWSE DEBUG OBJECTEXTEND PRINT(.\obj\步进电机按键控制.l
-st) OBJECT(.\obj\步进电机按键控制.obj)
stmt level source
1 /*-----------------------------------------------
2 名称:步进电机
3 论坛:www.doflye.net
4 编写:shifang
5 日期:2009.5
6 修改:无
7 内容:本程序用于测试4相步进电机常规驱动
8 使用1-2相励磁
9 1-2相激励功率增倍,步进角度减半,抖动减少
10 顺序如下 a-ab-b-bc-c-cd-d-da 又称4相8拍
11 ------------------------------------------------*/
12
13 #include <reg52.h>
14
15
16
17 sbit A1=P1^0; //定义步进电机连接端口
18 sbit B1=P1^1;
19 sbit C1=P1^2;
20 sbit D1=P1^3;
21
22
23 #define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
24 #define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
25 #define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
26 #define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电
27 #define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
28 #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
29 #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
30 #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
31 #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
32
33 unsigned char Speed;
34 bit Flag;
35 /*------------------------------------------------
36 uS延时函数,含有输入参数 unsigned char t,无返回值
37 unsigned char 是定义无符号字符变量,其值的范围是
38 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
39 长度如下 T=tx2+5 uS
40 ------------------------------------------------*/
41 void DelayUs2x(unsigned char t)
42 {
43 1 while(--t);
44 1 }
45 /*------------------------------------------------
46 mS延时函数,含有输入参数 unsigned char t,无返回值
47 unsigned char 是定义无符号字符变量,其值的范围是
48 0~255 这里使用晶振12M,精确延时请使用汇编
49 ------------------------------------------------*/
50 void DelayMs(unsigned char t)
51 {
52 1
53 1 while(t--)
54 1 {
C51 COMPILER V7.06 步进_缁___键控制 05/20/2010 15:57:19 PAGE 2
55 2 //大致延时1mS
56 2 DelayUs2x(245);
57 2 DelayUs2x(245);
58 2 }
59 1 }
60 /*------------------------------------------------
61 主函数
62 ------------------------------------------------*/
63 main()
64 {
65 1 unsigned int i=512;//旋转一周时间
66 1
67 1 EA=1; //全局中断开
68 1 EX0=1; //外部中断0开
69 1 IT0=1; //1表示边沿触发
70 1
71 1 Speed=10;
72 1 while(1){
73 2 Coil_OFF
74 2 while((i--)&&Flag) //正向
75 2 { Coil_A1
76 3 DelayMs(Speed);
77 3 Coil_AB1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替
78 3 DelayMs(Speed); //改变这个参数可以调整电机转速 ,数字越小,转速越大,力矩越小
79 3 Coil_B1
80 3 DelayMs(Speed);
81 3 Coil_BC1
82 3 DelayMs(Speed);
83 3 Coil_C1
84 3 DelayMs(Speed);
85 3 Coil_CD1
86 3 DelayMs(Speed);
87 3 Coil_D1
88 3 DelayMs(Speed);
89 3 Coil_DA1
90 3 DelayMs(Speed);
91 3 }
92 2 Coil_OFF
93 2 i=512;
94 2 while((i--)&&(!Flag))//反向
95 2 {
96 3 Coil_A1
97 3 DelayMs(Speed);
98 3 Coil_DA1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替
99 3 DelayMs(Speed); //改变这个参数可以调整电机转速 ,数字越小,转速越大,力矩越小
100 3 Coil_D1
101 3 DelayMs(Speed);
102 3 Coil_CD1
103 3 DelayMs(Speed);
104 3 Coil_C1
105 3 DelayMs(Speed);
106 3 Coil_BC1
107 3 DelayMs(Speed);
108 3 Coil_B1
109 3 DelayMs(Speed);
110 3 Coil_AB1
111 3 DelayMs(Speed);
112 3 }
113 2 }
114 1 }
115
116 /*------------------------------------------------
C51 COMPILER V7.06 步进_缁___键控制 05/20/2010 15:57:19 PAGE 3
117 外部中断程序
118 ------------------------------------------------*/
119 void ISR_INT0(void) interrupt 0
120 {
121 1
122 1 if(!INT0)
123 1 {
124 2 DelayMs(10);//在此处可以添加去抖动程序,防止按键抖动造成错误
125 2 if(!INT0)
126 2 //while(!INT1);//等待按键释放
127 2 {
128 3 Flag=!Flag;
129 3 }
130 2 }
131 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 279 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -