完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
你好!!!!差不多一年后我回来了。我正在尝试用PIC18F4520对超声波传感器SH04进行编程,但是我可能犯了一些错误,因为有时定时器1会给我返回一个数字<0,所以它意味着有些不对劲。我已经这样做了;1-现在我没有兴趣得到一个完美的值,所以我不用。外部中断来获得Echo wave的开始(我将在后面这样做)。2-现在我只想确定我必须具有的间隔值,以便直接指向。我使用Pic18f4520和XTAL=24Mhz我所做的是启用timer1的中断来设置这个引脚和配置timer1;我相信这种配置应该可以正常工作。预分频器被设置为1:1,所以我的增量将由FOSC/4=24/4=6MHZ或对于每个0.167us发生,然后我的溢出将在(65535*0.167us)=0.0109s=10.9ms之后发生,所以在每10.9ms之后,中断例程应该是大约LLED和Time1Kter增加了,但有时它返回了数字lt;0,所以我想知道这里有什么不对吗?因为我认为不管发生什么,它都不应该返回这样的值。我用定时器只是用来测量来自传感器的回波时间。我的代码就在上面,我使用temp、buff变量只是为了测试和调试代码。我的主要代码在这里:我确实试图找出什么错误,但是我失败了,所以上传我的项目只有archive.c是主要的,其余的就是.h a只是上传,它说不支持.h对不起。任何Hel非常感谢,谢谢!抱歉我的英语不好(我正在努力工作)
bib_LCD.c(1.00KB)-下载63次延迟.c(0.25KB)-下载49次pic18f4520_config.c(8.03KB)-下载76次Ultrasom.c(2.30KB)-下载76次 |
|
相关推荐
9个回答
|
|
|
是不是“温度”溢出了16位?(因此可能变成否定的)
|
|
|
|
|
|
定时器联盟的声明是什么?你是说你得到了负值(“但有时它会返回一个数字lt;0”)?VAR是否定义为整数或无符号整数?
|
|
|
|
|
|
CinziaG谢谢你的答复,但我想不是这样,因为在开始时我试着把这个例程构建为float,并且我没有像上面那样直接使用“temp”变量作为回报;(当然,我在我的其他主要浮动类型中使用)旧版本的代码;有大约1年或更长的时间,我没有为此编程。XC8编译器,a不记得类型为“in t”的变量只有16位,虽然是32位。现在我明白了,我做错了什么,感谢它:)但是有些事情引起我的注意,如果in t变量类型只有16位,它应该从-32767开始,一直到+32767(当in t变量类型为+32767时)我像有符号int一样声明)因为1位是用于签名,如果我声明为无符号int,那么我应该从0开始,一直到65535,但是它不会发生,它以相同的方式溢出。如果我这样做的话,这就是为什么我不相信这只是一个变量溢出。我相信它来自timer1溢出,但是由于某些原因,这次它不会像它应该做的那样进入中断例程。但是正如我所说,我通常不编译XC8编译器的代码,当然我可能是错的。但我认为更奇怪的是,有时函数正常工作并进入中断器。这对我有很大帮助。我会妥善处理我的代码,注意16位溢出。如果我有任何消息,我会发布。
|
|
|
|
|
|
需要重新计算表达式如何在C中计算。在计算表达式后添加“(浮点)”强制转换已经太迟了。它已经溢出了。
|
|
|
|
|
|
完美,是的,我正在考虑,最新的代码仍然可以击中这个问题!
|
|
|
|
|
|
您需要将临时表定义为32位(无符号长度),因为它不能保存额外的计数信息。还应该乘以65536而不是65535。您还需要防止在中断时读取计时器的问题。否则,您可以使用0x0000而不是0x10000或其他方式结束您的测试。
|
|
|
|
|
|
非常感谢所有的帮助!它起作用了!而且它确实是溢出的,完美的,是的,我正在考虑,最新的代码仍然可以击中这个问题!当我读到它的时候,我有道理,不要在意它是否已经溢出来之后我正在做石膏,就这么说吧。现在我认为我是在Criss的试用之后做的(它帮了我很多忙)。我相信在这段时间内不会发生溢出的情况。感谢大家的帮助!
|
|
|
|
|
|
当您停止计时器时,tmr1_cnt的读数在您的情况中不会改变:-)我没想到您以前正在这样做。它应该已经说过,我已经在上面纠正了这一点。没有这个,会有1/65536变化,你会得到错误的值-相当小,但可能。由于中断发生在值0xffffff处,并且当计数溢出到0x0000时不会发生,所以这些值将按以下方式计数:tmr1_cnt计时器.val0xFFFE1 0xFFFFFF1 0xFFFF1 0x00001 0x0001...1 0xFFFE2 0xFFFF2 0x00002 0x0001etc添加一个来校正它
|
|
|
|
|
|
Chris A.,你真的教我太多了,太多了!真的?(请接受我的道歉,但是a今天早上真的只有几分钟,所以我不明白你做了什么,把1添加到Timer1,但是现在你解释得这么好,几乎不可能理解。早上我对add 1有疑问,因为我真的很喜欢阅读数据表,并且上面写着“TMR1寄存器对(TMR1H:TMR1L)从0000h增加到FFFFh并翻滚到0000h。如果启用,Timer1中断是在溢出时生成的”,因此它表示在溢出时它设置了标志,但我已经理解数据表可能出错或类似情况。你说的话,在计时器中加1,检查它。我想它解决了每个人的所有问题。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1122浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 21:25 , Processed in 0.911498 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1974