?? pwm_motor.lst
字號:
C51 COMPILER V8.02 PWM_MOTOR 08/14/2007 22:37:39 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE PWM_MOTOR
OBJECT MODULE PLACED IN PWM_motor.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE PWM_motor.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*以下是一段產生占空比為20%的脈沖信號的c51程序,我想電機轉速*/
2 /*對應于一定的占空比,如果你要改變占空比,可能需要建立一個對應*/
3 /*于不同轉速的參數表(如定時器初值等),查表*/
4 /*得到不同參數,以改變占空比和轉速。你用什么驅動電路?*/
5
6 /*采用6MHz晶振,在P1.0腳上輸出周期為2.5s,占空比為20%的脈沖信號*/
7 /*定時100ms,周期2.5s需25次中斷,高電平0.5s需5次中斷*/
8
9 #include <reg51.h>
10 typedef unsigned char uchar;
11 sbit P0_0=P0^0;
12 sbit P0_1=P0^1;
13 sbit P0_2=P0^2;
14 sbit P0_3=P0^3;
15 sbit P2_0=P2^0;
16 sbit P2_1=P2^1;
17 uchar time=0;
18 uchar period=25;
19 uchar high=10;
20 uchar th1=0;
21 uchar tl1=0;
22 uchar th0=0;
23 uchar tl0=0;
24
25 void timer0() interrupt 1 using 1
26 {
27 1 TH0=0x3c; /*定時器初值重裝載*/
28 1 TL0=0xb0;
29 1 //TH0=0xc3;/*定時器初值重裝載*/
30 1 //TL0=0x50;
31 1 time++;
32 1 if(time==high) /*高電平持續時間結束,變低*/
33 1 { P2_0=tl0;
34 2 P2_1=tl1;
35 2 }
36 1 else if(time==period) /*周期時間到,變高*/
37 1 { time=0;
38 2 P2_0=th0;
39 2 P2_1=th1;
40 2
41 2 }
42 1
43 1 }
44
45 void main()
46 {
47 1 TMOD=0x01; /*定時器0方式1*/
48 1 TH0=0x3c; /*定時器裝載初值,設置脈沖信號的占空比為1/5*/
49 1 TL0=0xb0;
50 1 //TH0=0xc3;/*定時器裝載初值,設置脈沖信號的占空比為4/5*/
51 1 //TL0=0x50;
52 1 EA=1; /*開CPU中斷*/
53 1 ET0=1; /*開定時器0中斷*/
54 1 TR0=1;/*啟動定時器0*/
55 1
C51 COMPILER V8.02 PWM_MOTOR 08/14/2007 22:37:39 PAGE 2
56 1 if(P0_2==1)
57 1 {
58 2 th0=1;
59 2 tl0=0;
60 2 th1=0;
61 2 tl1=0;
62 2 }
63 1
64 1 if(P0_3==1)
65 1 {
66 2 th0=0;
67 2 tl0=0;
68 2 th1=1;
69 2 tl1=0;
70 2 }
71 1 while(1) /*等待中斷*/
72 1 {}
73 1
74 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 95 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -