ct_test/Keil_C/Apps/adc.c

84 lines
2.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "SC_Init.h" //MCU Init headerInclude all IC resource headers
#include "SC_it.h"
#include "..\Drivers\SCDriver_list.h"
#include "HeadFiles\SysFunVarDefine.h"
#include "adc.h"
#include "Uart1.h"
unsigned int xdata ADC_Value0 = 0,ADC_Value1 = 0,ADC_Value2 = 0;
unsigned int xdata ADC_NUM1=0;
//获取adc转换数值
unsigned int ADC_Convert(void)
{
unsigned int xdata Tad = 0,MinAd1 = 0x0fff,MaxAd1 = 0x0000,MinAd2 = 0x0fff,MaxAd2 = 0x0000,TempAdd = 0;
unsigned char xdata t = 0;
for(t = 0;t < 10;t++)
{
ADCCON |= 0X40; //开始 ADC 转换
while(!(ADCCON & 0x20));//等待 ADC 转换完成,不同型号的转换完成标志位位置不同,部分型号在 Bit5,部分型号在Bit4,具体请参照规格。
//清中断标志位
ADCCON &= ~(0X20);
Tad = ((unsigned int)ADCVH << 4) + (ADCVL >> 4); //取得一次转换值
ADC_NUM1=Tad;
if(Tad > MaxAd1)
{
MaxAd1 = Tad;//获得当前的最大值
}
// else
// {
// if(Tad > MaxAd2)
// MaxAd2 = Tad;
// }
if (Tad < MinAd1)
{
MinAd1 = Tad;//获得当前的最小值
}
// else
// {
// if(Tad > MinAd2)
// MinAd2 = Tad;
// }
TempAdd += Tad;
}
//转换值累加
TempAdd -= MinAd1;//去掉最小值
TempAdd -= MaxAd1;//去掉最大值
// TempAdd -= MinAd2;//去掉第二最小值
// TempAdd -= MaxAd2;//去掉第二最大值
//TempAdd = TempAdd / 16;
TempAdd >>= 3; //求平均值
return TempAdd;
}
//切换ADC入口
void ADC_channel(unsigned char ADC_Channel)
{
ADCCFG0 = 0x07;
ADCCON = 0xE0 | ADC_Channel;
}
extern uint8_t xdata motor_data[];
void ADC_Multichannel(void)
{
uint8_t xdata temp_h,temp_l; //定义高八位和低八位
ADC_channel(1); //ADC 入口切换至 AIN1 口,采集电压信号
ADC_Value1 = ADC_Convert(); //启动 ADC 转换,获得转换值
temp_h = (ADC_Value1 & 0xff00) >> 8;//高8位的值
temp_l = ADC_Value1 & 0x00ff; //低8位的值
motor_data[4] = temp_h;
motor_data[5] = temp_l;
ADC_channel(2); //ADC 入口切换至 AIN2 口,采集激光测距信号
ADC_Value2 = ADC_Convert(); //启动 ADC 转换,获得转换值
temp_h = (ADC_Value2 & 0xff00) >> 8;//高8位的值
temp_l = ADC_Value2 & 0x00ff; //低8位的值
motor_data[6] = temp_h;
motor_data[7] = temp_l;
}