#include "../app/task_adc.h" #include "../msp/msp_adc.h" #include "../app/app_config.h" #include "../msp/uart0.h" S_TASK_ADC _s_task_adc; void L3_task_Adc_init(void) { L1_task_init(&_s_task_adc.task); _s_task_adc.index = 0; _s_task_adc.SUM = 0; L3_task_s_go(_s_task_adc,D_task_init); } #define D_task_ADC_READ 0x50 #define D_task_ADC_COUNT 0x51 void L3_task_Adc_handler(S_TASK_ADC *s) { TTSS_Task_init() L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms); TTSS_Task_step(D_task_ADC_READ) s->adc_val[_s_task_adc.index] = L1_ADC_Read(12); s->SUM += s->adc_val[_s_task_adc.index++]; if (_s_task_adc.index >= 10) { _s_task_adc.index = 0; L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_300ms); } else { L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms); } TTSS_Task_step(D_task_ADC_COUNT) // 计算平均值 U16 Aver = s->SUM / ADC_NUM; // 计算方差 U8 i; FP32 Variance = 0; for(i = 0; i < ADC_NUM; i++) { Variance += (s->adc_val[i] - Aver) * (s->adc_val[i] - Aver); } Variance /= ADC_NUM; // // 方差合格,计算电量,放到G,不合格丢弃 // if ((U16)(Variance*10) < 2) // { // Vin = (Aver / 0x1000) * 3.3; // Percent = Vin / 4.2 // } Aver = 0; L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms); TTSS_Task_end(); }