我用的是C8051F340,今天发现一个问题。 1、首先定义一个宏(4个字节组合32字节) #define COMBINE_4CHAR_TO_32LONG(x1,x2,x3,x4) ((ulong)((((uchar)(x1)) << 24) | (((uchar)(x2)) << 16) | (((uchar)(x3)) << 8) | ((uchar)(x4))))
2、在程序里边引用这个宏 #define PARAMETER_P 0.00390625 ulong recv_pq_value float valp; high_byte8 = 0x01;middle_byte8 = 0x21; middle_byte = 0xc3; recv_pq_value = COMBINE_4CHAR_TO_32LONG(0,high_byte8,middle_byte8,low_byte8); valp = recv_pq_value * PARAMETER_P; 之后发现valp的值是36.7(运算的结果是直接把recv_pq_value中的高16位舍弃了) 不知道为什么呀? 3、如果改high_byte8 = 0xff;进行下边判断: if(recv_pq_value & 0x800000){//判断正负 。。。。。。 } 硬件单步调试怎么也进不去里边。 这个程序我在TC里运行很正常(在89S52里我也做过类似这样的运算也成立呀),难道是MCU的问题。
|