[PIC®/AVR® MCU] 在使用MPLAB X IDE(XC8编译器)时候的疑问

[复制链接]
191|7
手机看帖
扫描二维码
随时随地手机跟帖
tree844|  楼主 | 2022-1-11 21:44 | 显示全部楼层 |阅读模式
本帖最后由 pzsh 于 2022-1-12 14:25 编辑

硬件:PIC16F877A
我在写一个音乐播放器的例程,发现一个不解的现象:
/*************************/
给TMR1赋值时,直接写成如下:
(F是unsigned int的变量)
TMR1H = (65535 - F) / 256;
TMR1L = (65535 - F) % 256;   
定时的结果不准,在Watch中查看时,甚至连计算结果,也就是赋入 TMR1H 和 TMR2L 的数值都不对。
/*************************/
如果赋值之前提前进行计算,即增加两个中间变量
unsigned char temH,temL;
然后赋值
temH = (65535 - F) / 256;
temL = (65535 - F) % 256;   
TMR1H = temH;
TMR1L = temL;
这样的计算结果就正确了。
/*************************/
我不知道这是C语言的知识还是MPLAB X IDE或者XC8编译器的问题,各位高手有知道的吗?

使用特权

评论回复
tree844|  楼主 | 2022-1-11 21:52 | 显示全部楼层
之前也有类似的问题,我总感觉是编译器的问题而不是硬件,看我之前发的帖子:
https://bbs.21ic.com/forum.php?mod=viewthread&tid=3184096&page=1#pid12541694

使用特权

评论回复
pzsh| | 2022-1-12 14:24 | 显示全部楼层
尝试一下用MCC配置一下,再看看自动产生的代码的运行效果,不知道可不可以

使用特权

评论回复
tree844|  楼主 | 2022-1-12 20:27 | 显示全部楼层
pzsh 发表于 2022-1-12 14:24
尝试一下用MCC配置一下,再看看自动产生的代码的运行效果,不知道可不可以 ...

这款单片机比较老,好像我安装的插件不能使用,不知道安装老版本的行不行。

使用特权

评论回复
弓长月月鸟| | 2022-1-12 22:20 | 显示全部楼层
TMR1H = (unsigned char)(65535 - F) / 256;

TMR1L = (unsigned char)(65535 - F) % 256;     这样写有没有试过啊?我也不知道能不能成功。

使用特权

评论回复

评论

tree844 2022-1-14 21:38 回复TA
我刚刚试过了,不行。 应该就是这一步的计算所需时间特别长(远超过正常计算),但是提前计算再赋值,则正常。 
lcczg| | 2022-1-14 11:13 | 显示全部楼层
应该是类型转换问题。

使用特权

评论回复
tree844|  楼主 | 2022-1-14 20:21 | 显示全部楼层
lcczg 发表于 2022-1-14 11:13
应该是类型转换问题。

能不能详细说说?

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则