📄 motor.lst
字号:
C51 COMPILER V8.08 MOTOR 03/22/2009 17:12:04 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MOTOR
OBJECT MODULE PLACED IN motor.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE motor.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #include <absacc.h>
4 #define uchar unsigned char
5
6 sbit PWM=P1^0;
7 sbit DR=P1^1;
8 sbit big_pwm=P1^2;
9 sbit small_pwm=P1^3;
10 sbit turn_direction=P1^4;
11 sbit big =P2^1;
12
13 #define timer_data (256-100)
14 #define PWM_T 100 //定义脉冲的宽度
15
16 unsigned char PWM_t ; //位时间脉冲宽度0~100
17 unsigned char PWM_count; //输出周期计数
18 unsigned char time_count;
19 bit direction;
20 /***************************************************/
21 //函数声明
22 /***************************************************/
23 void Delay(uchar);
24 void Mortor_speed_high();
25 void Mortor_speed_low();
26 void Mortor_turn();
27 /***************************************************/
28 // 定时器初始化选择方式二,延时0.1MS
29 /***************************************************/
30
31 void timer_init(void)
32 {
33 1 TMOD=0x22;
34 1 PCON=0x00; //选择方式2
35 1 TF0=0;
36 1 TH0=timer_data; //定时0.1毫秒
37 1 TL0=TH0;
38 1 ET0=1;
39 1 TR0=1;
40 1 EA=1;
41 1 }
42 void init()
43 {
44 1
45 1 }
46 void Delay(uchar temp)
47 {
48 1 uchar i;
49 1 for(i=0;i<temp;i++);
50 1 }
51 /***************************************************/
52 // 设定脉冲宽度和方向
53 /***************************************************/
54 void setting_PWM()
55 {
C51 COMPILER V8.08 MOTOR 03/22/2009 17:12:04 PAGE 2
56 1
57 1 if(PWM_count==0)
58 1 {
59 2 PWM_t=20;
60 2 direction=1;
61 2 }
62 1 }
63
64 /******************************************************************************/
65 void Motor_speed_high(void)//按键处理加pwm占空比,电机加速
66 {
67 1 if(big_pwm==0)
68 1 {
69 2 Delay(10);
70 2 if(big_pwm==0)
71 2 {
72 3 PWM_t += 5;
73 3
74 3 if(PWM_t >= 100)
75 3 {
76 4 PWM_t = 100;
77 4 }
78 3 }
79 2 while(big_pwm == 0);//等待键松开
80 2 }
81 1 }
82
83 /******************************************************************************/
84 void Motor_speed_low(void)//按键处理减pwm占空比,电机减速
85 {
86 1 if(small_pwm==0)
87 1 {
88 2 Delay(10);
89 2 if(small_pwm==0)
90 2 {
91 3 PWM_t -= 5;
92 3
93 3 if(PWM_t <= 0)
94 3 {
95 4 PWM_t = 0;
96 4 }
97 3 }
98 2 while(small_pwm == 0);
99 2 }
100 1 }
101
102 /******************************************************************************/
103 void Motor_turn(void)//电机正反向控制
104 {
105 1 if(turn_direction== 0)
106 1 {
107 2 Delay(10);
108 2 if(turn_direction== 0)
109 2 {
110 3 direction = ~direction;
111 3 }
112 2 while(turn_direction== 0);
113 2 }
114 1 }
115 void main()
116 {
117 1 timer_init();
C51 COMPILER V8.08 MOTOR 03/22/2009 17:12:04 PAGE 3
118 1 while(1)
119 1 {
120 2 setting_PWM();
121 2 Mortor_speed_low();
122 2 Mortor_speed_high();
123 2 Mortor_turn();
124 2 }
125 1 }
126 /***************************************************/
127 // pwm波输出程序
128 /***************************************************/
129 void Intimer0() interrupt 1
130 {
131 1 time_count++;
132 1 DR=PWM_t;big=!big;
133 1 if(time_count>=PWM_T)
134 1 {
135 2 time_count=0;
136 2 PWM_count++;
137 2 setting_PWM(); //每一个周期调用一次
138 2 }
139 1 if(time_count<PWM_t)
140 1 PWM=1;
141 1 else
142 1 PWM=0;
143 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 182 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
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 + -