打印
[STC单片机]

请教STC8的PCA软件延时问题

[复制链接]
1274|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xcwu|  楼主 | 2017-3-4 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位好,我用STC8的芯片PCA软件延时功能,有个问题请教各位:
延时函数是:
void delay(U8 ccapH,U8 ccapL)
{
    CCON=0;
    CL=0;
    CH=0;
    CMOD=5;    // 计数源为系统时钟4分频
    CCAP0L=ccapL;
    CCAP0H=ccapH;
    CCAPM0=0x49;    // 软件延时模式、允许匹配中断
    CR=1;    // 启动 PCA 计数器
    while(~PCAflag);    // 等待中断函数结束标志,PCAflag 这个变量在中断函数中置1
    PCAflag=0;
}
复制代码

中断函数是:
void PCA()interrupt 7    //软件延时中断函数
{
    CCF0=0;    // 清除 PCA 匹配中断标志
    CR=0;    // 关闭 PCA 计数器
    //CCAPM0=0x48;    // 软件延时模式(ECOM位和MAT位)、禁止匹配中断
    PCAflag=1;
}
复制代码

调用函数 delay 后,没反应,用keil调试发现,程序停在循环 while(~PCAflag); 中,也就是说,PCAflag 的值始终为0,但中断函数的最后我加了一句PCAflag=1; ,我觉得是中断函数出了问题,这句没执行,不知什么原因,望各位不吝赐教,谢谢。
补充说明:
厂家手册说:“如果每次PCA模块中断后,在中断服务程序中断给 CCAPnH,CCAPnL 增加一个相同的数值,那么下次中断来临的间隔时间T也是相同的,从而实现了定时功能”。但我是用来延时一次的,一次中断后,就不需要了,所以在中断函数中用 PCAflag 这个变量指示延时函数delay结束循环的,所以没给 CCAPnH,CCAPnL 这两个变量增加相同的值。我是在DHT11温湿度通信中用delay这个函数来延时的,因为用传统的延时函数在keil调试时发现差别太大,无法实现准确的延时(不知是否我对keil 还不太了解),故而使用STC的PCA软件延时功能。
还有个问题:
为了搞清楚PCA的软件延时功能,我把官方的例程直接烧到单片机里,可以运行,但修改CMOD的值后(计时脉冲源),就不行了,不知什么原因?

相关帖子

沙发
dirtwillfly| | 2017-3-4 11:47 | 只看该作者
没用过这个mcu,帮顶

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝