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

📄 adc.c

📁 Atmel AVR单片机 Mega88的AD采集并且通过串口发送出去
💻 C
字号:
#include "adc.h"
//------------------------------------------------------
void insert(uchar Hbyte,uchar Lbyte)//入队,添加一个数据
{
  if(ADC_databit==8)    //8 bit
   {
    if(adccount<MaxSize)
	 {
	   adccount++;
	   adcdata[rear]=Hbyte; //Lbyte 不用
	   rear=(rear+1)%MaxSize; 
	 }
   }
  if(ADC_databit==10)  //10 bit
   {
     if(adccount<(MaxSize/2))
	  {
	    adccount++;
        adcdata[rear]=Hbyte;//插入高8位
		rear=(rear+1)%MaxSize;
		adcdata[rear]=Lbyte;//插入低8位
		rear=(rear+1)%MaxSize; 
	  }
   }
}
//-------------------------------------------------------
unsigned int delet(void)			//出队,减少一个数据
{
  int idata;
  idata=0;
  if(adccount>0)
   {
    if(ADC_databit==8)    //8 bit
     {
	   idata=adcdata[front];
	   front=(front+1)%MaxSize;
	   adccount--;       
     }    
    if(ADC_databit==10)  //10 bit
     {
	   idata=adcdata[front];
	   idata=idata<<8;
	   front=(front+1)%MaxSize;
	   idata=idata+adcdata[front];
	   front=(front+1)%MaxSize;
	   adccount--;
	  }	 
   }
  return idata;
}
//-------------------------------------------------------
void clear(void)			//队列清空
{
 front=0;
 rear=0;
 adccount=0;
}
//=======================================================
void start_adc(void)        //启动ADC
{
 clear();
 ADCSRA = 0x00; //disable adc 
 ACSR  = 0x80; //禁止模拟比较器
 ADCSRA = 0x87; //允许ADC,93.75KHZ (分频因子:128)
 ADCSRA|=1<<ADSC; //启动ADC
}
//-------------------------------------------------------
void stop_adc(void)			//停止ADC
{
  ADCSRA = 0x00; //disable adc 
}
//-------------------------------------------------------
void setup_databit(uchar databit)   //设置ADC转换数据的长度
{
  if(databit==8)
   {
    ADC_databit=8;
	ADMUX|=(1<<ADLAR); //左对齐,将读取ADCH(高8位),ADCL(最低2位)将抛弃
	}
  if(databit==10)
   {
    ADC_databit=10;
	ADMUX&=~(1<<ADLAR); //右边对齐,将读取ADCH(最高两位),和读取ADCL(最低8位)
   }
}
//-------------------------------------------------------
void setup_vref(uchar vref) //设置参考电压源
{
  if(vref==2) //片内2.56V
    ADMUX=ADMUX | ((1<<REFS1) | (1<<REFS0)); 
  if(vref==1) //片内AVCC
   {
    ADMUX|=(1<<REFS0);
	ADMUX&=~(1<<REFS1);
    }
  if(vref==0) //AREF
    ADMUX&=~((1<<REFS1) | (1<<REFS0) );

}
//-------------------------------------------------------
void setup_channels(uchar channels)//设置ADC转换通道
{
 ADMUX=ADMUX & 0xf0;
 ADMUX=ADMUX | channels;
}

⌨️ 快捷键说明

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