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 + -
显示快捷键?