📄 adc.c
字号:
#include<c8051f350.h>
#include"adc.h"
#include"variable.h"
/********************************************
函数名: Adc_init
功能: ADC初始化
形式参数:无
返回值:无
********************************************/
void Adc_init(void)
{
ADC0CN =0x10;//双极性输入,PGA增益=1
REF0CN = 0x03; // 基准电压控制寄存器
ADC0CF =0x04;//使用外部电压源
ADC0MD =0x80;//ADC0使能
ADC0BUF =0x00;
ADC0CLK =0x00;
ADC0DECH=0x04;//抽取比
ADC0DECL=0x00;
ADC0STA = 0x00; // 清ADC0状态寄存器
EIE1 &= ~0x08; // 禁止ADC0中断(查询采样时使用)
ADC0MD |= 0x01;// 全内部校准(偏移、斜率)
while (!AD0CALC);// 等待转换完成
ADC0MD &= ~0x07;// ADC0 为理想模式
AD0INT = 0; //clear pending sample indication
ADC0MD |= 0x83; // 启动连续转换
deg=0;//采样次数
}
/********************************************
函数名: Dac_init
功能: DAC初始化
形式参数:无
返回值:无
********************************************/
void Dac_init(void)
{
IDA1CN = 0xF3;
}
/********************************************
函数名: Adc0_hdl
功能: 数据采样处理
形式参数:channel-通道代码
返回值:经过平均滤波后的采样值(补码表示)
********************************************/
int Adc0_hdl(unsigned char channel)
{
unsigned char i;
int temp,ret_value;//,min_value,max_value
long temp_value=0;
ADC0MD=0x83;
ADC0MUX=channel;//通道选择
//AD0BUSY=1;
while(!AD0INT);
AD0INT=0;
temp=ADC0H;//ret_value=ADC0;
temp<<=8;
temp+=ADC0M;
Adc0_buffer[deg]=temp;
//max_value=temp;
//min_value=temp;
for(i=0;i<8;i++)
{
//if(Adc0_buffer[i]>max_value)
// max_value=Adc0_buffer[i];
//if(Adc0_buffer[i]<min_value)
// min_value=Adc0_buffer[i];
temp_value+=Adc0_buffer[i];
}
//temp_value=temp_value-max_value-min_value+2;
temp_value=temp_value+4;
temp_value/=8;
ret_value=(int)temp_value;
deg++;
if(deg==8)
deg=0;
return ret_value;
}
int Adc0_hdl_f(unsigned char channel)
{
unsigned char i;
int s;
for(i=0;i<8;i++)
s=Adc0_hdl(channel);
return s;
}
/********************************************
函数名: Dac0_hdl
功能: DAC输出处理
形式参数:无
返回值:无
********************************************/
void Dac_hdl(unsigned char Daout)
{
IDA1=Daout;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -