发新帖本帖赏金 5.00元(功能说明)我要提问
返回列表
打印

STC的 PWM模块不能输出 0%的占空比?

[复制链接]
1579|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 erhohen 于 2016-7-7 11:48 编辑

这个是STC的单片机程序,目的是想输出频率100 Hz,占空比可调的PWM。
现在通过改变 CCAP0H的值可以改变占空比了。
令CCAP0H=0,那么输出占空比=100%;
可是,令CCAP0H=255,始终无法输出0%的占空比。波形如下。


#include "reg51.h"
#include "intrins.h"

sfr CCON  = 0xD8; //PCA控制寄存器
sbit CR = CCON^6; //PCA定时器运行控制位
sfr CMOD = 0xD9; //PCA模式寄存器
sfr CL = 0xE9; //PCA定时器低字节
sfr CH = 0xF9; //PCA定时器高字节
sfr CCAPM0= 0xDA; //PCA模块0模式寄存器
sfr CCAP0L = 0xEA; //PCA模块0捕获寄存器 LOW
sfr CCAP0H = 0xFA; //PCA模块0捕获寄存器 HIGH
sfr AUXR      = 0x8e;               //辅助寄存器
sfr PCA_PWM0 = 0xf2; //PCA模块0的PWM寄存器
void PCA_Init(void);
void main()
{

PCA_Init();
while (1);
}

//======================================================================
void    PCA_Init(void)
{
CMOD|=0x04;     //设置PWM时钟使用定时器0
AUXR |= 0x80;        //定时器时钟1T模式
TMOD =0;                //设置定时器模式
TL0 = 0x51;                //设置定时初值
TH0 = 0xFE;                //设置定时初值
TF0 = 0;                //清除TF0标志
TR0 = 1;                //定时器0开始计时

CCAP0L=255;
CCAP0H=255;      //占空比调整至50%

CCAPM0=0x42;    //8位PWM模式
CCON|=0x40;     //启动PWM计数
CR = 1;         //PCA定时器开始工作

}

DS1Z_QuickPrint3.png (40.94 KB )

DS1Z_QuickPrint3.png

相关帖子

沙发
redleaves| | 2016-7-7 11:59 | 只看该作者
CCAP0H=255的同时需要EPC0L=1。

使用特权

评论回复
板凳
erhohen|  楼主 | 2016-7-7 12:21 | 只看该作者
redleaves 发表于 2016-7-7 11:59
CCAP0H=255的同时需要EPC0L=1。

您好,谢谢!我看规格书也是这么说的。可是我这么做还是没有效果。

我加入这条语句:PCA_PWM0=1;

结果没有任何变化。

使用特权

评论回复
地板
redleaves| | 2016-7-7 13:21 | 只看该作者
erhohen 发表于 2016-7-7 12:21
您好,谢谢!我看规格书也是这么说的。可是我这么做还是没有效果。

我加入这条语句:PCA_PWM0=1;

PCA_PWM0=0x03;

使用特权

评论回复

打赏榜单

erhohen 打赏了 5.00 元 2016-07-07
理由:乐于助人,无私奉献。略微薄礼,以资鼓励。

5
esfheh| | 2016-7-7 14:22 | 只看该作者
看一下占空比调到99的时候的波形

使用特权

评论回复
6
erhohen|  楼主 | 2016-7-7 14:35 | 只看该作者

谢谢!  按照这个做法。可以了。

使用特权

评论回复
7
erhohen|  楼主 | 2016-7-7 14:36 | 只看该作者
esfheh 发表于 2016-7-7 14:22
看一下占空比调到99的时候的波形

占空比调到99的时候的波形,也是99

使用特权

评论回复
8
erhohen|  楼主 | 2016-7-7 14:38 | 只看该作者

这个做法可以。如果想输出别的占空比,比如50%,那么我又改成PCA_PWM0=0x00;
这样没有什么隐患吧?

使用特权

评论回复
9
xxdcq| | 2016-7-7 21:26 | 只看该作者
对于单片机来说0就是256或65536,最大的数
可以这样把PWM脚设成普通IO口,置低电平就行了

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

44

帖子

1

粉丝