📄 ad.c
字号:
#define AD_C
#include "includes.h"
#include<math.h>
unsigned char adc_mux = 0x00 ;
int U_Temp;
int I_Temp;
/******************************************************************************/
/******************************************************************************/
void init_adc(void)
{
AD_RESET;
ADMUX =(adc_mux&0x1f)|(1<<REFS0)|(1<<REFS1); //参考电压为内部2.56
SET_ADCLK_64 ;//64分频,AD时钟187.5KHz
_EINT;
UBRRH = 25;
UBRRL = 25;
UCSRB=0x18;
UCSRC=0x86;
}
/******************************************************************************/
/******************************************************************************/
//ADC完成中断
//#pragma vector = interrupt_handler adc_isr:iv_ADC
// define the interrupt handler
#pragma vector=ADC_vect
__interrupt void adc_isr( void )
{
switch(AD_OBJ)
{
case(VA):
Next_ADchanle;
U_Temp = ADC - UA_ref;
UA_sum+= U_Temp*U_Temp;
AD_Statue = CONVERTING;
break;
case(IA):
I_Temp = ADC - IA_ref;
IA_sum+= I_Temp*I_Temp;
PA_sum+= U_Temp*I_Temp;
AD_Statue = PAUSE;
break;
case(VB):
Next_ADchanle;
U_Temp = ADC - UB_ref;
UB_sum+= U_Temp*U_Temp;
AD_Statue = CONVERTING;
break;
case(IB):
I_Temp = ADC - IB_ref;
IB_sum+= I_Temp*I_Temp;
PB_sum+= U_Temp*I_Temp;
AD_Statue = PAUSE;
break;
case(VC):
Next_ADchanle;
U_Temp = ADC - UC_ref;
UC_sum+= U_Temp*U_Temp;
AD_Statue = CONVERTING;
break;
case(IC):
I_Temp = ADC - IC_ref;
IC_sum+= I_Temp*I_Temp;
PC_sum+= U_Temp*I_Temp;
AD_Statue = PAUSE;
break;
default:
AD_Statue=FINISHED;
break;
}
}
void AD_cal(void)
{
PowerMeter.Va=UA_sum;//sqrt((UA_sum>>7))*25.0244;
PowerMeter.Vb=UB_sum>>7;
PowerMeter.Vc=UC_sum>>7;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -