STC PCA高速脉冲输出哪位高手玩过 - 技术交流区 - 电子园51单片机学习网 单片... STC PCA高速脉冲输出
//+--***--+--***-PWM初始化-+--***--+--*****--+--***--+-
void pca_init(void) //PWM初始化,输出25%占空比(全0)
{
CMOD =0x02; //设置PCA定时器,空闲模式下停止PCA计数, 时钟源f/2,禁止PCA计数器溢出中断 CCON= 0x00; //禁止PCA计数器工作,清除中断标志-溢出标志CCON=PCA模块中断标志 CL = 0x00; //PCA计数器低8位,跳线帽清计数器
CH = 0x00; //PCA计数器高8位
CCAPM0 = 0x4D; /* PWM 高速方波输出 7 6 5 4 3 2 1 0 //禁止引脚翻转
ECOMn,CAPPn,CAPNn,MATn,TOGn,PWMn,ECCFn
ECOMn 比较器使能 CAPPn 正捕获 CAPNn 负捕获
MATn 匹配背光驱动,=1置位CCFn TOGn=1翻转引脚 PWMn=1脉冲调节输出 ECCFn=1使能CCFn中断*/
CCAP0L=0x4F; //输出为38K方波
焊接熔深检测仪
CCAP0H=0x00; //
//CCAPM1 = 0x31; //上/下沿捕获
IP = 0x40; //PCA中断唯一优先
IPH = 0x40;
EPCA_LVD=1; //开PCA中断
CR = 1; //PCA计数器
EA = 1;
}
//--+-+-+-+-+-+-+-+-+- PCA中断 pwm方波输出 --+-+-+-+-+-+-+-+-+---
void FangBo() interrupt 6 //方波
{
count++;
/* if(flag==0)
{ OP = 0 ; } // 输出 低电平
*/ //输出38K 载波
CCF0=0;//清匹配中断标志CCF1
if(CCAP0L<=(255-CCAP0L_val))
CCAP0L= CCAP0L+CCAP0L_val;
else
{
CCAP0L=CCAP0L_val-(256-CCAP0L);
if (CCAP0H<255)
CCAP0H++;
else CCAP0H=0;
}
// irled = OP; // P3.4
}
// =-=-=-=-=-=-=- 主程序 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-
void main(void)
{
pca_init(); // 初始化 PCA CCAPM0 = 0x49; //禁止翻转
led0=0; // 测试指示灯
// -+-+-+--- -+-+-+--- -+-+-+--- -+-+-+--- -+-+-+---
while(1)
{
Delay_ms(1000);
黄粉虫筛选机 if(count==500){led2=!led2;}
}
}
注: 12M晶体, 利用送 0X49禁止P3.7引脚翻转过氧化氢酶活性测定.
38K 频率 应该 26US 进PCA中断一次 即 count 26us 加1 , 可实验中 发现 if(count==500){led2=!led2;} led2闪烁还算正常. 可 count==5000时, led2取反的 周期 就不是 26us * 5000 要比这长很多了.
[localimg=161,150]1[/localimg]
wang1jin (2009-8-24 11:11:25)
if(count==500){led2=!led2;} 是否改为led2 = ~led2? count定义是不是定义成int类型的...burningphoenix (2009-8-24 12:04:51)食品可追溯系统
普通的52单片机有这个功能?slaoliu (2009-8-24 16:19:39)
是STC12C2052单片机 有这功能,, unsigned int count; //延时计数器 这已定义成slaoliu (2009-8-24 16:31:50)
[localimg=229,219]1[/localimg]slaoliu (2009-8-24 16:31:52)
[localimg=229,219]1[/localimg]yaoyb_27 (2009-8-24 22:52:56)
没玩过,看看增加见识yaoyb_27 (2009-8-24 22:53:32)
没玩过,看看增加见识jxmdzj (2009-8-24 23:00:41)
我只记得PCA的速度是非常快的,好好看看你设置的值是不是太接近临界了程序我就不看了,没有那么多时间再翻出来看,呵呵,不好意思了。