📄 ad.c
字号:
#include <absacc.h>
#include <intrins.h>
#include "variable.h"
#include "main.h"
#include "screen.h"
#include "ad.h"
unsigned int AD_Convert(void)
{
unsigned int data AD_Value[5],Temp;
unsigned char i,Num;
for(i=0;i<5;i++)
{
AD_C|=0x01;//SET 1 ON AD_RC
_nop_();
AD_C&=0xFE;//SET 0 ON AD_RC
_nop_();
AD_C|=0x01;//SET 1 ON AD_RC
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
while(!AD_Busy);
AD_Value[i]=AD_B*256+AD_A;
if(AD_Value[i]>32768) AD_Value[i]=32767;
Delay_1(250);
}
for(Num=0;Num<4;Num++)
{
for(i=0;i<4-Num;i++)
{
if(AD_Value[i+1]<AD_Value[i])
{
Temp=AD_Value[i+1];
AD_Value[i+1]=AD_Value[i];
AD_Value[i]=Temp;
}
}
}
Temp=0;
for(i=1;i<4;i++)
{
Temp+=AD_Value[i];
}
Temp=Temp/3;
return(Temp);
}
void DA_Convert(unsigned int data DA_Value)
{
DA_B=DA_Value/256;
DA_A=DA_Value%256;
}
void Num_Convert(unsigned int Val,unsigned char Num)
{
unsigned char i;
unsigned int y=1;
for(i=0;i<Num-1;i++)
{
y*=10;
}
for(i=0;i<Num;i++)
{
SetP_Data[i]=Val/y;
Val%=y;
y/=10;
}
}
void Temp_Test(void)
{
unsigned char i;
float data Temprature=0;
AD_C|=0x08;//set 1 on SW_A0
AD_C|=0x10;//set 1 on SW_A1
AD_C|=0x20;// set 1 on SW_EN
AD_C&=0xFB;//set 0 on OP_A1
AD_C|=0x02;//set 1 on OP_A0;*10 TIMES;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<20;i++) Delay_1(250);
Temprature=(float)(AD_Convert())/327.68;
AD_C&=0xDF;//SET 0 ON SW_EN
Comp_Data[0]=((Temprature-20)*3.93/1000+1)*SR_V_0;
Num_Convert(Comp_Data[0],4);
Set_Data(SetP_Data,4,0,1);//
Comp_Data[1]=((Temprature-20)*3.93/1000+1)*SR_V_1;
Num_Convert(Comp_Data[1],4);
Set_Data(SetP_Data,8,4,1);//
Test_Data[11]=Temprature*10;
Num_Convert(Test_Data[11],3);
if((Page_Val==0)||(Page_Val==5)||(Page_Val==6)) Set_Data(SetP_Data,11,8,1);
else if(Page_Val==1) Set_Data(SetP_Data,3,0,3);//
}
void Delay_1(unsigned char Num)
{
unsigned char i,m;
for(i=0;i<100;i++)
{
for(m=0;m<Num;Num++);
}
}
void Coil_Judge(void)
{
float Temp_R=0;
unsigned char i;
IO_B&=0xDF;//coil+ on;
AD_COM=0x0C;//Broken K6;
for(i=0;i<50;i++) Delay_1(250);//50ms
//DA_Convert(711);//5v
DA_Convert(427);//3v
for(i=0;i<20;i++) Delay_1(250);//50ms
AD_COM=0x06;//SW_A0 SET 0
AD_COM=0x08;//SW_A1 SET 0;SELECT COIL RES+
AD_COM=0x0B;//SW_EN SET 1;
AD_COM=0x03;//OP_A0 SET 1;
AD_COM=0x04;//OP_A1 SET 0; *10 TIMES;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<20;i++) Delay_1(250);
Temp_R=(float)AD_Convert()/3276.8;
DA_Convert(0);//0v
AD_COM=0x0A;//SW_EN SET 0;
AD_COM=0x0D;//Release K6;
if(Temp_R>=2)
{
IO_B|=0x20;//coil+ off;
IO_B&=0xBF;//coil- on;
for(i=0;i<50;i++) Delay_1(250);
}
}
bit R_Test(void)
{
float data R=0;
unsigned char i;
for(i=0;i<11;i++)
{
SetP_Data[i]=15;
}
Test_Data[0]=0;
AD_COM=0x0C;//Broken K6;
//DA_Convert(711);//5v
DA_Convert(427);//3v
//DA_Convert(853);//5v
for(i=0;i<30;i++) Delay_1(250);//50ms
AD_COM=0x06;//SW_A0 SET 0
AD_COM=0x08;//SW_A1 SET 0;SELECT COIL RES+
AD_COM=0x0B;//SW_EN SET 1;
//AD_COM=0x02;//OP_A0 SET 0;
//AD_COM=0x05;//OP_A1 SET 1; *100 TIMES;
AD_COM=0x03;//OP_A0 SET 1;
AD_COM=0x04;//OP_A1 SET 0; *10 TIMES;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<20;i++) Delay_1(250);
R=(float)(32768*3*5)/AD_Convert()-5;//r
if(R>230)
//if(R>168.5)
{
AD_COM=0x02;//OP_A0 SET 0;
AD_COM=0x05;//OP_A1 SET 1; *100 TIMES;
for(i=0;i<20;i++) Delay_1(250);
R=(float)(32768*3*5*10)/AD_Convert()-5;//r
/* if(R>674)
{
AD_COM=0x03;//OP_A0 SET 1;
AD_COM=0x05;//OP_A1 SET 1; *1000 TIMES;
for(i=0;i<20;i++) Delay_1(250);
R=(float)(32768*3*5*100)/AD_Convert()-5;//r
}*/
}
AD_COM=0x0A;//SW_EN SET 0;
AD_COM=0x0D;//Release K6;
//IO_B|=0x60;//COIL+ AND COIL- RELAY OFF;
DA_Convert(0);
for(i=0;i<20;i++) Delay_1(250);//50ms
Test_Data[0]=10*R;
if((Test_Data[0]<=Comp_Data[1])&&(Test_Data[0]>Comp_Data[0]))
{
SetP_Data[4]=14;//ok
}
else
{
SetP_Data[4]=13;//NG
IO_A&=0xFE;
IO_C&=0xFD;
}
Num_Convert(Test_Data[0],4);
if((Page_Val==0)||(Page_Val==5)||(Page_Val==6))
{
Tests_Data(SetP_Data,5,0);
}
else if(Page_Val==1) Tests_Data(SetP_Data,5,2);
if(SetP_Data[4]==13)
{
IO_B=0xFF;//off relay
return(0);
}
else return(1);
}
float ConR_Test_Child(void)
{
float data Con;
unsigned char i;
switch(Comp_Data_T[1])
{
case 100: //1A
{
AD_COM=0x03;//OP_A0 SET 0;
AD_COM=0x04;//OP_A1 SET 1; *10 TIMES;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<50;i++) Delay_1(250);
if(Comp_Data[23]==16) //+
{
Con=(float)AD_Convert()/(32.768*MULTI_1A)+(float)Comp_Data[24]/10;//mv
}
else if(Comp_Data[23]==17) //-
{
Con=(float)AD_Convert()/(32.768*MULTI_1A);//-(float)Comp_Data[24]/10;//mv
if(Con>((float)Comp_Data[24]/10))
{
Con-=(float)Comp_Data[24]/10;//mv
}
else Con=0;
}
//if((Con<89)||((Con<340)&&(Con>330)))
if(Con<89)
{
AD_COM=0x02;//OP_A0 SET 0;
AD_COM=0x05;//OP_A1 SET 1; *100 TIMES;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<40;i++) Delay_1(250);
if(Comp_Data[23]==16) //+
{
Con=(float)AD_Convert()/(327.68*MULTI_1A)+(float)Comp_Data[24]/10;//mv
}
else if(Comp_Data[23]==17) //-
{
Con=(float)AD_Convert()/(327.68*MULTI_1A);//-(float)Comp_Data[24]/10;//mv
if(Con>((float)Comp_Data[24]/10))
{
Con-=(float)Comp_Data[24]/10;//mv
}
else Con=0;
}
if(Con<8.9)
{
AD_COM=0x03;//OP_A0 SET 1;
AD_COM=0x05;//OP_A1 SET 1; *1000 TIMES;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<40;i++) Delay_1(250);
if(Comp_Data[23]==16)
{
Con=(float)AD_Convert()/(3276.8*MULTI_1A)+(float)Comp_Data[24]/10;//mv
}
else if(Comp_Data[23]==17)
{
Con=(float)AD_Convert()/(3276.8*MULTI_1A);//-(float)Comp_Data[24]/10;//mv
if(Con>((float)Comp_Data[24]/10))
{
Con-=(float)Comp_Data[24]/10;//mv
}
else Con=0;
}
}
}
} break;
case 10: //0.1A
{
AD_COM=0x02;//1 times
AD_COM=0x04;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<40;i++) Delay_1(250);
//if(Comp_Data[23]==16) Con=(float)AD_Convert()/(32.768*MULTI_100MA)+(float)Comp_Data[24]/10;//mv;
if(Comp_Data[23]==16)
{
Con=(float)AD_Convert()/(32.768*MULTI_100MA)+(float)Comp_Data[24]/10;//mv;
Con=Con*(1+Con/350);
}
else if(Comp_Data[23]==17)
{
Con=(float)AD_Convert()/(32.768*MULTI_100MA);//-(float)Comp_Data[24]/10;//mv;
Con=Con*(1+Con/350);
if(Con>((float)Comp_Data[24]/10))
{
Con-=(float)Comp_Data[24]/10;//mv
}
else Con=0;
}
if(Con<89)
{
AD_COM=0x03;//10 times
AD_COM=0x04;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<50;i++) Delay_1(250);
if(Comp_Data[23]==16)
{
Con=(float)AD_Convert()/(327.68*MULTI_100MA)+(float)Comp_Data[24]/10;//mv;
Con=Con*(1+Con/350);
}
else if(Comp_Data[23]==17)
{
Con=(float)AD_Convert()/(327.68*MULTI_100MA);//-(float)Comp_Data[24]/10;//mv;
Con=Con*(1+Con/350);
if(Con>((float)Comp_Data[24]/10))
{
Con-=(float)Comp_Data[24]/10;//mv
}
else Con=0;
}
if(Con<8.9)
{
//IO_COM=0x0D;//10 TIMES
//IO_COM=0x0E;
AD_COM=0x02;//100 times
AD_COM=0x05;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<50;i++) Delay_1(250);
if(Comp_Data[23]==16)
{
Con=(float)AD_Convert()/(3276.8*MULTI_100MA)+(float)Comp_Data[24]/10;//mv;
Con=Con*(1+Con/350);
}
else if(Comp_Data[23]==17)
{
Con=(float)AD_Convert()/(3276.8*MULTI_100MA);//-(float)Comp_Data[24]/10;//mv;
Con=Con*(1+Con/350);
if(Con>((float)Comp_Data[24]/10))
{
Con-=(float)Comp_Data[24]/10;//mv
}
else Con=0;
}
}
}
//IO_COM=0x0C;//1 TIMES
//IO_COM=0x0E;
} break;
case 1:
{
AD_COM=0x03;//1000 times
AD_COM=0x05;
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
for(i=0;i<40;i++) Delay_1(250);
if(Comp_Data[23]==16) Con=(float)AD_Convert()/(32.768*MULTI_10MA)+(float)Comp_Data[24]/10;//mv;
else if(Comp_Data[23]==17)
{
Con=(float)AD_Convert()/(32.768*MULTI_10MA);//-(float)Comp_Data[24]/10;//mv;
if(Con>=((float)Comp_Data[24]/10))
{
Con-=(float)Comp_Data[24]/10;//mv
}
else Con=0;
}
if(Con<89)
{
AD_COM=0x03;//1000 times
AD_COM=0x05;
IO_COM=0x0D;//10 TIMES
IO_COM=0x0E;
for(i=0;i<50;i++) Delay_1(250);
if(Comp_Data[23]==16) Con=(float)AD_Convert()/(327.68*MULTI_10MA)+(float)Comp_Data[24]/10;//mv;
else if(Comp_Data[23]==17)
{
Con=(float)AD_Convert()/(327.68*MULTI_10MA);//-(float)Comp_Data[24]/10;//mv;
if(Con>=((float)Comp_Data[24]/10))
{
Con-=(float)Comp_Data[24]/10;//mv
}
else Con=0;
}
if(Con<8.9)
{
//AD_COM=0x03;//1000 times
//AD_COM=0x05;
IO_COM=0x0C;//100 TIMES
IO_COM=0x0F;
for(i=0;i<50;i++) Delay_1(250);
if(Comp_Data[23]==16) Con=(float)AD_Convert()/(3276.8*MULTI_10MA)+(float)Comp_Data[24]/10;//mv;
else if(Comp_Data[23]==17)
{
Con=(float)AD_Convert()/(3276.8*MULTI_10MA);//-(float)Comp_Data[24]/10;//mv;
if(Con>=((float)Comp_Data[24]/10))
{
Con-=(float)Comp_Data[24]/10;//mv
}
else Con=0;
}
}
}
IO_COM=0x0C;//1 TIMES
IO_COM=0x0E;
} break;
}
return(Con);
}
bit ConR_Test(void)
{
unsigned char i;
for(i=0;i<11;i++)
{
SetP_Data[i]=15;
}
Test_Data[1]=9999;
Test_Data[2]=9999;
//IO_B&=0xDF;//COIL+ ON;
switch(Comp_Data_T[1])
{
case 100: //1A
{
IO_B&=0xFE; //1A CURRENT,transistor
for(i=0;i<10;i++) Delay_1(250);
IO_B&=0xEF;//COM CURRENT ON,relay
for(i=0;i<50;i++) Delay_1(250);
DA_Convert(Comp_Data_T[0]*409.5/(2.4*MULTI_V));
//for(i=0;i<80;i++) Delay_1(250);
} break;
case 10: //100MA
{
IO_B&=0xFD;
for(i=0;i<10;i++) Delay_1(250);
DA_Convert(Comp_Data_T[0]*409.5/(2.4*MULTI_V));
for(i=0;i<50;i++) Delay_1(250);
IO_B&=0xEF;//COM CURRENT ON
//for(i=0;i<80;i++) Delay_1(250);
} break;//100MA CURRENT
case 1: //10MA
{
IO_B&=0xFB;
for(i=0;i<10;i++) Delay_1(250);
DA_Convert(Comp_Data_T[0]*409.5/(2.4*MULTI_V));
for(i=0;i<50;i++) Delay_1(250);
IO_B&=0xEF;//COM CURRENT ON
//for(i=0;i<80;i++) Delay_1(250);
} break;//10MA CURRENT
}
for(i=0;i<60;i++) Delay_1(250);
AD_COM=0x08;//SW_A1 SET 0;SELECT NC
AD_COM=0x07;//SW_A0 SET 1;
AD_COM=0x0B;//SW_EN SET 1;
Test_Data[2]=10*ConR_Test_Child();
AD_COM=0x0A;//SW_EN SET 0;
if((Test_Data[2]<=Comp_Data[5])&&(Test_Data[2]>Comp_Data[4]))
{
SetP_Data[4]=14;//ok
}
else
{
SetP_Data[4]=13;//NG
IO_A&=0xFD;//led ng display
IO_C&=0xFD;
}
Num_Convert(Test_Data[2],4);
if((Page_Val==0)||(Page_Val==5)||(Page_Val==6)) Tests_Data(SetP_Data,5,3);
else if(Page_Val==2) Tests_Data(SetP_Data,5,4);//lcd display
if(SetP_Data[4]==13)
{
DA_Convert(0);
IO_B|=0x77;//off relay
return(0);
}
for(i=0;i<80;i++) Delay_1(250);
if(Comp_Data_T[2]==12)//1c type
{
switch(Comp_Data_T[1])
{
case 100:
{
DA_Convert(0);
for(i=0;i<50;i++) Delay_1(250);
} break;
case 10: //IO_B|=0x10; break;//COM CURRENT ON
case 1:
{
IO_B|=0x10;
for(i=0;i<50;i++) Delay_1(250);
DA_Convert(0);
for(i=0;i<50;i++) Delay_1(250);
IO_B&=0xEF;
for(i=0;i<50;i++) Delay_1(250);
} break;//COM CURRENT ON
}
AD_COM=0x09;//SW_A1 SET 1;SELECT NC
AD_COM=0x06;//SW_A0 SET 0;
AD_COM=0x0B;//SW_EN SET 1;
Test_Data[1]=10*ConR_Test_Child();
AD_COM=0x0A;//SW_EN SET 0;
if((Test_Data[1]<=Comp_Data[3])&&(Test_Data[1]>Comp_Data[2]))
{
SetP_Data[4]=14;//ok
}
else
{
SetP_Data[4]=13;//NG
IO_A&=0xFD;
IO_C&=0xFD;
}
Num_Convert(Test_Data[1],4);
if((Page_Val==0)||(Page_Val==5)||(Page_Val==6)) Tests_Data(SetP_Data,5,2);
else if(Page_Val==2) Tests_Data(SetP_Data,5,3);
if(SetP_Data[4]==13)
{
IO_B|=0x77;//off relay
return(0);
}
}
DA_Convert(0);
IO_B|=0x17;//off relay
for(i=0;i<20;i++) Delay_1(250);
return(1);
}
bit Fast_V_Test(void)
{
unsigned char i=0;
unsigned int pu_v=0,pd_v=0;
bit NG_Flag=0;
for(i=0;i<11;i++)
{
SetP_Data[i]=15;
}
IO_B&=0xF7;//K1,K2,K7,K8 ON;
for(i=0;i<50;i++) Delay_1(250);
pd_v=(float)Comp_Data[6]*40.95/(24*MULTI_V);
pu_v=(float)Comp_Data[7]*40.95/(24*MULTI_V);
DA_Convert(pd_v);
for(i=0;i<100;i++) Delay_1(250);
if(NO_TIME)
{
SetP_Data[4]=13;//ng
Set_Data_fast(SetP_Data,5,0,4);
IO_B=0xFF;
DA_Convert(0);
IO_A&=0xFB;
IO_C&=0xFD;
return(0);
}
else
{
DA_Convert(pu_v);
for(i=0;i<100;i++) Delay_1(250);
if(NO_TIME)
{
SetP_Data[4]=14;//ok
Set_Data_fast(SetP_Data,5,0,4);
}
else
{
SetP_Data[4]=13;//ng
Set_Data_fast(SetP_Data,5,0,4);
IO_B=0xFF;
IO_A&=0xFB;
IO_C&=0xFC;
DA_Convert(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -