124 lines
5.3 KiB
Plaintext
124 lines
5.3 KiB
Plaintext
C251 COMPILER V5.60.0, main 01/04/26 14:04:27 PAGE 1
|
||
|
||
|
||
C251 COMPILER V5.60.0, COMPILATION OF MODULE main
|
||
OBJECT MODULE PLACED IN .\Objects\main.obj
|
||
COMPILER INVOKED BY: C:\Keil_v5\C251\BIN\C251.EXE main.c INTR2 BROWSE DEBUG PRINT(.\Listings\main.lst) TABS(2) OBJECT(.\
|
||
-Objects\main.obj)
|
||
|
||
stmt level source
|
||
|
||
1 #include "stc32g.h"
|
||
2 #include "intrins.h"
|
||
3
|
||
4 #define MAIN_Fosc 24000000L // 主时钟24MHz
|
||
5 typedef unsigned char u8;
|
||
6 typedef unsigned int u16;
|
||
7 typedef unsigned long u32;
|
||
8
|
||
9 /**************************** 固定参数 400Hz PWM ****************************/
|
||
10 //#define PWM_FREQ 400 // 目标频率
|
||
11 //#define PERIOD 59999 // 24MHz下 400Hz 对应周期值
|
||
12 //#define DUTY 18000 // 30%占空比 (PERIOD/2)
|
||
13
|
||
14 /**************************** 正确参数:50Hz / 30%占空比 ****************************/
|
||
15 #define PWM_FREQ 50
|
||
16 #define PSC_VAL 239 // 预分频值(核心修复:解决16位溢出)
|
||
17 #define PERIOD 1999 // 周期值(16位寄存器最大值65535,合规)
|
||
18 #define DUTY 600 // 30%占空比 (1999*0.3=600)
|
||
19
|
||
20 /**************************** 官方宏定义 保留 ****************************/
|
||
21 #define PWM1_0 0x00 //P:P1.0 N:P1.1
|
||
22 #define PWM1_1 0x01 //P:P2.0 N:P2.1
|
||
23 #define PWM1_2 0x02 //P:P6.0 N:P6.1 ? 最终输出引脚
|
||
24 #define ENO1P 0x01
|
||
25
|
||
26 /*****************************************************************************/
|
||
27 void UpdatePwm(void);
|
||
28
|
||
29 /******************** 主函数 **************************/
|
||
30 void main(void)
|
||
31 {
|
||
32 1 WTST = 0;
|
||
33 1 EAXFR = 1; // 扩展寄存器访问使能
|
||
34 1 CKCON = 0;
|
||
35 1
|
||
36 1 // IO口初始化
|
||
37 1 P0M1 = 0x00; P0M0 = 0x00;
|
||
38 1 P1M1 = 0x00; P1M0 = 0x00;
|
||
39 1 P2M1 = 0x00; P2M0 = 0x00;
|
||
40 1 P3M1 = 0x00; P3M0 = 0x00;
|
||
41 1 P4M1 = 0x00; P4M0 = 0x00;
|
||
42 1 P5M1 = 0x00; P5M0 = 0x00;
|
||
43 1 P6M1 = 0x00; P6M0 = 0x00;
|
||
44 1 P7M1 = 0x00; P7M0 = 0x00;
|
||
45 1
|
||
46 1 // ===================== PWM 硬件配置 =====================
|
||
47 1 PWMA_ENO = 0x00;
|
||
48 1 PWMA_ENO |= ENO1P; // 使能PWM1通道输出
|
||
49 1
|
||
50 1 PWMA_CCER1 = 0x00;
|
||
51 1 PWMA_CCMR1 = 0x68; // PWM模式1输出
|
||
52 1 PWMA_CCER1 = 0x01; // 高电平有效(正常输出)
|
||
53 1
|
||
54 1 PWMA_PS = 0x00;
|
||
55 1 PWMA_PS |= PWM1_2; // ? 选择通道:P6.0 输出
|
||
56 1
|
||
57 1 // ========== 核心修复:配置预分频器(之前缺失!) ==========
|
||
58 1 PWMA_PSCRH = (u8)(PSC_VAL >> 8);
|
||
C251 COMPILER V5.60.0, main 01/04/26 14:04:27 PAGE 2
|
||
|
||
59 1 PWMA_PSCRL = (u8)PSC_VAL;
|
||
60 1
|
||
61 1 UpdatePwm(); // 加载400Hz/50%占空比参数
|
||
62 1
|
||
63 1 PWMA_BKR = 0x80; // 使能主输出(必备)
|
||
64 1 PWMA_CR1 = 0x81; // 关键:关闭单脉冲模式 → 连续输出PWM
|
||
65 1
|
||
66 1 EA = 1; // 开总中断(保留框架)
|
||
67 1
|
||
68 1 while (1)
|
||
69 1 {
|
||
70 2 // 无需任何操作,硬件连续输出400Hz PWM
|
||
71 2 }
|
||
72 1 }
|
||
73
|
||
74 //========================================================================
|
||
75 // 函数: UpdatePwm(void)
|
||
76 // 功能: 固定配置 400Hz + 50%占空比
|
||
77 //========================================================================
|
||
78 void UpdatePwm(void)
|
||
79 {
|
||
80 1 // 固定周期:59999 → 400Hz
|
||
81 1 PWMA_ARRH = (u8)(PERIOD >> 8);
|
||
82 1 PWMA_ARRL = (u8)PERIOD;
|
||
83 1
|
||
84 1 // 固定占空比:29999 → 50%
|
||
85 1 PWMA_CCR1H = (u8)(DUTY >> 8);
|
||
86 1 PWMA_CCR1L = (u8)DUTY;
|
||
87 1 }
|
||
|
||
|
||
Module Information Static Overlayable
|
||
------------------------------------------------
|
||
code size = 225 ------
|
||
ecode size = ------ ------
|
||
data size = ------ ------
|
||
idata size = ------ ------
|
||
pdata size = ------ ------
|
||
xdata size = ------ ------
|
||
xdata-const size = ------ ------
|
||
edata size = ------ ------
|
||
bit size = ------ ------
|
||
ebit size = ------ ------
|
||
bitaddressable size = ------ ------
|
||
ebitaddressable size = ------ ------
|
||
far data size = ------ ------
|
||
huge data size = ------ ------
|
||
const size = 2 ------
|
||
hconst size = ------ ------
|
||
End of Module Information.
|
||
|
||
|
||
C251 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|