📄 t.lst
字号:
C51 COMPILER V7.50 T 04/03/2006 16:01:18 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE T
OBJECT MODULE PLACED IN t.OBJ
COMPILER INVOKED BY: e:\xp\Keil\C51\BIN\C51.EXE t.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************************/
2 /* 程序名:PWM直流电机调速 */
3 /* */
4 /* 晶振:12.0 M CPU型号:AT89S52 */
5 /* */
-
6 /* */
7 /* 功能描述: 将J12的2,3脚和J8的7,8脚(均自上而下数)分别相连! */
8 /* 直流电机的pwm波控制,可以直接的调速从0到20级的调速 */
9 /* */
10 /* http://www.mculover.net */
11 /* http://www.mculover.net/bbs */
12 /* */
13 /* */
14 /* 湘灵电子工作室 版权所有 */
-
15 /* 2006-03-20 */
16 /************************************************************************************/
17 #include<reg51.h>
18
19 #define TH0_TL0 (65536-1000)//设定中断的间隔时长
20
21 unsigned char count0 = 0;
22 unsigned char count1 = 0;
23
24 bit Flag = 1;//电机正反转标志位,1正转,0反转
25
26 sbit Key_add=P1 ^ 4; //电机减速
27 sbit Key_dec=P1 ^ 5; //电机加速
28 sbit Key_turn=P1 ^ 6; //电机换向
29
30 sbit PWM1=P3^6;//PWM 通道 1
31 sbit PWM2=P3^7;//PWM 通道 2
32
33 unsigned char Time_delay;
34
35 //函数声明
36 void Delay(unsigned char x);
37 void Motor_speed_high(void);
38 void Motor_speed_low(void);
39 void Motor_turn(void);
40 void Timer0_init(void);
41
42 /******************************************************************************/
43 void Delay(unsigned char x)//延时处理
44 {
45 1 Time_delay = x;
46 1
47 1 while(Time_delay != 0);
48 1 }
49
50 /******************************************************************************/
51 void Timer0_int(void) interrupt 1 using 1//定时中断处理
52 {
53 1 TR0 = 0;
C51 COMPILER V7.50 T 04/03/2006 16:01:18 PAGE 2
54 1 TL0 += (TH0_TL0 + 9) % 256;
55 1 TH0 += (TH0_TL0 + 9) / 256 + (char)CY;
56 1 TR0 = 1;
57 1
58 1 if(Time_delay != 0)
59 1 {
60 2 Time_delay--; //延时函数用
61 2 }
62 1
63 1 if(Flag == 1)//电机正转
64 1 {
65 2 PWM1 = 0;
66 2
67 2 if(++count1 < count0)
68 2 {
69 3 PWM2 = 1;
70 3 }
71 2 else
72 2 PWM2 = 0;
73 2
74 2 if(count1 >= 100)
75 2 {
76 3 count1=0;
77 3 }
78 2 }
79 1 else //电机反转
80 1 {
81 2 PWM2 = 0;
82 2
83 2 if(++count1 < count0)
84 2 {
85 3 PWM1 = 1;
86 3 }
87 2 else
88 2 PWM1 = 0;
89 2
90 2 if(count1 >= 100)
91 2 {
92 3 count1=0;
93 3 }
94 2 }//反转
95 1 }
96
97 /******************************************************************************/
98 void Motor_speed_high(void)//按键处理加pwm占空比,电机加速
99 {
100 1 if(Key_add==0)
101 1 {
102 2 Delay(10);
103 2 if(Key_add==0)
104 2 {
105 3 count0 += 5;
106 3
107 3 if(count0 >= 100)
108 3 {
109 4 count0 = 0;
110 4 }
111 3 }
112 2 while(Key_add == 0);//等待键松开
113 2 }
114 1 }
115
C51 COMPILER V7.50 T 04/03/2006 16:01:18 PAGE 3
116 /******************************************************************************/
117 void Motor_speed_low(void)//按键处理减pwm占空比,电机减速
118 {
119 1 if(Key_dec==0)
120 1 {
121 2 Delay(10);
122 2 if(Key_dec==0)
123 2 {
124 3 count0 -= 5;
125 3
126 3 if(count0 <= 0)
127 3 {
128 4 count0 = 100;
129 4 }
130 3 }
131 2 while(Key_dec == 0);
132 2 }
133 1 }
134
135 /******************************************************************************/
136 void Motor_turn(void)//电机正反向控制
137 {
138 1 if(Key_turn == 0)
139 1 {
140 2 Delay(10);
141 2 if(Key_turn == 0)
142 2 {
143 3 Flag = ~Flag;
144 3 }
145 2 while(Key_turn == 0);
146 2 }
147 1 }
148
149 /******************************************************************************/
150 void Timer0_init(void)//定时器0初始化
151 {
152 1 TMOD=0x01;
153 1 TH0=TH0_TL0 / 256;
154 1 TL0=TH0_TL0 % 256;
155 1 TR0=1;
156 1 ET0=1;
157 1 EA=1;
158 1 }
159
160 /******************************************************************************/
161 void main(void)//主函数
162 {
163 1 Timer0_init();
164 1
165 1 while(1)
166 1 {
167 2 // Flag = Motor_turn();
168 2
169 2 Motor_turn();
170 2
171 2 Motor_speed_high();
172 2 Motor_speed_low();
173 2 }
174 1 }
175
176
C51 COMPILER V7.50 T 04/03/2006 16:01:18 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 201 ----
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 + -