打印

测量脉冲宽度计数问题

[复制链接]
2893|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发的 <<我的错误 大家分享>>的那个贴子.你会得到启发的.

使用特权

评论回复
5
icmap| | 2008-12-1 20:39 | 只看该作者

用 PCA 的捕捉功能

用 PCA 的捕捉功能,单次捕捉精度可达 1 个指令周期。
如果是长时间的信号,需要对 16 位捕捉值进行扩展。

使用特权

评论回复
6
ayb_ice| | 2008-12-1 20:58 | 只看该作者

这种情况肯定用中断

看你那GOTO语句估计也是菜鸟.

使用特权

评论回复
7
耕在此行| | 2008-12-1 21:03 | 只看该作者

为何一定要用中断?

楼主的查询方式没错.
问题根本就不是出在工作方式上>

使用特权

评论回复
8
pilieren|  楼主 | 2008-12-2 11:01 | 只看该作者

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

原来程序不是这么写的,后来发现"误差"很大,就用了PDF的汇编翻译过来,呵呵,偷懒了,但是结果还是不尽人意,还是没能找到具体原因。。。。
寻找中,正在尝试 PCA捕获

使用特权

评论回复
9
pilieren|  楼主 | 2008-12-2 14:11 | 只看该作者

结论

是数据溢出了!!!
谢谢各位!!!
尤其要谢谢 耕在此行!!

使用特权

评论回复
10
耕在此行| | 2008-12-2 15:03 | 只看该作者

呵呵

不用谢啰 能找到问题就好。

使用特权

评论回复
11
ayb_ice| | 2008-12-2 21:20 | 只看该作者

中断可以做到很精确

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

使用特权

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

本版积分规则

74

主题

237

帖子

3

粉丝