📄 main.lst
字号:
C51 COMPILER V9.00 MAIN 11/13/2010 14:59:01 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL C V4\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
*** WARNING C500 IN LINE 1 OF MAIN.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))
1 /**********************************
2 /nRF24LE1控制步进电机
3 ***********************************/
4 #include "reg24le1.h"
5 #include "intrins.h"
6 /**********************************/
7 #define A1 P00
8 #define A2 P01
9 #define B1 P02
10 #define B2 P03
11 /**********************************/
12 #define LEDF P04
13 #define LEDR P05
14 #define Disableint do{EA=0;}while(0)
15 #define Enableint do{EA=1;}while(0)
16 #define TABLE_LONGTH 120
17 /**********************************/
18 #define true 1
19 #define false 0
20 /**********************************/
21 #define Goahead 1
22 #define Goback 0
23 #define STOP 0
24 #define RUN 1
25 /**********************************/
26 typedef unsigned int uint;
27 typedef unsigned char uchar;
28 typedef struct MOTOR{
29 uint Steps;
30 uint Stepc;
31 uchar MOTORderection;
32 uint Speed;
33 uchar State;
34 }STEPMOTORTYPE;
35 STEPMOTORTYPE StepMotor;
36 static uint xdata SpeedTable[TABLE_LONGTH];
37 /**********************************/
38 void MCUCLKSET()
39 {
40 1 CLKCTRL = 0x28;/*使用 XCOSC16M */
41 1 CLKLFCTRL = 0x01;
42 1 }
43 /**********************************/
44 void IOCONFIG()
45 {
46 1 P0DIR&=0XC0; /*设置P0.0~P0.5为输出*/
47 1 P0=0X00;
48 1 }
49 /**********************************
50 /设置定时器0用来控制速度
51 ***********************************/
52 void Timer0init()
53 {
54 1 TMOD=0X01;
C51 COMPILER V9.00 MAIN 11/13/2010 14:59:01 PAGE 2
55 1 TH0=(65536-50000)/256;
56 1 TL0=(65536-50000)%256;
57 1 ET0=1;
58 1 TR0=1;
59 1 EA=0;
60 1 }
61 /**********************************
62 /初始化速度表
63 **********************************/
64 void SpeedTableinit()
65 {
66 1 uchar i;
67 1 SpeedTable[0]=30000;
68 1 SpeedTable[1]=25000;
69 1 for(i=2;i<TABLE_LONGTH;i++)
70 1 {
71 2 SpeedTable[i]=SpeedTable[i-2]-SpeedTable[i-1]/4;
72 2 }
73 1 }
74 /**********************************
75 /Delay延时函数
76 ***********************************/
77 void Delay(uint x)
78 {
79 1 uchar dl;
80 1 for(;x>0;x--)
81 1 for(dl=200;dl>0;dl--)
82 1 {
83 2 _nop_();
84 2 }
85 1
86 1 }
87 /**********************************
88 /脉冲设置函数
89 **********************************/
90 void PulseSet(uchar _A1,uchar _A2,uchar _B1,uchar _B2)
91 {
92 1 A1=_A1;
93 1 A2=_A2;
94 1 B1=_B1;
95 1 B2=_B2;
96 1 return;
97 1 }
98 /**********************************
99 /步进电机驱动函数
100 ***********************************/
101 void MOTORRUN(uchar Derection)
102 {
103 1 static uchar Num=0;
104 1 if(Derection==Goahead) /*设置正转*/
105 1 {
106 2 Num=(Num+1)%8;
107 2 }
108 1 else /*设置反转*/
109 1 {
110 2 Num=(Num+7)%8;
111 2 }
112 1 switch(Num)
113 1 {
114 2 case 0 :PulseSet(0,1,1,1);break;
115 2 case 1 :PulseSet(0,0,1,1);break;
116 2 case 2 :PulseSet(1,0,1,1);break;
C51 COMPILER V9.00 MAIN 11/13/2010 14:59:01 PAGE 3
117 2 case 3 :PulseSet(1,0,0,1);break;
118 2 case 4 :PulseSet(1,1,0,1);break;
119 2 case 5 :PulseSet(1,1,0,0);break;
120 2 case 6 :PulseSet(1,1,1,0);break;
121 2 case 7 :PulseSet(0,1,1,0);break;
122 2 default:break;
123 2 }
124 1 }
125 /**********************************
126 /步进电机控制运行
127 ***********************************/
128 void MotorCtr()
129 {
130 1 if(StepMotor.Steps>StepMotor.Stepc)
131 1 {
132 2 StepMotor.State=RUN;
133 2 StepMotor.Speed=StepMotor.Steps-StepMotor.Stepc;
134 2 if(StepMotor.Speed>119)
135 2 {
136 3 StepMotor.Speed=119;
137 3 }
138 2 MOTORRUN(StepMotor.MOTORderection);
139 2 StepMotor.Stepc++;
140 2 }
141 1 else if(StepMotor.Steps<=StepMotor.Stepc)
142 1 {
143 2 StepMotor.State=STOP;
144 2 StepMotor.Speed=0;
145 2 StepMotor.Steps=0;
146 2 StepMotor.Stepc=0;
147 2 }
148 1 }
149 /**********************************
150 /步进电机启动参数设置
151 ***********************************/
152 void MOTORSET(uchar state,bit Derection,uint steps)
153 {
154 1 StepMotor.Stepc=0;
155 1 StepMotor.Steps=steps;
156 1 StepMotor.MOTORderection=Derection;
157 1 StepMotor.Speed=100;
158 1 StepMotor.State=state;
159 1 if(StepMotor.State!=STOP)
160 1 {TR0=1;} /*打开步进电机前进*/
161 1 }
162 /**********************************
163 /定时中断服务函数
164 ***********************************/
165 void TIMER0ISR() interrupt INTERRUPT_TF0
166 {
167 1 TR0=0;
168 1 MotorCtr();
169 1 // TH0=(65536-SpeedTable[StepMotor.Speed])/256;
170 1 // TL0=(65536-SpeedTable[StepMotor.Speed])%256;
171 1 TH0=(65536-1500)/256;
172 1 TL0=(65536-1500)%256;
173 1 if(StepMotor.State!=STOP)
174 1 {
175 2 TR0=1;/*打开定时器*/
176 2 }
177 1 }
178 /*********************************
C51 COMPILER V9.00 MAIN 11/13/2010 14:59:01 PAGE 4
179 /主函数部分
180 **********************************/
181 void main()
182 {
183 1 /*初始化函数*/
184 1 Disableint;
185 1 MCUCLKSET();
186 1 IOCONFIG();
187 1 Timer0init();
188 1 SpeedTableinit();
189 1 Enableint;
190 1 while(1)
191 1 {
192 2 /*设置步进电机正转*/
193 2 LEDR=0;
194 2 LEDF=1;
195 2 MOTORSET(RUN,Goahead,10000);
196 2 while(StepMotor.State!=STOP);
197 2 Delay(20000);
198 2 /*设置步进电机反转*/
199 2 LEDF=0;
200 2 LEDR=1;
201 2 MOTORSET(RUN,Goback,10000);
202 2 while(StepMotor.State!=STOP);
203 2 Delay(20000);
204 2 }
205 1 }
206 /*******************************
207 / 程序到此结束 /
208 ********************************/
209
210
211
212
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 525 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 240 ----
PDATA SIZE = ---- ----
DATA SIZE = 9 7
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -