找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 143|回复: 2
打印 上一主题 下一主题
收起左侧

请教各位工程师,为什么我的频率总是设置的不对

[复制链接]
跳转到指定楼层
楼主
ID:1153575 发表于 2025-6-11 15:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我的基于STC15W408AS的代码,我想要设置 2个 频率为7KHZ,占空比为 50% ,输出相反高低电平方波,烧录后测量,频率确实43Kh,请教各位工程师,指点一下[color=rgba(0, 0, 0, 0.85)]
  1. #include "stc15.h"    // 包含STC15系列寄存器定义
  2. #include "intrins.h"

  3. #define FOSC    11059200L  // 系统时钟频率
  4. typedef unsigned char BYTE;
  5. typedef unsigned int WORD;

  6. // PCA引脚映射定义(STC15W408AS数据手册)
  7. #define CCP_S0  0x10       // P_SW1.4,选择第二组CCP引脚(P3.4~P3.7)
  8. #define CCP_S1  0x20       // P_SW1.5(未使用,保留为0)

  9. // 引脚定义
  10. sbit PWM1 = P3^5;  // CCP0_2,对应PCA模块0
  11. sbit PWM2 = P3^7;  // CCP2_2,对应PCA模块2

  12. void PCA_PWM_Init(void);  // PCA初始化函数

  13. /********************** 主函数 **********************/
  14. void main() {
  15.     // 配置引脚为推挽输出
  16.     P3M0 |= 0x84;  // P3.5(PWM1)和P3.7(PWM2)设为推挽输出(P3M0.2=1, P3M0.7=1)
  17.     P3M1 &= ~0x84; // 清除推挽输出禁止位

  18.     // 初始化PCA模块
  19.     PCA_PWM_Init();

  20.     while (1); // 主循环空转
  21. }

  22. /********************** PCA初始化函数 **********************/
  23. void PCA_PWM_Init(void) {
  24.     BYTE duty = 128;  // 50%占空比(8位PWM中255为满周期,128为中点)
  25.    
  26.     // 1. 停止PCA计数器
  27.     CR = 0;
  28.    
  29.     // 2. 配置PCA引脚映射(选择第二组CCP引脚:P3.5=CCP0_2,P3.7=CCP2_2)
  30.     P_SW1 &= ~(CCP_S0 | CCP_S0); // 清除CCP_S0和CCP_S1位
  31.     P_SW1 |= CCP_S0;             // 设置CCP_S0=1,选择P3.4~P3.7作为CCP引脚
  32.    
  33.     // 3. 配置时钟源为系统时钟/1T(STC15W支持1T模式,需确保AUXR设置正确)
  34.     AUXR |= 0x04;  // AUXR.CT0=0(定时器0模式),AUXR.ST0=1(定时器0使用1T时钟)
  35.     CMOD = 0x09;   // CMOD=0b00001001,时钟源为系统时钟/1T(CPS1=1, CPS0=0),禁止PCA定时器溢出中断
  36.    
  37.     // 4. 配置PCA模块0(P3.5)为8位PWM模式
  38.     PCA_PWM0 = 0x00;       // 8位PWM模式(自动重装,计数器0x00~0xFF)
  39.     CCAPM0 = 0x42;         // PWM模式,允许模块中断(若需要)
  40.     CCAP0H = CCAP0L = duty; // 设置占空比(高电平持续时间)
  41.    
  42.     // 5. 配置PCA模块2(P3.7)为8位PWM模式(互补波形)
  43.     PCA_PWM2 = 0x00;       // 8位PWM模式
  44.     CCAPM2 = 0x42;         // PWM模式
  45.     CCAP2H = CCAP2L = 255 - duty; // 互补占空比(低电平持续时间与PWM1高电平一致)
  46.    
  47.     // 6. 启动PCA计数器
  48.     CR = 1;
  49. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:320306 发表于 2025-6-11 18:49 | 只看该作者
是不是7K这个频率不在分频点上,我记得51单片机并不是每个频率都能产生!
回复

使用道具 举报

板凳
ID:401564 发表于 2025-6-12 10:08 | 只看该作者
15W系列没有用过,但我用过STC8H的,它是不能自己设定频率的,只能是系统时钟的几分频而已
估计你只能根据自己要频率,去找一个差不多的时钟频率了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表