253 lines
13 KiB
Plaintext
253 lines
13 KiB
Plaintext
C51 COMPILER V9.60.0.0 PWM 04/11/2023 08:44:51 PAGE 1
|
||
|
||
|
||
C51 COMPILER V9.60.0.0, COMPILATION OF MODULE PWM
|
||
OBJECT MODULE PLACED IN .\Objects\PWM.obj
|
||
COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\PWM.C OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND
|
||
- PRINT(.\Listings\PWM.lst) TABS(2) OBJECT(.\Objects\PWM.obj)
|
||
|
||
line level source
|
||
|
||
1 /*---------------------------------------------------------------------*/
|
||
2 /* --- STC MCU Limited ------------------------------------------------*/
|
||
3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
||
4 /* --- Mobile: (86)13922805190 ----------------------------------------*/
|
||
5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
||
6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
||
7 /* --- Web: www.STCMCU.com --------------------------------------------*/
|
||
8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
||
9 /* --- QQ: 800003751 -------------------------------------------------*/
|
||
10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
||
11 /*---------------------------------------------------------------------*/
|
||
12
|
||
13 #include "PWM.h"
|
||
14 PWMx_Duty PWMB_Duty;
|
||
15 u8 PWM_Configuration(u8 PWM, PWMx_InitDefine *PWMx)
|
||
16 {
|
||
17 1 if (PWM == PWMA)
|
||
18 1 {
|
||
19 2 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
|
||
20 2
|
||
21 2 if (PWMx->PWM1_SetPriority <= Priority_3)
|
||
22 2 PWM1_Priority(PWMx->PWM1_SetPriority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priorit
|
||
-y_2,Priority_3
|
||
23 2 if (PWMx->PWM2_SetPriority <= Priority_3)
|
||
24 2 PWM2_Priority(PWMx->PWM2_SetPriority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priorit
|
||
-y_2,Priority_3
|
||
25 2 if (PWMx->PWM3_SetPriority <= Priority_3)
|
||
26 2 PWM3_Priority(PWMx->PWM3_SetPriority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priorit
|
||
-y_2,Priority_3
|
||
27 2 if (PWMx->PWM4_SetPriority <= Priority_3)
|
||
28 2 PWM4_Priority(PWMx->PWM4_SetPriority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priorit
|
||
-y_2,Priority_3
|
||
29 2
|
||
30 2 PWMA_CCER1_Disable(); // 关闭所有输入捕获/比较输出
|
||
31 2 PWMA_CCER2_Disable(); // 关闭所有输入捕获/比较输出
|
||
32 2 PWMA_OC1ModeSet(PWMx->PWM1_Mode); // 设置输出比较模式
|
||
33 2 PWMA_OC2ModeSet(PWMx->PWM2_Mode); // 设置输出比较模式
|
||
34 2 PWMA_OC3ModeSet(PWMx->PWM3_Mode); // 设置输出比较模式
|
||
35 2 PWMA_OC4ModeSet(PWMx->PWM4_Mode); // 设置输出比较模式
|
||
36 2 if (PWMx->PWM_Reload == ENABLE)
|
||
37 2 PWMA_OC1_ReloadEnable(); // 输出比较的预装载使能
|
||
38 2 else
|
||
39 2 PWMA_OC1_RelosdDisable(); // 禁止输出比较的预装载
|
||
40 2 if (PWMx->PWM_Fast == ENABLE)
|
||
41 2 PWMA_OC1_FastEnable(); // 输出比较快速功能使能
|
||
42 2 else
|
||
43 2 PWMA_OC1_FastDisable(); // 禁止输出比较快速功能
|
||
44 2
|
||
45 2 if (PWMx->PWM_CC1Enable == ENABLE)
|
||
46 2 PWMA_CC1E_Enable(); // 开启输入捕获/比较输出
|
||
47 2 else
|
||
48 2 PWMA_CC1E_Disable(); // 关闭输入捕获/比较输出
|
||
49 2 if (PWMx->PWM_CC1NEnable == ENABLE)
|
||
50 2 PWMA_CC1NE_Enable(); // 开启输入捕获/比较输出
|
||
C51 COMPILER V9.60.0.0 PWM 04/11/2023 08:44:51 PAGE 2
|
||
|
||
51 2 else
|
||
52 2 PWMA_CC1NE_Disable(); // 关闭输入捕获/比较输出
|
||
53 2 if (PWMx->PWM_CC2Enable == ENABLE)
|
||
54 2 PWMA_CC2E_Enable(); // 开启输入捕获/比较输出
|
||
55 2 else
|
||
56 2 PWMA_CC2E_Disable(); // 关闭输入捕获/比较输出
|
||
57 2 if (PWMx->PWM_CC2NEnable == ENABLE)
|
||
58 2 PWMA_CC2NE_Enable(); // 开启输入捕获/比较输出
|
||
59 2 else
|
||
60 2 PWMA_CC2NE_Disable(); // 关闭输入捕获/比较输出
|
||
61 2 if (PWMx->PWM_CC3Enable == ENABLE)
|
||
62 2 PWMA_CC3E_Enable(); // 开启输入捕获/比较输出
|
||
63 2 else
|
||
64 2 PWMA_CC3E_Disable(); // 关闭输入捕获/比较输出
|
||
65 2 if (PWMx->PWM_CC3NEnable == ENABLE)
|
||
66 2 PWMA_CC3NE_Enable(); // 开启输入捕获/比较输出
|
||
67 2 else
|
||
68 2 PWMA_CC3NE_Disable(); // 关闭输入捕获/比较输出
|
||
69 2 if (PWMx->PWM_CC4Enable == ENABLE)
|
||
70 2 PWMA_CC4E_Enable(); // 开启输入捕获/比较输出
|
||
71 2 else
|
||
72 2 PWMA_CC4E_Disable(); // 关闭输入捕获/比较输出
|
||
73 2 if (PWMx->PWM_CC4NEnable == ENABLE)
|
||
74 2 PWMA_CC4NE_Enable(); // 开启输入捕获/比较输出
|
||
75 2 else
|
||
76 2 PWMA_CC4NE_Disable(); // 关闭输入捕获/比较输出
|
||
77 2
|
||
78 2 PWMA_AutoReload(PWMx->PWM_Period);
|
||
79 2 PWMA_Duty1(PWMx->PWM1_Duty);
|
||
80 2 PWMA_Duty2(PWMx->PWM2_Duty);
|
||
81 2 PWMA_Duty3(PWMx->PWM3_Duty);
|
||
82 2 PWMA_Duty4(PWMx->PWM4_Duty);
|
||
83 2
|
||
84 2 PWMA_CCPCAPreloaded(PWMx->PWM_PreLoad); // 捕获/比较预装载控制位(该位只对具有互补输出的通道起作用)
|
||
85 2 PWMA_PS = PWMx->PWM_PS_SW; // 切换IO
|
||
86 2 PWMA_ENO = PWMx->PWM_EnoSelect; // 输出通道选择
|
||
87 2 PWMA_DeadTime(PWMx->PWM_DeadTime); // 死区发生器设置
|
||
88 2
|
||
89 2 if (PWMx->PWM_BrakeEnable == ENABLE)
|
||
90 2 PWMA_BrakeEnable(); // 开启刹车输入
|
||
91 2 else
|
||
92 2 PWMA_BrakeDisable(); // 禁止刹车输入
|
||
93 2 if (PWMx->PWM_MainOutEnable == ENABLE)
|
||
94 2 PWMA_BrakeOutputEnable(); // 主输出使能
|
||
95 2 else
|
||
96 2 PWMA_BrakeOutputDisable(); // 主输出禁止
|
||
97 2 if (PWMx->PWM_CEN_Enable == ENABLE)
|
||
98 2 PWMA_CEN_Enable(); // 使能计数器
|
||
99 2 else
|
||
100 2 PWMA_CEN_Disable(); // 禁止计数器
|
||
101 2
|
||
102 2 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
|
||
103 2 return 0;
|
||
104 2 }
|
||
105 1
|
||
106 1 if (PWM == PWMB)
|
||
107 1 {
|
||
108 2 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
|
||
109 2
|
||
110 2 if (PWMx->PWM5_SetPriority <= Priority_3)
|
||
111 2 PWM5_Priority(PWMx->PWM5_SetPriority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priorit
|
||
-y_2,Priority_3
|
||
C51 COMPILER V9.60.0.0 PWM 04/11/2023 08:44:51 PAGE 3
|
||
|
||
112 2
|
||
113 2 PWMB_CCER1_Disable(); // 关闭所有输入捕获/比较输出
|
||
114 2 PWMB_CCER2_Disable(); // 关闭所有输入捕获/比较输出
|
||
115 2 PWMB_OC5ModeSet(PWMx->PWM5_Mode); // 设置输出比较模式
|
||
116 2 PWMB_OC6ModeSet(PWMx->PWM6_Mode); // 设置输出比较模式
|
||
117 2 PWMB_OC7ModeSet(PWMx->PWM7_Mode); // 设置输出比较模式
|
||
118 2 PWMB_OC8ModeSet(PWMx->PWM8_Mode); // 设置输出比较模式
|
||
119 2 if (PWMx->PWM_Reload == ENABLE)
|
||
120 2 PWMB_OC5_ReloadEnable(); // 输出比较的预装载使能
|
||
121 2 else
|
||
122 2 PWMB_OC5_RelosdDisable(); // 禁止输出比较的预装载
|
||
123 2 if (PWMx->PWM_Fast == ENABLE)
|
||
124 2 PWMB_OC5_FastEnable(); // 输出比较快速功能使能
|
||
125 2 else
|
||
126 2 PWMB_OC5_FastDisable(); // 禁止输出比较快速功能
|
||
127 2
|
||
128 2 if (PWMx->PWM_CC5Enable == ENABLE)
|
||
129 2 PWMB_CC5E_Enable(); // 开启输入捕获/比较输出
|
||
130 2 else
|
||
131 2 PWMB_CC5E_Disable(); // 关闭输入捕获/比较输出
|
||
132 2 if (PWMx->PWM_CC6Enable == ENABLE)
|
||
133 2 PWMB_CC6E_Enable(); // 开启输入捕获/比较输出
|
||
134 2 else
|
||
135 2 PWMB_CC6E_Disable(); // 关闭输入捕获/比较输出
|
||
136 2 if (PWMx->PWM_CC7Enable == ENABLE)
|
||
137 2 PWMB_CC7E_Enable(); // 开启输入捕获/比较输出
|
||
138 2 else
|
||
139 2 PWMB_CC7E_Disable(); // 关闭输入捕获/比较输出
|
||
140 2 if (PWMx->PWM_CC8Enable == ENABLE)
|
||
141 2 PWMB_CC8E_Enable(); // 开启输入捕获/比较输出
|
||
142 2 else
|
||
143 2 PWMB_CC8E_Disable(); // 关闭输入捕获/比较输出
|
||
144 2
|
||
145 2 PWMB_AutoReload(PWMx->PWM_Period);
|
||
146 2 PWMB_Duty5(PWMx->PWM5_Duty);
|
||
147 2 PWMB_Duty6(PWMx->PWM6_Duty);
|
||
148 2 PWMB_Duty7(PWMx->PWM7_Duty);
|
||
149 2 PWMB_Duty8(PWMx->PWM8_Duty);
|
||
150 2
|
||
151 2 PWMB_CCPCBPreloaded(PWMx->PWM_PreLoad); // 捕获/比较预装载控制位(该位只对具有互补输出的通道起作用)
|
||
152 2 PWMB_PS = PWMx->PWM_PS_SW; // 切换IO
|
||
153 2 PWMB_ENO = PWMx->PWM_EnoSelect; // 输出通道选择
|
||
154 2 PWMB_DeadTime(PWMx->PWM_DeadTime); // 死区发生器设置
|
||
155 2
|
||
156 2 if (PWMx->PWM_BrakeEnable == ENABLE)
|
||
157 2 PWMB_BrakeEnable(); // 开启刹车输入
|
||
158 2 else
|
||
159 2 PWMB_BrakeDisable(); // 禁止刹车输入
|
||
160 2 if (PWMx->PWM_MainOutEnable == ENABLE)
|
||
161 2 PWMB_BrakeOutputEnable(); // 主输出使能
|
||
162 2 else
|
||
163 2 PWMB_BrakeOutputDisable(); // 主输出禁止
|
||
164 2 if (PWMx->PWM_CEN_Enable == ENABLE)
|
||
165 2 PWMB_CEN_Enable(); // 使能计数器
|
||
166 2 else
|
||
167 2 PWMB_CEN_Disable(); // 禁止计数器
|
||
168 2
|
||
169 2 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
|
||
170 2 return 0;
|
||
171 2 }
|
||
172 1
|
||
173 1 return 2; // 错误
|
||
C51 COMPILER V9.60.0.0 PWM 04/11/2023 08:44:51 PAGE 4
|
||
|
||
174 1 }
|
||
175
|
||
176 /*********************************************************/
|
||
177
|
||
178 /******************* PWM 占空比设置函数 *******************/
|
||
179 void UpdatePwm(u8 PWM, PWMx_Duty *PWMx)
|
||
180 {
|
||
181 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
|
||
182 1
|
||
183 1 if (PWM == PWMA)
|
||
184 1 {
|
||
185 2 PWMA_Duty1(PWMx->PWM1_Duty);
|
||
186 2 PWMA_Duty2(PWMx->PWM2_Duty);
|
||
187 2 PWMA_Duty3(PWMx->PWM3_Duty);
|
||
188 2 PWMA_Duty4(PWMx->PWM4_Duty);
|
||
189 2 }
|
||
190 1 else
|
||
191 1 {
|
||
192 2 PWMB_Duty5(PWMx->PWM5_Duty);
|
||
193 2 PWMB_Duty6(PWMx->PWM6_Duty);
|
||
194 2 PWMB_Duty7(PWMx->PWM7_Duty);
|
||
195 2 PWMB_Duty8(PWMx->PWM8_Duty);
|
||
196 2 }
|
||
197 1
|
||
198 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
|
||
199 1 }
|
||
200
|
||
201 /*********************************************************/
|
||
202 void PWM_config(void)
|
||
203 {
|
||
204 1 PWMx_InitDefine PWMx_InitStructure;
|
||
205 1 PWMx_InitStructure.PWM5_Mode = CCMRn_PWM_MODE1;
|
||
206 1 PWMx_InitStructure.PWM5_SetPriority = Priority_0;
|
||
207 1 PWMx_InitStructure.PWM_Period = 1500;
|
||
208 1 PWMx_InitStructure.PWM5_Duty = PWMB_Duty.PWM5_Duty;
|
||
209 1 PWMx_InitStructure.PWM_DeadTime = 0;
|
||
210 1 PWMx_InitStructure.PWM_EnoSelect = ENO5P;
|
||
211 1 PWMx_InitStructure.PWM_PS_SW = PWM5_SW_P17;
|
||
212 1 PWMx_InitStructure.PWM_CC5Enable = ENABLE;
|
||
213 1 PWMx_InitStructure.PWM_MainOutEnable = ENABLE; // ?÷????????, ENABLE,DISABLE
|
||
214 1 PWMx_InitStructure.PWM_CEN_Enable = ENABLE; // ?????????÷, ENABLE,DISABLE
|
||
215 1 PWM_Configuration(PWMB, &PWMx_InitStructure); // ??????PWM, PWMA,PWMB
|
||
216 1 PWMB_Duty.PWM5_Duty = 1500;
|
||
217 1 }
|
||
|
||
|
||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||
CODE SIZE = 1448 ----
|
||
CONSTANT SIZE = ---- ----
|
||
XDATA SIZE = ---- ----
|
||
PDATA SIZE = ---- ----
|
||
DATA SIZE = 16 52
|
||
IDATA SIZE = ---- ----
|
||
BIT SIZE = ---- ----
|
||
END OF MODULE INFORMATION.
|
||
|
||
|
||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|