完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我是电子技术员,努力学习PIC的C编程。我已经用XC8编译器为pic16f676编写了简单的程序,以便理解ADC。当我直接比较adc结果(0到1023)时,当我像下面的程序那样对adc结果进行乘法和除法时,程序运行良好,为什么它不工作呢?如何解决这个问题?
|
|
相关推荐
19个回答
|
|
|
对于“ADCML结果”,您使用的是未签名的int。因此,如果原始adc_result大于13(13*5000=65000),则当10位结果乘以5000时,您的代码:将导致溢出。对adc_result使用无符号长字符。由于读取/修改/写入(RMW)现象,您也有可能错误写入LED管脚。PIC16F66没有LATX寄存器,所以建议使用一个阴影寄存器定义为这样的东西:
|
|
|
|
|
|
adc_result=((无符号长int)adc_result*5000)/1023;或adc_result=(adc_result*5000ul)/1023;如前所述,您有溢出。铸造是另一种选择。或者告诉编译器const是一个未签名的long。编译器将用这两个变量的最大类型进行数学运算。
|
|
|
|
|
|
我同意前面的评论。对您的代码再多一些注释。[1]所需的“获取时间”是20微秒,而不是20毫秒。您等待的时间长并不重要,但是不是必需的。然后比较毫伏,但如果你想让你的代码运行得更快,最好把所有的常数转换回10位的ADC读数,然后对这些值进行比较。这样可以节省编译器做许多多字节的乘法和除法。FYI除以1024是很快的。除以1023是缓慢的。
|
|
|
|
|
|
感谢所有的帮助答复,转换后的LeETONOW程序正在工作
|
|
|
|
|
|
用1023代替1024,它甚至可以正常工作,而且快得多。
|
|
|
|
|
|
我也要说同样的话,但实际上我已经失去了意志
|
|
|
|
|
|
我已经把它说回来了:4)
|
|
|
|
|
|
但你没有正确使用关键词
|
|
|
|
|
|
HTTP://FUMU.ALLABOUTROUNTS.COM/THEADS/WHY-ADC-1024 IS-ECHECTON-ADC-1023-IS-JUST-PROTER EUROL。
|
|
|
|
|
|
亲爱的PStechPaul,我尝试过你的代码可以正常工作,但是当我调用下面的代码时,它正常工作,但是RC4也受到影响,并且停止闪烁?
|
|
|
|
|
|
这里是完整的代码
|
|
|
|
|
|
嗯,不要使用
|
|
|
|
|
|
将来,为了排除这些问题,我将把操作分解成单独的操作,以帮助精确地缩小问题的范围。代替adc_result=(adc_result*5000)/1023;tryadc_result=adc_result*5000;adc_result=adc_result/1023;尽管每个行都有IILVER,所以在调试时,以前的结果不会被覆盖。
|
|
|
|
|
|
嗨,好吧,嗯…嗯…1023, 1024,…1023, 1024,…102x…现在定义什么?-HTTP://www. McCHIP.COM/FUMMS/FUNDPOST/969425GEALALD-
|
|
|
|
|
|
只有编译器发现了优化。我不相信XC8免费模式这样做,没有测试。
|
|
|
|
|
|
谢谢你的回复,CinziaG;你说得对,这个操作符[/code]而且这个行在将代码更改为小于它正在模拟的OK之后正在引起问题[/code]
|
|
|
|
|
|
感谢PrimyCyZig;你是正确的这个操作符[字体]!而且这一行也引起了问题[lt;字体] PORTC=LATC;在更改代码ToOW之后,它可以模拟OK。
|
|
|
|
|
|
好啊!
|
|
|
|
|
|
嗨,为了处理消息#2中建议的影子寄存器,对于硬件中没有LAT寄存器的PIC芯片,所有的PORT操作都应该使用相同的影子寄存器变量:LATA和LATC。这意味着LED4上的操作也应该通过调用setled(led)和clrl来完成。然后,除了建议的模板代码之外,还需要定义LED4:并添加到setled函数中:并添加到clrled函数中:如果调用相同的乐趣,您将了解如何对端口AThere上的LED号码2进行类似的添加。在主线代码和中断代码中都执行,链接器通过复制可执行代码和任何本地变量来避免这种情况。在主线代码和中断代码中可以更新的变量应该用关键字C2像这样:Btw.:我认为8位变量足以为影子寄存器:问候,Mysil
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
501 浏览 0 评论
5811 浏览 9 评论
2350 浏览 8 评论
2237 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3544 浏览 3 评论
1159浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1121浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
888浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
503浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 17:58 , Processed in 1.964928 second(s), Total 109, Slave 92 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
819