📄 pwmdrive_12c5a.lst
字号:
C51 COMPILER V8.05a PWMDRIVE_12C5A 06/03/2012 23:09:07 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE PWMDRIVE_12C5A
OBJECT MODULE PLACED IN PwmDrive_12C5A.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PwmDrive_12C5A.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include <intrins.h>
3 #define U8 unsigned char
4
5 sfr CCON = 0xD8; //PCA控制寄存器
6 sfr CMOD = 0xD9; //PCA模式寄存器
7 sfr CCAPM0 = 0xDA; //PCA模块0模式寄存器 //模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)
8 sfr CCAPM1 = 0xDB; //PCA模块1模式寄存器 //模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)
9 sfr CL = 0xE9; //PCA 定时寄存器 低位
10 sfr CH = 0xF9; //PCA 定时寄存器 高位
11 sfr CCAP0L = 0xEA; //PCA模块0的 捕获寄存器 低位
12 sfr CCAP0H = 0xFA; //PCA模块0的 捕获寄存器 高位
13 sfr CCAP1L = 0xEB; //PCA模块1的 捕获寄存器 低位
14 sfr CCAP1H = 0xFB; //PCA模块1的 捕获寄存器 高位
15 sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0
16 sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1
17 sbit CF = 0xDF; //PCA计数溢出标志位
18 sbit CR = 0xDE; //PCA计数器 运行控制位
19 sbit CCF1 = 0xD9; //PCA模块1中断标志
20 sbit CCF0 = 0xD8; //PCA模块0中断标志
21
22 //* CCAPOH = CCAPOL = 0XC0; //模块0输出 占空因数为25%
23 //* CCAPOH = CCAPOL = 0X80; //模块0输出 占空因数为50%
24 //* CCAPOH = CCAPOL = 0X40; //模块0输出 占空因数为75%
25
26 void PWM_clock(U8 clock);
27 void PWM_start(U8 module,U8 mode);
28
29 void PWM_clock(U8 clock)
30 {
31 1 CMOD |= (clock<<1);
32 1 CL = 0x00;
33 1 CH = 0x00;
34 1 }
35
36 void PWM_start(U8 module,U8 mode)
37 {
38 1 CCAP0L = 0XC0;
39 1 CCAP0H = 0XC0; //模块0初始输出 占空因数为25%
40 1 CCAP1L = 0XC0;
41 1 CCAP1H = 0XC0; //模块1初始输出 占空因数为25%
42 1
43 1 if(module==0)
44 1 {
45 2 switch(mode)
46 2 {
47 3 case 0: CCAPM0 = 0X42;break; //模块0设置为8位PWM输出,无中断
48 3 case 1: CCAPM0 = 0X53;break; //模块0设置为8位PWM输出,下降沿产生中断
49 3 case 2: CCAPM0 = 0X63;break; //模块0设置为8位PWM输出,上升沿产生中断
50 3 case 3: CCAPM0 = 0X73;break; //模块0设置为8位PWM输出,跳变沿产生中断
51 3 default: break;
52 3 }
53 2 }
54 1 else
55 1 if(module==1)
C51 COMPILER V8.05a PWMDRIVE_12C5A 06/03/2012 23:09:07 PAGE 2
56 1 {
57 2 switch(mode)
58 2 {
59 3 case 0: CCAPM1 = 0X42;break; //模块1设置为8位PWM输出,无中断
60 3 case 1: CCAPM1 = 0X53;break; //模块1设置为8位PWM输出,下降沿产生中断
61 3 case 2: CCAPM1 = 0X63;break; //模块1设置为8位PWM输出,上升沿产生中断
62 3 case 3: CCAPM1 = 0X73;break; //模块1设置为8位PWM输出,跳变沿产生中断
63 3 default: break;
64 3 }
65 2 }
66 1 else
67 1 if(module==2)
68 1 {
69 2 switch(mode)
70 2 {
71 3 case 0: CCAPM0 = CCAPM1 = 0X42;break; //模块0和1设置为8位PWM输出,无中断
72 3 case 1: CCAPM0 = CCAPM1 = 0X53;break; //模块0和1设置为8位PWM输出,下降沿产生中断
73 3 case 2: CCAPM0 = CCAPM1 = 0X63;break; //模块0和1设置为8位PWM输出,上升沿产生中断
74 3 case 3: CCAPM0 = CCAPM1 = 0X73;break; //模块0和1设置为8位PWM输出,跳变沿产生中断
75 3 default: break;
76 3 }
77 2 }
78 1 CR=1; //PCA计数器开始计数
79 1 }
80
81 void PCA_Intrrpt(void) interrupt 7
82 {
83 1 if(CCF0) CCF0=0;
84 1 if(CCF1) CCF1=0; //软件清零
85 1 if(CF) CF=0; //软件清零
86 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 151 ----
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 + -