adc_solve.c

来自「电压瞬时检测」· C语言 代码 · 共 151 行

C
151
字号
////////////////////////////////////////////////////
/*         adc_solve.c             */
///////////////////////////////////////////////////
#include "STC5410AD.H"
#include <ABSACC.H>
#include "uuu.h"
#include "citation.h"
#define  Lower_limit  102  //保护下限150-->220V  75-->110V
/////////////////////////////////////////////////////
/*****************************************************
*  功能:A/D采样
*  描述:250uS一次,奇次采RC,偶次采NC
******************************************************/
void ad_gather(void)
{  bit  flag=0;	
	union{
	    uchar c[2];
	    uint x;
        }temp; 
	uchar  mem_stk;
	mem_stk=bbyte;
	//--------------------- 
	if(alternation)
   {
		
		ADC_CONTR=0xe0;  //电流
		//delay(1);
		ADC_CONTR|=0x08;
		while(!flag)
		{
			bbyte=ADC_CONTR;
			flag=a4;
		}
		temp.c[0]=ADC_DATA;
		temp.c[1]=0x00;
		temp.x>>=6;
		temp.c[1]+=ADC_LOW2;
		ADC_CONTR=0xe1;
		adiii40[gather_num]=temp.x;
		alternation=0;//交替采样
			
	}
	else
	{
		ADC_CONTR=0xe1; //电压
		//delay(1);
		ADC_CONTR|=0x08;
		while(!flag)
		{
			bbyte=ADC_CONTR;
			flag=a4;
		}
		//ADC_CONTR=0xe2;
		temp.c[0]=ADC_DATA;
		temp.c[1]=0x00;
		temp.x>>=6;
		temp.c[1]+=ADC_LOW2;
		ADC_CONTR=0xe0;
		aduuu40[gather_num]=temp.x;
		alternation=1;//交替采样
		gather_num++;
		if (gather_num>39) 
		{
			gather_num=0;adok=1;
			
		}
		
	}
	
   bbyte=mem_stk; //临时堆栈 
}
/***************************************************
*  功能:A/D转换
****************************************************/
void adc_solve(void)
{	
	if(adok)
	{
		adok=0;
	}
}
/***************************************************
*  功能:电源失落检查
****************************************************/
void power_check(void)
{  uint *pi;
	uchar checknum,i;
	uint  u;
	checknum=0;	
	pi=&aduuu40;
	for(i=0;i<40;i++)
	{  u=*(pi+i);
	   if(u>505)u-=505;
		else u=505-u;
		if(u<Lower_limit)
		{
			checknum++;
			if(checknum>9)break;
		}
		else
	   {
			if(checknum<9)checknum=0;
		}
	}
	if(checknum>9)
	{
		uuu_fault=1;  //电压有丢失
		OUTDJ=1;
		power_drop_time=8000;
	}
	else 
	{
		uuu_fault=0;  //电压恢复
		if(power_drop_time==0) OUTDJ=0;

	}
}
/***************************************************
*   功能:计算最大值
****************************************************/
/*uint  max(uint *pi)
{ uint  temp;
  uchar  i;
  temp=0;
  for(i=0;i<40;i++)
  {
		if(temp<*pi) temp=*pi;
		pi++;
  }
	return(temp);
}*/
/***************************************************
*   功能:计算平均值
****************************************************/
/*uint  average(uint *pi)
{ uint  temp;
  uchar  i;
  ulong x;
  x=0;
  temp=0;
  for(i=0;i<40;i++)
  {
		x+=*pi;
		pi++;
  }
  temp=x/40;
  return(temp);
}*/


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?