2023-04-11 08:51:37 +08:00

253 lines
13 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)