关于捕获频率并显示出来的问题

楼主
关于捕获频率并显示出来的问题
[P]设置了一个unsigned int变量temp 用来测量周期 也就等于两个上升沿之间的差 然后设置 d= 1/(temp/32768)就是我用信号发生器发出来的波的频率 经计算 也确实这样 其中32768 是我计数用的频率 但是我在数码管上却不能显示出来 数码管设置全没问题 主要是 我计数出来的d就是频率 但是通过watch窗口看却总是65535  我上个图 就清楚了 图中temp 就是我捕获的值 这个是我用信号发生器发的500hz的波 用d= 1/(temp/32768) 应该等于500 才对 但是他却一直显示65535 我猜想是小数点他也算进去了 所以一直是65535[/P][P]DC老师 求指教啊![/P]
[upload=2071,0]360安全浏览器截图16679296.jpg[/upload]
1楼
[P][EM14] 嘿嘿~~[/P][P]65535正是0xFFFF呢,也就是说你的d一直为0xffff。有种可能你的“d= 1/(temp/32768)”公式中,计算出来的d值已超出了int型号。这个问题分两部分,超出了16位了的结果是到低你的真正计算值超出了16位,还是你的公式中有误才导至这个错误呢?[/P][P]我们来一起分析一下吧[EM15]
如果是500HZ,则周期为2mS,2/(1/326768)=65.536
这65.536算出来是浮点的,在你的算法函数中是否有采用浮点运算做法进行计算?
如果有,最后得将这个浮点转换成整型值然后再将其值显示出来。[/P][P]这步你做到了吗?
嘿嘿...估计你这么算,也不算啥新手了,有基础的。显示,一看就知道没问题,但算法和转换数值上可能这步出问题了。[/P][P]我罗嗦说句,我猜,我猜猜...估计问题就出在法算和数值....[EM48][/P]
2楼
[P]蒽  是的 我想到了小数点方面的问题 但无从下手 这样的话 我等下用c语言里面的强制转换试一下   谢谢老师[/P]
3楼
ok了 本来其实没错了 只是不知道怎么回事 d= 1/(temp/32768) 它就显示 65535 但是我把这个算式简化成327168/temp就能显示正确数值了  擦!
4楼
我觉得楼主你描述有不妥,你说公式中的“d= 1/(temp/32768)”,“式简化成327168/temp”这两个完全不同的,为啥说“其实没错”。[EM05]

电脑版 Page created in 0.0781 seconds width 2 queries.