dirtwillfly 发表于 2014-1-15 21:21
建议楼主上代码 void main(void)
{
if((PCON&0x10)==0)//如果POF位=0
{
PCON=PCON|0x10; //将POF位置1
ISP_CONTR=0x60; //软复位,从ISP监控区启动}else{
PCON=PCON&0xef; //将POF位清零
}
AUXR = 0x00;
while(1)
{
Init();
DelayMsNew(300);//Delay(30);//等待启动信号
while(!Power_On);
State = NORMAL;
PowerOnSelfTest(); //开机自检
if(LastError)
Power_On = FALSE;
}
else
{
LoadSysParameter(0x00,0x00); //从EEPROM读取系统状态
ReadFloatArr();//从EEPROM中读取配置参数
DelayMsNew(100);
SendTestOver2Panel();//发送测试结束信号
OutputData(CS6,ExposelStartSet(MOTOR_STOP,FocusLorS,FIL_ON));//输出设置
StartFILTestTimer(FirstCheckFIL_ITime);
}
while(Power_On) //等待关机信号
{
SetBaseFILIAndKV(FALSE);
FILTestNorCount();
switch(ProcessedCMD)
{
case CMD_SEND_EXPTEST_P2C:
{
SendExpNumTest();
ProcessedCMD=0;
#ifdef SPOTFILM
if(SpotEnable&&(TubChange==0)&&!PerspectiveEnableFlag)
OutputSpotFilmData(SpotFilmAction(DoNot,DoNot,EXP11,DoNot));
#endif
break;
}
case CMD_SEND_EXP1_P2C:
{
State = NORMAL;
WaitExposeAction(); //出错数组在这里
State = NORMAL;
SetBaseFILIAndKV(TRUE);
StartFILTestTimer(FirstCheckFIL_ITime);
break;
}
.
.
.
/*****************************************************************************/
void WaitExposeAction()
{
uchar OldP2 = P2;
ulint j;
unsigned long Count=0;
StopFlagDelay();
if((Expose1Step == 1) && (!LastError))
{
Expose1StepAction();//出错在这里。。。
OutputData(CS6,ExposelStartSet(MOTOR_START,FocusLorS,FIL_ON));
Expose1StepSelfTest();/
#ifdef SPOTFILM
if((SpotEnable==1)&&(TubChange==0)&&!PerspectiveEnableFlag)
{
OutputSpotFilmData(SpotFilmAction(Ready,DoNot,EXP11,DoNot));
for(j=0;j<20000;j++)
{
if(P16==0) break;
}
if(j>19999)
{
LastError = ERR_TV;
SendError();//发送错误报告
}
}
#endif
。
。
。
/*****************************************************************************/
void Expose1StepAction()
{
if(State != CancelEXP)
{
#ifdef IBS_Mod
if(IBS_FLAG)
{
PresetKV = 70;
PresetMA = 1.0;
}
#endif
//OutputData(CS6,ExposelStartSet(MOTOR_START,FocusLorS,FIL_ON));//电机启动
ControlFILI_Ref_EXP1(PresetKV,PresetMA);//出错在这里
ControlKV_Ref_EXP1(PresetKV);
}
}
/*****************************************************************************/
void ControlFILI_Ref_EXP1(uchar KVt, float MAt)
{
#ifdef PERSPECTIVE
if(PerspectiveEnableFlag)
{
RefFIL_I=PerspectiveRefFIL_I_Digit(KVt,MAt);
}
else
#endif
{
RefFIL_I=RefFIL_I_Digit(KVt,MAt);//出错在这里,RefFIL_I是float型,函数返回的是uchar,这样应该没问题吧
}
RefFIL_I = (RefFIL_I>255)?255:RefFIL_I;
RefFIL_I = (RefFIL_I<0)?0:RefFIL_I;
FIL_I_REF_ADR = RefFIL_I;
}
/*****************************************************************************/
uchar RefFIL_I_Digit(uchar KV_Line,float MA_Low)
{
uchar Line,Low;//行,列数
Line=FindKV_FIL_Row(KV_Line);
Low =FindNearestMA_Pos(MA_Low);
return Soft_FIL_Table[Low][Line];// Soft_FIL_Table[11][16]是全局变量,定义在片内扩展的xdata,这个数组初始值是从EEPOM中获取的,获取后我把数据全部发送到PC上查看没问题,但是上一个函数中FIL_I_REF_ADR = RefFIL_I;(DA输出,#define FIL_I_REF_ADR XBYTE[0xafff])有5个数据不对,而且这五个异常数据都不属于Soft_FIL_Table[11][16]
}
|