adc.c

来自「Atmel AVR单片机 Mega88的AD采集并且通过串口发送出去」· C语言 代码 · 共 106 行

C
106
字号
#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 + =
减小字号Ctrl + -
显示快捷键?