本帖最后由 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定时器开始工作
}
|