Files
100_STC_PWM/Listings/main.lst

124 lines
5.3 KiB
Plaintext
Raw 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)