stc单片机PCA高速输出脉冲程序
发布网友
发布时间:2022-04-30 13:03
我来回答
共4个回答
热心网友
时间:2022-06-22 11:03
CCON = 0; //初始化PCA控制寄存器,PCA定时器停止,清除CF标志,清除模块中断标志
CL = 0; //复位PCA计数寄存器
CH = 0;
CMOD = 0x02; //设置PCA时钟源为sysclock/2,禁止PCA定时器溢出中断
value = T100KHz; //计算PCA输出100K方波应设定的值
CCAP0L = value; //将值得低8位赋给CCAP0L
CCAP0H = value >> 8; //高8位赋给CCAP0H
value += T100KHz; //累加,为下一次赋值做好准备。//这个地方绝对不能注释掉,产生方波就靠它了。
CCAPM0 = 0x4d; //PCA模块1为16位定时器模式,同时反转CEX0(P1.3)口
CR = 1; //PCA定时器开始工作
EA=1; //开中断
========================================================
void pca_isr()interrupt 7 using 1
{
CCF0=0;
CCAP0L=value;
CCAP0H=value>>8;
//value +=T100KHZ; //累加,这个地方也绝对不能注释掉。要产生方波,就得每次在原值的基础上加上同样的值。
}
热心网友
时间:2022-06-22 11:03
程序中的CCAP0L=value; CCAP0H=value>>8;是用来调节占空比的 而不是用来调频率的 ,你如果想调频率的话就得调节你PCA的时钟
热心网友
时间:2022-06-22 11:04
这个要看分别率的吧,你如果分别率是256*100khz那晶振至少都要25.6mhz
热心网友
时间:2022-06-22 11:05
要在EA=1;下面加上:
while(1);
不然的话,你的程序一直在做初始化PCA。