先说明一下,这个程序的目的是把十进制数frequence转换为二进制数result,并且把转换后的结果保存在pwm table当中,其中frequence的值是250,二进制数result转换后的数值换成十进制应该也是250,但实际仿真只是305 . 有点迷,请各位大佬一起来探讨一下
你的代码中k是16位的变量,即使优化成了无符号的类型最大也只能表示65536,temp转换成二进制后为11111010,也就是说k最后一次会是一个10进制的8位数,溢出了
不是很清楚你为什么要转二进制,在单片机中10进制和2进制的存储内容是一样的,使用的时候直接拿过来用就好了应该
你函数中的i=0. result是全局变量吗,在其他地方有没有引用到。进入函数时要赋为0。在result = k * i + result时,要i++吧。
不然i永远为0.result就为上一次使用时的值了。
不需要你那么复杂,我给你改下程序:
void main(void){
int temp=250,pwm_index=0;
short pwm_table[15];
while(temp){
pwm_table[pwm_index]=temp & 0x1;
printf("%d ",pwm_table[pwm_index]);
temp >>= 1;
pwm_index++;
}
}
程序执行结果:
0 1 0 1 1 1 1 1
顺序是反着的,你可以倒着存储或者调用下逆序函数就行了