各位大神, 我的程序如下,不知道哪里出了问题,发送的R值一直是3F 80 00 00左右,对应的十进制数就是1,当把u1,u2换为常量的时候,运行的结果就是对的,调试AD已经成功,但就是结果不对,求帮助!!!!!!!!!!!!!!!!!!!!!!!
//主函数
void main()
{
while(1)
{
uchar t1=0;
uchar t2=0;
// uint i;
uchar j=0;
uint k=0;
// uint u1=0x2FFF;
// uint u2=0x0456;
uint uH1=0;
uint uL1=0;
uint uH2=0;
uint uL2=0;
uint u1=0;
uint u2=0;
float au1=0;
float bu1=0;
float au2=0;
float bu2=0;
float R=0;
// float X;
/*共用体*/
union
{
uchar a[4];
float b;
}temp;
timeT0(); //定时器初始化
// initUART();
EA=1;
while(!T0标志寄存器);
T0标志寄存器=0;
counter=0;
watchdog(); //喂狗
ADDR1=0x1000; //片外地址指针
ADDR2=0x3000;
max125_cs0 = 0x00; //片选片外62256
max125_cs1 = 0x00;
max125_cs2 = 0x00;
for(k=0;k<301;k++)
{
t1=DATA1; //读片外62256 电压信号 高位
uH1=(uint)t1;
uH1=uH1<<8;
ADDR1++; //地址指针+1
t1=DATA1;
uL1=(uint)t1; //读片外62256 电压信号 低位
u1=uH1|uL1; //组合高位与低位
ADDR1++;
au1=au1+u1*cos[k];
bu1=bu1+u1*sin[k];
watchdog(); //喂狗
t2=DATA2; //读片外62256 电流信号 高位
uH2=(uint)t2;
uH2=uH2<<8;
ADDR2++; //地址指针+1
t2=DATA2;
uL2=(uint)t2; //读片外62256 电流信号 低位
u2=uH2|uL2; //组合高位与低位
ADDR2++;
au2=au2+u2*cos[k];
bu2=bu2+u2*sin[k];
}
ADDR1=0x1000;
ADDR2=0x3000;
R=(au1*au2+bu1*bu2)/(au2*au2+bu2*bu2);
// X=(au1*bu2-au2*bu1)/(au2*au2+bu2*bu2);
initUART(); //串口初始化
temp.b=R;
array[0]=temp.a[0];
array[1]=temp.a[1];
array[2]=temp.a[2];
array[3]=temp.a[3];
watchdog(); //喂狗
Delayms(10); //AA
RS485=1;
Delayms(10);
SBUF=0xAA;
while(!TI);
TI=0;
Delayms(10); // R
RS485=1;
Delayms(10);
for(j=0;j<4;j++)
{
SBUF=array[j];
Delayms(5);
}
while(!TI);
TI=0;
Delayms(10); //ADL
RS485=1;
Delayms(10);
SBUF=0xBB;
while(!TI);
TI=0;
}
}
|