优享家 发表于 2014-7-17 01:24:06

STC15高速脉冲输出,用示波器测量都是固定值,如何解决

STC15高速脉冲输出,用示波器测量都是固定值(调整T38KHZ值也不行),如何解决
void IR_Modulate_Init(void)
{
        CMOD = 0x02;       //设置PCA时钟源为SYSclk / 2
        CCON = 0;                        //初始化PCA寄存器,PCA寄存器停止、清除CF标记、清除模块中断标志
        CL = 0;                                //复位PCA寄存器
        CH = 0;                                //复位PCA寄存器
        IR_Modulate_Value = T38KHZ;       
        CCAP1L =IR_Modulate_Value;          //低8位
        CCAP1H =IR_Modulate_Value >> 8; //高8位
        IR_Modulate_Value += T38KHZ;
        IP=0X80;                //设置为最高优先级
        AUXR1 = 0x10;        //        CCP调整为管脚P3.6,发送38K脉冲
        CCAPM1 = 0X4D;//
        CR = 1;
                               
}

voidPCA_isr() interrupt 7 using 2
{
        CCF1 = 0;
        CCAP0L =IR_Modulate_Value;          //低8位
        CCAP0H =IR_Modulate_Value >> 8; //高8位
        IR_Modulate_Value += T38KHZ;
//                SendChar('0');       
}

以下帖子估计遇到和我一样的问题,但C语言自己算进位,然后加进去就OK——这个怎样处理呢?
http://www.amobbs.com/forum.php?mod=viewthread&tid=4585857&pid=7690517&page=1&extra=page%3D1#pid7690517

ADDC A, CCAP1H ;3 Clock

汇编的这句话是有进位的加法。
C语言自己算进位,然后加进去就OK。
我试过可以。

gmajvfhpa 发表于 2014-7-17 09:07:15

开的是CPA1计数,中断内更新的是CCAP0L 。1与0 搞错

优享家 发表于 2014-7-17 12:47:59

gmajvfhpa 发表于 2014-7-17 09:07
开的是CPA1计数,中断内更新的是CCAP0L 。1与0 搞错

谢谢,我彻底无语了

dlmaowf 发表于 2014-7-17 14:36:45

标记一下      
页: [1]
查看完整版本: STC15高速脉冲输出,用示波器测量都是固定值,如何解决