PIC上的基本二进制转换失败

时间:2010-11-19 16:19:42

标签: pic mikroc

我有以下代码,转换dec。到二进制(存储为int),它在C :: B中运行得很好:

 for(i=0;i<8;i++)
   {
    carry = start_value%2;
    tab[bla] = carry;
    bla++;
    start_value = start_value/2;
   }

for(i=bla; i>0; i--)
       {
       binary = binary + tab[i]*pow(10,i);
       }

但是当我尝试在带有MikroC的PIC18F4550上做同样的事情时,它就失败了! 我已经包含了'pow'并且尊重我使用的变量的声明。无论如何,输出都是错误的(例如-62053而不是110110)。

感谢您查看:) 祝你有愉快的一天

4 个答案:

答案 0 :(得分:0)

你应该从i = bla - 1开始第二个循环,因为它比二进制数字再增加一次。也可能是tab[]未初始化为0.

第二个循环应包含第一个标签元素:tab [0]:

for(i = bla - 1; i >= 0; i--)
{
    binary += tab[i] * pow(10, i);
}

答案 1 :(得分:0)

检查此PIC体系结构的int类型(sizeof(int))的大小。例如,如果int为16位,则它可以容纳的最大值为65535(对于unsigned int)或从-32768到32767(对于int)。可能问题在于您计算的值对于您使用的类型来说太大了。

答案 2 :(得分:0)

要从二进制数字数组中获取十进制值,您必须将它们乘以2的适当幂,而不是10.假设pow()看起来像是pow(base,exponent),你需要使用pow(2,i)代替。

答案 3 :(得分:0)

jmpcm: 我的PIC18F上的int是16位(2个字节)。 但问题是代码在我的计算机上运行良好但在PIC上运行不正常,而我使用的变量大小相同。

philippe: 我有一种感觉,你可能是正确的桌子没有被清除!但是无法测试它。

Jeanne Pindar: 不。我存储了一个需要与int进行交互的位数组(需要节省RAM空间),所以我们仍然在最终存储时使用base10。

全部: 我用它定义了所有位的结构来解决它的问题:

struct {
unsigned int bit0: 1;
unsigned int bit1: 1;
...

因此,我可以在一组8位中存储1位,并在主计算中将其视为int,并以Nx1矩阵访问它。

谢谢你的帮助!