⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.c

📁 此程序为本人在公司开发的继电器功能测试仪
💻 C
📖 第 1 页 / 共 2 页
字号:
	#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 + -