jackee 发表于 2011-11-14 12:17:32

STC 12C5620 PCA 软件定时器 的求助

STC 12C5620 使用4M 晶振PCA 软件定时10ms 用SYStem/12应该对CCP0L,CCP0H赋值多少,为什么我赋值就算最低时间也有几秒长的时间? 而T0,T1定时却是正常的

yk28981 发表于 2011-11-14 12:50:47

禁止溢出中断,开匹配捕获中断;
time_10ms=0.01*4000000/12=3333;
中断中:对CCP0L,CCP0H累加time_10ms;清CCFn;

jackee 发表于 2011-11-14 12:56:56

当我赋值为3333是时间有十几秒了
你看看我是那里错了
void reset()   
{
CCON=0;
CL=0;
CH=0;
CMOD=0X00;          //时钟源 系统时钟 SYSCLK/12
CCAP0L=0X05;
CCAP0H=0X0D;
CCAPM0=0X49;   
//CR=0;          
EPCA_LVD=1;
EA=1;

}

void pca_time() interrupt 6 using 1
{CCF0=0;
runtime--;
CCAP0L= 0X05;
CCAP0H= 0X0D;

}

seawave 发表于 2011-11-14 16:26:16

PCA不能溢出用吧,我的理解是PCA相当于一个计时器,PCA中断是时点中断。
//PCA初始化
void initPCA()
{
        CCON = 0;                 //Initial PCA control register
                                        //PCA timer stop running
                                        //Clear CF flag
                                        //Clear all module interrupt flag
        CL = 0;                        //Reset PCA base timer
        CH = 0;
        CMOD = 0x00;        //Set PCA timer clock source as Fosc/12
                                        //Disable PCA timer overflow interrupt
        T_PCA = T_Value;
        CCAP0L = T_PCA;
        CCAP0H = T_PCA>>8;        //Initial PCA module-0
        T_PCA += T_Value;
        CCAPM0 = 0x49;                //PCA module-0 work in 16-bit timer mode
                                                //and enable PCA interrupt       
        CR = 1;                                //PCA timer start run
        EPCAI = 1;
}
//PCA中断程序
void PCA_Int() interrupt 6        using 0
{
        CCF0 = 0;
        CCAP0L = T_PCA;
        CCAP0H = T_PCA>>8;
        T_PCA += T_Value;
//此处增加自己的代码
}
T_Value就是定时的间隔。

jackee 发表于 2011-11-14 20:12:45

求助

jackee 发表于 2011-11-14 22:07:52

问题找出来了,原来是CCAP0每次进入中断都要累加一值才可以的

wangh0236 发表于 2011-11-15 14:01:14

禁止溢出中断,开匹配捕获中断;
time_10ms=0.01*4000000/12=3333;
中断中:对CCP0L,CCP0H累加time_10ms;清CCFn;
页: [1]
查看完整版本: STC 12C5620 PCA 软件定时器 的求助