84 lines
2.0 KiB
C
84 lines
2.0 KiB
C
#include "SC_Init.h" //MCU Init header,Include 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;
|
||
}
|
||
|
||
|