求大神指教 小弟实在不会了 stc12c5410ad的pwm程序 就是进不去中断 CL不计数

***********************************
TIMER0模式要中断输出 频率可调 若是
8位pwm的模式则无需中断输出
不过频率是固定的
**************************************/
#include<STC12C54.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

void delay(int ms) //12m晶振时1个单位延时为1.13ms
{
while(ms--)
{
uchar i;
for(i=0;i<100;i++)
{
_nop_();
_nop_();
_nop_();
}
}
}
/**********************************************
PCA初始化 timer0模式
**************************************************/
void init_pca()
{
CMOD=0X84; //空闲模式下停止pca计数器工作
//PCA时钟源为timer0的溢出率
//禁止pca计数溢出中断 CH CL从FFFF到0000的中断
CCON=0X00;
CL=0X00;
CH=0X00;
}
/****************************************
模块1输出pwm 要中断 P3.5
*******************************************/
void PCA_MODE1_INIT()
{
CCAP1L=0X01;
CCAP1H=0X02;
CCAPM1=0X4B;//PCA模块1为16位软件定时器ECCF1=1允许pca模块1中断
//当ch cl=ccap1h ccap1l时产生中断请求 ccf1=1请求中断
EPCA_LVD=1;//开pca中断和lvd(低压检测)中断共享的总中断位
EA=1; //开总中断
CR=1; //启动pca计数工作(ch cl)
//上边三行为开启控制位 pwm公用的
}
/****************************************
模块0 8位pwm模式输出 无需中断 p3.7 频率固定2分频
********************************************/
void PCA_MODE0_8BIT_INIT()
{
CCAPM0=0X42; //模块0的8位pwm波 p3.7口
PCA_PWM0=0x00;//开启控制都是一样的 ea cr...
CCAP0H=0XC6; //设置占空比

EA=1; //开总中断
EPCA_LVD=1;//开pca中断和lvd(低压检测)中断共享的总中断位
CR=1; //启动pca计数工作(ch cl)
}
/**************************************************
timer0初始化
******************************************************/
void timer0_init()
{
TMOD=0X02; //设置定时器0为自动重装模式
TH0=0XF6;
TL0=0XEC;
TR0=1;

}
/**************************************
PCA中断服务 保证每次中断时间相同CCAP1H/L要加相同的值
定时器0可有AUXR来设定分频模式 可达到1T模式 下面的位12分频
定时器没每12个时钟加1 定时器0每加10次产生1次溢出 即没120个时钟
CH CL加1 当加到ccap时便会中断 假设定时器0每10次溢出 每次定时为T 假设为5ms 18m晶振 则
CCAPH/L的定时值为 T/((1/FOSC)*120)=1E00H 则每次加的值为CCAP1H加1E
CCAP1L 每次加00h
****************************************/
void PCA_STOP() interrupt 6
{
CCAP1L=CCAP1L+0X00; //为ccap1h/l加相同的值 保证每次中断时间相同
CCAP1H=CCAP1H+0X1E;
CCF1=0;
//CF=0;
}

void main(void)
{
AUXR=0X84;
init_pca();
PCA_MODE1_INIT();
PCA_MODE0_8BIT_INIT();
timer0_init();
delay(1);
while(1)
{

} ;
}

stc12c5410ad的pwm程序 就是进不去中断 CL不计数,PWM只要启动了就有中断。也就是说PWM是不支持中断的,
pca模块的时钟信号有:
T0的溢出率,
fosc/2,
fosc/12,
p3.4脚的输入时钟信号,
只要PWM模块启动了CR位,
就可以实现连续的输出脉冲,
只能调宽,
不支持中断(在PWM模式)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-10
同等高手近来回答
相似回答