📄 pwm.lst
字号:
C51 COMPILER V8.02 PWM 10/01/2007 00:33:26 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE PWM
OBJECT MODULE PLACED IN .\obj\pwm.obj
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE pwm.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\pwm.lst) OBJECT(.\obj\pwm.obj)
line level source
1 //pwm.c
2 //
3
4 #include "AppDefine.h"
5
6
7 void PWM_init(void)
8 {
9 1 //CMOD
10 1 //Bit 7 6 5 4 3 2 1 0
11 1 //Symbol CIDL WDTE - - - CPS1 CPS0 ECF
12 1 //Bit 0 0 0 0 0 1 0 0
13 1
14 1 //CCON,可位
15 1 //Bit 7 6 5 4 3 2 1 0
16 1 //Symbol CF CR - CCF4 CCF3 CCF2 CCF1 CCF0
17 1 //Bit 0 0 0 0 0 0 0 0
18 1
19 1 //CCAPM0
20 1 //Bit 7 6 5 4 3 2 1 0
21 1 //Symbol - ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn
22 1 //8-bit PWM 0 1 0 0 0 0 1 0
23 1
24 1 CMOD = 0x04; //不使能中断,采用Timer0计数器,实现频率
25 1 CCON = 0x00; //溢出标志,软件清零
26 1 CCAPM0 = 0x42; //pwm
27 1 CCAPM1 = 0x42;
28 1
29 1 //频率 由PCA的Timer源来决定
30 1 TMOD |= 0x02; //TMOD: timer 0, mode 2, 8-bit reload
31 1 TL0 = 0xfb; //
32 1 TH0 = TL0;
33 1
34 1 //初值
35 1 //在PWM 模式,输出的频率决定于PCA定时器的源。
36 1 //由于只有一对CH 和CL寄存器,所有模块共享PCA定时器和频率。
37 1 //输出的占空比由装在高位CCAPnH的值控制。
38 1 //由于写入CCAPnH寄存器不是同步的,写入高位的值不会马上装入CCAPnL做比较,
39 1 //直到输出的另一个周期(当CL从255到0翻转)。
40 1 //用下面的公式计算任何占空比CCAPnH 值:
41 1 //CCAPnH=256(1-占空比)
42 1 //CCAPnH 是8 位整数,占空比是分数。
43 1 CL = 0x00;
44 1 CH = 0x00;
45 1 CCAP0L = 0x00;
46 1 CCAP0H = 0x7f;//PrePlusVol//占空比=256*50%
47 1 CCAP1L = 0x00;
48 1 CCAP1H = 0x7f;//PrePlusVol//占空比=256*50%
49 1 }
50
51
52 unsigned char PWM_status(void)
53 {
54 1 unsigned char ctime;
55 1 ctime = CL;
C51 COMPILER V8.02 PWM 10/01/2007 00:33:26 PAGE 2
56 1 _nop_();_nop_();
57 1 _nop_();_nop_();
58 1 if(ctime == CL)
59 1 return 0;//没有PWM
60 1 else
61 1 return 1;
62 1 }
63 void PWM_run(void)
64 {
65 1 TR0 = 1; // timer 0 run
66 1 CR = 1; //run PCA
67 1 }
68
69 void PWM_stop(void)
70 {
71 1 TR0 = 0; // timer 0
72 1 CR = 0;
73 1 }
74
75 void PWM_changfreq(unsigned short freq)
76 {
77 1 /*
78 1 204 238 ee
79 1 217 239 ef
80 1 227 240 f0
81 1 244 241
82 1 263 242
83 1 286 243
84 1 303 244
85 1 333 245
86 1 370 246
87 1 416 247
88 1 476 248
89 1 526 249
90 1 625 250
91 1 740 251
92 1 926 252
93 1 1220 253
94 1 1852 254 fe
95 1 */
96 1 unsigned char time0;
97 1
98 1 if(freq < 200)
99 1 time0 = 0xee;
100 1 else if(freq < 217)
101 1 time0 = 0xee;
102 1 else if(freq < 227)
103 1 time0 = 0xef;
104 1 else if(freq < 217)
105 1 time0 = 0xf0;
106 1 else if(freq < 227)
107 1 time0 = 0xef;
108 1 else if(freq < 244)
109 1 time0 = 0xf0;
110 1 else if(freq < 263)
111 1 time0 = 0xf1;
112 1 else if(freq < 286)
113 1 time0 = 0xf2;
114 1 else if(freq < 303)
115 1 time0 = 0xf3;
116 1 else if(freq < 333)
117 1 time0 = 0xf4;
C51 COMPILER V8.02 PWM 10/01/2007 00:33:26 PAGE 3
118 1 else if(freq < 370)
119 1 time0 = 0xf5;
120 1 else if(freq < 416)
121 1 time0 = 0xf6;
122 1 else if(freq < 476)
123 1 time0 = 0xf7;
124 1 else if(freq < 526)
125 1 time0 = 0xf8;
126 1 else if(freq < 625)
127 1 time0 = 0xf9;
128 1 else if(freq < 740)
129 1 time0 = 0xfa;
130 1 else if(freq < 926)
131 1 time0 = 0xfb;
132 1 else if(freq < 1220)
133 1 time0 = 0xfc;
134 1 else if(freq < 1852)
135 1 time0 = 0xfd;
136 1 else if(freq > 1852)
137 1 time0 = 0xfe;
138 1
139 1 TL0 = time0; //
140 1 TH0 = TL0; //
141 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 336 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -