高手们帮忙看下哪里错了(关于STC的PCA高速模式输入40kHz方波的程序)
主程序的意图是发送40kHz方波的10个脉冲之后停止,在PCA中断程序中采用了整型count变量来计数,在主程序中判断是否到达20后,停止PCA发送脉冲。运行时发现在主程序判断count变量时到达20,也不执行PCA停止命令,这该怎么修改?请各位大侠们指教指教啊,谢谢。
void pca_init(void) //PWM初始化 高速模式 fosc=32MHz
{
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=0xC8; //输出为40K方波
CCAP0H=0x00; //
IP = 0x40; //PCA中断唯一优先
IPH = 0x40;
EPCA_LVD=1; //开PCA中断
CR = 1; //PCA计数器
EA = 1;
}
void pca_fast() interrupt 6 //超声波发射40KHz方波
{
count++;
CCF1=0;
if(CCAP0L<=(255-CCAP0L_Value))
CCAP0L= CCAP0L+CCAP0L_Value;
else
CCAP0L=CCAP0L_Value-(256-CCAP0L);
if (CCAP0H<255)
CCAP0H++;
else CCAP0H=0;
}
void main(void)
{
pca_init(); //PCA初始化
while(1)
{
if(count==20)
{CR=0;
}
}
} |