?? 步進電機按鍵控制.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 內(nèi)容:本程序用于測試4相步進電機常規(guī)驅(qū)動
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延時函數(shù),含有輸入?yún)?shù) 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延時函數(shù),含有輸入?yún)?shù) 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 主函數(shù)
62 ------------------------------------------------*/
63 main()
64 {
65 1 unsigned int i=512;//旋轉(zhuǎn)一周時間
66 1
67 1 EA=1; //全局中斷開
68 1 EX0=1; //外部中斷0開
69 1 IT0=1; //1表示邊沿觸發(fā)
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); //改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速 ,數(shù)字越小,轉(zhuǎn)速越大,力矩越小
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); //改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速 ,數(shù)字越小,轉(zhuǎn)速越大,力矩越小
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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -