测量脉冲宽度计数问题

[复制链接]
4141|10
 楼主| pilieren 发表于 2008-12-1 09:40 | 显示全部楼层 |阅读模式
各位大虾好!
    我用定时器0测量正脉冲宽度,宽度在1000us左右,TMOD.3(GATE)为1,INT0接外部脉冲,12M晶振,机械周期为1us,
初始化部分:

TL0 = 0x00; 
TH0 = 0x00;
TMOD = TMOD | 0x09;  
EX0 = 0; // 关闭INT0中断

主循环部分:

while(1)
    {
        TL0 = 0x00; // 定时器0 用于产生0.001ms 的延迟时间
        TH0 = 0x00;
        maichong_jishu_1=0;//脉冲长度计数  unsigned int型
//===========================================================
wait1:
        if(INT0==1)
        {
            goto wait1;
        }
wait2:
        if(INT0==0)
        {
            goto wait2;
        }
        TR0 = 1; // 启动定时器0
wait11:
        if(INT0==1)
        {
            goto wait11;
        }        
        TR0 = 0; // 停止定时器0
        maichong_jishu_1=TH0*256+TL0;

//省略显示部分程序。。。。。
}  


//-------------------------------
maichong_jishu_1 的结果应该在1000左右,示波器观察结果
但是 实际显示 maichong_jishu_1 的值只有200 左右,
百思不得其解,希望各位指教!!
谢谢!!
 楼主| pilieren 发表于 2008-12-1 10:49 | 显示全部楼层

补充:用的是STC12LE5410AD

我用的是深圳宏晶的片子,应该可以实现这个小功能吧?!~
keyanfeng 发表于 2008-12-1 19:47 | 显示全部楼层

为什么不用中断做

而且这样查询感觉怪怪的,
好像用汇编。
耕在此行 发表于 2008-12-1 19:54 | 显示全部楼层

哈哈 建议楼主看看

xuehongren发的 <<我的错误 大家分享>>的那个贴子.你会得到启发的.
icmap 发表于 2008-12-1 20:39 | 显示全部楼层

用 PCA 的捕捉功能

用 PCA 的捕捉功能,单次捕捉精度可达 1 个指令周期。
如果是长时间的信号,需要对 16 位捕捉值进行扩展。
ayb_ice 发表于 2008-12-1 20:58 | 显示全部楼层

这种情况肯定用中断

看你那GOTO语句估计也是菜鸟.
耕在此行 发表于 2008-12-1 21:03 | 显示全部楼层

为何一定要用中断?

楼主的查询方式没错.
问题根本就不是出在工作方式上>
 楼主| pilieren 发表于 2008-12-2 11:01 | 显示全部楼层

直接汇编翻译的。。比较菜

原来程序不是这么写的,后来发现"误差"很大,就用了PDF的汇编翻译过来,呵呵,偷懒了,但是结果还是不尽人意,还是没能找到具体原因。。。。
寻找中,正在尝试 PCA捕获
 楼主| pilieren 发表于 2008-12-2 14:11 | 显示全部楼层

结论

是数据溢出了!!!
谢谢各位!!!
尤其要谢谢 耕在此行!!
耕在此行 发表于 2008-12-2 15:03 | 显示全部楼层

呵呵

不用谢啰 能找到问题就好。
ayb_ice 发表于 2008-12-2 21:20 | 显示全部楼层

中断可以做到很精确

而且也不费时,这就是要用中断的原因,更何况LZ的程序根本没有可扩展性,如果增加一些其它的任务或者测量的脉宽范围很大....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

237

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部