打印
[STM8]

STM8S103F3使用长整形unsigned long数据操作的问题

[复制链接]
515|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
防滑销钉|  楼主 | 2016-7-23 19:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机型号为STM8S103F3P3,编译环境为STVP+cosmic。

出现问题的语句是,
#define PWM_ARR 20000
unsigned long duty= 0;
TIM1_CCR3H = ((duty*PWM_ARR/100)>>8)&0xff;
TIM1_CCR3L = (duty*PWM_ARR/100)&0xff;

上面duty变量是PWM输出占空比,然后宏PWM_ARR是为了方便改变PWM输出的频率。
通过改变duty的值输出不同的占空比。

问题出现在一次调试时我想让CC3固定输出100%的占空比,所以就把duty直接幅值为100.
即TIM1_CCR3H = ((100*PWM_ARR/100)>>8)&0xff;
TIM1_CCR3L = (100*PWM_ARR/100)&0xff;

结果发现TIM1_CCR3H 和TIM1_CCR3L的值完全不对了

请问大家这是什么原因呢?
沙发
mmuuss586| | 2016-7-23 22:57 | 只看该作者
溢出了,只取了最后一个字节吧;

使用特权

评论回复
板凳
734774645| | 2016-7-24 16:00 | 只看该作者
有点难以理解。太深奥了。

使用特权

评论回复
地板
gejigeji521| | 2016-7-24 19:42 | 只看该作者
按位画一画,看看是哪儿错了。

使用特权

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

本版积分规则

1

主题

4

帖子

1

粉丝