⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.c

📁 AD转换程序和AVR单片机内部存储器
💻 C
字号:
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <inttypes.h>
#include <pgmspace.h>
#include <avr/wdt.h>

//======================全局变量======================================
uint16_t ad0_result;      //存放AD0转换结果



//******************************延时子程序*****************************************
void delay_us(uint16_t u)  //延时2us左右,delay(240)=100us;  
{  
  while(u)  
    {  
       u--;  
    }  
}  

// 延时nms
void delay_ms(uint16_t m)   
{
	uint16_t i;
	for(i=0;i<m;i++)
	{ 
       delay_us(2400);  //延时1ms
	}
}

//延时ns
void delay_s(uint16_t n)   
{
	uint16_t j;
	for(j=0;j<n;j++)
	{
		delay_ms(1000);  //延时1s
	}
	
}

//================================AD转换设置,并启动转换=========================
void AD0_SETTING_AND_START()
{
	//Avcc作为基准电压源,AREF引脚外加滤波电容,通道0
    ADMUX = 0x00;
	//AD时钟的分频因子为128(AD转换频率为115.2k),启动AD转换
	ADCSRA=0x87;
}

//=================================AD转换滤波====================================
// AD转换 采样10次 去首尾求平均滤波
void AD0_RESULT_FILTER(void)
{
	uint8_t i,index1,index2,low;
	uint16_t result_array[10],sum,temp=0x00;
	float ad0_average;
	//Avcc作为基准电压源,AREF引脚外加滤波电容,通道0
	ADMUX=0x00;
	for(i=0;i<10;i++)
	{
		//AD时钟的分频因子128
		ADCSRA=0x87;
		ADCSRA|=1<<ADSC;
		loop_until_bit_is_set(ADCSRA,ADIF);                                  //等待AD转换结束
		ADCSRA=ADCSRA|(1<<ADIF);
		low=ADCL;
		temp=ADCH;
		temp=temp<<8;
		temp=temp+low;
		result_array[i]=temp;//AD转换结果
		ADCSRA=ADCSRA &(~(1<<ADEN));
		delay_us(100);
	}
	index1=0;//最大数对应序号
	index2=0;//最小数对应序号
	for(i=0;i<10;i++)
	{
		if(result_array[i]>result_array[index1])
		{
			index1=i;
		}
		
		if(result_array[i]<result_array[index2])
		{
			index2=i;
		}
	}
	sum=0;
	for(i=0;i<10;i++)
	{
		if((i==index1)||(i==index2))
			continue;
		sum=sum+result_array[i];
	}
	if(index1==index2)
	ad0_average=sum/9;
	else
	ad0_average=sum/8;
	ad0_result=ad0_average;
}
//主程序
int main(void)
{ for(;;)
	{AD0_RESULT_FILTER();//读压力传感器并滤波,码值存入全局变量ad0_result
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -