|
发表于 2013-3-8 17:41:18
|
显示全部楼层
下面的是adc.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;
} |
|