#include "H/Function_Init.H"
#include <rtx51tny.h>
#include <stdio.h> /* prototype declarations for I/O functions */
void ADC_Init(uint Channel);
void ADC_Multichannel(void);
unsigned int ADCValue = 0x0000;
bit AdcFlag = 0;
uint16_t ADC_Value0,ADC_Value1,ADC_Value2;
/***********ADC采样口选择*************/
#if (IC_MODEL == SC92F7252)
enum Channel {AIN0=0,AIN1,AIN4=4,AIN5,AIN6,AIN7,AIN8,AIN9,VDD4=15};
#endif
#if (IC_MODEL == SC92F7251)
enum Channel {AIN0=0,AIN1,AIN4=4,AIN5,AIN8=8,AIN9,VDD4=15};
#endif
#if (IC_MODEL == SC92F7250)
enum Channel {AIN0=0,AIN1,AIN6=6,AIN7,VDD4=15};
#endif
/*****************************************************
*函数名称:void ADC_Test(void)
*函数功能:ADC测试
*入口参数:void
*出口参数:void
*****************************************************/
void ADC_Test(void)_task_ 7
{
ADC_Init(AIN0);
while(1)
{
printf ("os_running_task_id is:%d\n",(int)os_running_task_id());
// ADCValue++;
// ADCCON |= 0X40; //开始ADC转换
// while(!AdcFlag); //等待 ADC转换完成;
// os_wait (K_TMO, 2000, 0); /* wait for timeout: 5 ticks */
// AdcFlag = 0;
// ADCValue = (ADCVH<<4)+(ADCVL>>4);
ADC_Multichannel();
printf("%d\n",ADC_Value0);
os_wait (K_TMO, 200, 0); /* wait for timeout: 5 ticks */
}
}
uint16_t ADC_Convert(void) //AD转换
{
unsigned int Tad=0,MinAd=0x0fff,MaxAd=0x0000,TempAdd=0;
unsigned char t=0;
for(t=0;t<10;t++)
{
ADCCON |= 0xE0; //开始 ADC 转换
while(!AdcFlag); //等待 ADC 转换完成
ADCCON&=~(0x10); //清中断标志位
Tad = ((unsigned int)ADCVH<<4)+(ADCVL>>4); //取得一次转换值
if (Tad>MaxAd)
{
MaxAd=Tad ;//获得当前的最大值
}
if (Tad<MinAd)
{
MinAd=Tad; //获得当前的最小值
}
TempAdd+=Tad; //转换值累加
}
TempAdd-=MinAd; //去掉最小值
TempAdd-=MaxAd; //去掉最大值
TempAdd>>=3; //求平均值
return(TempAdd);
}
void ADC_channel(unsigned char channel)
{
ADCCON=ADCCON&0xE0|channel;
}
void ADC_Multichannel(void)
{
ADCCFG0 = 0x07; // 设置AIN0.AIN1.AIN2为 ADC 口,并自动将上拉电阻移除。
ADCCON |= 0X80; //开启 ADC 模块电源
ADC_channel(0);
ADC_Value0=ADC_Convert();//启动ADC转换AIN0通道
ADC_channel(1);
ADC_Value1=ADC_Convert();//启动ADC转换AIN0通道
ADC_channel(2);
ADC_Value2=ADC_Convert();//启动ADC转换AIN0通道
}
/*****************************************************
*函数名称:void ADC_Init(uint Channel)
*函数功能:ADC初始化
*入口参数:Channel
*出口参数:void
*****************************************************/
void ADC_Init(uint Channel)
{
ADCCON = 0X80|Channel; //开启ADC,ADC采样频率为2M ,选择Channel位ADC采样口
if(Channel<8)
{
ADCCFG0 = 1<<Channel; //设置Channel作为采样口
}
else
{
ADCCFG1 = 1<<(Channel-8); //设置Channel作为采样口
}
EADC=1; //开启ADC中断
EA = 1;
}
void ADC_Interrupt(void) interrupt 6
{
ADCCON &= ~(0X10); //清中断标志位
AdcFlag = 1;
}
|