stc单片机PCA高速输出脉冲程序为什么输出的频率不是100khz ,我的单片机工作晶振是11.0592MHZ的
#include "stc12.h"
#define fosc 11059200
#define T100KHZ (fosc/4/100000)
#define uint unsigned int
#define uchar unsigned char
uint value;
void main()
{
CCON =0;
CMOD =0x02;
CL=0;
CH=0;
value =T100KHZ;
CCAP0L=value;
CCAP0H=value>>8;
//value+=T100KHZ;
CCAPM0=0x4d;
CR=1;
EA=1;
}
void pca_isr()interrupt 7 using 1
{
CCF0=0;
CCAP0L=value;
CCAP0H=value>>8;
//value +=T100KHZ;
}
stc单片机PCA高速输出脉冲程序
答案:3 悬赏:60 手机版
解决时间 2021-02-01 12:56
- 提问者网友:愿为果
- 2021-01-31 17:02
最佳答案
- 五星知识达人网友:一把行者刀
- 2021-01-31 17:11
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; //累加,这个地方也绝对不能注释掉。要产生方波,就得每次在原值的基础上加上同样的值。
}
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; //累加,这个地方也绝对不能注释掉。要产生方波,就得每次在原值的基础上加上同样的值。
}
全部回答
- 1楼网友:罪歌
- 2021-01-31 18:42
程序中的CCAP0L=value; CCAP0H=value>>8;是用来调节占空比的 而不是用来调频率的 ,你如果想调频率的话就得调节你PCA的时钟
- 2楼网友:長槍戰八方
- 2021-01-31 17:27
由于stc的单片机里面没有pll,所以频率只会被分频,不会升高
从逻辑上来推导,应该是fosc/2
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯